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() { ...@@ -246,8 +246,7 @@ PdfAccessibilityTree::~PdfAccessibilityTree() {
bool PdfAccessibilityTree::IsDataFromPluginValid( bool PdfAccessibilityTree::IsDataFromPluginValid(
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs, const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars, const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links, const ppapi::PdfAccessibilityPageObjects& page_objects) {
const std::vector<ppapi::PdfAccessibilityImageInfo>& images) {
base::CheckedNumeric<uint32_t> char_length = 0; base::CheckedNumeric<uint32_t> char_length = 0;
for (const ppapi::PdfAccessibilityTextRunInfo& text_run : text_runs) for (const ppapi::PdfAccessibilityTextRunInfo& text_run : text_runs)
char_length += text_run.len; char_length += text_run.len;
...@@ -255,6 +254,8 @@ bool PdfAccessibilityTree::IsDataFromPluginValid( ...@@ -255,6 +254,8 @@ bool PdfAccessibilityTree::IsDataFromPluginValid(
if (!char_length.IsValid() || char_length.ValueOrDie() != chars.size()) if (!char_length.IsValid() || char_length.ValueOrDie() != chars.size())
return false; return false;
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links =
page_objects.links;
if (!std::is_sorted(links.begin(), links.end(), if (!std::is_sorted(links.begin(), links.end(),
CompareTextRuns<ppapi::PdfAccessibilityLinkInfo>)) { CompareTextRuns<ppapi::PdfAccessibilityLinkInfo>)) {
return false; return false;
...@@ -270,6 +271,8 @@ bool PdfAccessibilityTree::IsDataFromPluginValid( ...@@ -270,6 +271,8 @@ bool PdfAccessibilityTree::IsDataFromPluginValid(
return false; return false;
} }
const std::vector<ppapi::PdfAccessibilityImageInfo>& images =
page_objects.images;
if (!std::is_sorted(images.begin(), images.end(), if (!std::is_sorted(images.begin(), images.end(),
CompareTextRuns<ppapi::PdfAccessibilityImageInfo>)) { CompareTextRuns<ppapi::PdfAccessibilityImageInfo>)) {
return false; return false;
...@@ -333,8 +336,7 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo( ...@@ -333,8 +336,7 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo(
const PP_PrivateAccessibilityPageInfo& page_info, const PP_PrivateAccessibilityPageInfo& page_info,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs, const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars, const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links, const ppapi::PdfAccessibilityPageObjects& page_objects) {
const std::vector<ppapi::PdfAccessibilityImageInfo>& images) {
content::RenderAccessibility* render_accessibility = GetRenderAccessibility(); content::RenderAccessibility* render_accessibility = GetRenderAccessibility();
if (!render_accessibility) if (!render_accessibility)
return; return;
...@@ -343,7 +345,7 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo( ...@@ -343,7 +345,7 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo(
// stop creation of the accessibility tree. // stop creation of the accessibility tree.
if (!invalid_plugin_message_received_) { if (!invalid_plugin_message_received_) {
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_) if (invalid_plugin_message_received_)
return; return;
...@@ -364,8 +366,8 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo( ...@@ -364,8 +366,8 @@ void PdfAccessibilityTree::SetAccessibilityPageInfo(
doc_node_->relative_bounds.bounds.Union(page_node->relative_bounds.bounds); doc_node_->relative_bounds.bounds.Union(page_node->relative_bounds.bounds);
doc_node_->child_ids.push_back(page_node->id); doc_node_->child_ids.push_back(page_node->id);
AddPageContent(page_node, page_bounds, page_index, text_runs, chars, links, AddPageContent(page_node, page_bounds, page_index, text_runs, chars,
images); page_objects);
if (page_index == doc_info_.page_count - 1) if (page_index == doc_info_.page_count - 1)
Finish(); Finish();
...@@ -377,8 +379,7 @@ void PdfAccessibilityTree::AddPageContent( ...@@ -377,8 +379,7 @@ void PdfAccessibilityTree::AddPageContent(
uint32_t page_index, uint32_t page_index,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs, const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars, const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links, const ppapi::PdfAccessibilityPageObjects& page_objects) {
const std::vector<ppapi::PdfAccessibilityImageInfo>& images) {
DCHECK(page_node); DCHECK(page_node);
double heading_font_size_threshold = 0; double heading_font_size_threshold = 0;
double paragraph_spacing_threshold = 0; double paragraph_spacing_threshold = 0;
...@@ -393,6 +394,10 @@ void PdfAccessibilityTree::AddPageContent( ...@@ -393,6 +394,10 @@ void PdfAccessibilityTree::AddPageContent(
uint32_t current_link_index = 0; uint32_t current_link_index = 0;
uint32_t current_image_index = 0; uint32_t current_image_index = 0;
LineHelper line_helper(text_runs); 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(); for (size_t text_run_index = 0; text_run_index < text_runs.size();
++text_run_index) { ++text_run_index) {
......
...@@ -39,8 +39,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource { ...@@ -39,8 +39,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource {
static bool IsDataFromPluginValid( static bool IsDataFromPluginValid(
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs, const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars, const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links, const ppapi::PdfAccessibilityPageObjects& page_objects);
const std::vector<ppapi::PdfAccessibilityImageInfo>& images);
void SetAccessibilityViewportInfo( void SetAccessibilityViewportInfo(
const PP_PrivateAccessibilityViewportInfo& viewport_info); const PP_PrivateAccessibilityViewportInfo& viewport_info);
...@@ -50,8 +49,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource { ...@@ -50,8 +49,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource {
const PP_PrivateAccessibilityPageInfo& page_info, const PP_PrivateAccessibilityPageInfo& page_info,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs, const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars, const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links, const ppapi::PdfAccessibilityPageObjects& page_objects);
const std::vector<ppapi::PdfAccessibilityImageInfo>& images);
void HandleAction(const PP_PdfAccessibilityActionData& action_data); void HandleAction(const PP_PdfAccessibilityActionData& action_data);
bool GetPdfLinkInfoFromAXNode(int32_t ax_node_id, bool GetPdfLinkInfoFromAXNode(int32_t ax_node_id,
uint32_t* page_index, uint32_t* page_index,
...@@ -98,8 +96,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource { ...@@ -98,8 +96,7 @@ class PdfAccessibilityTree : public content::PluginAXTreeSource {
uint32_t page_index, uint32_t page_index,
const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs, const std::vector<ppapi::PdfAccessibilityTextRunInfo>& text_runs,
const std::vector<PP_PrivateAccessibilityCharInfo>& chars, const std::vector<PP_PrivateAccessibilityCharInfo>& chars,
const std::vector<ppapi::PdfAccessibilityLinkInfo>& links, const ppapi::PdfAccessibilityPageObjects& page_objects);
const std::vector<ppapi::PdfAccessibilityImageInfo>& images);
void AddRemainingAnnotations( void AddRemainingAnnotations(
ui::AXNodeData* page_node, ui::AXNodeData* page_node,
const gfx::RectF& page_bounds, const gfx::RectF& page_bounds,
......
...@@ -32,11 +32,10 @@ TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMismatch) { ...@@ -32,11 +32,10 @@ TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMismatch) {
std::vector<PP_PrivateAccessibilityCharInfo> chars( std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData)); std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links; ppapi::PdfAccessibilityPageObjects page_objects;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars, ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images)); page_objects));
} }
TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMatch) { TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMatch) {
...@@ -49,11 +48,10 @@ TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMatch) { ...@@ -49,11 +48,10 @@ TEST(PdfAccessibilityTreeUnitTest, TextRunsAndCharsMatch) {
std::vector<PP_PrivateAccessibilityCharInfo> chars( std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData)); std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links; ppapi::PdfAccessibilityPageObjects page_objects;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
ASSERT_TRUE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars, ASSERT_TRUE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images)); page_objects));
} }
TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) { TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) {
...@@ -64,15 +62,14 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) { ...@@ -64,15 +62,14 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) {
std::vector<PP_PrivateAccessibilityCharInfo> chars( std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData)); std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links; ppapi::PdfAccessibilityPageObjects page_objects;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
{ {
// Add first link in the vector. // Add first link in the vector.
ppapi::PdfAccessibilityLinkInfo link; ppapi::PdfAccessibilityLinkInfo link;
link.text_run_index = 2; link.text_run_index = 2;
link.text_run_count = 0; 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) { ...@@ -80,11 +77,11 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedLinkVector) {
ppapi::PdfAccessibilityLinkInfo link; ppapi::PdfAccessibilityLinkInfo link;
link.text_run_index = 0; link.text_run_index = 0;
link.text_run_count = 1; 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, ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images)); page_objects));
} }
TEST(PdfAccessibilityTreeUnitTest, OutOfBoundLink) { TEST(PdfAccessibilityTreeUnitTest, OutOfBoundLink) {
...@@ -95,18 +92,17 @@ TEST(PdfAccessibilityTreeUnitTest, OutOfBoundLink) { ...@@ -95,18 +92,17 @@ TEST(PdfAccessibilityTreeUnitTest, OutOfBoundLink) {
std::vector<PP_PrivateAccessibilityCharInfo> chars( std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData)); std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links; ppapi::PdfAccessibilityPageObjects page_objects;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
{ {
ppapi::PdfAccessibilityLinkInfo link; ppapi::PdfAccessibilityLinkInfo link;
link.text_run_index = 3; link.text_run_index = 3;
link.text_run_count = 0; 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, ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images)); page_objects));
} }
TEST(PdfAccessibilityTreeUnitTest, UnsortedImageVector) { TEST(PdfAccessibilityTreeUnitTest, UnsortedImageVector) {
...@@ -117,25 +113,24 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedImageVector) { ...@@ -117,25 +113,24 @@ TEST(PdfAccessibilityTreeUnitTest, UnsortedImageVector) {
std::vector<PP_PrivateAccessibilityCharInfo> chars( std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData)); std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links; ppapi::PdfAccessibilityPageObjects page_objects;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
{ {
// Add first image to the vector. // Add first image to the vector.
ppapi::PdfAccessibilityImageInfo image; ppapi::PdfAccessibilityImageInfo image;
image.text_run_index = 1; 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. // Add second image to the vector.
ppapi::PdfAccessibilityImageInfo image; ppapi::PdfAccessibilityImageInfo image;
image.text_run_index = 0; 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, ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images)); page_objects));
} }
TEST(PdfAccessibilityTreeUnitTest, OutOfBoundImage) { TEST(PdfAccessibilityTreeUnitTest, OutOfBoundImage) {
...@@ -146,17 +141,16 @@ TEST(PdfAccessibilityTreeUnitTest, OutOfBoundImage) { ...@@ -146,17 +141,16 @@ TEST(PdfAccessibilityTreeUnitTest, OutOfBoundImage) {
std::vector<PP_PrivateAccessibilityCharInfo> chars( std::vector<PP_PrivateAccessibilityCharInfo> chars(
std::begin(kDummyCharsData), std::end(kDummyCharsData)); std::begin(kDummyCharsData), std::end(kDummyCharsData));
std::vector<ppapi::PdfAccessibilityLinkInfo> links; ppapi::PdfAccessibilityPageObjects page_objects;
std::vector<ppapi::PdfAccessibilityImageInfo> images;
{ {
ppapi::PdfAccessibilityImageInfo image; ppapi::PdfAccessibilityImageInfo image;
image.text_run_index = 3; 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, ASSERT_FALSE(PdfAccessibilityTree::IsDataFromPluginValid(text_runs, chars,
links, images)); page_objects));
} }
} // namespace pdf } // namespace pdf
...@@ -280,8 +280,8 @@ int32_t PepperPDFHost::OnHostMsgSetAccessibilityPageInfo( ...@@ -280,8 +280,8 @@ int32_t PepperPDFHost::OnHostMsgSetAccessibilityPageInfo(
if (!host_->GetPluginInstance(pp_instance())) if (!host_->GetPluginInstance(pp_instance()))
return PP_ERROR_FAILED; return PP_ERROR_FAILED;
CreatePdfAccessibilityTreeIfNeeded(); CreatePdfAccessibilityTreeIfNeeded();
pdf_accessibility_tree_->SetAccessibilityPageInfo( pdf_accessibility_tree_->SetAccessibilityPageInfo(page_info, text_run_info,
page_info, text_run_info, chars, page_objects.links, page_objects.images); chars, page_objects);
return PP_OK; 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