Commit 6878ed8d authored by drbasic's avatar drbasic Committed by Commit bot

Fix AccessibilityModeTest.* on Win 8

On Windows 8, always enabled accessibility for editable text controls.
So the base accessibility is AccessibilityModeEditableTextOnly.

R=aboxhall@chromium.org

BUG=

Review URL: https://codereview.chromium.org/545863002

Cr-Commit-Position: refs/heads/master@{#296562}
parent eb1d49a9
......@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/accessibility/accessibility_mode_helper.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
......@@ -40,36 +41,62 @@ class AccessibilityModeTest : public ContentBrowserTest {
web_contents()->GetRootBrowserAccessibilityManager()) << message;
}
}
AccessibilityMode CorrectedAccessibility(AccessibilityMode mode) {
return AddAccessibilityModeTo(GetBaseAccessibilityMode(), mode);
}
bool ShouldBeBrowserAccessibilityManager(AccessibilityMode mode) {
mode = CorrectedAccessibility(mode);
switch (mode) {
case AccessibilityModeOff:
case AccessibilityModeTreeOnly:
return false;
case AccessibilityModeEditableTextOnly:
case AccessibilityModeComplete:
return true;
default:
NOTREACHED();
}
return false;
}
};
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
EXPECT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
ExpectBrowserAccessibilityManager(false);
EXPECT_EQ(CorrectedAccessibility(AccessibilityModeOff),
web_contents()->GetAccessibilityMode());
ExpectBrowserAccessibilityManager(
ShouldBeBrowserAccessibilityManager(AccessibilityModeOff));
}
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
ASSERT_EQ(CorrectedAccessibility(AccessibilityModeOff),
web_contents()->GetAccessibilityMode());
AccessibilityNotificationWaiter waiter(shell());
web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
waiter.WaitForNotification();
ExpectBrowserAccessibilityManager(true);
ExpectBrowserAccessibilityManager(
ShouldBeBrowserAccessibilityManager(AccessibilityModeComplete));
}
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeTreeOnly) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
ASSERT_EQ(CorrectedAccessibility(AccessibilityModeOff),
web_contents()->GetAccessibilityMode());
AccessibilityNotificationWaiter waiter(shell());
web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
EXPECT_EQ(AccessibilityModeTreeOnly, web_contents()->GetAccessibilityMode());
EXPECT_EQ(CorrectedAccessibility(AccessibilityModeTreeOnly),
web_contents()->GetAccessibilityMode());
waiter.WaitForNotification();
// No BrowserAccessibilityManager expected for AccessibilityModeTreeOnly
ExpectBrowserAccessibilityManager(false);
ExpectBrowserAccessibilityManager(
ShouldBeBrowserAccessibilityManager(AccessibilityModeTreeOnly));
}
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
......@@ -77,9 +104,11 @@ IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
AccessibilityNotificationWaiter waiter(shell());
web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
EXPECT_EQ(AccessibilityModeTreeOnly, web_contents()->GetAccessibilityMode());
EXPECT_EQ(CorrectedAccessibility(AccessibilityModeTreeOnly),
web_contents()->GetAccessibilityMode());
waiter.WaitForNotification();
ExpectBrowserAccessibilityManager(false,
ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager(
AccessibilityModeTreeOnly),
"Should be no BrowserAccessibilityManager "
"for AccessibilityModeTreeOnly");
......@@ -87,7 +116,8 @@ IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
waiter2.WaitForNotification();
ExpectBrowserAccessibilityManager(true,
ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager(
AccessibilityModeComplete),
"Should be a BrowserAccessibilityManager "
"for AccessibilityModeComplete");
}
......
......@@ -30,6 +30,20 @@ AccessibilityMode CastToAccessibilityMode(unsigned int int_mode) {
} // namespace
AccessibilityMode GetBaseAccessibilityMode() {
AccessibilityMode accessibility_mode = AccessibilityModeOff;
#if defined(OS_WIN)
// On Windows 8, always enable accessibility for editable text controls
// so we can show the virtual keyboard when one is enabled.
if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
!CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableRendererAccessibility)) {
accessibility_mode = AccessibilityModeEditableTextOnly;
}
#endif // defined(OS_WIN)
return accessibility_mode;
}
AccessibilityMode AddAccessibilityModeTo(AccessibilityMode to,
AccessibilityMode mode_to_add) {
return CastToAccessibilityMode(to | mode_to_add);
......
......@@ -10,6 +10,9 @@
namespace content {
// Returns base accessibility mode constant, depends on OS version.
CONTENT_EXPORT AccessibilityMode GetBaseAccessibilityMode();
// Adds the given accessibility mode constant to the given accessibility mode
// bitmap.
CONTENT_EXPORT AccessibilityMode
......
......@@ -6,9 +6,6 @@
#include "content/common/view_message_enums.h"
#include "testing/gtest/include/gtest/gtest.h"
#if defined(OS_WIN)
#include "base/win/windows_version.h"
#endif
namespace content {
......@@ -19,22 +16,14 @@ TEST(AccessibilityModeHelperTest, TestNoOpRemove) {
}
TEST(AccessibilityModeHelperTest, TestRemoveSelf) {
AccessibilityMode kOffMode = AccessibilityModeOff;
#if defined(OS_WIN)
// Always preserve AccessibilityModeEditableTextOnly on Windows 8,
// see RemoveAccessibilityModeFrom() implementation.
// Test won't pass if switches::kDisableRendererAccessibility is set.
if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
kOffMode = AccessibilityModeEditableTextOnly;
}
#endif // defined(OS_WIN)
EXPECT_EQ(kOffMode,
AccessibilityMode kBaseMode = GetBaseAccessibilityMode();
EXPECT_EQ(kBaseMode,
RemoveAccessibilityModeFrom(AccessibilityModeComplete,
AccessibilityModeComplete));
EXPECT_EQ(
kOffMode,
kBaseMode,
RemoveAccessibilityModeFrom(AccessibilityModeEditableTextOnly,
AccessibilityModeEditableTextOnly));
}
......
......@@ -9,6 +9,7 @@
#include "base/win/scoped_bstr.h"
#include "base/win/scoped_comptr.h"
#include "base/win/scoped_variant.h"
#include "content/browser/accessibility/accessibility_mode_helper.h"
#include "content/browser/accessibility/accessibility_tree_formatter_utils_win.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/public/browser/notification_service.h"
......@@ -399,6 +400,9 @@ base::string16 AccessibleChecker::RoleVariantToString(
IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
TestBusyAccessibilityTree) {
if (GetBaseAccessibilityMode() != AccessibilityModeOff)
return;
NavigateToURL(shell(), GURL(url::kAboutBlankURL));
// The initial accessible returned should have state STATE_SYSTEM_BUSY while
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment