Index: chrome/browser/pdf/pdf_extension_test.cc |
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc |
index 3e11df7829e3d3e63da939418497da44bdc69f4c..9ae28bd6114dc01a9de4e611232bd55a80afaaa3 100644 |
--- a/chrome/browser/pdf/pdf_extension_test.cc |
+++ b/chrome/browser/pdf/pdf_extension_test.cc |
@@ -48,6 +48,7 @@ |
#include "extensions/browser/extension_registry.h" |
#include "extensions/common/manifest_handlers/mime_types_handler.h" |
#include "extensions/test/result_catcher.h" |
+#include "net/dns/mock_host_resolver.h" |
#include "net/test/embedded_test_server/embedded_test_server.h" |
#include "ui/base/resource/resource_bundle.h" |
#include "url/gurl.h" |
@@ -58,6 +59,13 @@ |
const int kNumberLoadTestParts = 10; |
+// Using ASSERT_TRUE deliberately instead of ASSERT_EQ or ASSERT_STREQ |
+// in order to print a more readable message if the strings differ. |
+#define ASSERT_MULTILINE_STREQ(expected, actual) \ |
+ ASSERT_TRUE(expected == actual) \ |
+ << "Expected:\n" << expected \ |
+ << "\n\nActual:\n" << actual |
+ |
bool GetGuestCallback(content::WebContents** guest_out, |
content::WebContents* guest) { |
EXPECT_FALSE(*guest_out); |
@@ -72,9 +80,15 @@ class PDFExtensionTest : public ExtensionApiTest, |
public: |
~PDFExtensionTest() override {} |
+ void SetUpCommandLine(base::CommandLine* command_line) override { |
+ content::IsolateAllSitesForTesting(command_line); |
+ } |
+ |
void SetUpOnMainThread() override { |
ExtensionApiTest::SetUpOnMainThread(); |
+ host_resolver()->AddRule("*", "127.0.0.1"); |
ASSERT_TRUE(embedded_test_server()->Start()); |
+ content::SetupCrossSiteRedirector(embedded_test_server()); |
} |
void TearDownOnMainThread() override { |
@@ -513,17 +527,7 @@ IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfZoomWithoutBubble) { |
#endif |
} |
-IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibility) { |
- content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
- |
- GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); |
- content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
- ASSERT_TRUE(guest_contents); |
- |
- WaitForAccessibilityTreeToContainNodeWithName(guest_contents, |
- "1 First Section\r\n"); |
- ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
- |
+static std::string DumpPdfAccessibilityTree(const ui::AXTreeUpdate& ax_tree) { |
// Create a string representation of the tree starting with the embedded |
// object. |
std::string ax_tree_dump; |
@@ -549,39 +553,117 @@ IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibility) { |
id_to_indentation[node.child_ids[j]] = indent + 1; |
} |
- const char* expected_ax_tree = |
- "embeddedObject\n" |
- " group\n" |
- " region 'Page 1'\n" |
- " paragraph\n" |
- " staticText '1 First Section\\r\\n'\n" |
- " inlineTextBox '1 '\n" |
- " inlineTextBox 'First Section\\r\\n'\n" |
- " paragraph\n" |
- " staticText 'This is the first section.\\r\\n1'\n" |
- " inlineTextBox 'This is the first section.\\r\\n'\n" |
- " inlineTextBox '1'\n" |
- " region 'Page 2'\n" |
- " paragraph\n" |
- " staticText '1.1 First Subsection\\r\\n'\n" |
- " inlineTextBox '1.1 '\n" |
- " inlineTextBox 'First Subsection\\r\\n'\n" |
- " paragraph\n" |
- " staticText 'This is the first subsection.\\r\\n2'\n" |
- " inlineTextBox 'This is the first subsection.\\r\\n'\n" |
- " inlineTextBox '2'\n" |
- " region 'Page 3'\n" |
- " paragraph\n" |
- " staticText '2 Second Section\\r\\n'\n" |
- " inlineTextBox '2 '\n" |
- " inlineTextBox 'Second Section\\r\\n'\n" |
- " paragraph\n" |
- " staticText '3'\n" |
- " inlineTextBox '3'\n"; |
- |
- // Using ASSERT_TRUE deliberately instead of ASSERT_EQ or ASSERT_STREQ |
- // in order to print a more readable message if the strings differ. |
- ASSERT_TRUE(expected_ax_tree == ax_tree_dump) |
- << "Expected:\n" << expected_ax_tree |
- << "\n\nActual:\n" << ax_tree_dump; |
+ return ax_tree_dump; |
+} |
+ |
+static const char kExpectedPDFAXTree[] = |
+ "embeddedObject\n" |
+ " group\n" |
+ " region 'Page 1'\n" |
+ " paragraph\n" |
+ " staticText '1 First Section\\r\\n'\n" |
+ " inlineTextBox '1 '\n" |
+ " inlineTextBox 'First Section\\r\\n'\n" |
+ " paragraph\n" |
+ " staticText 'This is the first section.\\r\\n1'\n" |
+ " inlineTextBox 'This is the first section.\\r\\n'\n" |
+ " inlineTextBox '1'\n" |
+ " region 'Page 2'\n" |
+ " paragraph\n" |
+ " staticText '1.1 First Subsection\\r\\n'\n" |
+ " inlineTextBox '1.1 '\n" |
+ " inlineTextBox 'First Subsection\\r\\n'\n" |
+ " paragraph\n" |
+ " staticText 'This is the first subsection.\\r\\n2'\n" |
+ " inlineTextBox 'This is the first subsection.\\r\\n'\n" |
+ " inlineTextBox '2'\n" |
+ " region 'Page 3'\n" |
+ " paragraph\n" |
+ " staticText '2 Second Section\\r\\n'\n" |
+ " inlineTextBox '2 '\n" |
+ " inlineTextBox 'Second Section\\r\\n'\n" |
+ " paragraph\n" |
+ " staticText '3'\n" |
+ " inlineTextBox '3'\n"; |
+ |
+IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibility) { |
+ content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
+ |
+ GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); |
+ content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
+ ASSERT_TRUE(guest_contents); |
+ |
+ WaitForAccessibilityTreeToContainNodeWithName(guest_contents, |
+ "1 First Section\r\n"); |
+ ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
+ std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
+ ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityEnableLater) { |
+ // In this test, load the PDF file first, with accessibility off. |
+ GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); |
+ content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
+ ASSERT_TRUE(guest_contents); |
+ |
+ // Now enable accessibility globally, and assert that the PDF accessibility |
+ // tree loads. |
+ EnableAccessibilityForWebContents(guest_contents); |
+ WaitForAccessibilityTreeToContainNodeWithName(guest_contents, |
+ "1 First Section\r\n"); |
+ ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
+ std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
+ ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
+} |
+ |
+bool RetrieveGuestContents( |
+ content::WebContents** out_guest_contents, |
+ content::WebContents* in_guest_contents) { |
+ *out_guest_contents = in_guest_contents; |
+ return true; |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityInIframe) { |
+ content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
+ GURL test_iframe_url(embedded_test_server()->GetURL("/pdf/test-iframe.html")); |
+ ui_test_utils::NavigateToURL(browser(), test_iframe_url); |
+ content::WebContents* contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ WaitForAccessibilityTreeToContainNodeWithName(contents, |
+ "1 First Section\r\n"); |
+ |
+ content::WebContents* guest_contents = nullptr; |
+ content::BrowserPluginGuestManager* guest_manager = |
+ contents->GetBrowserContext()->GetGuestManager(); |
+ guest_manager->ForEachGuest(contents, |
+ base::Bind(&RetrieveGuestContents, |
+ &guest_contents)); |
+ ASSERT_TRUE(guest_contents); |
+ |
+ ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
+ std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
+ ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityInOOPIF) { |
+ content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
+ GURL test_iframe_url(embedded_test_server()->GetURL( |
+ "/pdf/test-cross-site-iframe.html")); |
+ ui_test_utils::NavigateToURL(browser(), test_iframe_url); |
+ content::WebContents* contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ WaitForAccessibilityTreeToContainNodeWithName(contents, |
+ "1 First Section\r\n"); |
+ |
+ content::WebContents* guest_contents = nullptr; |
+ content::BrowserPluginGuestManager* guest_manager = |
+ contents->GetBrowserContext()->GetGuestManager(); |
+ guest_manager->ForEachGuest(contents, |
+ base::Bind(&RetrieveGuestContents, |
+ &guest_contents)); |
+ ASSERT_TRUE(guest_contents); |
+ |
+ ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
+ std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
+ ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
} |