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 8e9fe1a64229beef0dcf1984a2e58a0972faf2fd..e4f20484a583d5269b493ced6e198a32f381c3de 100644 |
| --- a/content/browser/accessibility/accessibility_ui.cc |
| +++ b/content/browser/accessibility/accessibility_ui.cc |
| @@ -65,8 +65,9 @@ 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->SetBoolean( |
| + kAccessibilityModeField, |
| + 0 != (accessibility_mode & AccessibilityModeFlagWebContents)); |
| return target_data; |
| } |
| @@ -125,12 +126,19 @@ bool HandleRequestCallback(BrowserContext* current_context, |
| base::DictionaryValue data; |
| data.Set("list", rvh_list.release()); |
| - data.SetInteger( |
| - "global_a11y_mode", |
| - BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()); |
| - data.SetBoolean( |
| - "global_internal_tree_mode", |
| - g_show_internal_accessibility_tree); |
| + AccessibilityMode mode = |
| + BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode(); |
| + data.SetInteger("native", |
| + 0 != (mode & AccessibilityModeFlagNativeAPIs)); |
| + data.SetInteger("web", |
| + 0 != (mode & AccessibilityModeFlagWebContents)); |
| + data.SetInteger("text", |
| + 0 != (mode & AccessibilityModeFlagInlineTextBoxes)); |
| + data.SetInteger("screenreader", |
| + 0 != (mode & AccessibilityModeFlagScreenReader)); |
| + data.SetInteger("html", |
| + 0 != (mode & AccessibilityModeFlagHTML)); |
| + data.SetBoolean("internal", g_show_internal_accessibility_tree); |
| std::string json_string; |
| base::JSONWriter::Write(data, &json_string); |
| @@ -151,12 +159,8 @@ AccessibilityUI::AccessibilityUI(WebUI* web_ui) : WebUIController(web_ui) { |
| base::Bind(&AccessibilityUI::ToggleAccessibility, |
| base::Unretained(this))); |
| web_ui->RegisterMessageCallback( |
| - "toggleGlobalAccessibility", |
| - base::Bind(&AccessibilityUI::ToggleGlobalAccessibility, |
| - base::Unretained(this))); |
| - web_ui->RegisterMessageCallback( |
| - "toggleInternalTree", |
| - base::Bind(&AccessibilityUI::ToggleInternalTree, |
| + "setGlobalFlag", |
| + base::Bind(&AccessibilityUI::SetGlobalFlag, |
| base::Unretained(this))); |
| web_ui->RegisterMessageCallback( |
| "requestAccessibilityTree", |
| @@ -206,18 +210,57 @@ void AccessibilityUI::ToggleAccessibility(const base::ListValue* args) { |
| } |
| } |
| -void AccessibilityUI::ToggleGlobalAccessibility(const base::ListValue* args) { |
| +void AccessibilityUI::SetGlobalFlag(const base::ListValue* args) { |
| + std::string flag_name_str; |
| + bool value; |
|
aboxhall
2016/12/12 20:34:45
how about s/value/enabled/ ?
dmazzoni
2016/12/13 00:30:49
Done.
|
| + CHECK_EQ(2U, args->GetSize()); |
| + CHECK(args->GetString(0, &flag_name_str)); |
| + CHECK(args->GetBoolean(1, &value)); |
| + |
| + if (flag_name_str == "internal") { |
| + g_show_internal_accessibility_tree = value; |
| + return; |
| + } |
| + |
| + AccessibilityMode new_mode; |
| + if (flag_name_str == "native") { |
| + new_mode = AccessibilityModeFlagNativeAPIs; |
| + } else if (flag_name_str == "web") { |
| + new_mode = AccessibilityModeFlagWebContents; |
| + } else if (flag_name_str == "text") { |
| + new_mode = AccessibilityModeFlagInlineTextBoxes; |
| + } else if (flag_name_str == "screenreader") { |
| + new_mode = AccessibilityModeFlagScreenReader; |
| + } else if (flag_name_str == "html") { |
| + new_mode = AccessibilityModeFlagHTML; |
| + } else { |
| + NOTREACHED(); |
| + return; |
| + } |
| + |
| + // It doesn't make sense to enable one of the flags that depends on |
| + // web contents without enabling web contents accessibility too. |
| + if (value == true && |
|
aboxhall
2016/12/12 20:34:45
then you can s/== true// here and s/value == false
dmazzoni
2016/12/13 00:30:50
Done.
|
| + (new_mode == AccessibilityModeFlagInlineTextBoxes || |
| + new_mode == AccessibilityModeFlagScreenReader || |
| + new_mode == AccessibilityModeFlagHTML)) { |
| + new_mode |= AccessibilityModeFlagWebContents; |
| + } |
| + |
| + // Similarly if you disable web accessibility we should remove all |
|
aboxhall
2016/12/12 20:34:45
Is that true? Could they not stick around to be "r
dmazzoni
2016/12/13 00:30:50
OK, how about this: I modified the code to show th
|
| + // flags that depend on it. |
| + if (value == false && new_mode == AccessibilityModeFlagWebContents) { |
| + new_mode |= AccessibilityModeFlagInlineTextBoxes; |
| + new_mode |= AccessibilityModeFlagScreenReader; |
| + new_mode |= AccessibilityModeFlagHTML; |
| + } |
| + |
| BrowserAccessibilityStateImpl* state = |
| BrowserAccessibilityStateImpl::GetInstance(); |
| - AccessibilityMode mode = state->accessibility_mode(); |
| - if ((mode & kAccessibilityModeComplete) != kAccessibilityModeComplete) |
| - state->EnableAccessibility(); |
| + if (value) |
| + state->AddAccessibilityModeFlags(new_mode); |
| else |
| - state->DisableAccessibility(); |
| -} |
| - |
| -void AccessibilityUI::ToggleInternalTree(const base::ListValue* args) { |
| - g_show_internal_accessibility_tree = !g_show_internal_accessibility_tree; |
| + state->RemoveAccessibilityModeFlags(new_mode); |
| } |
| void AccessibilityUI::RequestAccessibilityTree(const base::ListValue* args) { |