OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/accessibility/accessibility_extension_api.h" | 5 #include "chrome/browser/accessibility/accessibility_extension_api.h" |
6 | 6 |
7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/accessibility/accessibility_extension_api_constants.h" | 10 #include "chrome/browser/accessibility/accessibility_extension_api_constants.h" |
11 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" | 11 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" |
12 #include "chrome/browser/extensions/event_router.h" | 12 #include "chrome/browser/extensions/event_router.h" |
13 #include "chrome/browser/extensions/extension_host.h" | |
14 #include "chrome/browser/extensions/extension_service.h" | |
13 #include "chrome/browser/extensions/extension_system.h" | 15 #include "chrome/browser/extensions/extension_system.h" |
14 #include "chrome/browser/extensions/extension_tab_util.h" | 16 #include "chrome/browser/extensions/extension_tab_util.h" |
17 #include "chrome/browser/extensions/lazy_background_task_queue.h" | |
15 #include "chrome/browser/infobars/confirm_infobar_delegate.h" | 18 #include "chrome/browser/infobars/confirm_infobar_delegate.h" |
16 #include "chrome/browser/infobars/infobar_delegate.h" | 19 #include "chrome/browser/infobars/infobar_delegate.h" |
17 #include "chrome/browser/infobars/infobar_service.h" | 20 #include "chrome/browser/infobars/infobar_service.h" |
18 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
19 #include "chrome/common/extensions/api/experimental_accessibility.h" | 22 #include "chrome/common/extensions/api/experimental_accessibility.h" |
23 #include "chrome/common/extensions/background_info.h" | |
20 #include "content/public/browser/browser_accessibility_state.h" | 24 #include "content/public/browser/browser_accessibility_state.h" |
21 #include "extensions/common/error_utils.h" | 25 #include "extensions/common/error_utils.h" |
22 | 26 |
23 namespace keys = extension_accessibility_api_constants; | 27 namespace keys = extension_accessibility_api_constants; |
24 namespace experimental_accessibility = | 28 namespace experimental_accessibility = |
25 extensions::api::experimental_accessibility; | 29 extensions::api::experimental_accessibility; |
26 | 30 |
27 // Returns the AccessibilityControlInfo serialized into a JSON string, | 31 // Returns the AccessibilityControlInfo serialized into a JSON string, |
28 // consisting of an array of a single object of type AccessibilityObject, | 32 // consisting of an array of a single object of type AccessibilityObject, |
29 // as defined in the accessibility extension api's json schema. | 33 // as defined in the accessibility extension api's json schema. |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
157 } | 161 } |
158 | 162 |
159 void ExtensionAccessibilityEventRouter::OnMenuClosed( | 163 void ExtensionAccessibilityEventRouter::OnMenuClosed( |
160 const AccessibilityMenuInfo* info) { | 164 const AccessibilityMenuInfo* info) { |
161 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info)); | 165 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info)); |
162 DispatchEvent(info->profile(), | 166 DispatchEvent(info->profile(), |
163 experimental_accessibility::OnMenuClosed::kEventName, | 167 experimental_accessibility::OnMenuClosed::kEventName, |
164 args.Pass()); | 168 args.Pass()); |
165 } | 169 } |
166 | 170 |
171 void ExtensionAccessibilityEventRouter:: | |
172 OnSpokenFeedbackEnabled(Profile* profile, bool make_announcements) { | |
173 scoped_ptr<base::ListValue> event_args(new base::ListValue()); | |
174 event_args->Append(base::Value::CreateBooleanValue(make_announcements)); | |
175 ExtensionAccessibilityEventRouter::DispatchEventToChromeVox(profile, | |
176 experimental_accessibility::OnSpokenFeedbackEnabled::kEventName, | |
177 event_args.Pass(), | |
178 true, | |
179 NULL); | |
180 } | |
181 | |
182 void ExtensionAccessibilityEventRouter:: | |
183 OnSpokenFeedbackDisabled(Profile* profile) { | |
184 scoped_ptr<base::ListValue> event_args(new base::ListValue()); | |
185 ExtensionAccessibilityEventRouter::DispatchEventToChromeVox(profile, | |
186 experimental_accessibility::OnSpokenFeedbackDisabled::kEventName, | |
187 event_args.Pass(), | |
188 true, | |
189 NULL); | |
190 } | |
191 | |
192 // Static. | |
193 void ExtensionAccessibilityEventRouter::DispatchEventToChromeVox( | |
194 Profile* profile, | |
195 const char* event_name, | |
196 scoped_ptr<base::ListValue> event_args, | |
197 bool first_call, | |
198 extensions::ExtensionHost* host) { | |
199 if (!first_call && !host) | |
200 return; | |
201 | |
202 extensions::ExtensionSystem* system = | |
203 extensions::ExtensionSystem::Get(profile); | |
204 if (!system) | |
205 return; | |
206 | |
207 const char* extension_id = extension_misc::kChromeVoxExtensionId; | |
208 // If this is a persistent background page, we want to wait for it to load | |
209 // (it might not be ready, since this is startup). But only enqueue once. | |
210 // If it fails to load the first time, don't bother trying again. | |
211 const extensions::Extension* extension = | |
212 system->extension_service()->extensions()->GetByID(extension_id); | |
213 if (extension && | |
214 extensions::BackgroundInfo::HasPersistentBackgroundPage(extension) && | |
215 first_call && | |
216 system->lazy_background_task_queue()-> | |
217 ShouldEnqueueTask(profile, extension)) { | |
218 system->lazy_background_task_queue()->AddPendingTask( | |
dmazzoni
2013/10/25 23:09:16
nit: maybe stick system->lazy_background_task_queu
| |
219 profile, extension_id, | |
220 base::Bind(&DispatchEventToChromeVox, | |
221 profile, event_name, base::Passed(&event_args), false)); | |
222 return; | |
223 } | |
224 | |
225 scoped_ptr<extensions::Event> event(new extensions::Event(event_name, | |
226 event_args.Pass())); | |
227 system->event_router()->DispatchEventToExtension( | |
228 extension_id, event.Pass()); | |
229 } | |
230 | |
167 void ExtensionAccessibilityEventRouter::DispatchEvent( | 231 void ExtensionAccessibilityEventRouter::DispatchEvent( |
168 Profile* profile, | 232 Profile* profile, |
169 const char* event_name, | 233 const char* event_name, |
170 scoped_ptr<base::ListValue> event_args) { | 234 scoped_ptr<base::ListValue> event_args) { |
171 if (enabled_ && profile && | 235 if (enabled_ && profile && |
172 extensions::ExtensionSystem::Get(profile)->event_router()) { | 236 extensions::ExtensionSystem::Get(profile)->event_router()) { |
173 scoped_ptr<extensions::Event> event(new extensions::Event( | 237 scoped_ptr<extensions::Event> event(new extensions::Event( |
174 event_name, event_args.Pass())); | 238 event_name, event_args.Pass())); |
175 extensions::ExtensionSystem::Get(profile)->event_router()-> | 239 extensions::ExtensionSystem::Get(profile)->event_router()-> |
176 BroadcastEvent(event.Pass()); | 240 BroadcastEvent(event.Pass()); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 DictionaryValue* alert_value = new DictionaryValue; | 304 DictionaryValue* alert_value = new DictionaryValue; |
241 const string16 message_text = confirm_infobar_delegate->GetMessageText(); | 305 const string16 message_text = confirm_infobar_delegate->GetMessageText(); |
242 alert_value->SetString(keys::kMessageKey, message_text); | 306 alert_value->SetString(keys::kMessageKey, message_text); |
243 alerts_value->Append(alert_value); | 307 alerts_value->Append(alert_value); |
244 } | 308 } |
245 } | 309 } |
246 | 310 |
247 SetResult(alerts_value); | 311 SetResult(alerts_value); |
248 return true; | 312 return true; |
249 } | 313 } |
OLD | NEW |