Chromium Code Reviews| Index: content/browser/accessibility/accessibility_ui.cc |
| diff --git a/content/browser/accessibility/accessibility_ui.cc b/content/browser/accessibility/accessibility_ui.cc |
| index 7c8062688b61e734408ea229e018e44a95749d50..7f98ee73ab9c25f1ae72871eea3e14659d430997 100644 |
| --- a/content/browser/accessibility/accessibility_ui.cc |
| +++ b/content/browser/accessibility/accessibility_ui.cc |
| @@ -81,7 +81,7 @@ std::unique_ptr<base::DictionaryValue> BuildTargetDescriptor( |
| target_data->SetString(kNameField, net::EscapeForHTML(name)); |
| target_data->SetInteger(kPidField, base::GetProcId(handle)); |
| target_data->SetString(kFaviconUrlField, favicon_url.spec()); |
| - target_data->SetInteger(kAccessibilityModeField, accessibility_mode); |
| + target_data->SetInteger(kAccessibilityModeField, accessibility_mode.get()); |
| return target_data; |
| } |
| @@ -89,7 +89,7 @@ std::unique_ptr<base::DictionaryValue> BuildTargetDescriptor( |
| RenderViewHost* rvh) { |
| WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
| WebContents::FromRenderViewHost(rvh)); |
| - AccessibilityMode accessibility_mode = AccessibilityModeOff; |
| + AccessibilityMode accessibility_mode; |
| std::string title; |
| GURL url; |
| @@ -147,11 +147,11 @@ bool HandleRequestCallback(BrowserContext* current_context, |
| BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode(); |
| bool disabled = base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kDisableRendererAccessibility); |
| - bool native = 0 != (mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS); |
| - bool web = 0 != (mode & ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS); |
| - bool text = 0 != (mode & ACCESSIBILITY_MODE_FLAG_INLINE_TEXT_BOXES); |
| - bool screenreader = 0 != (mode & ACCESSIBILITY_MODE_FLAG_SCREEN_READER); |
| - bool html = 0 != (mode & ACCESSIBILITY_MODE_FLAG_HTML); |
| + bool native = mode.hasMode(AccessibilityMode::kNativeAPIs); |
| + bool web = mode.hasMode(AccessibilityMode::kWebContents); |
| + bool text = mode.hasMode(AccessibilityMode::kInlineTextBoxes); |
| + bool screenreader = mode.hasMode(AccessibilityMode::kScreenReader); |
| + bool html = mode.hasMode(AccessibilityMode::kHTML); |
| // The "native" and "web" flags are disabled if |
| // --disable-renderer-accessibility is set. |
| @@ -223,6 +223,7 @@ void AccessibilityUI::ToggleAccessibility(const base::ListValue* args) { |
| CHECK_EQ(3U, args->GetSize()); |
| CHECK(args->GetString(0, &process_id_str)); |
| CHECK(args->GetString(1, &route_id_str)); |
| + // TODO(695247): We should pass each ax flag seperately |
| CHECK(args->GetInteger(2, &mode)); |
| CHECK(base::StringToInt(process_id_str, &process_id)); |
| CHECK(base::StringToInt(route_id_str, &route_id)); |
| @@ -233,9 +234,22 @@ void AccessibilityUI::ToggleAccessibility(const base::ListValue* args) { |
| auto* web_contents = |
| static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvh)); |
| AccessibilityMode current_mode = web_contents->GetAccessibilityMode(); |
| - // Flip the bits represented by |mode|. See accessibility_mode_enums.h for |
| - // values. |
| - current_mode ^= mode; |
| + |
| + if (mode & AccessibilityMode::kNativeAPIs) |
| + current_mode.setMode(AccessibilityMode::kNativeAPIs, true); |
| + |
| + if (mode & AccessibilityMode::kWebContents) |
| + current_mode.setMode(AccessibilityMode::kWebContents, true); |
| + |
| + if (mode & AccessibilityMode::kInlineTextBoxes) |
| + current_mode.setMode(AccessibilityMode::kInlineTextBoxes, true); |
| + |
| + if (mode & AccessibilityMode::kScreenReader) |
| + current_mode.setMode(AccessibilityMode::kScreenReader, true); |
| + |
| + if (mode & AccessibilityMode::kHTML) |
| + current_mode.setMode(AccessibilityMode::kHTML, true); |
| + |
| web_contents->SetAccessibilityMode(current_mode); |
| } |
| @@ -254,15 +268,15 @@ void AccessibilityUI::SetGlobalFlag(const base::ListValue* args) { |
| AccessibilityMode new_mode; |
| if (flag_name_str == kNative) { |
| - new_mode = ACCESSIBILITY_MODE_FLAG_NATIVE_APIS; |
| + new_mode = AccessibilityMode::kNativeAPIs; |
| } else if (flag_name_str == kWeb) { |
| - new_mode = ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS; |
| + new_mode = AccessibilityMode::kWebContents; |
| } else if (flag_name_str == kText) { |
| - new_mode = ACCESSIBILITY_MODE_FLAG_INLINE_TEXT_BOXES; |
| + new_mode = AccessibilityMode::kInlineTextBoxes; |
| } else if (flag_name_str == kScreenReader) { |
| - new_mode = ACCESSIBILITY_MODE_FLAG_SCREEN_READER; |
| + new_mode = AccessibilityMode::kScreenReader; |
| } else if (flag_name_str == kHTML) { |
| - new_mode = ACCESSIBILITY_MODE_FLAG_HTML; |
| + new_mode = AccessibilityMode::kHTML; |
| } else { |
| NOTREACHED(); |
| return; |
| @@ -270,19 +284,18 @@ void AccessibilityUI::SetGlobalFlag(const base::ListValue* args) { |
| // It doesn't make sense to enable one of the flags that depends on |
| // web contents without enabling web contents accessibility too. |
| - if (enabled && |
| - (new_mode == ACCESSIBILITY_MODE_FLAG_INLINE_TEXT_BOXES || |
| - new_mode == ACCESSIBILITY_MODE_FLAG_SCREEN_READER || |
| - new_mode == ACCESSIBILITY_MODE_FLAG_HTML)) { |
| - new_mode |= ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS; |
| + if (enabled && (new_mode.hasMode(AccessibilityMode::kInlineTextBoxes) || |
| + new_mode.hasMode(AccessibilityMode::kScreenReader) || |
| + new_mode.hasMode(AccessibilityMode::kHTML))) { |
| + new_mode.setMode(AccessibilityMode::kWebContents, true); |
| } |
| // Similarly if you disable web accessibility we should remove all |
| // flags that depend on it. |
| - if (!enabled && new_mode == ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS) { |
| - new_mode |= ACCESSIBILITY_MODE_FLAG_INLINE_TEXT_BOXES; |
| - new_mode |= ACCESSIBILITY_MODE_FLAG_SCREEN_READER; |
| - new_mode |= ACCESSIBILITY_MODE_FLAG_HTML; |
| + if (!enabled && new_mode.hasMode(AccessibilityMode::kWebContents)) { |
| + new_mode.setMode(AccessibilityMode::kInlineTextBoxes, true); |
| + new_mode.setMode(AccessibilityMode::kScreenReader, true); |
| + new_mode.setMode(AccessibilityMode::kHTML, true); |
| } |
| BrowserAccessibilityStateImpl* state = |
| @@ -320,8 +333,10 @@ void AccessibilityUI::RequestAccessibilityTree(const base::ListValue* args) { |
| static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvh)); |
| // No matter the state of the current web_contents, we want to force the mode |
| // because we are about to show the accessibility tree |
| - web_contents->SetAccessibilityMode(ACCESSIBILITY_MODE_FLAG_NATIVE_APIS | |
| - ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS); |
| + AccessibilityMode new_mode(AccessibilityMode::kNativeAPIs | |
| + AccessibilityMode::kWebContents); |
| + |
|
dmazzoni
2017/02/23 17:08:21
extremely minor nit: I wouldn't have a blank line
dougt
2017/02/27 03:12:57
Done.
|
| + web_contents->SetAccessibilityMode(new_mode); |
| std::unique_ptr<AccessibilityTreeFormatter> formatter; |
| if (g_show_internal_accessibility_tree) |
| formatter.reset(new AccessibilityTreeFormatterBlink()); |