Index: content/browser/accessibility/hit_testing_browsertest.cc |
diff --git a/content/browser/accessibility/hit_testing_browsertest.cc b/content/browser/accessibility/hit_testing_browsertest.cc |
index a94d563faab949390822175a0310ed678465a784..0ea0a861c2e0ba57374616064325984f287232ab 100644 |
--- a/content/browser/accessibility/hit_testing_browsertest.cc |
+++ b/content/browser/accessibility/hit_testing_browsertest.cc |
@@ -23,28 +23,36 @@ class AccessibilityHitTestingBrowserTest : public ContentBrowserTest { |
~AccessibilityHitTestingBrowserTest() override {} |
protected: |
- BrowserAccessibility* HitTestAndWaitForResult(const gfx::Point& point) { |
+ BrowserAccessibility* HitTestAndWaitForResultWithEvent( |
+ const gfx::Point& point, |
+ ui::AXEvent event_to_fire) { |
WebContentsImpl* web_contents = |
static_cast<WebContentsImpl*>(shell()->web_contents()); |
FrameTree* frame_tree = web_contents->GetFrameTree(); |
BrowserAccessibilityManager* manager = |
web_contents->GetRootBrowserAccessibilityManager(); |
- AccessibilityNotificationWaiter hover_waiter(shell()->web_contents(), |
- kAccessibilityModeComplete, |
- ui::AX_EVENT_HOVER); |
+ AccessibilityNotificationWaiter event_waiter( |
+ shell()->web_contents(), kAccessibilityModeComplete, event_to_fire); |
for (FrameTreeNode* node : frame_tree->Nodes()) |
- hover_waiter.ListenToAdditionalFrame(node->current_frame_host()); |
- manager->HitTest(point); |
- hover_waiter.WaitForNotification(); |
- |
- RenderFrameHostImpl* target_frame = hover_waiter.event_render_frame_host(); |
+ event_waiter.ListenToAdditionalFrame(node->current_frame_host()); |
+ ui::AXActionData action_data; |
+ action_data.action = ui::AX_ACTION_HIT_TEST; |
+ action_data.target_point = point; |
+ action_data.hit_test_event_to_fire = event_to_fire; |
+ manager->delegate()->AccessibilityPerformAction(action_data); |
+ event_waiter.WaitForNotification(); |
+ |
+ RenderFrameHostImpl* target_frame = event_waiter.event_render_frame_host(); |
BrowserAccessibilityManager* target_manager = |
target_frame->browser_accessibility_manager(); |
- int hover_target_id = hover_waiter.event_target_id(); |
- BrowserAccessibility* hovered_node = |
- target_manager->GetFromID(hover_target_id); |
- return hovered_node; |
+ int event_target_id = event_waiter.event_target_id(); |
+ BrowserAccessibility* hit_node = target_manager->GetFromID(event_target_id); |
+ return hit_node; |
+ } |
+ |
+ BrowserAccessibility* HitTestAndWaitForResult(const gfx::Point& point) { |
+ return HitTestAndWaitForResultWithEvent(point, ui::AX_EVENT_HOVER); |
} |
BrowserAccessibility* CallCachingAsyncHitTest(const gfx::Point& point) { |
@@ -90,10 +98,9 @@ IN_PROC_BROWSER_TEST_F(AccessibilityHitTestingBrowserTest, |
NavigateToURL(shell(), url); |
waiter.WaitForNotification(); |
- BrowserAccessibility* hovered_node = |
- HitTestAndWaitForResult(gfx::Point(-1, -1)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, hovered_node->GetRole()); |
+ BrowserAccessibility* hit_node = HitTestAndWaitForResult(gfx::Point(-1, -1)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, hit_node->GetRole()); |
} |
IN_PROC_BROWSER_TEST_F(AccessibilityHitTestingBrowserTest, |
@@ -121,38 +128,43 @@ IN_PROC_BROWSER_TEST_F(AccessibilityHitTestingBrowserTest, |
// correct object. |
// (50, 50) -> "Button" |
- BrowserAccessibility* hovered_node; |
- hovered_node = HitTestAndWaitForResult(gfx::Point(50, 50)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_EQ(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- ASSERT_EQ("Button", hovered_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
- gfx::Rect bounds = hovered_node->GetScreenBoundsRect(); |
+ BrowserAccessibility* hit_node; |
+ hit_node = HitTestAndWaitForResult(gfx::Point(50, 50)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_EQ(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ ASSERT_EQ("Button", hit_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
+ gfx::Rect bounds = hit_node->GetScreenBoundsRect(); |
EXPECT_EQ(250, bounds.width()); |
EXPECT_EQ(50, bounds.height()); |
// (50, 305) -> div in first iframe |
- hovered_node = HitTestAndWaitForResult(gfx::Point(50, 305)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_EQ(ui::AX_ROLE_DIV, hovered_node->GetRole()); |
+ hit_node = HitTestAndWaitForResult(gfx::Point(50, 305)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_EQ(ui::AX_ROLE_DIV, hit_node->GetRole()); |
// (50, 350) -> "Ordinary Button" |
- hovered_node = HitTestAndWaitForResult(gfx::Point(50, 350)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_EQ(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- ASSERT_EQ("Ordinary Button", |
- hovered_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
+ hit_node = HitTestAndWaitForResult(gfx::Point(50, 350)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_EQ(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ ASSERT_EQ("Ordinary Button", hit_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
// (50, 455) -> "Scrolled Button" |
- hovered_node = HitTestAndWaitForResult(gfx::Point(50, 455)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_EQ(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- ASSERT_EQ("Scrolled Button", |
- hovered_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
+ hit_node = HitTestAndWaitForResult(gfx::Point(50, 455)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_EQ(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ ASSERT_EQ("Scrolled Button", hit_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
// (50, 505) -> div in second iframe |
- hovered_node = HitTestAndWaitForResult(gfx::Point(50, 505)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_EQ(ui::AX_ROLE_DIV, hovered_node->GetRole()); |
+ hit_node = HitTestAndWaitForResult(gfx::Point(50, 505)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_EQ(ui::AX_ROLE_DIV, hit_node->GetRole()); |
+ |
+ // (50, 505) -> div in second iframe |
+ // but with a different event |
+ hit_node = |
+ HitTestAndWaitForResultWithEvent(gfx::Point(50, 505), ui::AX_EVENT_ALERT); |
+ ASSERT_NE(hit_node, nullptr); |
+ ASSERT_EQ(ui::AX_ROLE_DIV, hit_node->GetRole()); |
} |
IN_PROC_BROWSER_TEST_F(AccessibilityHitTestingBrowserTest, |
@@ -183,44 +195,42 @@ IN_PROC_BROWSER_TEST_F(AccessibilityHitTestingBrowserTest, |
// HOVER event to be received). |
// (50, 50) -> "Button" |
- BrowserAccessibility* hovered_node; |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 50)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_NE(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 50)); |
- ASSERT_EQ("Button", hovered_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
+ BrowserAccessibility* hit_node; |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 50)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_NE(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 50)); |
+ ASSERT_EQ("Button", hit_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
// (50, 305) -> div in first iframe |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 305)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_NE(ui::AX_ROLE_DIV, hovered_node->GetRole()); |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 305)); |
- ASSERT_EQ(ui::AX_ROLE_DIV, hovered_node->GetRole()); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 305)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_NE(ui::AX_ROLE_DIV, hit_node->GetRole()); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 305)); |
+ ASSERT_EQ(ui::AX_ROLE_DIV, hit_node->GetRole()); |
// (50, 350) -> "Ordinary Button" |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 350)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_NE(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 350)); |
- ASSERT_EQ(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- ASSERT_EQ("Ordinary Button", |
- hovered_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 350)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_NE(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 350)); |
+ ASSERT_EQ(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ ASSERT_EQ("Ordinary Button", hit_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
// (50, 455) -> "Scrolled Button" |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 455)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_NE(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 455)); |
- ASSERT_EQ(ui::AX_ROLE_BUTTON, hovered_node->GetRole()); |
- ASSERT_EQ("Scrolled Button", |
- hovered_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 455)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_NE(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 455)); |
+ ASSERT_EQ(ui::AX_ROLE_BUTTON, hit_node->GetRole()); |
+ ASSERT_EQ("Scrolled Button", hit_node->GetStringAttribute(ui::AX_ATTR_NAME)); |
// (50, 505) -> div in second iframe |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 505)); |
- ASSERT_TRUE(hovered_node != NULL); |
- ASSERT_NE(ui::AX_ROLE_DIV, hovered_node->GetRole()); |
- hovered_node = CallCachingAsyncHitTest(gfx::Point(50, 505)); |
- ASSERT_EQ(ui::AX_ROLE_DIV, hovered_node->GetRole()); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 505)); |
+ ASSERT_TRUE(hit_node != NULL); |
+ ASSERT_NE(ui::AX_ROLE_DIV, hit_node->GetRole()); |
+ hit_node = CallCachingAsyncHitTest(gfx::Point(50, 505)); |
+ ASSERT_EQ(ui::AX_ROLE_DIV, hit_node->GetRole()); |
} |
#if defined(OS_WIN) |