Index: chrome/browser/chromeos/accessibility/accessibility_util.cc |
diff --git a/chrome/browser/chromeos/accessibility/accessibility_util.cc b/chrome/browser/chromeos/accessibility/accessibility_util.cc |
index 2b3aee2d1b88564f317dc11cd93b1ee13cae6ccc..81759e6676f771a4e145310c1753052a9e70ab05 100644 |
--- a/chrome/browser/chromeos/accessibility/accessibility_util.cc |
+++ b/chrome/browser/chromeos/accessibility/accessibility_util.cc |
@@ -4,287 +4,25 @@ |
#include "chrome/browser/chromeos/accessibility/accessibility_util.h" |
-#include <queue> |
- |
-#include "ash/high_contrast/high_contrast_controller.h" |
-#include "ash/magnifier/magnification_controller.h" |
-#include "ash/magnifier/partial_magnification_controller.h" |
-#include "ash/shell.h" |
-#include "ash/shell_delegate.h" |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/logging.h" |
-#include "base/metrics/histogram.h" |
#include "base/prefs/pref_service.h" |
-#include "chrome/browser/accessibility/accessibility_extension_api.h" |
#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/chromeos/accessibility/magnification_manager.h" |
-#include "chrome/browser/extensions/component_loader.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/extensions/extension_system.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/profiles/profile_manager.h" |
-#include "chrome/browser/speech/tts_controller.h" |
#include "chrome/browser/ui/singleton_tabs.h" |
-#include "chrome/common/extensions/extension.h" |
-#include "chrome/common/extensions/extension_messages.h" |
-#include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" |
-#include "chrome/common/extensions/user_script.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
-#include "content/public/browser/browser_accessibility_state.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_ui.h" |
-#include "extensions/browser/file_reader.h" |
-#include "extensions/common/extension_resource.h" |
#include "googleurl/src/gurl.h" |
-#include "grit/browser_resources.h" |
-#include "grit/generated_resources.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-using content::RenderViewHost; |
+// TODO(yoshiki): move the following method to accessibility_manager.cc and |
+// remove this file. |
namespace chromeos { |
namespace accessibility { |
-// Helper class that directly loads an extension's content scripts into |
-// all of the frames corresponding to a given RenderViewHost. |
-class ContentScriptLoader { |
- public: |
- // Initialize the ContentScriptLoader with the ID of the extension |
- // and the RenderViewHost where the scripts should be loaded. |
- ContentScriptLoader(const std::string& extension_id, |
- int render_process_id, |
- int render_view_id) |
- : extension_id_(extension_id), |
- render_process_id_(render_process_id), |
- render_view_id_(render_view_id) {} |
- |
- // Call this once with the ExtensionResource corresponding to each |
- // content script to be loaded. |
- void AppendScript(extensions::ExtensionResource resource) { |
- resources_.push(resource); |
- } |
- |
- // Fianlly, call this method once to fetch all of the resources and |
- // load them. This method will delete this object when done. |
- void Run() { |
- if (resources_.empty()) { |
- delete this; |
- return; |
- } |
- |
- extensions::ExtensionResource resource = resources_.front(); |
- resources_.pop(); |
- scoped_refptr<FileReader> reader(new FileReader(resource, base::Bind( |
- &ContentScriptLoader::OnFileLoaded, base::Unretained(this)))); |
- reader->Start(); |
- } |
- |
- private: |
- void OnFileLoaded(bool success, const std::string& data) { |
- if (success) { |
- ExtensionMsg_ExecuteCode_Params params; |
- params.request_id = 0; |
- params.extension_id = extension_id_; |
- params.is_javascript = true; |
- params.code = data; |
- params.run_at = extensions::UserScript::DOCUMENT_IDLE; |
- params.all_frames = true; |
- params.in_main_world = false; |
- |
- RenderViewHost* render_view_host = |
- RenderViewHost::FromID(render_process_id_, render_view_id_); |
- if (render_view_host) { |
- render_view_host->Send(new ExtensionMsg_ExecuteCode( |
- render_view_host->GetRoutingID(), params)); |
- } |
- } |
- Run(); |
- } |
- |
- std::string extension_id_; |
- int render_process_id_; |
- int render_view_id_; |
- std::queue<extensions::ExtensionResource> resources_; |
-}; |
- |
-void UpdateChromeOSAccessibilityHistograms() { |
- UMA_HISTOGRAM_BOOLEAN("Accessibility.CrosSpokenFeedback", |
- IsSpokenFeedbackEnabled()); |
- UMA_HISTOGRAM_BOOLEAN("Accessibility.CrosHighContrast", |
- IsHighContrastEnabled()); |
- UMA_HISTOGRAM_BOOLEAN("Accessibility.CrosVirtualKeyboard", |
- IsVirtualKeyboardEnabled()); |
- if (MagnificationManager::Get()) { |
- uint32 type = MagnificationManager::Get()->IsMagnifierEnabled() ? |
- MagnificationManager::Get()->GetMagnifierType() : 0; |
- // '0' means magnifier is disabled. |
- UMA_HISTOGRAM_ENUMERATION("Accessibility.CrosScreenMagnifier", |
- type, |
- ash::kMaxMagnifierType + 1); |
- } |
-} |
- |
-void Initialize() { |
- content::BrowserAccessibilityState::GetInstance()->AddHistogramCallback( |
- base::Bind(&UpdateChromeOSAccessibilityHistograms)); |
-} |
- |
-void EnableSpokenFeedback(bool enabled, |
- content::WebUI* login_web_ui, |
- ash::AccessibilityNotificationVisibility notify) { |
- bool spoken_feedback_enabled = g_browser_process && |
- g_browser_process->local_state()->GetBoolean( |
- prefs::kSpokenFeedbackEnabled); |
- if (spoken_feedback_enabled == enabled) { |
- DLOG(INFO) << "Spoken feedback is already " << |
- (enabled ? "enabled" : "disabled") << ". Going to do nothing."; |
- return; |
- } |
- |
- g_browser_process->local_state()->SetBoolean( |
- prefs::kSpokenFeedbackEnabled, enabled); |
- g_browser_process->local_state()->CommitPendingWrite(); |
- ExtensionAccessibilityEventRouter::GetInstance()-> |
- SetAccessibilityEnabled(enabled); |
- |
- AccessibilityStatusEventDetails details(enabled, notify); |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK, |
- content::NotificationService::AllSources(), |
- content::Details<AccessibilityStatusEventDetails>(&details)); |
- |
- Speak(l10n_util::GetStringUTF8( |
- enabled ? IDS_CHROMEOS_ACC_SPOKEN_FEEDBACK_ENABLED : |
- IDS_CHROMEOS_ACC_SPOKEN_FEEDBACK_DISABLED).c_str()); |
- |
- // Load/Unload ChromeVox |
- Profile* profile = login_web_ui ? |
- Profile::FromWebUI(login_web_ui) : |
- ProfileManager::GetDefaultProfile(); |
- ExtensionService* extension_service = |
- extensions::ExtensionSystem::Get(profile)->extension_service(); |
- base::FilePath path = base::FilePath(extension_misc::kChromeVoxExtensionPath); |
- if (enabled) { // Load ChromeVox |
- std::string extension_id = |
- extension_service->component_loader()->Add(IDR_CHROMEVOX_MANIFEST, |
- path); |
- const extensions::Extension* extension = |
- extension_service->extensions()->GetByID(extension_id); |
- |
- if (login_web_ui) { |
- RenderViewHost* render_view_host = |
- login_web_ui->GetWebContents()->GetRenderViewHost(); |
- // Set a flag to tell ChromeVox that it's just been enabled, |
- // so that it won't interrupt our speech feedback enabled message. |
- ExtensionMsg_ExecuteCode_Params params; |
- params.request_id = 0; |
- params.extension_id = extension->id(); |
- params.is_javascript = true; |
- params.code = "window.INJECTED_AFTER_LOAD = true;"; |
- params.run_at = extensions::UserScript::DOCUMENT_IDLE; |
- params.all_frames = true; |
- params.in_main_world = false; |
- render_view_host->Send(new ExtensionMsg_ExecuteCode( |
- render_view_host->GetRoutingID(), params)); |
- |
- // Inject ChromeVox' content scripts. |
- ContentScriptLoader* loader = new ContentScriptLoader( |
- extension->id(), render_view_host->GetProcess()->GetID(), |
- render_view_host->GetRoutingID()); |
- |
- const extensions::UserScriptList& content_scripts = |
- extensions::ContentScriptsInfo::GetContentScripts(extension); |
- for (size_t i = 0; i < content_scripts.size(); i++) { |
- const extensions::UserScript& script = content_scripts[i]; |
- for (size_t j = 0; j < script.js_scripts().size(); ++j) { |
- const extensions::UserScript::File &file = script.js_scripts()[j]; |
- extensions::ExtensionResource resource = extension->GetResource( |
- file.relative_path()); |
- loader->AppendScript(resource); |
- } |
- } |
- loader->Run(); // It cleans itself up when done. |
- } |
- |
- DLOG(INFO) << "ChromeVox was Loaded."; |
- } else { // Unload ChromeVox |
- extension_service->component_loader()->Remove(path); |
- DLOG(INFO) << "ChromeVox was Unloaded."; |
- } |
-} |
- |
-void EnableHighContrast(bool enabled) { |
- PrefService* pref_service = g_browser_process->local_state(); |
- pref_service->SetBoolean(prefs::kHighContrastEnabled, enabled); |
- pref_service->CommitPendingWrite(); |
- |
- AccessibilityStatusEventDetails detail(enabled, ash::A11Y_NOTIFICATION_NONE); |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE, |
- content::NotificationService::AllSources(), |
- content::Details<AccessibilityStatusEventDetails>(&detail)); |
- |
-#if defined(USE_ASH) |
- ash::Shell::GetInstance()->high_contrast_controller()->SetEnabled(enabled); |
-#endif |
-} |
- |
void EnableVirtualKeyboard(bool enabled) { |
PrefService* pref_service = g_browser_process->local_state(); |
pref_service->SetBoolean(prefs::kVirtualKeyboardEnabled, enabled); |
pref_service->CommitPendingWrite(); |
} |
-void ToggleSpokenFeedback(content::WebUI* login_web_ui, |
- ash::AccessibilityNotificationVisibility notify) { |
- bool spoken_feedback_enabled = g_browser_process && |
- g_browser_process->local_state()->GetBoolean( |
- prefs::kSpokenFeedbackEnabled); |
- spoken_feedback_enabled = !spoken_feedback_enabled; |
- EnableSpokenFeedback(spoken_feedback_enabled, login_web_ui, notify); |
-}; |
- |
-void Speak(const std::string& text) { |
- UtteranceContinuousParameters params; |
- |
- Profile* profile = ProfileManager::GetDefaultProfile(); |
- Utterance* utterance = new Utterance(profile); |
- utterance->set_text(text); |
- utterance->set_lang(g_browser_process->GetApplicationLocale()); |
- utterance->set_continuous_parameters(params); |
- utterance->set_can_enqueue(false); |
- utterance->set_options(new DictionaryValue()); |
- |
- TtsController* controller = TtsController::GetInstance(); |
- controller->SpeakOrEnqueue(utterance); |
-} |
- |
-bool IsSpokenFeedbackEnabled() { |
- if (!g_browser_process) { |
- return false; |
- } |
- PrefService* prefs = g_browser_process->local_state(); |
- bool spoken_feedback_enabled = prefs && |
- prefs->GetBoolean(prefs::kSpokenFeedbackEnabled); |
- return spoken_feedback_enabled; |
-} |
- |
-bool IsHighContrastEnabled() { |
- if (!g_browser_process) { |
- return false; |
- } |
- PrefService* prefs = g_browser_process->local_state(); |
- bool high_contrast_enabled = prefs && |
- prefs->GetBoolean(prefs::kHighContrastEnabled); |
- return high_contrast_enabled; |
-} |
- |
bool IsVirtualKeyboardEnabled() { |
if (!g_browser_process) { |
return false; |
@@ -295,11 +33,6 @@ bool IsVirtualKeyboardEnabled() { |
return virtual_keyboard_enabled; |
} |
-void MaybeSpeak(const std::string& utterance) { |
- if (IsSpokenFeedbackEnabled()) |
- Speak(utterance); |
-} |
- |
void ShowAccessibilityHelp(Browser* browser) { |
chrome::ShowSingletonTab(browser, GURL(chrome::kChromeAccessibilityHelpURL)); |
} |