blob: 7eabd66859662d7e472eef79c5b48d36da41b8d6 [file] [log] [blame]
// 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 "content/browser/accessibility/browser_accessibility_cocoa.h"
#include "content/browser/accessibility/browser_accessibility_mac.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/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 GetRootBrowserAccessibilityManager()
->GetBrowserAccessibilityRoot()
->GetNativeViewAccessible();
}
};
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(),
ui::kAXModeComplete,
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 =
FindNode(ax::mojom::Role::kGenericContainer, "rect2")
->GetNativeViewAccessible();
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 =
FindNode(ax::mojom::Role::kGenericContainer, "rectB")
->GetNativeViewAccessible();
EXPECT_ACCESSIBILITY_MAC_HIT_TEST_RESULT(rect_b_point, expected_element,
hit_element);
}
}
}