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

Unified Diff: chrome/browser/chromeos/accessibility/accessibility_util.cc

Issue 14200048: Introduce AcccessibilityManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 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 side-by-side diff with in-line comments
Download patch
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));
}

Powered by Google App Engine
This is Rietveld 408576698