Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: content/browser/accessibility/accessibility_ui.cc

Issue 273423004: Migrate accessibility from RenderView to RenderFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix win & android compile Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/accessibility/accessibility_ui.h" 5 #include "content/browser/accessibility/accessibility_ui.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "content/browser/accessibility/accessibility_tree_formatter.h" 13 #include "content/browser/accessibility/accessibility_tree_formatter.h"
14 #include "content/browser/accessibility/browser_accessibility_manager.h" 14 #include "content/browser/accessibility/browser_accessibility_manager.h"
15 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 15 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
16 #include "content/browser/renderer_host/render_widget_host_impl.h" 16 #include "content/browser/renderer_host/render_widget_host_impl.h"
17 #include "content/browser/renderer_host/render_widget_host_view_base.h" 17 #include "content/browser/renderer_host/render_widget_host_view_base.h"
18 #include "content/browser/web_contents/web_contents_impl.h"
18 #include "content/common/view_message_enums.h" 19 #include "content/common/view_message_enums.h"
19 #include "content/public/browser/favicon_status.h" 20 #include "content/public/browser/favicon_status.h"
20 #include "content/public/browser/navigation_entry.h" 21 #include "content/public/browser/navigation_entry.h"
21 #include "content/public/browser/render_process_host.h" 22 #include "content/public/browser/render_process_host.h"
22 #include "content/public/browser/render_view_host.h" 23 #include "content/public/browser/render_view_host.h"
23 #include "content/public/browser/render_widget_host.h" 24 #include "content/public/browser/render_widget_host.h"
24 #include "content/public/browser/render_widget_host_iterator.h" 25 #include "content/public/browser/render_widget_host_iterator.h"
25 #include "content/public/browser/web_contents.h" 26 #include "content/public/browser/web_contents.h"
26 #include "content/public/browser/web_ui_data_source.h" 27 #include "content/public/browser/web_ui_data_source.h"
27 #include "content/public/common/url_constants.h" 28 #include "content/public/common/url_constants.h"
(...skipping 28 matching lines...) Expand all
56 target_data->SetString(kUrlField, url.spec()); 57 target_data->SetString(kUrlField, url.spec());
57 target_data->SetString(kNameField, net::EscapeForHTML(name)); 58 target_data->SetString(kNameField, net::EscapeForHTML(name));
58 target_data->SetInteger(kPidField, base::GetProcId(handle)); 59 target_data->SetInteger(kPidField, base::GetProcId(handle));
59 target_data->SetString(kFaviconUrlField, favicon_url.spec()); 60 target_data->SetString(kFaviconUrlField, favicon_url.spec());
60 target_data->SetInteger(kAccessibilityModeField, 61 target_data->SetInteger(kAccessibilityModeField,
61 accessibility_mode); 62 accessibility_mode);
62 return target_data; 63 return target_data;
63 } 64 }
64 65
65 base::DictionaryValue* BuildTargetDescriptor(RenderViewHost* rvh) { 66 base::DictionaryValue* BuildTargetDescriptor(RenderViewHost* rvh) {
66 WebContents* web_contents = WebContents::FromRenderViewHost(rvh); 67 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
68 WebContents::FromRenderViewHost(rvh));
69 AccessibilityMode accessibility_mode = web_contents->accessibility_mode();
70
67 std::string title; 71 std::string title;
68 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rvh);
69 AccessibilityMode accessibility_mode = rwhi->accessibility_mode();
70
71 GURL url; 72 GURL url;
72 GURL favicon_url; 73 GURL favicon_url;
73 if (web_contents) { 74 if (web_contents) {
74 // TODO(nasko): Fix the following code to use a consistent set of data 75 // TODO(nasko): Fix the following code to use a consistent set of data
75 // across the URL, title, and favicon. 76 // across the URL, title, and favicon.
76 url = web_contents->GetURL(); 77 url = web_contents->GetURL();
77 title = base::UTF16ToUTF8(web_contents->GetTitle()); 78 title = base::UTF16ToUTF8(web_contents->GetTitle());
78 NavigationController& controller = web_contents->GetController(); 79 NavigationController& controller = web_contents->GetController();
79 NavigationEntry* entry = controller.GetVisibleEntry(); 80 NavigationEntry* entry = controller.GetVisibleEntry();
80 if (entry != NULL && entry->GetURL().is_valid()) 81 if (entry != NULL && entry->GetURL().is_valid())
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 int route_id; 172 int route_id;
172 CHECK_EQ(2U, args->GetSize()); 173 CHECK_EQ(2U, args->GetSize());
173 CHECK(args->GetString(0, &process_id_str)); 174 CHECK(args->GetString(0, &process_id_str));
174 CHECK(args->GetString(1, &route_id_str)); 175 CHECK(args->GetString(1, &route_id_str));
175 CHECK(base::StringToInt(process_id_str, &process_id)); 176 CHECK(base::StringToInt(process_id_str, &process_id));
176 CHECK(base::StringToInt(route_id_str, &route_id)); 177 CHECK(base::StringToInt(route_id_str, &route_id));
177 178
178 RenderViewHost* rvh = RenderViewHost::FromID(process_id, route_id); 179 RenderViewHost* rvh = RenderViewHost::FromID(process_id, route_id);
179 if (!rvh) 180 if (!rvh)
180 return; 181 return;
181 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rvh); 182 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
182 if (!rwhi) 183 WebContents::FromRenderViewHost(rvh));
183 return; 184 AccessibilityMode mode = web_contents->accessibility_mode();
184 AccessibilityMode mode = rwhi->accessibility_mode(); 185 if ((mode & AccessibilityModeComplete) != AccessibilityModeComplete) {
185 if ((mode & AccessibilityModeComplete) != AccessibilityModeComplete) 186 web_contents->AddAccessibilityMode(AccessibilityModeComplete);
186 rwhi->AddAccessibilityMode(AccessibilityModeComplete); 187 } else {
187 else 188 web_contents->SetAccessibilityMode(
188 rwhi->ResetAccessibilityMode(); 189 BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode());
190 }
189 } 191 }
190 192
191 void AccessibilityUI::ToggleGlobalAccessibility(const base::ListValue* args) { 193 void AccessibilityUI::ToggleGlobalAccessibility(const base::ListValue* args) {
192 BrowserAccessibilityStateImpl* state = 194 BrowserAccessibilityStateImpl* state =
193 BrowserAccessibilityStateImpl::GetInstance(); 195 BrowserAccessibilityStateImpl::GetInstance();
194 AccessibilityMode mode = state->accessibility_mode(); 196 AccessibilityMode mode = state->accessibility_mode();
195 if ((mode & AccessibilityModeComplete) != AccessibilityModeComplete) 197 if ((mode & AccessibilityModeComplete) != AccessibilityModeComplete)
196 state->EnableAccessibility(); 198 state->EnableAccessibility();
197 else 199 else
198 state->DisableAccessibility(); 200 state->DisableAccessibility();
(...skipping 14 matching lines...) Expand all
213 if (!rvh) { 215 if (!rvh) {
214 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); 216 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue());
215 result->SetInteger(kProcessIdField, process_id); 217 result->SetInteger(kProcessIdField, process_id);
216 result->SetInteger(kRouteIdField, route_id); 218 result->SetInteger(kRouteIdField, route_id);
217 result->Set("error", new base::StringValue("Renderer no longer exists.")); 219 result->Set("error", new base::StringValue("Renderer no longer exists."));
218 web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get())); 220 web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get()));
219 return; 221 return;
220 } 222 }
221 223
222 scoped_ptr<base::DictionaryValue> result(BuildTargetDescriptor(rvh)); 224 scoped_ptr<base::DictionaryValue> result(BuildTargetDescriptor(rvh));
223 RenderWidgetHostViewBase* host_view = static_cast<RenderWidgetHostViewBase*>( 225 WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
224 WebContents::FromRenderViewHost(rvh)->GetRenderWidgetHostView());
225 if (!host_view) {
226 result->Set("error",
227 new base::StringValue("Could not get accessibility tree."));
228 web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get()));
229 return;
230 }
231 scoped_ptr<AccessibilityTreeFormatter> formatter( 226 scoped_ptr<AccessibilityTreeFormatter> formatter(
232 AccessibilityTreeFormatter::Create(rvh)); 227 AccessibilityTreeFormatter::Create(web_contents));
233 base::string16 accessibility_contents_utf16; 228 base::string16 accessibility_contents_utf16;
234 BrowserAccessibilityManager* manager =
235 host_view->GetBrowserAccessibilityManager();
236 if (!manager) {
237 result->Set("error",
238 new base::StringValue("Could not get accessibility tree."));
239 web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get()));
240 return;
241 }
242 std::vector<AccessibilityTreeFormatter::Filter> filters; 229 std::vector<AccessibilityTreeFormatter::Filter> filters;
243 filters.push_back(AccessibilityTreeFormatter::Filter( 230 filters.push_back(AccessibilityTreeFormatter::Filter(
244 base::ASCIIToUTF16("*"), 231 base::ASCIIToUTF16("*"),
245 AccessibilityTreeFormatter::Filter::ALLOW)); 232 AccessibilityTreeFormatter::Filter::ALLOW));
246 formatter->SetFilters(filters); 233 formatter->SetFilters(filters);
247 formatter->FormatAccessibilityTree(&accessibility_contents_utf16); 234 formatter->FormatAccessibilityTree(&accessibility_contents_utf16);
248 235
249 result->Set("tree", 236 result->Set("tree",
250 new base::StringValue( 237 new base::StringValue(
251 base::UTF16ToUTF8(accessibility_contents_utf16))); 238 base::UTF16ToUTF8(accessibility_contents_utf16)));
252 web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get())); 239 web_ui()->CallJavascriptFunction("accessibility.showTree", *(result.get()));
253 } 240 }
254 241
255 } // namespace content 242 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698