android_hit_testing_browsertest.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <set>
6#include <string>
7#include <vector>
8
9#include "base/command_line.h"
10#include "base/file_util.h"
11#include "base/logging.h"
12#include "base/path_service.h"
13#include "base/strings/string16.h"
14#include "base/strings/string_split.h"
15#include "base/strings/string_util.h"
16#include "base/strings/utf_string_conversions.h"
17#include "content/browser/accessibility/accessibility_tree_formatter.h"
18#include "content/browser/accessibility/browser_accessibility.h"
19#include "content/browser/accessibility/browser_accessibility_manager.h"
20#include "content/browser/renderer_host/render_view_host_impl.h"
21#include "content/browser/renderer_host/render_widget_host_view_base.h"
22#include "content/public/browser/web_contents.h"
23#include "content/public/common/content_paths.h"
24#include "content/public/common/content_switches.h"
25#include "content/public/common/url_constants.h"
26#include "content/public/test/content_browser_test.h"
27#include "content/public/test/content_browser_test_utils.h"
28#include "content/shell/browser/shell.h"
29#include "content/test/accessibility_browser_test_utils.h"
30#include "testing/gtest/include/gtest/gtest.h"
31
32namespace content {
33
34class AndroidHitTestingBrowserTest : public ContentBrowserTest {
35 public:
36  AndroidHitTestingBrowserTest() {}
37  virtual ~AndroidHitTestingBrowserTest() {}
38};
39
40IN_PROC_BROWSER_TEST_F(AndroidHitTestingBrowserTest,
41                       HitTestOutsideDocumentBoundsReturnsRoot) {
42  NavigateToURL(shell(), GURL(url::kAboutBlankURL));
43
44  // Load the page.
45  AccessibilityNotificationWaiter waiter(
46      shell(), AccessibilityModeComplete,
47      ui::AX_EVENT_LOAD_COMPLETE);
48  const char url_str[] =
49      "data:text/html,"
50      "<!doctype html>"
51      "<html><head><title>Accessibility Test</title></head>"
52      "<body>"
53      "<a href='#'>"
54      "This is some text in a link"
55      "</a>"
56      "</body></html>";
57  GURL url(url_str);
58  NavigateToURL(shell(), url);
59  waiter.WaitForNotification();
60
61  // Get the BrowserAccessibilityManager.
62  RenderWidgetHostViewBase* host_view = static_cast<RenderWidgetHostViewBase*>(
63      shell()->web_contents()->GetRenderWidgetHostView());
64  BrowserAccessibilityManager* manager =
65      host_view->GetBrowserAccessibilityManager();
66
67  // Send a hit test request, and wait for the hover event in response.
68  AccessibilityNotificationWaiter hover_waiter(
69      shell(), AccessibilityModeComplete,
70      ui::AX_EVENT_HOVER);
71  manager->delegate()->AccessibilityHitTest(gfx::Point(-1, -1));
72  hover_waiter.WaitForNotification();
73
74  // Assert that the hover event was fired on the root of the tree.
75  int hover_target_id = hover_waiter.event_target_id();
76  BrowserAccessibility* hovered_node = manager->GetFromID(hover_target_id);
77  ASSERT_TRUE(hovered_node != NULL);
78  ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, hovered_node->GetRole());
79}
80
81}  // namespace content
82