[unseasoned-pdf] Consolidate AccessibilityTextFieldInfo in pdf/
Use a single AccessibilityTextFieldInfo struct in pdf/ to fetch accessibility data. The consolidation removes the need for two structs and removes the overhead of conversion and copy from one struct to another. Bug: 1175023 Change-Id: I35f10f8cb6cf5e999437c08b0a59de896db0716c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2691951 Reviewed-by: Daniel Hosseinian <dhoss@chromium.org> Commit-Queue: Daniel Hosseinian <dhoss@chromium.org> Auto-Submit: Ankit Kumar 🌪️ <ankk@microsoft.com> Cr-Commit-Position: refs/heads/master@{#853558}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
637165149e
commit
371d77b09d
@ -18,39 +18,13 @@ namespace chrome_pdf {
|
||||
|
||||
namespace {
|
||||
|
||||
std::vector<AccessibilityTextFieldInfo> GetAccessibilityTextFieldInfo(
|
||||
PDFEngine* engine,
|
||||
int32_t page_index,
|
||||
uint32_t text_run_count) {
|
||||
std::vector<PDFEngine::AccessibilityTextFieldInfo> engine_text_field_infos =
|
||||
engine->GetTextFieldInfo(page_index);
|
||||
std::vector<AccessibilityTextFieldInfo> text_field_infos;
|
||||
text_field_infos.reserve(engine_text_field_infos.size());
|
||||
for (size_t i = 0; i < engine_text_field_infos.size(); ++i) {
|
||||
auto& cur_text_field_info = engine_text_field_infos[i];
|
||||
AccessibilityTextFieldInfo text_field_info;
|
||||
text_field_info.name = std::move(cur_text_field_info.name);
|
||||
text_field_info.value = std::move(cur_text_field_info.value);
|
||||
text_field_info.index_in_page = i;
|
||||
text_field_info.is_read_only = cur_text_field_info.is_read_only;
|
||||
text_field_info.is_required = cur_text_field_info.is_required;
|
||||
text_field_info.is_password = cur_text_field_info.is_password;
|
||||
// TODO(crbug.com/1030242): Update text run index to nearest text run to
|
||||
// text field bounds.
|
||||
text_field_info.text_run_index = text_run_count;
|
||||
text_field_info.bounds = cur_text_field_info.bounds;
|
||||
text_field_infos.push_back(std::move(text_field_info));
|
||||
}
|
||||
return text_field_infos;
|
||||
}
|
||||
|
||||
AccessibilityFormFieldInfo GetAccessibilityFormFieldInfo(
|
||||
PDFEngine* engine,
|
||||
int32_t page_index,
|
||||
uint32_t text_run_count) {
|
||||
AccessibilityFormFieldInfo form_field_info;
|
||||
form_field_info.text_fields =
|
||||
GetAccessibilityTextFieldInfo(engine, page_index, text_run_count);
|
||||
engine->GetTextFieldInfo(page_index, text_run_count);
|
||||
return form_field_info;
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,7 @@ class UrlLoader;
|
||||
struct AccessibilityLinkInfo;
|
||||
struct AccessibilityHighlightInfo;
|
||||
struct AccessibilityImageInfo;
|
||||
struct AccessibilityTextFieldInfo;
|
||||
struct AccessibilityTextRunInfo;
|
||||
struct DocumentAttachmentInfo;
|
||||
struct DocumentMetadata;
|
||||
@ -285,19 +286,6 @@ class PDFEngine {
|
||||
const base::Location& from_here = base::Location::Current()) = 0;
|
||||
};
|
||||
|
||||
struct AccessibilityTextFieldInfo {
|
||||
AccessibilityTextFieldInfo();
|
||||
AccessibilityTextFieldInfo(const AccessibilityTextFieldInfo& that);
|
||||
~AccessibilityTextFieldInfo();
|
||||
|
||||
std::string name;
|
||||
std::string value;
|
||||
bool is_read_only;
|
||||
bool is_required;
|
||||
bool is_password;
|
||||
gfx::RectF bounds;
|
||||
};
|
||||
|
||||
virtual ~PDFEngine() {}
|
||||
|
||||
// Most of these functions are similar to the Pepper functions of the same
|
||||
@ -427,7 +415,8 @@ class PDFEngine {
|
||||
// For all the text fields in page |page_index|, get their properties like
|
||||
// name, value, bounding boxes etc.
|
||||
virtual std::vector<AccessibilityTextFieldInfo> GetTextFieldInfo(
|
||||
int page_index) = 0;
|
||||
int page_index,
|
||||
uint32_t text_run_count) = 0;
|
||||
|
||||
// Gets the PDF document's print scaling preference. True if the document can
|
||||
// be scaled to fit.
|
||||
|
@ -515,13 +515,6 @@ void ShutdownSDK() {
|
||||
#endif // defined(PDF_ENABLE_V8)
|
||||
}
|
||||
|
||||
PDFEngine::AccessibilityTextFieldInfo::AccessibilityTextFieldInfo() = default;
|
||||
|
||||
PDFEngine::AccessibilityTextFieldInfo::AccessibilityTextFieldInfo(
|
||||
const AccessibilityTextFieldInfo& that) = default;
|
||||
|
||||
PDFEngine::AccessibilityTextFieldInfo::~AccessibilityTextFieldInfo() = default;
|
||||
|
||||
PDFiumEngine::PDFiumEngine(PDFEngine::Client* client,
|
||||
PDFiumFormFiller::ScriptOption script_option)
|
||||
: client_(client),
|
||||
@ -2606,10 +2599,11 @@ std::vector<AccessibilityHighlightInfo> PDFiumEngine::GetHighlightInfo(
|
||||
return pages_[page_index]->GetHighlightInfo(text_runs);
|
||||
}
|
||||
|
||||
std::vector<PDFEngine::AccessibilityTextFieldInfo>
|
||||
PDFiumEngine::GetTextFieldInfo(int page_index) {
|
||||
std::vector<AccessibilityTextFieldInfo> PDFiumEngine::GetTextFieldInfo(
|
||||
int page_index,
|
||||
uint32_t text_run_count) {
|
||||
DCHECK(PageIndexInBounds(page_index));
|
||||
return pages_[page_index]->GetTextFieldInfo();
|
||||
return pages_[page_index]->GetTextFieldInfo(text_run_count);
|
||||
}
|
||||
|
||||
bool PDFiumEngine::GetPrintScaling() {
|
||||
|
@ -151,7 +151,8 @@ class PDFiumEngine : public PDFEngine,
|
||||
int page_index,
|
||||
const std::vector<AccessibilityTextRunInfo>& text_runs) override;
|
||||
std::vector<AccessibilityTextFieldInfo> GetTextFieldInfo(
|
||||
int page_index) override;
|
||||
int page_index,
|
||||
uint32_t text_run_count) override;
|
||||
bool GetPrintScaling() override;
|
||||
int GetCopiesToPrint() override;
|
||||
int GetDuplexType() override;
|
||||
|
@ -698,22 +698,27 @@ std::vector<AccessibilityHighlightInfo> PDFiumPage::GetHighlightInfo(
|
||||
return highlight_info;
|
||||
}
|
||||
|
||||
std::vector<PDFEngine::AccessibilityTextFieldInfo>
|
||||
PDFiumPage::GetTextFieldInfo() {
|
||||
std::vector<PDFEngine::AccessibilityTextFieldInfo> text_field_info;
|
||||
std::vector<AccessibilityTextFieldInfo> PDFiumPage::GetTextFieldInfo(
|
||||
uint32_t text_run_count) {
|
||||
std::vector<AccessibilityTextFieldInfo> text_field_info;
|
||||
if (!available_)
|
||||
return text_field_info;
|
||||
|
||||
PopulateAnnotations();
|
||||
|
||||
text_field_info.reserve(text_fields_.size());
|
||||
for (const TextField& text_field : text_fields_) {
|
||||
PDFEngine::AccessibilityTextFieldInfo cur_info;
|
||||
for (size_t i = 0; i < text_fields_.size(); ++i) {
|
||||
const TextField& text_field = text_fields_[i];
|
||||
AccessibilityTextFieldInfo cur_info;
|
||||
cur_info.name = text_field.name;
|
||||
cur_info.value = text_field.value;
|
||||
cur_info.index_in_page = i;
|
||||
cur_info.is_read_only = !!(text_field.flags & FPDF_FORMFLAG_READONLY);
|
||||
cur_info.is_required = !!(text_field.flags & FPDF_FORMFLAG_REQUIRED);
|
||||
cur_info.is_password = !!(text_field.flags & FPDF_FORMFLAG_TEXT_PASSWORD);
|
||||
// TODO(crbug.com/1030242): Update text run index to nearest text run to
|
||||
// text field bounds.
|
||||
cur_info.text_run_index = text_run_count;
|
||||
cur_info.bounds = gfx::RectF(
|
||||
text_field.bounding_rect.x(), text_field.bounding_rect.y(),
|
||||
text_field.bounding_rect.width(), text_field.bounding_rect.height());
|
||||
|
@ -37,6 +37,7 @@ class Thumbnail;
|
||||
struct AccessibilityLinkInfo;
|
||||
struct AccessibilityHighlightInfo;
|
||||
struct AccessibilityImageInfo;
|
||||
struct AccessibilityTextFieldInfo;
|
||||
struct AccessibilityTextRunInfo;
|
||||
struct AccessibilityTextStyleInfo;
|
||||
|
||||
@ -77,7 +78,8 @@ class PDFiumPage {
|
||||
const std::vector<AccessibilityTextRunInfo>& text_runs);
|
||||
// For all the text fields on the page, get their properties like name,
|
||||
// value, bounding boxes, etc.
|
||||
std::vector<PDFEngine::AccessibilityTextFieldInfo> GetTextFieldInfo();
|
||||
std::vector<AccessibilityTextFieldInfo> GetTextFieldInfo(
|
||||
uint32_t text_run_count);
|
||||
|
||||
enum Area {
|
||||
NONSELECTABLE_AREA,
|
||||
|
Reference in New Issue
Block a user