Commit 8c645e14 authored by Ankit Kumar 🌪️'s avatar Ankit Kumar 🌪️ Committed by Commit Bot

Use PdfAccessibilityPageObjects struct in PDF a11y code

This CL uses PdfAccessibilityPageObjects struct in the renderer side of
PDF a11y. Currently the members of PdfAccessibilityImageInfo struct are
passed and used accordingly as needed. More members would be added in
struct in the coming future to enable annotation support for PDF a11y.

Bug: 1008775
Change-Id: I0388adaebf981a85e4f4a2f7ab7b965ebb40fa0d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1890380Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Reviewed-by: default avatarKevin Babbitt <kbabbitt@microsoft.com>
Commit-Queue: Ankit Kumar 🌪️ <ankk@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#718082}
parent a00ff2e4
......@@ -246,8 +246,7 @@ PdfAccessibilityTree::~PdfAccessibilityTree() {
bool PdfAccessibilityTree::IsDataFromPluginValid(
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links,
const std::vector<ppapi::PdfAccessibilityImageInfo>& images) {
const ppapi::PdfAccessibilityPageObjects& page_objects) {
base::CheckedNumeric<uint32_t> char_length = 0;
for (const ppapi::PdfAccessibilityTextRunInfo& text_run : text_runs)
char_length += text_run.len;
......@@ -255,6 +254,8 @@ bool PdfAccessibilityTree::IsDataFromPluginValid(
if (!char_length.IsValid() || char_length.ValueOrDie() != chars.size())
return false;
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links =
page_objects.links;
if (!std::is_sorted(links.begin(), links.end(),
CompareTextRuns<ppapi::PdfAccessibilityLinkInfo>)) {
return false;
......@@ -270,6 +271,8 @@ bool PdfAccessibilityTree::IsDataFromPluginValid(
return false;
}
const std::vector<ppapi::PdfAccessibilityImageInfo>& images =
page_objects.images;
if (!std::is_sorted(images.begin(), images.end(),
CompareTextRuns<ppapi::PdfAccessibilityImageInfo>)) {
return false;
......@@ -333,8 +336,7 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo(
const PP_PrivateAccessibilityPageInfo& page_info,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links,
const std::vector<ppapi::PdfAccessibilityImageInfo>& images) {
const ppapi::PdfAccessibilityPageObjects& page_objects) {
content::RenderAccessibility* render_accessibility = GetRenderAccessibility();
if (!render_accessibility)
return;
......@@ -343,7 +345,7 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo(
// stop creation of the accessibility tree.
if (!invalid_plugin_message_received_) {
invalid_plugin_message_received_ =
!IsDataFromPluginValid(text_runs, chars, links, images);
!IsDataFromPluginValid(text_runs, chars, page_objects);
}
if (invalid_plugin_message_received_)
return;
......@@ -364,8 +366,8 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo(
doc_node_->relative_bounds.bounds.Union(page_node->relative_bounds.bounds);
doc_node_->child_ids.push_back(page_node->id);
AddPageContent(page_node, page_bounds, page_index, text_runs, chars, links,
images);
AddPageContent(page_node, page_bounds, page_index, text_runs, chars,
page_objects);
if (page_index == doc_info_.page_count - 1)
Finish();
......@@ -377,8 +379,7 @@ void PdfAccessibilityTree::AddPageContent(
uint32_t page_index,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links,
const std::vector<ppapi::PdfAccessibilityImageInfo>& images) {
const ppapi::PdfAccessibilityPageObjects& page_objects) {
DCHECK(page_node);
double heading_font_size_threshold = 0;
double paragraph_spacing_threshold = 0;
......@@ -393,6 +394,10 @@ void PdfAccessibilityTree::AddPageContent(
uint32_t current_link_index = 0;
uint32_t current_image_index = 0;
LineHelper line_helper(text_runs);
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links =
page_objects.links;
const std::vector<ppapi::PdfAccessibilityImageInfo>& images =
page_objects.images;
for (size_t text_run_index = 0; text_run_index < text_runs.size();
++text_run_index) {
......
......@@ -39,8 +39,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource {
static bool IsDataFromPluginValid(
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links,
const std::vector<ppapi::PdfAccessibilityImageInfo>& images);
const ppapi::PdfAccessibilityPageObjects& page_objects);
void SetAccessibilityViewportInfo(
const PP_PrivateAccessibilityViewportInfo& viewport_info);
......@@ -50,8 +49,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource {
const PP_PrivateAccessibilityPageInfo& page_info,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links,
const std::vector<ppapi::PdfAccessibilityImageInfo>& images);
const ppapi::PdfAccessibilityPageObjects& page_objects);
void HandleAction(const PP_PdfAccessibilityActionData& action_data);
bool GetPdfLinkInfoFromAXNode(int32_t ax_node_id,
uint32_t* page_index,
......@@ -98,8 +96,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource {
uint32_t page_index,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links,
const std::vector<ppapi::PdfAccessibilityImageInfo>& images);
const ppapi::PdfAccessibilityPageObjects& page_objects);
void AddRemainingAnnotations(
ui::AXNodeData* page_node,
const gfx::RectF& page_bounds,
......
......@@ -32,11 +32,10 @@ TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMismatch) {
std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ppapi::PdfAccessibilityPageObjects page_objects;
ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images));
page_objects));
}
TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMatch) {
......@@ -49,11 +48,10 @@ TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMatch) {
std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ppapi::PdfAccessibilityPageObjects page_objects;
ASSERT_TRUE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images));
page_objects));
}
TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) {
......@@ -64,15 +62,14 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) {
std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ppapi::PdfAccessibilityPageObjects page_objects;
{
// Add first link in the vector.
ppapi::PdfAccessibilityLinkInfo link;
link.text_run_index = 2;
link.text_run_count = 0;
links.push_back(std::move(link));
page_objects.links.push_back(std::move(link));
}
{
......@@ -80,11 +77,11 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) {
ppapi::PdfAccessibilityLinkInfo link;
link.text_run_index = 0;
link.text_run_count = 1;
links.push_back(std::move(link));
page_objects.links.push_back(std::move(link));
}
ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images));
page_objects));
}
TEST(PdfAccessibilityTreeUnitTest, OutOfBoundLink) {
......@@ -95,18 +92,17 @@ TEST(PdfAccessibilityTreeUnitTest, OutOfBoundLink) {
std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ppapi::PdfAccessibilityPageObjects page_objects;
{
ppapi::PdfAccessibilityLinkInfo link;
link.text_run_index = 3;
link.text_run_count = 0;
links.push_back(std::move(link));
page_objects.links.push_back(std::move(link));
}
ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images));
page_objects));
}
TEST(PdfAccessibilityTreeUnitTest, UnsortedImageVector) {
......@@ -117,25 +113,24 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedImageVector) {
std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ppapi::PdfAccessibilityPageObjects page_objects;
{
// Add first image to the vector.
ppapi::PdfAccessibilityImageInfo image;
image.text_run_index = 1;
images.push_back(std::move(image));
page_objects.images.push_back(std::move(image));
}
{
// Add second image to the vector.
ppapi::PdfAccessibilityImageInfo image;
image.text_run_index = 0;
images.push_back(std::move(image));
page_objects.images.push_back(std::move(image));
}
ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images));
page_objects));
}
TEST(PdfAccessibilityTreeUnitTest, OutOfBoundImage) {
......@@ -146,17 +141,16 @@ TEST(PdfAccessibilityTreeUnitTest, OutOfBoundImage) {
std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ppapi::PdfAccessibilityPageObjects page_objects;
{
ppapi::PdfAccessibilityImageInfo image;
image.text_run_index = 3;
images.push_back(std::move(image));
page_objects.images.push_back(std::move(image));
}
ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images));
page_objects));
}
} // namespace pdf
......@@ -280,8 +280,8 @@ int32_t PepperPDFHost::OnHostMsgSetAccessibilityPageInfo(
if (!host_->GetPluginInstance(pp_instance()))
return PP_ERROR_FAILED;
CreatePdfAccessibilityTreeIfNeeded();
pdf_accessibility_tree_->SetAccessibilityPageInfo(
page_info, text_run_info, chars, page_objects.links, page_objects.images);
pdf_accessibility_tree_->SetAccessibilityPageInfo(page_info, text_run_info,
chars, page_objects);
return PP_OK;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment