Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(882)

Unified Diff: content/browser/accessibility/accessibility_action_browsertest.cc

Issue 2522543004: Add support for retrieving image thumbnails as part of the accessibility tree. (Closed)
Patch Set: Clarified maxSize Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/accessibility_action_browsertest.cc
diff --git a/content/browser/accessibility/accessibility_action_browsertest.cc b/content/browser/accessibility/accessibility_action_browsertest.cc
index b649fc212a14409108ff7bb2896d641c1ef736df..3dc80e82603394c15aed390439c19bc998d827d9 100644
--- a/content/browser/accessibility/accessibility_action_browsertest.cc
+++ b/content/browser/accessibility/accessibility_action_browsertest.cc
@@ -12,7 +12,10 @@
#include "content/public/test/test_utils.h"
#include "content/shell/browser/shell.h"
#include "content/test/accessibility_browser_test_utils.h"
+#include "net/base/data_url.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/codec/png_codec.h"
+#include "url/gurl.h"
namespace content {
@@ -37,6 +40,21 @@ class AccessibilityActionBrowserTest : public ContentBrowserTest {
return web_contents->GetRootBrowserAccessibilityManager();
}
+ void GetBitmapFromImageDataURL(BrowserAccessibility* target,
+ SkBitmap* bitmap) {
+ std::string image_data_url = target->GetStringAttribute(
+ ui::AX_ATTR_IMAGE_DATA_URL);
+ std::string mimetype;
+ std::string charset;
+ std::string png_data;
+ ASSERT_TRUE(net::DataURL::Parse(GURL(image_data_url),
+ &mimetype, &charset, &png_data));
+ ASSERT_EQ("image/png", mimetype);
+ ASSERT_TRUE(gfx::PNGCodec::Decode(
+ reinterpret_cast<const unsigned char*>(png_data.data()),
+ png_data.size(), bitmap));
+ }
+
private:
BrowserAccessibility* FindNodeInSubtree(
BrowserAccessibility& node,
@@ -130,4 +148,134 @@ IN_PROC_BROWSER_TEST_F(AccessibilityActionBrowserTest,
EXPECT_EQ(8.0, target->GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE));
}
+IN_PROC_BROWSER_TEST_F(AccessibilityActionBrowserTest, CanvasGetImage) {
+ NavigateToURL(shell(), GURL(url::kAboutBlankURL));
+
+ AccessibilityNotificationWaiter waiter(shell()->web_contents(),
+ AccessibilityModeComplete,
+ ui::AX_EVENT_LOAD_COMPLETE);
+ GURL url("data:text/html,"
+ "<body>"
+ "<canvas aria-label='canvas' id='c' width='4' height='2'></canvas>"
+ "<script>\n"
+ " var c = document.getElementById('c').getContext('2d');\n"
+ " c.beginPath();\n"
+ " c.moveTo(0, 0.5);\n"
+ " c.lineTo(4, 0.5);\n"
+ " c.strokeStyle = '#ff0000';\n"
+ " c.stroke();\n"
+ " c.beginPath();\n"
+ " c.moveTo(0, 1.5);\n"
+ " c.lineTo(4, 1.5);\n"
+ " c.strokeStyle = '#0000ff';\n"
+ " c.stroke();\n"
+ "</script>"
+ "</body>");
+
+ NavigateToURL(shell(), url);
+ waiter.WaitForNotification();
+
+ BrowserAccessibility* target = FindNode(ui::AX_ROLE_CANVAS, "canvas");
+ ASSERT_NE(nullptr, target);
+
+ AccessibilityNotificationWaiter waiter2(shell()->web_contents(),
+ AccessibilityModeComplete,
+ ui::AX_EVENT_IMAGE_FRAME_UPDATED);
+ GetManager()->GetImageData(*target, gfx::Size());
+ waiter2.WaitForNotification();
+
+ SkBitmap bitmap;
+ GetBitmapFromImageDataURL(target, &bitmap);
+ ASSERT_EQ(4, bitmap.width());
+ ASSERT_EQ(2, bitmap.height());
+ EXPECT_EQ(SK_ColorRED, bitmap.getColor(0, 0));
+ EXPECT_EQ(SK_ColorRED, bitmap.getColor(1, 0));
+ EXPECT_EQ(SK_ColorRED, bitmap.getColor(2, 0));
+ EXPECT_EQ(SK_ColorRED, bitmap.getColor(3, 0));
+ EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(0, 1));
+ EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(1, 1));
+ EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(2, 1));
+ EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(3, 1));
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityActionBrowserTest, CanvasGetImageScale) {
+ NavigateToURL(shell(), GURL(url::kAboutBlankURL));
+
+ AccessibilityNotificationWaiter waiter(shell()->web_contents(),
+ AccessibilityModeComplete,
+ ui::AX_EVENT_LOAD_COMPLETE);
+ GURL url("data:text/html,"
+ "<body>"
+ "<canvas aria-label='canvas' id='c' width='40' height='20'></canvas>"
+ "<script>\n"
+ " var c = document.getElementById('c').getContext('2d');\n"
+ " c.fillStyle = '#00ff00';\n"
+ " c.fillRect(0, 0, 40, 10);\n"
+ " c.fillStyle = '#ff00ff';\n"
+ " c.fillRect(0, 10, 40, 10);\n"
+ "</script>"
+ "</body>");
+
+ NavigateToURL(shell(), url);
+ waiter.WaitForNotification();
+
+ BrowserAccessibility* target = FindNode(ui::AX_ROLE_CANVAS, "canvas");
+ ASSERT_NE(nullptr, target);
+
+ AccessibilityNotificationWaiter waiter2(shell()->web_contents(),
+ AccessibilityModeComplete,
+ ui::AX_EVENT_IMAGE_FRAME_UPDATED);
+ GetManager()->GetImageData(*target, gfx::Size(4, 4));
+ waiter2.WaitForNotification();
+
+ SkBitmap bitmap;
+ GetBitmapFromImageDataURL(target, &bitmap);
+ ASSERT_EQ(4, bitmap.width());
+ ASSERT_EQ(2, bitmap.height());
+ EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 0));
+ EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(1, 0));
+ EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(2, 0));
+ EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(3, 0));
+ EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(0, 1));
+ EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(1, 1));
+ EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(2, 1));
+ EXPECT_EQ(SK_ColorMAGENTA, bitmap.getColor(3, 1));
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityActionBrowserTest, ImgElementGetImage) {
+ NavigateToURL(shell(), GURL(url::kAboutBlankURL));
+
+ AccessibilityNotificationWaiter waiter(shell()->web_contents(),
+ AccessibilityModeComplete,
+ ui::AX_EVENT_LOAD_COMPLETE);
+ GURL url("data:text/html,"
+ "<body>"
+ "<img src='data:image/gif;base64,R0lGODdhAgADAKEDAAAA//"
+ "8AAAD/AP///ywAAAAAAgADAAACBEwkAAUAOw=='>"
+ "</body>");
+
+ NavigateToURL(shell(), url);
+ waiter.WaitForNotification();
+
+ BrowserAccessibility* target = FindNode(ui::AX_ROLE_IMAGE, "");
+ ASSERT_NE(nullptr, target);
+
+ AccessibilityNotificationWaiter waiter2(shell()->web_contents(),
+ AccessibilityModeComplete,
+ ui::AX_EVENT_IMAGE_FRAME_UPDATED);
+ GetManager()->GetImageData(*target, gfx::Size());
+ waiter2.WaitForNotification();
+
+ SkBitmap bitmap;
+ GetBitmapFromImageDataURL(target, &bitmap);
+ ASSERT_EQ(2, bitmap.width());
+ ASSERT_EQ(3, bitmap.height());
+ EXPECT_EQ(SK_ColorRED, bitmap.getColor(0, 0));
+ EXPECT_EQ(SK_ColorRED, bitmap.getColor(1, 0));
+ EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 1));
+ EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(1, 1));
+ EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(0, 2));
+ EXPECT_EQ(SK_ColorBLUE, bitmap.getColor(1, 2));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698