1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/apple/foundation_util.h"
#include "content/browser/accessibility/hit_testing_browsertest.h"
#include "content/public/test/accessibility_notification_waiter.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
#include "ui/accessibility/platform/browser_accessibility_cocoa.h"
#include "ui/accessibility/platform/browser_accessibility_mac.h"
#include "ui/gfx/mac/coordinate_conversion.h"
namespace content {
#define EXPECT_ACCESSIBILITY_MAC_HIT_TEST_RESULT(css_point, expected_element, \
hit_element) \
SCOPED_TRACE(GetScopedTrace(css_point)); \
EXPECT_EQ([expected_element owner]->GetId(), [hit_element owner]->GetId());
class AccessibilityHitTestingMacBrowserTest
: public AccessibilityHitTestingBrowserTest {
public:
BrowserAccessibilityCocoa* GetWebContentRoot() {
return base::apple::ObjCCastStrict<BrowserAccessibilityCocoa>(
GetRootBrowserAccessibilityManager()
->GetBrowserAccessibilityRoot()
->GetNativeViewAccessible()
.Get());
}
};
INSTANTIATE_TEST_SUITE_P(
All,
AccessibilityHitTestingMacBrowserTest,
::testing::Values(1, 2),
AccessibilityHitTestingBrowserTest::TestPassToString());
IN_PROC_BROWSER_TEST_P(AccessibilityHitTestingMacBrowserTest,
AccessibilityHitTest) {
ASSERT_TRUE(embedded_test_server()->Start());
EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL)));
AccessibilityNotificationWaiter waiter(shell()->web_contents(),
ax::mojom::Event::kLoadComplete);
GURL url(embedded_test_server()->GetURL(
"/accessibility/hit_testing/simple_rectangles.html"));
EXPECT_TRUE(NavigateToURL(shell(), url));
ASSERT_TRUE(waiter.WaitForNotification());
WaitForAccessibilityTreeToContainNodeWithName(shell()->web_contents(),
"rectA");
BrowserAccessibilityCocoa* root = GetWebContentRoot();
// Test a hit on a rect in the main frame.
{
// Hit testing in mac expects a point in DIPs space.
gfx::Point rect_2_point(49, 20);
BrowserAccessibilityCocoa* hit_element = [root
accessibilityHitTest:NSMakePoint(rect_2_point.x(), rect_2_point.y())];
BrowserAccessibilityCocoa* expected_element =
base::apple::ObjCCastStrict<BrowserAccessibilityCocoa>(
FindNode(ax::mojom::Role::kGenericContainer, "rect2")
->GetNativeViewAccessible()
.Get());
EXPECT_ACCESSIBILITY_MAC_HIT_TEST_RESULT(rect_2_point, expected_element,
hit_element);
}
// Test a hit on a rect in the iframe.
{
gfx::Point rect_b_point(79, 79);
BrowserAccessibilityCocoa* hit_element = [root
accessibilityHitTest:NSMakePoint(rect_b_point.x(), rect_b_point.y())];
BrowserAccessibilityCocoa* expected_element =
base::apple::ObjCCastStrict<BrowserAccessibilityCocoa>(
FindNode(ax::mojom::Role::kGenericContainer, "rectB")
->GetNativeViewAccessible()
.Get());
EXPECT_ACCESSIBILITY_MAC_HIT_TEST_RESULT(rect_b_point, expected_element,
hit_element);
}
}
}
|