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/chromeos/accessibility/accessibility_util.h" | 5 #include "chrome/browser/chromeos/accessibility/accessibility_util.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/logging.h" | 9 #include "base/logging.h" |
10 #include "chrome/browser/accessibility/accessibility_extension_api.h" | 10 #include "chrome/browser/accessibility/accessibility_extension_api.h" |
11 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
12 #include "chrome/browser/extensions/component_loader.h" | 12 #include "chrome/browser/extensions/component_loader.h" |
13 #include "chrome/browser/extensions/extension_service.h" | 13 #include "chrome/browser/extensions/extension_service.h" |
14 #include "chrome/browser/extensions/file_reader.h" | 14 #include "chrome/browser/extensions/file_reader.h" |
15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
16 #include "chrome/browser/profiles/profile_manager.h" | 16 #include "chrome/browser/profiles/profile_manager.h" |
17 #include "chrome/browser/speech/extension_api/tts_extension_api_platform.h" | 17 #include "chrome/browser/speech/extension_api/tts_extension_api_platform.h" |
18 #include "chrome/common/extensions/extension_messages.h" | 18 #include "chrome/common/extensions/extension_messages.h" |
19 #include "chrome/common/extensions/extension_resource.h" | 19 #include "chrome/common/extensions/extension_resource.h" |
| 20 #include "chrome/common/extensions/user_script.h" |
20 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" |
21 #include "content/public/browser/render_view_host.h" | 22 #include "content/public/browser/render_view_host.h" |
22 #include "content/public/browser/web_contents.h" | 23 #include "content/public/browser/web_contents.h" |
23 #include "content/public/browser/web_ui.h" | 24 #include "content/public/browser/web_ui.h" |
24 #include "grit/browser_resources.h" | 25 #include "grit/browser_resources.h" |
25 #include "grit/generated_resources.h" | 26 #include "grit/generated_resources.h" |
26 #include "ui/base/l10n/l10n_util.h" | 27 #include "ui/base/l10n/l10n_util.h" |
27 #include "ui/base/resource/resource_bundle.h" | 28 #include "ui/base/resource/resource_bundle.h" |
28 | 29 |
29 using content::RenderViewHost; | 30 using content::RenderViewHost; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 } | 65 } |
65 | 66 |
66 private: | 67 private: |
67 void OnFileLoaded(bool success, const std::string& data) { | 68 void OnFileLoaded(bool success, const std::string& data) { |
68 if (success) { | 69 if (success) { |
69 ExtensionMsg_ExecuteCode_Params params; | 70 ExtensionMsg_ExecuteCode_Params params; |
70 params.request_id = 0; | 71 params.request_id = 0; |
71 params.extension_id = extension_id_; | 72 params.extension_id = extension_id_; |
72 params.is_javascript = true; | 73 params.is_javascript = true; |
73 params.code = data; | 74 params.code = data; |
| 75 params.run_at = UserScript::DOCUMENT_IDLE; |
74 params.all_frames = true; | 76 params.all_frames = true; |
75 params.in_main_world = false; | 77 params.in_main_world = false; |
76 render_view_host_->Send(new ExtensionMsg_ExecuteCode( | 78 render_view_host_->Send(new ExtensionMsg_ExecuteCode( |
77 render_view_host_->GetRoutingID(), params)); | 79 render_view_host_->GetRoutingID(), params)); |
78 } | 80 } |
79 Run(); | 81 Run(); |
80 } | 82 } |
81 | 83 |
82 std::string extension_id_; | 84 std::string extension_id_; |
83 RenderViewHost* render_view_host_; | 85 RenderViewHost* render_view_host_; |
(...skipping 19 matching lines...) Expand all Loading... |
103 Speak(l10n_util::GetStringUTF8( | 105 Speak(l10n_util::GetStringUTF8( |
104 enabled ? IDS_CHROMEOS_ACC_SPOKEN_FEEDBACK_ENABLED : | 106 enabled ? IDS_CHROMEOS_ACC_SPOKEN_FEEDBACK_ENABLED : |
105 IDS_CHROMEOS_ACC_SPOKEN_FEEDBACK_DISABLED).c_str()); | 107 IDS_CHROMEOS_ACC_SPOKEN_FEEDBACK_DISABLED).c_str()); |
106 | 108 |
107 // Load/Unload ChromeVox | 109 // Load/Unload ChromeVox |
108 Profile* profile = ProfileManager::GetDefaultProfile(); | 110 Profile* profile = ProfileManager::GetDefaultProfile(); |
109 ExtensionService* extension_service = | 111 ExtensionService* extension_service = |
110 profile->GetExtensionService(); | 112 profile->GetExtensionService(); |
111 FilePath path = FilePath(extension_misc::kAccessExtensionPath) | 113 FilePath path = FilePath(extension_misc::kAccessExtensionPath) |
112 .AppendASCII(extension_misc::kChromeVoxDirectoryName); | 114 .AppendASCII(extension_misc::kChromeVoxDirectoryName); |
113 if (enabled) { // Load ChromeVox | 115 if (enabled) { // Load ChromeVox |
114 const Extension* extension = | 116 const Extension* extension = |
115 extension_service->component_loader()->Add(IDR_CHROMEVOX_MANIFEST, | 117 extension_service->component_loader()->Add(IDR_CHROMEVOX_MANIFEST, |
116 path); | 118 path); |
117 | 119 |
118 if (login_web_ui) { | 120 if (login_web_ui) { |
119 RenderViewHost* render_view_host = | 121 RenderViewHost* render_view_host = |
120 login_web_ui->GetWebContents()->GetRenderViewHost(); | 122 login_web_ui->GetWebContents()->GetRenderViewHost(); |
121 // Set a flag to tell ChromeVox that it's just been enabled, | 123 // Set a flag to tell ChromeVox that it's just been enabled, |
122 // so that it won't interrupt our speech feedback enabled message. | 124 // so that it won't interrupt our speech feedback enabled message. |
123 ExtensionMsg_ExecuteCode_Params params; | 125 ExtensionMsg_ExecuteCode_Params params; |
124 params.request_id = 0; | 126 params.request_id = 0; |
125 params.extension_id = extension->id(); | 127 params.extension_id = extension->id(); |
126 params.is_javascript = true; | 128 params.is_javascript = true; |
127 params.code = "window.INJECTED_AFTER_LOAD = true;"; | 129 params.code = "window.INJECTED_AFTER_LOAD = true;"; |
| 130 params.run_at = UserScript::DOCUMENT_IDLE; |
128 params.all_frames = true; | 131 params.all_frames = true; |
129 params.in_main_world = false; | 132 params.in_main_world = false; |
130 render_view_host->Send(new ExtensionMsg_ExecuteCode( | 133 render_view_host->Send(new ExtensionMsg_ExecuteCode( |
131 render_view_host->GetRoutingID(), params)); | 134 render_view_host->GetRoutingID(), params)); |
132 | 135 |
133 // Inject ChromeVox' content scripts. | 136 // Inject ChromeVox' content scripts. |
134 ContentScriptLoader* loader = new ContentScriptLoader( | 137 ContentScriptLoader* loader = new ContentScriptLoader( |
135 extension->id(), render_view_host); | 138 extension->id(), render_view_host); |
136 | 139 |
137 for (size_t i = 0; i < extension->content_scripts().size(); i++) { | 140 for (size_t i = 0; i < extension->content_scripts().size(); i++) { |
138 const UserScript& script = extension->content_scripts()[i]; | 141 const UserScript& script = extension->content_scripts()[i]; |
139 for (size_t j = 0; j < script.js_scripts().size(); ++j) { | 142 for (size_t j = 0; j < script.js_scripts().size(); ++j) { |
140 const UserScript::File &file = script.js_scripts()[j]; | 143 const UserScript::File &file = script.js_scripts()[j]; |
141 ExtensionResource resource = extension->GetResource( | 144 ExtensionResource resource = extension->GetResource( |
142 file.relative_path()); | 145 file.relative_path()); |
143 loader->AppendScript(resource); | 146 loader->AppendScript(resource); |
144 } | 147 } |
145 } | 148 } |
146 loader->Run(); // It cleans itself up when done. | 149 loader->Run(); // It cleans itself up when done. |
147 } | 150 } |
148 | 151 |
149 DLOG(INFO) << "ChromeVox was Loaded."; | 152 DLOG(INFO) << "ChromeVox was Loaded."; |
150 } else { // Unload ChromeVox | 153 } else { // Unload ChromeVox |
151 extension_service->component_loader()->Remove(path); | 154 extension_service->component_loader()->Remove(path); |
152 DLOG(INFO) << "ChromeVox was Unloaded."; | 155 DLOG(INFO) << "ChromeVox was Unloaded."; |
153 } | 156 } |
154 } | 157 } |
155 | 158 |
156 void EnableHighContrast(bool enabled) { | 159 void EnableHighContrast(bool enabled) { |
157 PrefService* pref_service = g_browser_process->local_state(); | 160 PrefService* pref_service = g_browser_process->local_state(); |
158 pref_service->SetBoolean(prefs::kHighContrastEnabled, enabled); | 161 pref_service->SetBoolean(prefs::kHighContrastEnabled, enabled); |
159 pref_service->CommitPendingWrite(); | 162 pref_service->CommitPendingWrite(); |
160 } | 163 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 return spoken_feedback_enabled; | 201 return spoken_feedback_enabled; |
199 } | 202 } |
200 | 203 |
201 void MaybeSpeak(const std::string& utterance) { | 204 void MaybeSpeak(const std::string& utterance) { |
202 if (IsSpokenFeedbackEnabled()) | 205 if (IsSpokenFeedbackEnabled()) |
203 Speak(utterance); | 206 Speak(utterance); |
204 } | 207 } |
205 | 208 |
206 } // namespace accessibility | 209 } // namespace accessibility |
207 } // namespace chromeos | 210 } // namespace chromeos |
OLD | NEW |