0

[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:
Ankit Kumar 🌪️
2021-02-12 17:00:40 +00:00
committed by Chromium LUCI CQ
parent 637165149e
commit 371d77b09d
6 changed files with 23 additions and 58 deletions

@@ -18,39 +18,13 @@ namespace chrome_pdf {
namespace { 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( AccessibilityFormFieldInfo GetAccessibilityFormFieldInfo(
PDFEngine* engine, PDFEngine* engine,
int32_t page_index, int32_t page_index,
uint32_t text_run_count) { uint32_t text_run_count) {
AccessibilityFormFieldInfo form_field_info; AccessibilityFormFieldInfo form_field_info;
form_field_info.text_fields = form_field_info.text_fields =
GetAccessibilityTextFieldInfo(engine, page_index, text_run_count); engine->GetTextFieldInfo(page_index, text_run_count);
return form_field_info; return form_field_info;
} }

@@ -63,6 +63,7 @@ class UrlLoader;
struct AccessibilityLinkInfo; struct AccessibilityLinkInfo;
struct AccessibilityHighlightInfo; struct AccessibilityHighlightInfo;
struct AccessibilityImageInfo; struct AccessibilityImageInfo;
struct AccessibilityTextFieldInfo;
struct AccessibilityTextRunInfo; struct AccessibilityTextRunInfo;
struct DocumentAttachmentInfo; struct DocumentAttachmentInfo;
struct DocumentMetadata; struct DocumentMetadata;
@@ -285,19 +286,6 @@ class PDFEngine {
const base::Location& from_here = base::Location::Current()) = 0; 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() {} virtual ~PDFEngine() {}
// Most of these functions are similar to the Pepper functions of the same // 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 // For all the text fields in page |page_index|, get their properties like
// name, value, bounding boxes etc. // name, value, bounding boxes etc.
virtual std::vector<AccessibilityTextFieldInfo> GetTextFieldInfo( 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 // Gets the PDF document's print scaling preference. True if the document can
// be scaled to fit. // be scaled to fit.

@@ -515,13 +515,6 @@ void ShutdownSDK() {
#endif // defined(PDF_ENABLE_V8) #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, PDFiumEngine::PDFiumEngine(PDFEngine::Client* client,
PDFiumFormFiller::ScriptOption script_option) PDFiumFormFiller::ScriptOption script_option)
: client_(client), : client_(client),
@@ -2606,10 +2599,11 @@ std::vector<AccessibilityHighlightInfo> PDFiumEngine::GetHighlightInfo(
return pages_[page_index]->GetHighlightInfo(text_runs); return pages_[page_index]->GetHighlightInfo(text_runs);
} }
std::vector<PDFEngine::AccessibilityTextFieldInfo> std::vector<AccessibilityTextFieldInfo> PDFiumEngine::GetTextFieldInfo(
PDFiumEngine::GetTextFieldInfo(int page_index) { int page_index,
uint32_t text_run_count) {
DCHECK(PageIndexInBounds(page_index)); DCHECK(PageIndexInBounds(page_index));
return pages_[page_index]->GetTextFieldInfo(); return pages_[page_index]->GetTextFieldInfo(text_run_count);
} }
bool PDFiumEngine::GetPrintScaling() { bool PDFiumEngine::GetPrintScaling() {

@@ -151,7 +151,8 @@ class PDFiumEngine : public PDFEngine,
int page_index, int page_index,
const std::vector<AccessibilityTextRunInfo>& text_runs) override; const std::vector<AccessibilityTextRunInfo>& text_runs) override;
std::vector<AccessibilityTextFieldInfo> GetTextFieldInfo( std::vector<AccessibilityTextFieldInfo> GetTextFieldInfo(
int page_index) override; int page_index,
uint32_t text_run_count) override;
bool GetPrintScaling() override; bool GetPrintScaling() override;
int GetCopiesToPrint() override; int GetCopiesToPrint() override;
int GetDuplexType() override; int GetDuplexType() override;

@@ -698,22 +698,27 @@ std::vector<AccessibilityHighlightInfo> PDFiumPage::GetHighlightInfo(
return highlight_info; return highlight_info;
} }
std::vector<PDFEngine::AccessibilityTextFieldInfo> std::vector<AccessibilityTextFieldInfo> PDFiumPage::GetTextFieldInfo(
PDFiumPage::GetTextFieldInfo() { uint32_t text_run_count) {
std::vector<PDFEngine::AccessibilityTextFieldInfo> text_field_info; std::vector<AccessibilityTextFieldInfo> text_field_info;
if (!available_) if (!available_)
return text_field_info; return text_field_info;
PopulateAnnotations(); PopulateAnnotations();
text_field_info.reserve(text_fields_.size()); text_field_info.reserve(text_fields_.size());
for (const TextField& text_field : text_fields_) { for (size_t i = 0; i < text_fields_.size(); ++i) {
PDFEngine::AccessibilityTextFieldInfo cur_info; const TextField& text_field = text_fields_[i];
AccessibilityTextFieldInfo cur_info;
cur_info.name = text_field.name; cur_info.name = text_field.name;
cur_info.value = text_field.value; 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_read_only = !!(text_field.flags & FPDF_FORMFLAG_READONLY);
cur_info.is_required = !!(text_field.flags & FPDF_FORMFLAG_REQUIRED); cur_info.is_required = !!(text_field.flags & FPDF_FORMFLAG_REQUIRED);
cur_info.is_password = !!(text_field.flags & FPDF_FORMFLAG_TEXT_PASSWORD); 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( cur_info.bounds = gfx::RectF(
text_field.bounding_rect.x(), text_field.bounding_rect.y(), text_field.bounding_rect.x(), text_field.bounding_rect.y(),
text_field.bounding_rect.width(), text_field.bounding_rect.height()); text_field.bounding_rect.width(), text_field.bounding_rect.height());

@@ -37,6 +37,7 @@ class Thumbnail;
struct AccessibilityLinkInfo; struct AccessibilityLinkInfo;
struct AccessibilityHighlightInfo; struct AccessibilityHighlightInfo;
struct AccessibilityImageInfo; struct AccessibilityImageInfo;
struct AccessibilityTextFieldInfo;
struct AccessibilityTextRunInfo; struct AccessibilityTextRunInfo;
struct AccessibilityTextStyleInfo; struct AccessibilityTextStyleInfo;
@@ -77,7 +78,8 @@ class PDFiumPage {
const std::vector<AccessibilityTextRunInfo>& text_runs); const std::vector<AccessibilityTextRunInfo>& text_runs);
// For all the text fields on the page, get their properties like name, // For all the text fields on the page, get their properties like name,
// value, bounding boxes, etc. // value, bounding boxes, etc.
std::vector<PDFEngine::AccessibilityTextFieldInfo> GetTextFieldInfo(); std::vector<AccessibilityTextFieldInfo> GetTextFieldInfo(
uint32_t text_run_count);
enum Area { enum Area {
NONSELECTABLE_AREA, NONSELECTABLE_AREA,