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 {
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,