Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
| 12 #include "base/macros.h" | |
| 12 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 14 #include "base/values.h" | 15 #include "base/values.h" |
| 15 #include "content/browser/accessibility/accessibility_tree_formatter.h" | 16 #include "content/browser/accessibility/accessibility_tree_formatter.h" |
| 16 #include "content/browser/accessibility/accessibility_tree_formatter_blink.h" | 17 #include "content/browser/accessibility/accessibility_tree_formatter_blink.h" |
| 17 #include "content/browser/accessibility/browser_accessibility_manager.h" | 18 #include "content/browser/accessibility/browser_accessibility_manager.h" |
| 18 #include "content/browser/accessibility/browser_accessibility_state_impl.h" | 19 #include "content/browser/accessibility/browser_accessibility_state_impl.h" |
| 19 #include "content/browser/renderer_host/render_widget_host_impl.h" | 20 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 20 #include "content/browser/renderer_host/render_widget_host_view_base.h" | 21 #include "content/browser/renderer_host/render_widget_host_view_base.h" |
| 21 #include "content/browser/web_contents/web_contents_impl.h" | 22 #include "content/browser/web_contents/web_contents_impl.h" |
| 23 #include "content/browser/webui/web_ui_data_source_impl.h" | |
| 22 #include "content/common/view_message_enums.h" | 24 #include "content/common/view_message_enums.h" |
| 23 #include "content/grit/content_resources.h" | 25 #include "content/grit/content_resources.h" |
| 24 #include "content/public/browser/favicon_status.h" | 26 #include "content/public/browser/favicon_status.h" |
| 25 #include "content/public/browser/navigation_entry.h" | 27 #include "content/public/browser/navigation_entry.h" |
| 26 #include "content/public/browser/render_process_host.h" | 28 #include "content/public/browser/render_process_host.h" |
| 27 #include "content/public/browser/render_view_host.h" | 29 #include "content/public/browser/render_view_host.h" |
| 28 #include "content/public/browser/render_widget_host.h" | 30 #include "content/public/browser/render_widget_host.h" |
| 29 #include "content/public/browser/render_widget_host_iterator.h" | 31 #include "content/public/browser/render_widget_host_iterator.h" |
| 30 #include "content/public/browser/web_contents.h" | 32 #include "content/public/browser/web_contents.h" |
| 31 #include "content/public/browser/web_ui_data_source.h" | 33 #include "content/public/browser/web_ui_data_source.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 131 "global_internal_tree_mode", | 133 "global_internal_tree_mode", |
| 132 g_show_internal_accessibility_tree); | 134 g_show_internal_accessibility_tree); |
| 133 | 135 |
| 134 std::string json_string; | 136 std::string json_string; |
| 135 base::JSONWriter::Write(data, &json_string); | 137 base::JSONWriter::Write(data, &json_string); |
| 136 | 138 |
| 137 callback.Run(base::RefCountedString::TakeString(&json_string)); | 139 callback.Run(base::RefCountedString::TakeString(&json_string)); |
| 138 return true; | 140 return true; |
| 139 } | 141 } |
| 140 | 142 |
| 143 class AccessibilityDataSource : public WebUIDataSourceImpl { | |
| 144 public: | |
| 145 static AccessibilityDataSource* Create(const std::string& source_name) { | |
|
Dan Beam
2016/10/05 17:40:42
i had to do this because a super is ref-counted
[
agrieve
2016/10/05 18:40:19
A bit annoying that you need to subclass for this
Dan Beam
2016/10/05 19:03:36
yeah, that might work. i could also just make a w
agrieve
2016/10/05 19:09:33
I'd be supportive of that once we need it (but we
Dan Beam
2016/10/12 04:32:30
so this won't work (I tried here[1]), because
GET
| |
| 146 return new AccessibilityDataSource(source_name); | |
| 147 } | |
| 148 | |
| 149 protected: | |
| 150 AccessibilityDataSource(const std::string& source_name) | |
| 151 : WebUIDataSourceImpl(source_name) {} | |
| 152 ~AccessibilityDataSource() override {} | |
| 153 | |
| 154 bool IsGzipped(const std::string& path) const override { | |
| 155 return WebUIDataSourceImpl::IsGzipped(path) && path != kDataFile; | |
| 156 } | |
| 157 | |
| 158 private: | |
| 159 DISALLOW_COPY_AND_ASSIGN(AccessibilityDataSource); | |
| 160 }; | |
| 161 | |
| 141 } // namespace | 162 } // namespace |
| 142 | 163 |
| 164 | |
| 143 AccessibilityUI::AccessibilityUI(WebUI* web_ui) : WebUIController(web_ui) { | 165 AccessibilityUI::AccessibilityUI(WebUI* web_ui) : WebUIController(web_ui) { |
| 144 // Set up the chrome://accessibility source. | 166 // Set up the chrome://accessibility source. |
| 145 WebUIDataSource* html_source = | 167 WebUIDataSource* html_source = |
| 146 WebUIDataSource::Create(kChromeUIAccessibilityHost); | 168 AccessibilityDataSource::Create(kChromeUIAccessibilityHost); |
| 147 | 169 |
| 148 web_ui->RegisterMessageCallback( | 170 web_ui->RegisterMessageCallback( |
| 149 "toggleAccessibility", | 171 "toggleAccessibility", |
| 150 base::Bind(&AccessibilityUI::ToggleAccessibility, | 172 base::Bind(&AccessibilityUI::ToggleAccessibility, |
| 151 base::Unretained(this))); | 173 base::Unretained(this))); |
| 152 web_ui->RegisterMessageCallback( | 174 web_ui->RegisterMessageCallback( |
| 153 "toggleGlobalAccessibility", | 175 "toggleGlobalAccessibility", |
| 154 base::Bind(&AccessibilityUI::ToggleGlobalAccessibility, | 176 base::Bind(&AccessibilityUI::ToggleGlobalAccessibility, |
| 155 base::Unretained(this))); | 177 base::Unretained(this))); |
| 156 web_ui->RegisterMessageCallback( | 178 web_ui->RegisterMessageCallback( |
| 157 "toggleInternalTree", | 179 "toggleInternalTree", |
| 158 base::Bind(&AccessibilityUI::ToggleInternalTree, | 180 base::Bind(&AccessibilityUI::ToggleInternalTree, |
| 159 base::Unretained(this))); | 181 base::Unretained(this))); |
| 160 web_ui->RegisterMessageCallback( | 182 web_ui->RegisterMessageCallback( |
| 161 "requestAccessibilityTree", | 183 "requestAccessibilityTree", |
| 162 base::Bind(&AccessibilityUI::RequestAccessibilityTree, | 184 base::Bind(&AccessibilityUI::RequestAccessibilityTree, |
| 163 base::Unretained(this))); | 185 base::Unretained(this))); |
| 164 | 186 |
| 165 // Add required resources. | 187 // Add required resources. |
| 166 html_source->SetJsonPath("strings.js"); | 188 html_source->SetJsonPath("strings.js"); |
| 167 html_source->AddResourcePath("accessibility.css", IDR_ACCESSIBILITY_CSS); | 189 html_source->AddResourcePath("accessibility.css", IDR_ACCESSIBILITY_CSS); |
| 168 html_source->AddResourcePath("accessibility.js", IDR_ACCESSIBILITY_JS); | 190 html_source->AddResourcePath("accessibility.js", IDR_ACCESSIBILITY_JS); |
| 169 html_source->SetDefaultResource(IDR_ACCESSIBILITY_HTML); | 191 html_source->SetDefaultResource(IDR_ACCESSIBILITY_HTML); |
| 170 html_source->SetRequestFilter( | 192 html_source->SetRequestFilter( |
| 171 base::Bind(&HandleRequestCallback, | 193 base::Bind(&HandleRequestCallback, |
| 172 web_ui->GetWebContents()->GetBrowserContext())); | 194 web_ui->GetWebContents()->GetBrowserContext())); |
| 195 html_source->DisableI18nAndUseGzipForAllPaths(); | |
| 173 | 196 |
| 174 BrowserContext* browser_context = | 197 BrowserContext* browser_context = |
| 175 web_ui->GetWebContents()->GetBrowserContext(); | 198 web_ui->GetWebContents()->GetBrowserContext(); |
| 176 WebUIDataSource::Add(browser_context, html_source); | 199 WebUIDataSource::Add(browser_context, html_source); |
| 177 } | 200 } |
| 178 | 201 |
| 179 AccessibilityUI::~AccessibilityUI() {} | 202 AccessibilityUI::~AccessibilityUI() {} |
| 180 | 203 |
| 181 void AccessibilityUI::ToggleAccessibility(const base::ListValue* args) { | 204 void AccessibilityUI::ToggleAccessibility(const base::ListValue* args) { |
| 182 std::string process_id_str; | 205 std::string process_id_str; |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 257 web_contents->GetRootBrowserAccessibilityManager()->GetRoot(), | 280 web_contents->GetRootBrowserAccessibilityManager()->GetRoot(), |
| 258 &accessibility_contents_utf16); | 281 &accessibility_contents_utf16); |
| 259 result->Set("tree", | 282 result->Set("tree", |
| 260 new base::StringValue( | 283 new base::StringValue( |
| 261 base::UTF16ToUTF8(accessibility_contents_utf16))); | 284 base::UTF16ToUTF8(accessibility_contents_utf16))); |
| 262 web_ui()->CallJavascriptFunctionUnsafe("accessibility.showTree", | 285 web_ui()->CallJavascriptFunctionUnsafe("accessibility.showTree", |
| 263 *(result.get())); | 286 *(result.get())); |
| 264 } | 287 } |
| 265 | 288 |
| 266 } // namespace content | 289 } // namespace content |
| OLD | NEW |