[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:

committed by
Chromium LUCI CQ

parent
c260c87c16
commit
e637d70532
@ -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",
|
||||
|
Reference in New Issue
Block a user