0

[unseasoned-pdf] Add AccessibilityTextFieldInfo

Add AccessibilityTextFieldInfo in pdf/ to replace usage of
pp::PDF::PrivateAccessibilityTextFieldInfo.

pp::PDF::PrivateAccessibilityTextFieldInfo is a Pepper struct. The new
struct ensures that pp::PDF::PrivateAccessibilityTextFieldInfo is scoped
to parts specific to Pepper implementation.

Bug: 1144444
Change-Id: I5f0d00242c9ade236e08a42a5f1d1b68edd8b044
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2671384
Reviewed-by: Daniel Hosseinian <dhoss@chromium.org>
Commit-Queue: Ankit Kumar 🌪️ <ankk@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#850991}
This commit is contained in:
Ankit Kumar 🌪️
2021-02-05 05:44:28 +00:00
committed by Chromium LUCI CQ
parent c260c87c16
commit e637d70532
4 changed files with 87 additions and 22 deletions

@ -136,16 +136,17 @@ std::vector<AccessibilityHighlightInfo> GetAccessibilityHighlightInfo(
return highlight_infos;
}
void GetAccessibilityTextFieldInfo(
std::vector<AccessibilityTextFieldInfo> GetAccessibilityTextFieldInfo(
PDFEngine* engine,
int32_t page_index,
uint32_t text_run_count,
std::vector<pp::PDF::PrivateAccessibilityTextFieldInfo>* text_fields) {
std::vector<PDFEngine::AccessibilityTextFieldInfo> engine_text_field_info =
uint32_t text_run_count) {
std::vector<PDFEngine::AccessibilityTextFieldInfo> engine_text_field_infos =
engine->GetTextFieldInfo(page_index);
for (size_t i = 0; i < engine_text_field_info.size(); ++i) {
auto& cur_text_field_info = engine_text_field_info[i];
pp::PDF::PrivateAccessibilityTextFieldInfo text_field_info;
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;
@ -155,9 +156,26 @@ void GetAccessibilityTextFieldInfo(
// 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 = PPFloatRectFromRectF(cur_text_field_info.bounds);
text_fields->push_back(std::move(text_field_info));
text_field_info.bounds = cur_text_field_info.bounds;
text_field_infos.push_back(std::move(text_field_info));
}
return text_field_infos;
}
std::vector<pp::PDF::PrivateAccessibilityTextFieldInfo>
ToPrivateAccessibilityTextFieldInfo(
const std::vector<AccessibilityTextFieldInfo>& text_field_infos) {
std::vector<pp::PDF::PrivateAccessibilityTextFieldInfo> pp_text_field_infos;
pp_text_field_infos.reserve(text_field_infos.size());
for (const auto& text_field_info : text_field_infos) {
pp_text_field_infos.push_back(
{text_field_info.name, text_field_info.value,
text_field_info.is_read_only, text_field_info.is_required,
text_field_info.is_password, text_field_info.index_in_page,
text_field_info.text_run_index,
PPFloatRectFromRectF(text_field_info.bounds)});
}
return pp_text_field_infos;
}
void GetAccessibilityFormFieldInfo(
@ -165,8 +183,8 @@ void GetAccessibilityFormFieldInfo(
int32_t page_index,
uint32_t text_run_count,
pp::PDF::PrivateAccessibilityFormFieldInfo* form_fields) {
GetAccessibilityTextFieldInfo(engine, page_index, text_run_count,
&form_fields->text_fields);
form_fields->text_fields = ToPrivateAccessibilityTextFieldInfo(
GetAccessibilityTextFieldInfo(engine, page_index, text_run_count));
}
std::vector<pp::PDF::PrivateAccessibilityLinkInfo>

@ -93,4 +93,28 @@ AccessibilityHighlightInfo::AccessibilityHighlightInfo(
AccessibilityHighlightInfo::~AccessibilityHighlightInfo() = default;
AccessibilityTextFieldInfo::AccessibilityTextFieldInfo() = default;
AccessibilityTextFieldInfo::AccessibilityTextFieldInfo(const std::string& name,
const std::string& value,
bool is_read_only,
bool is_required,
bool is_password,
uint32_t index_in_page,
uint32_t text_run_index,
const gfx::RectF& bounds)
: name(name),
value(value),
is_read_only(is_read_only),
is_required(is_required),
is_password(is_password),
index_in_page(index_in_page),
text_run_index(text_run_index),
bounds(bounds) {}
AccessibilityTextFieldInfo::AccessibilityTextFieldInfo(
const AccessibilityTextFieldInfo& other) = default;
AccessibilityTextFieldInfo::~AccessibilityTextFieldInfo() = default;
} // namespace chrome_pdf

@ -161,6 +161,39 @@ struct AccessibilityHighlightInfo {
AccessibilityTextRunRangeInfo text_range;
};
struct AccessibilityTextFieldInfo {
AccessibilityTextFieldInfo();
AccessibilityTextFieldInfo(const std::string& name,
const std::string& value,
bool is_read_only,
bool is_required,
bool is_password,
uint32_t index_in_page,
uint32_t text_run_index,
const gfx::RectF& bounds);
AccessibilityTextFieldInfo(const AccessibilityTextFieldInfo& other);
~AccessibilityTextFieldInfo();
// Represents the name property of text field, if present.
std::string name;
// Represents the value property of text field, if present.
std::string value;
// Represents if the text field is non-editable.
bool is_read_only = false;
// Represents if the field should have value at the time it is exported by a
// submit form action.
bool is_required = false;
// Represents if the text field is a password text field type.
bool is_password = false;
// Index of this text field in the collection of text fields in the page.
uint32_t index_in_page = 0;
// We anchor the text field to a text run index, this denotes the text run
// before which the text field should be inserted in the accessibility tree.
uint32_t text_run_index = 0;
// Bounding box of the text field.
gfx::RectF bounds;
};
} // namespace chrome_pdf
#endif // PDF_ACCESSIBILITY_STRUCTS_H_

@ -528,17 +528,7 @@ TEST_F(AccessibilityTest, GetAccessibilityHighlightInfo) {
}
TEST_F(AccessibilityTest, GetAccessibilityTextFieldInfo) {
// Clone of pp::PDF::PrivateAccessibilityTextFieldInfo.
static const struct {
std::string name;
std::string value;
bool is_read_only;
bool is_required;
bool is_password;
uint32_t index_in_page;
uint32_t text_run_index;
gfx::RectF bounds;
} kExpectedTextFieldInfo[] = {
static const AccessibilityTextFieldInfo kExpectedTextFieldInfo[] = {
{"Text Box", "Text", false, false, false, 0, 5, {138, 230, 135, 41}},
{"ReadOnly", "Elephant", true, false, false, 1, 5, {138, 163, 135, 41}},
{"Required",