| OLD | NEW |
| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 #include "chrome/browser/extensions/tab_helper.h" | 47 #include "chrome/browser/extensions/tab_helper.h" |
| 48 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 48 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
| 49 #include "chrome/browser/profiles/profile.h" | 49 #include "chrome/browser/profiles/profile.h" |
| 50 #include "chrome/browser/profiles/profile_manager.h" | 50 #include "chrome/browser/profiles/profile_manager.h" |
| 51 #include "chrome/common/chrome_paths.h" | 51 #include "chrome/common/chrome_paths.h" |
| 52 #include "chrome/common/extensions/api/accessibility_private.h" | 52 #include "chrome/common/extensions/api/accessibility_private.h" |
| 53 #include "chrome/common/extensions/extension_constants.h" | 53 #include "chrome/common/extensions/extension_constants.h" |
| 54 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" | 54 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" |
| 55 #include "chrome/common/pref_names.h" | 55 #include "chrome/common/pref_names.h" |
| 56 #include "chrome/grit/browser_resources.h" | 56 #include "chrome/grit/browser_resources.h" |
| 57 #include "chromeos/audio/audio_a11y_controller.h" |
| 57 #include "chromeos/audio/chromeos_sounds.h" | 58 #include "chromeos/audio/chromeos_sounds.h" |
| 58 #include "chromeos/login/login_state.h" | 59 #include "chromeos/login/login_state.h" |
| 59 #include "components/prefs/pref_member.h" | 60 #include "components/prefs/pref_member.h" |
| 60 #include "components/prefs/pref_service.h" | 61 #include "components/prefs/pref_service.h" |
| 61 #include "components/user_manager/user_manager.h" | 62 #include "components/user_manager/user_manager.h" |
| 62 #include "content/public/browser/browser_accessibility_state.h" | 63 #include "content/public/browser/browser_accessibility_state.h" |
| 63 #include "content/public/browser/browser_thread.h" | 64 #include "content/public/browser/browser_thread.h" |
| 64 #include "content/public/browser/notification_details.h" | 65 #include "content/public/browser/notification_details.h" |
| 65 #include "content/public/browser/notification_service.h" | 66 #include "content/public/browser/notification_service.h" |
| 66 #include "content/public/browser/notification_source.h" | 67 #include "content/public/browser/notification_source.h" |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 : profile_(NULL), | 395 : profile_(NULL), |
| 395 chrome_vox_loaded_on_lock_screen_(false), | 396 chrome_vox_loaded_on_lock_screen_(false), |
| 396 chrome_vox_loaded_on_user_screen_(false), | 397 chrome_vox_loaded_on_user_screen_(false), |
| 397 large_cursor_pref_handler_(prefs::kAccessibilityLargeCursorEnabled), | 398 large_cursor_pref_handler_(prefs::kAccessibilityLargeCursorEnabled), |
| 398 spoken_feedback_pref_handler_(prefs::kAccessibilitySpokenFeedbackEnabled), | 399 spoken_feedback_pref_handler_(prefs::kAccessibilitySpokenFeedbackEnabled), |
| 399 high_contrast_pref_handler_(prefs::kAccessibilityHighContrastEnabled), | 400 high_contrast_pref_handler_(prefs::kAccessibilityHighContrastEnabled), |
| 400 autoclick_pref_handler_(prefs::kAccessibilityAutoclickEnabled), | 401 autoclick_pref_handler_(prefs::kAccessibilityAutoclickEnabled), |
| 401 autoclick_delay_pref_handler_(prefs::kAccessibilityAutoclickDelayMs), | 402 autoclick_delay_pref_handler_(prefs::kAccessibilityAutoclickDelayMs), |
| 402 virtual_keyboard_pref_handler_( | 403 virtual_keyboard_pref_handler_( |
| 403 prefs::kAccessibilityVirtualKeyboardEnabled), | 404 prefs::kAccessibilityVirtualKeyboardEnabled), |
| 405 mono_audio_pref_handler_( |
| 406 prefs::kAccessibilityMonoAudioEnabled), |
| 404 caret_highlight_pref_handler_(prefs::kAccessibilityCaretHighlightEnabled), | 407 caret_highlight_pref_handler_(prefs::kAccessibilityCaretHighlightEnabled), |
| 405 cursor_highlight_pref_handler_( | 408 cursor_highlight_pref_handler_( |
| 406 prefs::kAccessibilityCursorHighlightEnabled), | 409 prefs::kAccessibilityCursorHighlightEnabled), |
| 407 focus_highlight_pref_handler_(prefs::kAccessibilityFocusHighlightEnabled), | 410 focus_highlight_pref_handler_(prefs::kAccessibilityFocusHighlightEnabled), |
| 408 select_to_speak_pref_handler_(prefs::kAccessibilitySelectToSpeakEnabled), | 411 select_to_speak_pref_handler_(prefs::kAccessibilitySelectToSpeakEnabled), |
| 409 switch_access_pref_handler_(prefs::kAccessibilitySwitchAccessEnabled), | 412 switch_access_pref_handler_(prefs::kAccessibilitySwitchAccessEnabled), |
| 410 large_cursor_enabled_(false), | 413 large_cursor_enabled_(false), |
| 411 sticky_keys_enabled_(false), | 414 sticky_keys_enabled_(false), |
| 412 spoken_feedback_enabled_(false), | 415 spoken_feedback_enabled_(false), |
| 413 high_contrast_enabled_(false), | 416 high_contrast_enabled_(false), |
| 414 autoclick_enabled_(false), | 417 autoclick_enabled_(false), |
| 415 autoclick_delay_ms_(ash::AutoclickController::kDefaultAutoclickDelayMs), | 418 autoclick_delay_ms_(ash::AutoclickController::kDefaultAutoclickDelayMs), |
| 416 virtual_keyboard_enabled_(false), | 419 virtual_keyboard_enabled_(false), |
| 420 mono_audio_enabled_(false), |
| 417 caret_highlight_enabled_(false), | 421 caret_highlight_enabled_(false), |
| 418 cursor_highlight_enabled_(false), | 422 cursor_highlight_enabled_(false), |
| 419 focus_highlight_enabled_(false), | 423 focus_highlight_enabled_(false), |
| 420 select_to_speak_enabled_(false), | 424 select_to_speak_enabled_(false), |
| 421 switch_access_enabled_(false), | 425 switch_access_enabled_(false), |
| 422 spoken_feedback_notification_(ui::A11Y_NOTIFICATION_NONE), | 426 spoken_feedback_notification_(ui::A11Y_NOTIFICATION_NONE), |
| 423 should_speak_chrome_vox_announcements_on_user_screen_(true), | 427 should_speak_chrome_vox_announcements_on_user_screen_(true), |
| 424 system_sounds_enabled_(false), | 428 system_sounds_enabled_(false), |
| 425 braille_display_connected_(false), | 429 braille_display_connected_(false), |
| 426 scoped_braille_observer_(this), | 430 scoped_braille_observer_(this), |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 485 it != profiles.end(); | 489 it != profiles.end(); |
| 486 ++it) { | 490 ++it) { |
| 487 PrefService* pref_service = (*it)->GetPrefs(); | 491 PrefService* pref_service = (*it)->GetPrefs(); |
| 488 if (pref_service->GetBoolean(prefs::kAccessibilityStickyKeysEnabled) || | 492 if (pref_service->GetBoolean(prefs::kAccessibilityStickyKeysEnabled) || |
| 489 pref_service->GetBoolean(prefs::kAccessibilityLargeCursorEnabled) || | 493 pref_service->GetBoolean(prefs::kAccessibilityLargeCursorEnabled) || |
| 490 pref_service->GetBoolean(prefs::kAccessibilitySpokenFeedbackEnabled) || | 494 pref_service->GetBoolean(prefs::kAccessibilitySpokenFeedbackEnabled) || |
| 491 pref_service->GetBoolean(prefs::kAccessibilityHighContrastEnabled) || | 495 pref_service->GetBoolean(prefs::kAccessibilityHighContrastEnabled) || |
| 492 pref_service->GetBoolean(prefs::kAccessibilityAutoclickEnabled) || | 496 pref_service->GetBoolean(prefs::kAccessibilityAutoclickEnabled) || |
| 493 pref_service->GetBoolean(prefs::kShouldAlwaysShowAccessibilityMenu) || | 497 pref_service->GetBoolean(prefs::kShouldAlwaysShowAccessibilityMenu) || |
| 494 pref_service->GetBoolean(prefs::kAccessibilityScreenMagnifierEnabled) || | 498 pref_service->GetBoolean(prefs::kAccessibilityScreenMagnifierEnabled) || |
| 495 pref_service->GetBoolean(prefs::kAccessibilityVirtualKeyboardEnabled)) | 499 pref_service->GetBoolean(prefs::kAccessibilityVirtualKeyboardEnabled) || |
| 500 pref_service->GetBoolean(prefs::kAccessibilityMonoAudioEnabled)) |
| 496 return true; | 501 return true; |
| 497 } | 502 } |
| 498 return false; | 503 return false; |
| 499 } | 504 } |
| 500 | 505 |
| 501 bool AccessibilityManager::ShouldEnableCursorCompositing() { | 506 bool AccessibilityManager::ShouldEnableCursorCompositing() { |
| 502 if (!profile_) | 507 if (!profile_) |
| 503 return false; | 508 return false; |
| 504 PrefService* pref_service = profile_->GetPrefs(); | 509 PrefService* pref_service = profile_->GetPrefs(); |
| 505 // Enable cursor compositing when one or more of the listed accessibility | 510 // Enable cursor compositing when one or more of the listed accessibility |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 else | 877 else |
| 873 ash::Shell::GetInstance()->DeactivateKeyboard(); | 878 ash::Shell::GetInstance()->DeactivateKeyboard(); |
| 874 | 879 |
| 875 AccessibilityStatusEventDetails details( | 880 AccessibilityStatusEventDetails details( |
| 876 ACCESSIBILITY_TOGGLE_VIRTUAL_KEYBOARD, | 881 ACCESSIBILITY_TOGGLE_VIRTUAL_KEYBOARD, |
| 877 enabled, | 882 enabled, |
| 878 ui::A11Y_NOTIFICATION_NONE); | 883 ui::A11Y_NOTIFICATION_NONE); |
| 879 NotifyAccessibilityStatusChanged(details); | 884 NotifyAccessibilityStatusChanged(details); |
| 880 } | 885 } |
| 881 | 886 |
| 887 void AccessibilityManager::EnableMonoAudio(bool enabled) { |
| 888 if (!profile_) |
| 889 return; |
| 890 |
| 891 PrefService* pref_service = profile_->GetPrefs(); |
| 892 pref_service->SetBoolean(prefs::kAccessibilityMonoAudioEnabled, |
| 893 enabled); |
| 894 pref_service->CommitPendingWrite(); |
| 895 } |
| 896 |
| 897 bool AccessibilityManager::IsMonoAudioEnabled() { |
| 898 return mono_audio_enabled_; |
| 899 } |
| 900 |
| 901 void AccessibilityManager::UpdateMonoAudioFromPref() { |
| 902 if (!profile_) |
| 903 return; |
| 904 |
| 905 const bool enabled = profile_->GetPrefs()->GetBoolean( |
| 906 prefs::kAccessibilityMonoAudioEnabled); |
| 907 |
| 908 if (mono_audio_enabled_ == enabled) |
| 909 return; |
| 910 mono_audio_enabled_ = enabled; |
| 911 |
| 912 AccessibilityStatusEventDetails details( |
| 913 ACCESSIBILITY_TOGGLE_MONO_AUDIO, |
| 914 enabled, |
| 915 ui::A11Y_NOTIFICATION_NONE); |
| 916 NotifyAccessibilityStatusChanged(details); |
| 917 |
| 918 ash::Shell::GetInstance()->audio_a11y_controller()->SetOutputMono(enabled); |
| 919 } |
| 920 |
| 882 void AccessibilityManager::SetCaretHighlightEnabled(bool enabled) { | 921 void AccessibilityManager::SetCaretHighlightEnabled(bool enabled) { |
| 883 if (!profile_) | 922 if (!profile_) |
| 884 return; | 923 return; |
| 885 | 924 |
| 886 PrefService* pref_service = profile_->GetPrefs(); | 925 PrefService* pref_service = profile_->GetPrefs(); |
| 887 pref_service->SetBoolean(prefs::kAccessibilityCaretHighlightEnabled, enabled); | 926 pref_service->SetBoolean(prefs::kAccessibilityCaretHighlightEnabled, enabled); |
| 888 pref_service->CommitPendingWrite(); | 927 pref_service->CommitPendingWrite(); |
| 889 } | 928 } |
| 890 | 929 |
| 891 bool AccessibilityManager::IsCaretHighlightEnabled() const { | 930 bool AccessibilityManager::IsCaretHighlightEnabled() const { |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1125 base::Unretained(this))); | 1164 base::Unretained(this))); |
| 1126 pref_change_registrar_->Add( | 1165 pref_change_registrar_->Add( |
| 1127 prefs::kAccessibilityAutoclickDelayMs, | 1166 prefs::kAccessibilityAutoclickDelayMs, |
| 1128 base::Bind(&AccessibilityManager::UpdateAutoclickDelayFromPref, | 1167 base::Bind(&AccessibilityManager::UpdateAutoclickDelayFromPref, |
| 1129 base::Unretained(this))); | 1168 base::Unretained(this))); |
| 1130 pref_change_registrar_->Add( | 1169 pref_change_registrar_->Add( |
| 1131 prefs::kAccessibilityVirtualKeyboardEnabled, | 1170 prefs::kAccessibilityVirtualKeyboardEnabled, |
| 1132 base::Bind(&AccessibilityManager::UpdateVirtualKeyboardFromPref, | 1171 base::Bind(&AccessibilityManager::UpdateVirtualKeyboardFromPref, |
| 1133 base::Unretained(this))); | 1172 base::Unretained(this))); |
| 1134 pref_change_registrar_->Add( | 1173 pref_change_registrar_->Add( |
| 1174 prefs::kAccessibilityMonoAudioEnabled, |
| 1175 base::Bind(&AccessibilityManager::UpdateMonoAudioFromPref, |
| 1176 base::Unretained(this))); |
| 1177 pref_change_registrar_->Add( |
| 1135 prefs::kAccessibilityCaretHighlightEnabled, | 1178 prefs::kAccessibilityCaretHighlightEnabled, |
| 1136 base::Bind(&AccessibilityManager::UpdateCaretHighlightFromPref, | 1179 base::Bind(&AccessibilityManager::UpdateCaretHighlightFromPref, |
| 1137 base::Unretained(this))); | 1180 base::Unretained(this))); |
| 1138 pref_change_registrar_->Add( | 1181 pref_change_registrar_->Add( |
| 1139 prefs::kAccessibilityCursorHighlightEnabled, | 1182 prefs::kAccessibilityCursorHighlightEnabled, |
| 1140 base::Bind(&AccessibilityManager::UpdateCursorHighlightFromPref, | 1183 base::Bind(&AccessibilityManager::UpdateCursorHighlightFromPref, |
| 1141 base::Unretained(this))); | 1184 base::Unretained(this))); |
| 1142 pref_change_registrar_->Add( | 1185 pref_change_registrar_->Add( |
| 1143 prefs::kAccessibilityFocusHighlightEnabled, | 1186 prefs::kAccessibilityFocusHighlightEnabled, |
| 1144 base::Bind(&AccessibilityManager::UpdateFocusHighlightFromPref, | 1187 base::Bind(&AccessibilityManager::UpdateFocusHighlightFromPref, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1164 &AccessibilityManager::UpdateChromeOSAccessibilityHistograms, | 1207 &AccessibilityManager::UpdateChromeOSAccessibilityHistograms, |
| 1165 base::Unretained(this))); | 1208 base::Unretained(this))); |
| 1166 } | 1209 } |
| 1167 | 1210 |
| 1168 large_cursor_pref_handler_.HandleProfileChanged(profile_, profile); | 1211 large_cursor_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1169 spoken_feedback_pref_handler_.HandleProfileChanged(profile_, profile); | 1212 spoken_feedback_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1170 high_contrast_pref_handler_.HandleProfileChanged(profile_, profile); | 1213 high_contrast_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1171 autoclick_pref_handler_.HandleProfileChanged(profile_, profile); | 1214 autoclick_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1172 autoclick_delay_pref_handler_.HandleProfileChanged(profile_, profile); | 1215 autoclick_delay_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1173 virtual_keyboard_pref_handler_.HandleProfileChanged(profile_, profile); | 1216 virtual_keyboard_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1217 mono_audio_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1174 caret_highlight_pref_handler_.HandleProfileChanged(profile_, profile); | 1218 caret_highlight_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1175 cursor_highlight_pref_handler_.HandleProfileChanged(profile_, profile); | 1219 cursor_highlight_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1176 focus_highlight_pref_handler_.HandleProfileChanged(profile_, profile); | 1220 focus_highlight_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1177 select_to_speak_pref_handler_.HandleProfileChanged(profile_, profile); | 1221 select_to_speak_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1178 switch_access_pref_handler_.HandleProfileChanged(profile_, profile); | 1222 switch_access_pref_handler_.HandleProfileChanged(profile_, profile); |
| 1179 | 1223 |
| 1180 bool had_profile = (profile_ != NULL); | 1224 bool had_profile = (profile_ != NULL); |
| 1181 profile_ = profile; | 1225 profile_ = profile; |
| 1182 | 1226 |
| 1183 if (!had_profile && profile) | 1227 if (!had_profile && profile) |
| 1184 CheckBrailleState(); | 1228 CheckBrailleState(); |
| 1185 else | 1229 else |
| 1186 UpdateBrailleImeState(); | 1230 UpdateBrailleImeState(); |
| 1187 UpdateLargeCursorFromPref(); | 1231 UpdateLargeCursorFromPref(); |
| 1188 UpdateStickyKeysFromPref(); | 1232 UpdateStickyKeysFromPref(); |
| 1189 UpdateSpokenFeedbackFromPref(); | 1233 UpdateSpokenFeedbackFromPref(); |
| 1190 UpdateHighContrastFromPref(); | 1234 UpdateHighContrastFromPref(); |
| 1191 UpdateAutoclickFromPref(); | 1235 UpdateAutoclickFromPref(); |
| 1192 UpdateAutoclickDelayFromPref(); | 1236 UpdateAutoclickDelayFromPref(); |
| 1193 UpdateVirtualKeyboardFromPref(); | 1237 UpdateVirtualKeyboardFromPref(); |
| 1238 UpdateMonoAudioFromPref(); |
| 1194 UpdateCaretHighlightFromPref(); | 1239 UpdateCaretHighlightFromPref(); |
| 1195 UpdateCursorHighlightFromPref(); | 1240 UpdateCursorHighlightFromPref(); |
| 1196 UpdateFocusHighlightFromPref(); | 1241 UpdateFocusHighlightFromPref(); |
| 1197 UpdateSelectToSpeakFromPref(); | 1242 UpdateSelectToSpeakFromPref(); |
| 1198 UpdateSwitchAccessFromPref(); | 1243 UpdateSwitchAccessFromPref(); |
| 1199 | 1244 |
| 1200 // Update the panel height in the shelf layout manager when the profile | 1245 // Update the panel height in the shelf layout manager when the profile |
| 1201 // changes, since the shelf layout manager doesn't exist in the login profile. | 1246 // changes, since the shelf layout manager doesn't exist in the login profile. |
| 1202 if (chromevox_panel_) | 1247 if (chromevox_panel_) |
| 1203 chromevox_panel_->UpdatePanelHeight(); | 1248 chromevox_panel_->UpdatePanelHeight(); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1458 content::BrowserContext* context) { | 1503 content::BrowserContext* context) { |
| 1459 keyboard_listener_extension_id_ = id; | 1504 keyboard_listener_extension_id_ = id; |
| 1460 | 1505 |
| 1461 extensions::ExtensionRegistry* registry = | 1506 extensions::ExtensionRegistry* registry = |
| 1462 extensions::ExtensionRegistry::Get(context); | 1507 extensions::ExtensionRegistry::Get(context); |
| 1463 if (!extension_registry_observer_.IsObserving(registry) && !id.empty()) | 1508 if (!extension_registry_observer_.IsObserving(registry) && !id.empty()) |
| 1464 extension_registry_observer_.Add(registry); | 1509 extension_registry_observer_.Add(registry); |
| 1465 } | 1510 } |
| 1466 | 1511 |
| 1467 } // namespace chromeos | 1512 } // namespace chromeos |
| OLD | NEW |