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

Side by Side Diff: chrome/browser/chromeos/accessibility/accessibility_manager.cc

Issue 102483006: Getting rid of GetDefaultProfile & fixing multi user issues with accessibility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "chrome/browser/chromeos/accessibility/accessibility_manager.h" 5 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
6 6
7 #include "ash/autoclick/autoclick_controller.h" 7 #include "ash/autoclick/autoclick_controller.h"
8 #include "ash/high_contrast/high_contrast_controller.h" 8 #include "ash/high_contrast/high_contrast_controller.h"
9 #include "ash/metrics/user_metrics_recorder.h" 9 #include "ash/metrics/user_metrics_recorder.h"
10 #include "ash/session_state_delegate.h"
10 #include "ash/shell.h" 11 #include "ash/shell.h"
11 #include "ash/system/tray/system_tray_notifier.h" 12 #include "ash/system/tray/system_tray_notifier.h"
12 #include "ash/wm/event_rewriter_event_filter.h" 13 #include "ash/wm/event_rewriter_event_filter.h"
13 #include "ash/wm/sticky_keys.h" 14 #include "ash/wm/sticky_keys.h"
14 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/singleton.h" 16 #include "base/memory/singleton.h"
16 #include "base/metrics/histogram.h" 17 #include "base/metrics/histogram.h"
17 #include "base/path_service.h" 18 #include "base/path_service.h"
18 #include "base/prefs/pref_member.h" 19 #include "base/prefs/pref_member.h"
19 #include "base/prefs/pref_service.h" 20 #include "base/prefs/pref_service.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 void UnloadChromeVoxExtension(Profile* profile) { 201 void UnloadChromeVoxExtension(Profile* profile) {
201 base::FilePath path = GetChromeVoxPath(); 202 base::FilePath path = GetChromeVoxPath();
202 ExtensionService* extension_service = 203 ExtensionService* extension_service =
203 extensions::ExtensionSystem::Get(profile)->extension_service(); 204 extensions::ExtensionSystem::Get(profile)->extension_service();
204 extension_service->component_loader()->Remove(path); 205 extension_service->component_loader()->Remove(path);
205 } 206 }
206 207
207 } // namespace 208 } // namespace
208 209
209 /////////////////////////////////////////////////////////////////////////////// 210 ///////////////////////////////////////////////////////////////////////////////
211 // ScopedSessionStateObserver
212
213 ScopedSessionStateObserver::ScopedSessionStateObserver(
214 ash::SessionStateObserver* observer) : observer_(observer) {
215 ash::Shell::GetInstance()->session_state_delegate()->
216 AddSessionStateObserver(observer_);
217 }
218
219 ScopedSessionStateObserver::~ScopedSessionStateObserver() {
220 ash::Shell::GetInstance()->session_state_delegate()->
221 RemoveSessionStateObserver(observer_);
222 }
223
224 ///////////////////////////////////////////////////////////////////////////////
210 // AccessibilityStatusEventDetails 225 // AccessibilityStatusEventDetails
211 226
212 AccessibilityStatusEventDetails::AccessibilityStatusEventDetails( 227 AccessibilityStatusEventDetails::AccessibilityStatusEventDetails(
213 bool enabled, 228 bool enabled,
214 ash::AccessibilityNotificationVisibility notify) 229 ash::AccessibilityNotificationVisibility notify)
215 : enabled(enabled), 230 : enabled(enabled),
216 magnifier_type(ash::kDefaultMagnifierType), 231 magnifier_type(ash::kDefaultMagnifierType),
217 notify(notify) {} 232 notify(notify) {}
218 233
219 AccessibilityStatusEventDetails::AccessibilityStatusEventDetails( 234 AccessibilityStatusEventDetails::AccessibilityStatusEventDetails(
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 content::NotificationService::AllSources()); 330 content::NotificationService::AllSources());
316 notification_registrar_.Add(this, 331 notification_registrar_.Add(this,
317 chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED, 332 chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED,
318 content::NotificationService::AllSources()); 333 content::NotificationService::AllSources());
319 notification_registrar_.Add(this, 334 notification_registrar_.Add(this,
320 chrome::NOTIFICATION_EXTENSION_REMOVED, 335 chrome::NOTIFICATION_EXTENSION_REMOVED,
321 content::NotificationService::AllSources()); 336 content::NotificationService::AllSources());
322 notification_registrar_.Add(this, 337 notification_registrar_.Add(this,
323 chrome::NOTIFICATION_EXTENSION_UNLOADED, 338 chrome::NOTIFICATION_EXTENSION_UNLOADED,
324 content::NotificationService::AllSources()); 339 content::NotificationService::AllSources());
340
325 GetBrailleController()->AddObserver(this); 341 GetBrailleController()->AddObserver(this);
326 342
327 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 343 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
328 media::SoundsManager* manager = media::SoundsManager::Get(); 344 media::SoundsManager* manager = media::SoundsManager::Get();
329 manager->Initialize(SOUND_SHUTDOWN, 345 manager->Initialize(SOUND_SHUTDOWN,
330 bundle.GetRawDataResource(IDR_SOUND_SHUTDOWN_WAV)); 346 bundle.GetRawDataResource(IDR_SOUND_SHUTDOWN_WAV));
331 manager->Initialize( 347 manager->Initialize(
332 SOUND_SPOKEN_FEEDBACK_ENABLED, 348 SOUND_SPOKEN_FEEDBACK_ENABLED,
333 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_ENABLED_WAV)); 349 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_ENABLED_WAV));
334 manager->Initialize( 350 manager->Initialize(
335 SOUND_SPOKEN_FEEDBACK_DISABLED, 351 SOUND_SPOKEN_FEEDBACK_DISABLED,
336 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_DISABLED_WAV)); 352 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_DISABLED_WAV));
337 } 353 }
338 354
339 AccessibilityManager::~AccessibilityManager() { 355 AccessibilityManager::~AccessibilityManager() {
340 CHECK(this == g_accessibility_manager); 356 CHECK(this == g_accessibility_manager);
341 357
342 // Component extensions don't always notify us when they're unloaded. Ensure 358 // Component extensions don't always notify us when they're unloaded. Ensure
343 // we clean up ChromeVox observers here. 359 // we clean up ChromeVox observers here.
344 if (profile_) { 360 if (profile_) {
345 extensions::ExtensionSystem::Get(profile_)-> 361 extensions::ExtensionSystem::Get(profile_)->
346 event_router()->UnregisterObserver(this); 362 event_router()->UnregisterObserver(this);
347 } 363 }
348 } 364 }
349 365
366 bool AccessibilityManager::ShouldShowAccessibilityMenu() {
367 // If any of the loaded profiles has an accessibility feature turned on - or
368 // enforced to always show the menu - we return true to show the menu.
369 std::vector<Profile*> profiles =
370 g_browser_process->profile_manager()->GetLoadedProfiles();
371 for (std::vector<Profile*>::iterator it = profiles.begin();
372 it != profiles.end();
373 ++it) {
374 PrefService* pref_service = (*it)->GetPrefs();
375 if (pref_service->GetBoolean(prefs::kStickyKeysEnabled) ||
376 pref_service->GetBoolean(prefs::kLargeCursorEnabled) ||
377 pref_service->GetBoolean(prefs::kSpokenFeedbackEnabled) ||
378 pref_service->GetBoolean(prefs::kHighContrastEnabled) ||
379 pref_service->GetBoolean(prefs::kAutoclickEnabled) ||
380 pref_service->GetBoolean(prefs::kShouldAlwaysShowAccessibilityMenu) ||
381 pref_service->GetBoolean(prefs::kScreenMagnifierEnabled))
382 return true;
383 }
384 return false;
385 }
386
350 void AccessibilityManager::EnableLargeCursor(bool enabled) { 387 void AccessibilityManager::EnableLargeCursor(bool enabled) {
351 if (!profile_) 388 if (!profile_)
352 return; 389 return;
353 390
354 PrefService* pref_service = profile_->GetPrefs(); 391 PrefService* pref_service = profile_->GetPrefs();
355 pref_service->SetBoolean(prefs::kLargeCursorEnabled, enabled); 392 pref_service->SetBoolean(prefs::kLargeCursorEnabled, enabled);
356 pref_service->CommitPendingWrite(); 393 pref_service->CommitPendingWrite();
357 } 394 }
358 395
359 void AccessibilityManager::UpdateLargeCursorFromPref() { 396 void AccessibilityManager::UpdateLargeCursorFromPref() {
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 769
733 profile_ = profile; 770 profile_ = profile;
734 UpdateLargeCursorFromPref(); 771 UpdateLargeCursorFromPref();
735 UpdateStickyKeysFromPref(); 772 UpdateStickyKeysFromPref();
736 UpdateSpokenFeedbackFromPref(); 773 UpdateSpokenFeedbackFromPref();
737 UpdateHighContrastFromPref(); 774 UpdateHighContrastFromPref();
738 UpdateAutoclickFromPref(); 775 UpdateAutoclickFromPref();
739 UpdateAutoclickDelayFromPref(); 776 UpdateAutoclickDelayFromPref();
740 } 777 }
741 778
779 void AccessibilityManager::ActiveUserChanged(const std::string& user_id) {
780 SetProfile(ProfileManager::GetActiveUserProfile());
781 }
782
742 void AccessibilityManager::SetProfileForTest(Profile* profile) { 783 void AccessibilityManager::SetProfileForTest(Profile* profile) {
743 SetProfile(profile); 784 SetProfile(profile);
744 } 785 }
745 786
746 void AccessibilityManager::SetBrailleControllerForTest( 787 void AccessibilityManager::SetBrailleControllerForTest(
747 BrailleController* controller) { 788 BrailleController* controller) {
748 g_braille_controller_for_test = controller; 789 g_braille_controller_for_test = controller;
749 } 790 }
750 791
751 void AccessibilityManager::EnableSystemSounds(bool system_sounds_enabled) { 792 void AccessibilityManager::EnableSystemSounds(bool system_sounds_enabled) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 } 841 }
801 } 842 }
802 843
803 void AccessibilityManager::Observe( 844 void AccessibilityManager::Observe(
804 int type, 845 int type,
805 const content::NotificationSource& source, 846 const content::NotificationSource& source,
806 const content::NotificationDetails& details) { 847 const content::NotificationDetails& details) {
807 switch (type) { 848 switch (type) {
808 case chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE: { 849 case chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE: {
809 // Update |profile_| when entering the login screen. 850 // Update |profile_| when entering the login screen.
810 Profile* profile = ProfileManager::GetDefaultProfile(); 851 Profile* profile = ProfileManager::GetActiveUserProfile();
811 if (ProfileHelper::IsSigninProfile(profile)) 852 if (ProfileHelper::IsSigninProfile(profile))
812 SetProfile(profile); 853 SetProfile(profile);
813 break; 854 break;
814 } 855 }
815 case chrome::NOTIFICATION_SESSION_STARTED: 856 case chrome::NOTIFICATION_SESSION_STARTED:
816 // Update |profile_| when entering a session. 857 // Update |profile_| when entering a session.
817 SetProfile(ProfileManager::GetDefaultProfile()); 858 SetProfile(ProfileManager::GetActiveUserProfile());
818 859
819 // Ensure ChromeVox makes announcements at the start of new sessions. 860 // Ensure ChromeVox makes announcements at the start of new sessions.
820 should_speak_chrome_vox_announcements_on_user_screen_ = true; 861 should_speak_chrome_vox_announcements_on_user_screen_ = true;
862
863 // Add a session state observer to be able to monitor session changes.
864 if (!session_state_observer_.get() && ash::Shell::HasInstance())
865 session_state_observer_.reset(new ScopedSessionStateObserver(this));
821 break; 866 break;
822 case chrome::NOTIFICATION_PROFILE_DESTROYED: { 867 case chrome::NOTIFICATION_PROFILE_DESTROYED: {
823 // Update |profile_| when exiting a session or shutting down. 868 // Update |profile_| when exiting a session or shutting down.
824 Profile* profile = content::Source<Profile>(source).ptr(); 869 Profile* profile = content::Source<Profile>(source).ptr();
825 if (profile_ == profile) 870 if (profile_ == profile)
826 SetProfile(NULL); 871 SetProfile(NULL);
827 break; 872 break;
828 } 873 }
829 case chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED: { 874 case chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED: {
830 bool is_screen_locked = *content::Details<bool>(details).ptr(); 875 bool is_screen_locked = *content::Details<bool>(details).ptr();
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 event_router()->UnregisterObserver(this); 967 event_router()->UnregisterObserver(this);
923 } 968 }
924 } 969 }
925 970
926 void AccessibilityManager::PlaySound(int sound_key) const { 971 void AccessibilityManager::PlaySound(int sound_key) const {
927 if (system_sounds_enabled_) 972 if (system_sounds_enabled_)
928 media::SoundsManager::Get()->Play(sound_key); 973 media::SoundsManager::Get()->Play(sound_key);
929 } 974 }
930 975
931 } // namespace chromeos 976 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698