Index: chrome/browser/chromeos/system/ash_system_tray_delegate.cc |
diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc |
deleted file mode 100644 |
index 3fabe83ac38706cf6e4f5681a2118234beb536bf..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc |
+++ /dev/null |
@@ -1,1295 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/chromeos/system/ash_system_tray_delegate.h" |
- |
-#include <algorithm> |
-#include <set> |
-#include <string> |
-#include <vector> |
- |
-#include "ash/ash_switches.h" |
-#include "ash/desktop_background/desktop_background_controller.h" |
-#include "ash/metrics/user_metrics_recorder.h" |
-#include "ash/session_state_delegate.h" |
-#include "ash/session_state_observer.h" |
-#include "ash/shell.h" |
-#include "ash/shell_delegate.h" |
-#include "ash/shell_window_ids.h" |
-#include "ash/system/bluetooth/bluetooth_observer.h" |
-#include "ash/system/date/clock_observer.h" |
-#include "ash/system/drive/drive_observer.h" |
-#include "ash/system/ime/ime_observer.h" |
-#include "ash/system/logout_button/logout_button_observer.h" |
-#include "ash/system/tray/system_tray.h" |
-#include "ash/system/tray/system_tray_delegate.h" |
-#include "ash/system/tray/system_tray_notifier.h" |
-#include "ash/system/tray_accessibility.h" |
-#include "ash/system/tray_caps_lock.h" |
-#include "ash/system/user/login_status.h" |
-#include "ash/system/user/update_observer.h" |
-#include "ash/system/user/user_observer.h" |
-#include "ash/volume_control_delegate.h" |
-#include "ash/wm/lock_state_controller.h" |
-#include "base/bind_helpers.h" |
-#include "base/callback.h" |
-#include "base/command_line.h" |
-#include "base/logging.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/sys_info.h" |
-#include "base/time/time.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
-#include "chrome/browser/chromeos/accessibility/magnification_manager.h" |
-#include "chrome/browser/chromeos/bluetooth/bluetooth_pairing_dialog.h" |
-#include "chrome/browser/chromeos/charger_replace/charger_replacement_dialog.h" |
-#include "chrome/browser/chromeos/choose_mobile_network_dialog.h" |
-#include "chrome/browser/chromeos/drive/drive_integration_service.h" |
-#include "chrome/browser/chromeos/drive/job_list.h" |
-#include "chrome/browser/chromeos/enrollment_dialog_view.h" |
-#include "chrome/browser/chromeos/input_method/input_method_util.h" |
-#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" |
-#include "chrome/browser/chromeos/login/help_app_launcher.h" |
-#include "chrome/browser/chromeos/login/login_display_host.h" |
-#include "chrome/browser/chromeos/login/login_display_host_impl.h" |
-#include "chrome/browser/chromeos/login/login_wizard.h" |
-#include "chrome/browser/chromeos/login/startup_utils.h" |
-#include "chrome/browser/chromeos/login/supervised_user_manager.h" |
-#include "chrome/browser/chromeos/login/user.h" |
-#include "chrome/browser/chromeos/login/user_adding_screen.h" |
-#include "chrome/browser/chromeos/login/user_manager.h" |
-#include "chrome/browser/chromeos/options/network_config_view.h" |
-#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" |
-#include "chrome/browser/chromeos/settings/cros_settings.h" |
-#include "chrome/browser/chromeos/sim_dialog_delegate.h" |
-#include "chrome/browser/chromeos/system_key_event_listener.h" |
-#include "chrome/browser/drive/drive_service_interface.h" |
-#include "chrome/browser/feedback/tracing_manager.h" |
-#include "chrome/browser/google/google_util.h" |
-#include "chrome/browser/lifetime/application_lifetime.h" |
-#include "chrome/browser/policy/browser_policy_connector.h" |
-#include "chrome/browser/profiles/profile_manager.h" |
-#include "chrome/browser/ui/ash/volume_controller_chromeos.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_finder.h" |
-#include "chrome/browser/ui/chrome_pages.h" |
-#include "chrome/browser/ui/host_desktop.h" |
-#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" |
-#include "chrome/browser/ui/singleton_tabs.h" |
-#include "chrome/browser/ui/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/webui/chromeos/charger_replacement_handler.h" |
-#include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h" |
-#include "chrome/browser/upgrade_detector.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/url_constants.h" |
-#include "chromeos/chromeos_switches.h" |
-#include "chromeos/dbus/dbus_thread_manager.h" |
-#include "chromeos/dbus/session_manager_client.h" |
-#include "chromeos/ime/extension_ime_util.h" |
-#include "chromeos/ime/input_method_manager.h" |
-#include "chromeos/ime/xkeyboard.h" |
-#include "chromeos/login/login_state.h" |
-#include "components/policy/core/common/cloud/cloud_policy_store.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/user_metrics.h" |
-#include "content/public/browser/web_contents.h" |
-#include "device/bluetooth/bluetooth_adapter.h" |
-#include "device/bluetooth/bluetooth_adapter_factory.h" |
-#include "device/bluetooth/bluetooth_device.h" |
-#include "grit/ash_strings.h" |
-#include "grit/generated_resources.h" |
-#include "grit/locale_settings.h" |
-#include "net/base/escape.h" |
-#include "third_party/cros_system_api/dbus/service_constants.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/l10n/time_format.h" |
- |
-using drive::DriveIntegrationService; |
-using drive::DriveIntegrationServiceFactory; |
- |
-namespace chromeos { |
- |
-namespace { |
- |
-// The minimum session length limit that can be set. |
-const int kSessionLengthLimitMinMs = 30 * 1000; // 30 seconds. |
- |
-// The maximum session length limit that can be set. |
-const int kSessionLengthLimitMaxMs = 24 * 60 * 60 * 1000; // 24 hours. |
- |
-const char kDisplaySettingsSubPageName[] = "display"; |
-const char kDisplayOverscanSettingsSubPageName[] = "displayOverscan"; |
- |
-// The URL for the Google Drive settings page. |
-const char kDriveSettingsPageURL[] = "https://drive.google.com"; |
- |
-void ExtractIMEInfo(const input_method::InputMethodDescriptor& ime, |
- const input_method::InputMethodUtil& util, |
- ash::IMEInfo* info) { |
- info->id = ime.id(); |
- info->name = util.GetInputMethodLongName(ime); |
- info->medium_name = util.GetInputMethodMediumName(ime); |
- info->short_name = util.GetInputMethodShortName(ime); |
- info->third_party = extension_ime_util::IsExtensionIME(ime.id()); |
-} |
- |
-gfx::NativeWindow GetNativeWindowByStatus( |
- ash::user::LoginStatus login_status, |
- bool session_started) { |
- int container_id = |
- (!session_started || |
- login_status == ash::user::LOGGED_IN_NONE || |
- login_status == ash::user::LOGGED_IN_LOCKED) ? |
- ash::internal::kShellWindowId_LockSystemModalContainer : |
- ash::internal::kShellWindowId_SystemModalContainer; |
- return ash::Shell::GetContainer(ash::Shell::GetPrimaryRootWindow(), |
- container_id); |
-} |
- |
-// Converts drive::JobInfo to ash::DriveOperationStatus. |
-// If the job is not of type that ash tray is interested, returns false. |
-bool ConvertToDriveOperationStatus(const drive::JobInfo& info, |
- ash::DriveOperationStatus* status) { |
- if (info.job_type == drive::TYPE_DOWNLOAD_FILE) { |
- status->type = ash::DriveOperationStatus::OPERATION_DOWNLOAD; |
- } else if (info.job_type == drive::TYPE_UPLOAD_NEW_FILE || |
- info.job_type == drive::TYPE_UPLOAD_EXISTING_FILE) { |
- status->type = ash::DriveOperationStatus::OPERATION_UPLOAD; |
- } else { |
- return false; |
- } |
- |
- if (info.state == drive::STATE_NONE) |
- status->state = ash::DriveOperationStatus::OPERATION_NOT_STARTED; |
- else |
- status->state = ash::DriveOperationStatus::OPERATION_IN_PROGRESS; |
- |
- status->id = info.job_id; |
- status->file_path = info.file_path; |
- status->progress = info.num_total_bytes == 0 ? 0.0 : |
- static_cast<double>(info.num_completed_bytes) / |
- static_cast<double>(info.num_total_bytes); |
- return true; |
-} |
- |
-// Converts drive::JobInfo that has finished in |error| state |
-// to ash::DriveOperationStatus. |
-// If the job is not of type that ash tray is interested, returns false. |
-bool ConvertToFinishedDriveOperationStatus(const drive::JobInfo& info, |
- drive::FileError error, |
- ash::DriveOperationStatus* status) { |
- if (!ConvertToDriveOperationStatus(info, status)) |
- return false; |
- status->state = (error == drive::FILE_ERROR_OK) ? |
- ash::DriveOperationStatus::OPERATION_COMPLETED : |
- ash::DriveOperationStatus::OPERATION_FAILED; |
- return true; |
-} |
- |
-// Converts a list of drive::JobInfo to a list of ash::DriveOperationStatusList. |
-ash::DriveOperationStatusList ConvertToDriveStatusList( |
- const std::vector<drive::JobInfo>& list) { |
- ash::DriveOperationStatusList results; |
- for (size_t i = 0; i < list.size(); ++i) { |
- ash::DriveOperationStatus status; |
- if (ConvertToDriveOperationStatus(list[i], &status)) |
- results.push_back(status); |
- } |
- return results; |
-} |
- |
-void BluetoothPowerFailure() { |
- // TODO(sad): Show an error bubble? |
-} |
- |
-void BluetoothSetDiscoveringError() { |
- LOG(ERROR) << "BluetoothSetDiscovering failed."; |
-} |
- |
-void BluetoothDeviceConnectError( |
- device::BluetoothDevice::ConnectErrorCode error_code) { |
- // TODO(sad): Do something? |
-} |
- |
-// Shows the settings sub page in the last active browser. If there is no such |
-// browser, creates a new browser with the settings sub page. |
-void ShowSettingsSubPageForAppropriateBrowser( |
- const std::string& sub_page, |
- Profile* profile) { |
- chrome::ScopedTabbedBrowserDisplayer displayer(profile, |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- chrome::ShowSettingsSubPage(displayer.browser(), sub_page); |
-} |
- |
-void ShowNetworkSettingsPage(const std::string& service_path) { |
- std::string page = chrome::kInternetOptionsSubPage; |
- page += "?servicePath=" + net::EscapeUrlEncodedData(service_path, true); |
- content::RecordAction( |
- content::UserMetricsAction("OpenInternetOptionsDialog")); |
- ShowSettingsSubPageForAppropriateBrowser( |
- page, |
- ProfileManager::GetPrimaryUserProfile()); |
-} |
- |
-class SystemTrayDelegate : public ash::SystemTrayDelegate, |
- public SessionManagerClient::Observer, |
- public drive::JobListObserver, |
- public content::NotificationObserver, |
- public input_method::InputMethodManager::Observer, |
- public chromeos::LoginState::Observer, |
- public device::BluetoothAdapter::Observer, |
- public SystemKeyEventListener::CapsLockObserver, |
- public policy::CloudPolicyStore::Observer, |
- public ash::SessionStateObserver { |
- public: |
- SystemTrayDelegate() |
- : ui_weak_ptr_factory_( |
- new base::WeakPtrFactory<SystemTrayDelegate>(this)), |
- user_profile_(NULL), |
- clock_type_(base::GetHourClockType()), |
- search_key_mapped_to_(input_method::kSearchKey), |
- screen_locked_(false), |
- have_session_start_time_(false), |
- have_session_length_limit_(false), |
- volume_control_delegate_(new VolumeController()) { |
- // Register notifications on construction so that events such as |
- // PROFILE_CREATED do not get missed if they happen before Initialize(). |
- registrar_.reset(new content::NotificationRegistrar); |
- registrar_->Add(this, |
- chrome::NOTIFICATION_UPGRADE_RECOMMENDED, |
- content::NotificationService::AllSources()); |
- registrar_->Add(this, |
- chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
- content::NotificationService::AllSources()); |
- if (GetUserLoginStatus() == ash::user::LOGGED_IN_NONE) { |
- registrar_->Add(this, |
- chrome::NOTIFICATION_SESSION_STARTED, |
- content::NotificationService::AllSources()); |
- } |
- registrar_->Add(this, |
- chrome::NOTIFICATION_PROFILE_CREATED, |
- content::NotificationService::AllSources()); |
- registrar_->Add(this, |
- chrome::NOTIFICATION_PROFILE_DESTROYED, |
- content::NotificationService::AllSources()); |
- registrar_->Add( |
- this, |
- chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER, |
- content::NotificationService::AllSources()); |
- registrar_->Add( |
- this, |
- chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK, |
- content::NotificationService::AllSources()); |
- registrar_->Add( |
- this, |
- chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE, |
- content::NotificationService::AllSources()); |
- } |
- |
- virtual void Initialize() OVERRIDE { |
- DBusThreadManager::Get()->GetSessionManagerClient()->AddObserver(this); |
- |
- input_method::InputMethodManager::Get()->AddObserver(this); |
- UpdateClockType(); |
- |
- if (SystemKeyEventListener::GetInstance()) |
- SystemKeyEventListener::GetInstance()->AddCapsLockObserver(this); |
- |
- device::BluetoothAdapterFactory::GetAdapter( |
- base::Bind(&SystemTrayDelegate::InitializeOnAdapterReady, |
- ui_weak_ptr_factory_->GetWeakPtr())); |
- |
- ash::Shell::GetInstance()->session_state_delegate()-> |
- AddSessionStateObserver(this); |
- |
- if (LoginState::IsInitialized()) |
- LoginState::Get()->AddObserver(this); |
- } |
- |
- virtual void Shutdown() OVERRIDE { |
- } |
- |
- void InitializeOnAdapterReady( |
- scoped_refptr<device::BluetoothAdapter> adapter) { |
- bluetooth_adapter_ = adapter; |
- CHECK(bluetooth_adapter_.get()); |
- bluetooth_adapter_->AddObserver(this); |
- |
- local_state_registrar_.reset(new PrefChangeRegistrar); |
- local_state_registrar_->Init(g_browser_process->local_state()); |
- |
- UpdateSessionStartTime(); |
- UpdateSessionLengthLimit(); |
- |
- local_state_registrar_->Add( |
- prefs::kSessionStartTime, |
- base::Bind(&SystemTrayDelegate::UpdateSessionStartTime, |
- base::Unretained(this))); |
- local_state_registrar_->Add( |
- prefs::kSessionLengthLimit, |
- base::Bind(&SystemTrayDelegate::UpdateSessionLengthLimit, |
- base::Unretained(this))); |
- |
- policy::BrowserPolicyConnector* policy_connector = |
- g_browser_process->browser_policy_connector(); |
- policy::DeviceCloudPolicyManagerChromeOS* policy_manager = |
- policy_connector->GetDeviceCloudPolicyManager(); |
- if (policy_manager) |
- policy_manager->core()->store()->AddObserver(this); |
- UpdateEnterpriseDomain(); |
- } |
- |
- virtual ~SystemTrayDelegate() { |
- // Unregister PrefChangeRegistrars. |
- local_state_registrar_.reset(); |
- user_pref_registrar_.reset(); |
- |
- // Unregister content notifications befure destroying any components. |
- registrar_.reset(); |
- |
- DBusThreadManager::Get()->GetSessionManagerClient()->RemoveObserver(this); |
- input_method::InputMethodManager::Get()->RemoveObserver(this); |
- if (SystemKeyEventListener::GetInstance()) |
- SystemKeyEventListener::GetInstance()->RemoveCapsLockObserver(this); |
- bluetooth_adapter_->RemoveObserver(this); |
- ash::Shell::GetInstance()->session_state_delegate()-> |
- RemoveSessionStateObserver(this); |
- LoginState::Get()->RemoveObserver(this); |
- |
- // Stop observing Drive operations. |
- UnobserveDriveUpdates(); |
- |
- policy::DeviceCloudPolicyManagerChromeOS* policy_manager = |
- g_browser_process->browser_policy_connector()-> |
- GetDeviceCloudPolicyManager(); |
- if (policy_manager) |
- policy_manager->core()->store()->RemoveObserver(this); |
- } |
- |
- // Overridden from ash::SystemTrayDelegate: |
- virtual bool GetTrayVisibilityOnStartup() OVERRIDE { |
- // In case of OOBE / sign in screen tray will be shown later. |
- return LoginState::Get()->IsUserLoggedIn(); |
- } |
- |
- virtual ash::user::LoginStatus GetUserLoginStatus() const OVERRIDE { |
- // All non-logged in ChromeOS specific LOGGED_IN states map to the same |
- // Ash specific LOGGED_IN state. |
- if (!LoginState::Get()->IsUserLoggedIn()) |
- return ash::user::LOGGED_IN_NONE; |
- |
- if (screen_locked_) |
- return ash::user::LOGGED_IN_LOCKED; |
- |
- LoginState::LoggedInUserType user_type = |
- LoginState::Get()->GetLoggedInUserType(); |
- switch (user_type) { |
- case LoginState::LOGGED_IN_USER_NONE: |
- return ash::user::LOGGED_IN_NONE; |
- case LoginState::LOGGED_IN_USER_REGULAR: |
- return ash::user::LOGGED_IN_USER; |
- case LoginState::LOGGED_IN_USER_OWNER: |
- return ash::user::LOGGED_IN_OWNER; |
- case LoginState::LOGGED_IN_USER_GUEST: |
- return ash::user::LOGGED_IN_GUEST; |
- case LoginState::LOGGED_IN_USER_RETAIL_MODE: |
- return ash::user::LOGGED_IN_RETAIL_MODE; |
- case LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT: |
- return ash::user::LOGGED_IN_PUBLIC; |
- case LoginState::LOGGED_IN_USER_LOCALLY_MANAGED: |
- return ash::user::LOGGED_IN_LOCALLY_MANAGED; |
- case LoginState::LOGGED_IN_USER_KIOSK_APP: |
- return ash::user::LOGGED_IN_KIOSK_APP; |
- } |
- NOTREACHED(); |
- return ash::user::LOGGED_IN_NONE; |
- } |
- |
- virtual bool IsOobeCompleted() const OVERRIDE { |
- if (!base::SysInfo::IsRunningOnChromeOS() && |
- LoginState::Get()->IsUserLoggedIn()) |
- return true; |
- return StartupUtils::IsOobeCompleted(); |
- } |
- |
- virtual void ChangeProfilePicture() OVERRIDE { |
- content::RecordAction( |
- content::UserMetricsAction("OpenChangeProfilePictureDialog")); |
- ShowSettingsSubPageForAppropriateBrowser( |
- chrome::kChangeProfilePictureSubPage, |
- ProfileManager::GetActiveUserProfile()); |
- } |
- |
- virtual const std::string GetEnterpriseDomain() const OVERRIDE { |
- return enterprise_domain_; |
- } |
- |
- virtual const base::string16 GetEnterpriseMessage() const OVERRIDE { |
- if (GetEnterpriseDomain().empty()) |
- return base::string16(); |
- return l10n_util::GetStringFUTF16(IDS_DEVICE_OWNED_BY_NOTICE, |
- base::UTF8ToUTF16(GetEnterpriseDomain())); |
- } |
- |
- virtual const std::string GetLocallyManagedUserManager() const OVERRIDE { |
- if (GetUserLoginStatus() != ash::user::LOGGED_IN_LOCALLY_MANAGED) |
- return std::string(); |
- return UserManager::Get()->GetSupervisedUserManager()-> |
- GetManagerDisplayEmail( |
- chromeos::UserManager::Get()->GetActiveUser()->email()); |
- } |
- |
- virtual const base::string16 |
- GetLocallyManagedUserManagerName() const OVERRIDE { |
- if (GetUserLoginStatus() != ash::user::LOGGED_IN_LOCALLY_MANAGED) |
- return base::string16(); |
- return UserManager::Get()->GetSupervisedUserManager()-> |
- GetManagerDisplayName( |
- chromeos::UserManager::Get()->GetActiveUser()->email()); |
- } |
- |
- virtual const base::string16 GetLocallyManagedUserMessage() const OVERRIDE { |
- if (GetUserLoginStatus() != ash::user::LOGGED_IN_LOCALLY_MANAGED) |
- return base::string16(); |
- return l10n_util::GetStringFUTF16( |
- IDS_USER_IS_LOCALLY_MANAGED_BY_NOTICE, |
- base::UTF8ToUTF16(GetLocallyManagedUserManager())); |
- } |
- |
- virtual bool SystemShouldUpgrade() const OVERRIDE { |
- return UpgradeDetector::GetInstance()->notify_upgrade(); |
- } |
- |
- virtual base::HourClockType GetHourClockType() const OVERRIDE { |
- return clock_type_; |
- } |
- |
- virtual void ShowSettings() OVERRIDE { |
- chrome::ScopedTabbedBrowserDisplayer displayer( |
- ProfileManager::GetActiveUserProfile(), |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- chrome::ShowSettings(displayer.browser()); |
- } |
- |
- virtual bool ShouldShowSettings() OVERRIDE { |
- return UserManager::Get()->GetCurrentUserFlow()->ShouldShowSettings(); |
- } |
- |
- virtual void ShowDateSettings() OVERRIDE { |
- content::RecordAction(content::UserMetricsAction("ShowDateOptions")); |
- std::string sub_page = std::string(chrome::kSearchSubPage) + "#" + |
- l10n_util::GetStringUTF8(IDS_OPTIONS_SETTINGS_SECTION_TITLE_DATETIME); |
- // Everybody can change the time zone (even though it is a device setting). |
- ShowSettingsSubPageForAppropriateBrowser( |
- sub_page, |
- ProfileManager::GetActiveUserProfile()); |
- } |
- |
- virtual void ShowNetworkSettings(const std::string& service_path) OVERRIDE { |
- if (!LoginState::Get()->IsUserLoggedIn()) |
- return; |
- ShowNetworkSettingsPage(service_path); |
- } |
- |
- virtual void ShowBluetoothSettings() OVERRIDE { |
- // TODO(sad): Make this work. |
- } |
- |
- virtual void ShowDisplaySettings() OVERRIDE { |
- content::RecordAction(content::UserMetricsAction("ShowDisplayOptions")); |
- ShowSettingsSubPageForAppropriateBrowser( |
- kDisplaySettingsSubPageName, |
- ProfileManager::GetActiveUserProfile()); |
- } |
- |
- virtual void ShowChromeSlow() OVERRIDE { |
- chrome::ScopedTabbedBrowserDisplayer displayer( |
- ProfileManager::GetPrimaryUserProfile(), |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- chrome::ShowSlow(displayer.browser()); |
- } |
- |
- virtual bool ShouldShowDisplayNotification() OVERRIDE { |
- // Packaged app is not counted as 'last active', so if a browser opening the |
- // display settings is in background of a packaged app, it will return true. |
- // TODO(mukai): fix this. |
- Browser* active_browser = chrome::FindLastActiveWithHostDesktopType( |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- if (!active_browser) |
- return true; |
- |
- content::WebContents* active_contents = |
- active_browser->tab_strip_model()->GetActiveWebContents(); |
- if (!active_contents) |
- return true; |
- |
- GURL visible_url = active_contents->GetLastCommittedURL(); |
- std::string display_settings_url = |
- std::string(chrome::kChromeUISettingsURL) + kDisplaySettingsSubPageName; |
- std::string display_overscan_url = |
- std::string(chrome::kChromeUISettingsURL) + |
- kDisplayOverscanSettingsSubPageName; |
- return (visible_url.spec() != display_settings_url) && |
- (visible_url.spec() != display_overscan_url); |
- } |
- |
- virtual void ShowDriveSettings() OVERRIDE { |
- // TODO(tengs): Open the drive-specific settings page once we put it in. |
- // For now just show Google Drive main page. |
- chrome::ScopedTabbedBrowserDisplayer displayer( |
- ProfileManager::GetActiveUserProfile(), |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- chrome::ShowSingletonTabOverwritingNTP( |
- displayer.browser(), |
- chrome::GetSingletonTabNavigateParams(displayer.browser(), |
- GURL(kDriveSettingsPageURL))); |
- } |
- |
- virtual void ShowIMESettings() OVERRIDE { |
- content::RecordAction( |
- content::UserMetricsAction("OpenLanguageOptionsDialog")); |
- ShowSettingsSubPageForAppropriateBrowser( |
- chrome::kLanguageOptionsSubPage, |
- ProfileManager::GetActiveUserProfile()); |
- } |
- |
- virtual void ShowHelp() OVERRIDE { |
- chrome::ShowHelpForProfile(ProfileManager::GetActiveUserProfile(), |
- chrome::HOST_DESKTOP_TYPE_ASH, |
- chrome::HELP_SOURCE_MENU); |
- } |
- |
- virtual void ShowAccessibilityHelp() OVERRIDE { |
- chrome::ScopedTabbedBrowserDisplayer displayer( |
- ProfileManager::GetActiveUserProfile(), |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- accessibility::ShowAccessibilityHelp(displayer.browser()); |
- } |
- |
- virtual void ShowAccessibilitySettings() OVERRIDE { |
- content::RecordAction( |
- content::UserMetricsAction("ShowAccessibilitySettings")); |
- std::string sub_page = std::string(chrome::kSearchSubPage) + "#" + |
- l10n_util::GetStringUTF8( |
- IDS_OPTIONS_SETTINGS_SECTION_TITLE_ACCESSIBILITY); |
- ShowSettingsSubPageForAppropriateBrowser( |
- sub_page, |
- ProfileManager::GetActiveUserProfile()); |
- } |
- |
- virtual void ShowPublicAccountInfo() OVERRIDE { |
- chrome::ScopedTabbedBrowserDisplayer displayer( |
- ProfileManager::GetActiveUserProfile(), |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- chrome::ShowPolicy(displayer.browser()); |
- } |
- |
- virtual void ShowLocallyManagedUserInfo() OVERRIDE { |
- // TODO(antrim): find out what should we show in this case. |
- // http://crbug.com/229762 |
- } |
- |
- virtual void ShowEnterpriseInfo() OVERRIDE { |
- ash::user::LoginStatus status = GetUserLoginStatus(); |
- if (status == ash::user::LOGGED_IN_NONE || |
- status == ash::user::LOGGED_IN_LOCKED) { |
- scoped_refptr<chromeos::HelpAppLauncher> help_app( |
- new chromeos::HelpAppLauncher(GetNativeWindow())); |
- help_app->ShowHelpTopic(chromeos::HelpAppLauncher::HELP_ENTERPRISE); |
- } else { |
- GURL url(google_util::StringAppendGoogleLocaleParam( |
- chrome::kLearnMoreEnterpriseURL)); |
- chrome::ScopedTabbedBrowserDisplayer displayer( |
- ProfileManager::GetActiveUserProfile(), |
- chrome::HOST_DESKTOP_TYPE_ASH); |
- chrome::ShowSingletonTab(displayer.browser(), url); |
- } |
- } |
- |
- virtual void ShowUserLogin() OVERRIDE { |
- ash::Shell* shell = ash::Shell::GetInstance(); |
- if (!shell->delegate()->IsMultiProfilesEnabled()) |
- return; |
- |
- // Only regular users could add other users to current session. |
- if (UserManager::Get()->GetActiveUser()->GetType() != |
- User::USER_TYPE_REGULAR) { |
- return; |
- } |
- |
- if (static_cast<int>(UserManager::Get()->GetLoggedInUsers().size()) >= |
- shell->session_state_delegate()->GetMaximumNumberOfLoggedInUsers()) |
- return; |
- |
- // Launch sign in screen to add another user to current session. |
- if (UserManager::Get()->GetUsersAdmittedForMultiProfile().size()) |
- UserAddingScreen::Get()->Start(); |
- } |
- |
- virtual void ShowSpringChargerReplacementDialog() OVERRIDE { |
- if (!ChargerReplacementDialog::ShouldShowDialog()) |
- return; |
- |
- ChargerReplacementDialog* dialog = |
- new ChargerReplacementDialog(GetNativeWindow()); |
- dialog->Show(); |
- } |
- |
- virtual bool HasUserConfirmedSafeSpringCharger() OVERRIDE { |
- return ChargerReplacementHandler::GetChargerStatusPref() == |
- ChargerReplacementHandler::CONFIRM_SAFE_CHARGER; |
- } |
- |
- virtual void ShutDown() OVERRIDE { |
- ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown(); |
- } |
- |
- virtual void SignOut() OVERRIDE { |
- chrome::AttemptUserExit(); |
- } |
- |
- virtual void RequestLockScreen() OVERRIDE { |
- // TODO(antrim) : additional logging for crbug/173178 |
- LOG(WARNING) << "Requesting screen lock from AshSystemTrayDelegate"; |
- DBusThreadManager::Get()->GetSessionManagerClient()->RequestLockScreen(); |
- } |
- |
- virtual void RequestRestartForUpdate() OVERRIDE { |
- // We expect that UpdateEngine is in "Reboot for update" state now. |
- chrome::NotifyAndTerminate(true /* fast path */); |
- } |
- |
- virtual void GetAvailableBluetoothDevices( |
- ash::BluetoothDeviceList* list) OVERRIDE { |
- device::BluetoothAdapter::DeviceList devices = |
- bluetooth_adapter_->GetDevices(); |
- for (size_t i = 0; i < devices.size(); ++i) { |
- device::BluetoothDevice* device = devices[i]; |
- ash::BluetoothDeviceInfo info; |
- info.address = device->GetAddress(); |
- info.display_name = device->GetName(); |
- info.connected = device->IsConnected(); |
- info.connecting = device->IsConnecting(); |
- info.paired = device->IsPaired(); |
- list->push_back(info); |
- } |
- } |
- |
- virtual void BluetoothStartDiscovering() OVERRIDE { |
- bluetooth_adapter_->StartDiscovering( |
- base::Bind(&base::DoNothing), |
- base::Bind(&BluetoothSetDiscoveringError)); |
- } |
- |
- virtual void BluetoothStopDiscovering() OVERRIDE { |
- bluetooth_adapter_->StopDiscovering( |
- base::Bind(&base::DoNothing), |
- base::Bind(&BluetoothSetDiscoveringError)); |
- } |
- |
- virtual void ConnectToBluetoothDevice(const std::string& address) OVERRIDE { |
- device::BluetoothDevice* device = bluetooth_adapter_->GetDevice(address); |
- if (!device || device->IsConnecting() || |
- (device->IsConnected() && device->IsPaired())) { |
- return; |
- } |
- if (device->IsPaired() && !device->IsConnectable()) |
- return; |
- if (device->IsPaired() || !device->IsPairable()) { |
- ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction( |
- ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_KNOWN_DEVICE); |
- device->Connect( |
- NULL, |
- base::Bind(&base::DoNothing), |
- base::Bind(&BluetoothDeviceConnectError)); |
- } else { // Show paring dialog for the unpaired device. |
- ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction( |
- ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_UNKNOWN_DEVICE); |
- BluetoothPairingDialog* dialog = |
- new BluetoothPairingDialog(GetNativeWindow(), device); |
- // The dialog deletes itself on close. |
- dialog->Show(); |
- } |
- } |
- |
- virtual bool IsBluetoothDiscovering() OVERRIDE { |
- return bluetooth_adapter_->IsDiscovering(); |
- } |
- |
- virtual void GetCurrentIME(ash::IMEInfo* info) OVERRIDE { |
- input_method::InputMethodManager* manager = |
- input_method::InputMethodManager::Get(); |
- input_method::InputMethodUtil* util = manager->GetInputMethodUtil(); |
- input_method::InputMethodDescriptor ime = manager->GetCurrentInputMethod(); |
- ExtractIMEInfo(ime, *util, info); |
- info->selected = true; |
- } |
- |
- virtual void GetAvailableIMEList(ash::IMEInfoList* list) OVERRIDE { |
- input_method::InputMethodManager* manager = |
- input_method::InputMethodManager::Get(); |
- input_method::InputMethodUtil* util = manager->GetInputMethodUtil(); |
- scoped_ptr<input_method::InputMethodDescriptors> ime_descriptors( |
- manager->GetActiveInputMethods()); |
- std::string current = manager->GetCurrentInputMethod().id(); |
- for (size_t i = 0; i < ime_descriptors->size(); i++) { |
- input_method::InputMethodDescriptor& ime = ime_descriptors->at(i); |
- ash::IMEInfo info; |
- ExtractIMEInfo(ime, *util, &info); |
- info.selected = ime.id() == current; |
- list->push_back(info); |
- } |
- } |
- |
- virtual void GetCurrentIMEProperties( |
- ash::IMEPropertyInfoList* list) OVERRIDE { |
- input_method::InputMethodManager* manager = |
- input_method::InputMethodManager::Get(); |
- input_method::InputMethodPropertyList properties = |
- manager->GetCurrentInputMethodProperties(); |
- for (size_t i = 0; i < properties.size(); ++i) { |
- ash::IMEPropertyInfo property; |
- property.key = properties[i].key; |
- property.name = base::UTF8ToUTF16(properties[i].label); |
- property.selected = properties[i].is_selection_item_checked; |
- list->push_back(property); |
- } |
- } |
- |
- virtual void SwitchIME(const std::string& ime_id) OVERRIDE { |
- input_method::InputMethodManager::Get()->ChangeInputMethod(ime_id); |
- } |
- |
- virtual void ActivateIMEProperty(const std::string& key) OVERRIDE { |
- input_method::InputMethodManager::Get()-> |
- ActivateInputMethodProperty(key); |
- } |
- |
- virtual void CancelDriveOperation(int32 operation_id) OVERRIDE { |
- DriveIntegrationService* integration_service = |
- FindDriveIntegrationService(); |
- if (!integration_service) |
- return; |
- |
- integration_service->job_list()->CancelJob(operation_id); |
- } |
- |
- virtual void GetDriveOperationStatusList( |
- ash::DriveOperationStatusList* list) OVERRIDE { |
- DriveIntegrationService* integration_service = |
- FindDriveIntegrationService(); |
- if (!integration_service) |
- return; |
- |
- *list = ConvertToDriveStatusList( |
- integration_service->job_list()->GetJobInfoList()); |
- } |
- |
- virtual void ShowNetworkConfigure(const std::string& network_id, |
- gfx::NativeWindow parent_window) OVERRIDE { |
- NetworkConfigView::Show(network_id, parent_window); |
- } |
- |
- virtual bool EnrollNetwork(const std::string& network_id, |
- gfx::NativeWindow parent_window) OVERRIDE { |
- return enrollment::CreateDialog(network_id, parent_window); |
- } |
- |
- virtual void ManageBluetoothDevices() OVERRIDE { |
- content::RecordAction( |
- content::UserMetricsAction("ShowBluetoothSettingsPage")); |
- std::string sub_page = std::string(chrome::kSearchSubPage) + "#" + |
- l10n_util::GetStringUTF8(IDS_OPTIONS_SETTINGS_SECTION_TITLE_BLUETOOTH); |
- ShowSettingsSubPageForAppropriateBrowser( |
- sub_page, |
- ProfileManager::GetPrimaryUserProfile()); |
- } |
- |
- virtual void ToggleBluetooth() OVERRIDE { |
- bluetooth_adapter_->SetPowered(!bluetooth_adapter_->IsPowered(), |
- base::Bind(&base::DoNothing), |
- base::Bind(&BluetoothPowerFailure)); |
- } |
- |
- virtual void ShowMobileSimDialog() OVERRIDE { |
- SimDialogDelegate::ShowDialog(GetNativeWindow(), |
- SimDialogDelegate::SIM_DIALOG_UNLOCK); |
- } |
- |
- virtual void ShowMobileSetupDialog(const std::string& service_path) OVERRIDE { |
- MobileSetupDialog::Show(service_path); |
- } |
- |
- virtual void ShowOtherNetworkDialog(const std::string& type) OVERRIDE { |
- if (type == shill::kTypeCellular) { |
- ChooseMobileNetworkDialog::ShowDialog(GetNativeWindow()); |
- return; |
- } |
- NetworkConfigView::ShowForType(type, GetNativeWindow()); |
- } |
- |
- virtual bool GetBluetoothAvailable() OVERRIDE { |
- return bluetooth_adapter_->IsPresent(); |
- } |
- |
- virtual bool GetBluetoothEnabled() OVERRIDE { |
- return bluetooth_adapter_->IsPowered(); |
- } |
- |
- virtual void ChangeProxySettings() OVERRIDE { |
- CHECK(GetUserLoginStatus() == ash::user::LOGGED_IN_NONE); |
- LoginDisplayHostImpl::default_host()->OpenProxySettings(); |
- } |
- |
- virtual ash::VolumeControlDelegate* |
- GetVolumeControlDelegate() const OVERRIDE { |
- return volume_control_delegate_.get(); |
- } |
- |
- virtual void SetVolumeControlDelegate( |
- scoped_ptr<ash::VolumeControlDelegate> delegate) OVERRIDE { |
- volume_control_delegate_.swap(delegate); |
- } |
- |
- virtual bool GetSessionStartTime( |
- base::TimeTicks* session_start_time) OVERRIDE { |
- *session_start_time = session_start_time_; |
- return have_session_start_time_; |
- } |
- |
- virtual bool GetSessionLengthLimit( |
- base::TimeDelta* session_length_limit) OVERRIDE { |
- *session_length_limit = session_length_limit_; |
- return have_session_length_limit_; |
- } |
- |
- virtual int GetSystemTrayMenuWidth() OVERRIDE { |
- return l10n_util::GetLocalizedContentsWidthInPixels( |
- IDS_SYSTEM_TRAY_MENU_BUBBLE_WIDTH_PIXELS); |
- } |
- |
- private: |
- ash::SystemTray* GetPrimarySystemTray() { |
- return ash::Shell::GetInstance()->GetPrimarySystemTray(); |
- } |
- |
- ash::SystemTrayNotifier* GetSystemTrayNotifier() { |
- return ash::Shell::GetInstance()->system_tray_notifier(); |
- } |
- |
- void SetProfile(Profile* profile) { |
- // Stop observing the current |user_profile_| on Drive integration status. |
- UnobserveDriveUpdates(); |
- |
- user_profile_ = profile; |
- |
- // Restart observation, now for the newly set |profile|. |
- ObserveDriveUpdates(); |
- |
- PrefService* prefs = profile->GetPrefs(); |
- user_pref_registrar_.reset(new PrefChangeRegistrar); |
- user_pref_registrar_->Init(prefs); |
- user_pref_registrar_->Add( |
- prefs::kUse24HourClock, |
- base::Bind(&SystemTrayDelegate::UpdateClockType, |
- base::Unretained(this))); |
- user_pref_registrar_->Add( |
- prefs::kLanguageRemapSearchKeyTo, |
- base::Bind(&SystemTrayDelegate::OnLanguageRemapSearchKeyToChanged, |
- base::Unretained(this))); |
- user_pref_registrar_->Add( |
- prefs::kShowLogoutButtonInTray, |
- base::Bind(&SystemTrayDelegate::UpdateShowLogoutButtonInTray, |
- base::Unretained(this))); |
- user_pref_registrar_->Add( |
- prefs::kLargeCursorEnabled, |
- base::Bind(&SystemTrayDelegate::OnAccessibilityModeChanged, |
- base::Unretained(this), |
- ash::A11Y_NOTIFICATION_NONE)); |
- user_pref_registrar_->Add( |
- prefs::kAutoclickEnabled, |
- base::Bind(&SystemTrayDelegate::OnAccessibilityModeChanged, |
- base::Unretained(this), |
- ash::A11Y_NOTIFICATION_NONE)); |
- user_pref_registrar_->Add( |
- prefs::kShouldAlwaysShowAccessibilityMenu, |
- base::Bind(&SystemTrayDelegate::OnAccessibilityModeChanged, |
- base::Unretained(this), |
- ash::A11Y_NOTIFICATION_NONE)); |
- user_pref_registrar_->Add( |
- prefs::kPerformanceTracingEnabled, |
- base::Bind(&SystemTrayDelegate::UpdatePerformanceTracing, |
- base::Unretained(this))); |
- |
- UpdateClockType(); |
- UpdateShowLogoutButtonInTray(); |
- UpdatePerformanceTracing(); |
- search_key_mapped_to_ = |
- profile->GetPrefs()->GetInteger(prefs::kLanguageRemapSearchKeyTo); |
- } |
- |
- bool UnsetProfile(Profile* profile) { |
- if (profile != user_profile_) |
- return false; |
- user_pref_registrar_.reset(); |
- return true; |
- } |
- |
- void ObserveDriveUpdates() { |
- DriveIntegrationService* integration_service = |
- FindDriveIntegrationService(); |
- if (integration_service) |
- integration_service->job_list()->AddObserver(this); |
- } |
- |
- void UnobserveDriveUpdates() { |
- DriveIntegrationService* integration_service = |
- FindDriveIntegrationService(); |
- if (integration_service) |
- integration_service->job_list()->RemoveObserver(this); |
- } |
- |
- bool ShouldUse24HourClock() const { |
- // On login screen and in guest mode owner default is used for |
- // kUse24HourClock preference. |
- const ash::user::LoginStatus status = GetUserLoginStatus(); |
- const CrosSettings* const cros_settings = CrosSettings::Get(); |
- bool system_use_24_hour_clock = true; |
- const bool system_value_found = cros_settings->GetBoolean( |
- kSystemUse24HourClock, &system_use_24_hour_clock); |
- |
- if (status == ash::user::LOGGED_IN_NONE) |
- return (system_value_found |
- ? system_use_24_hour_clock |
- : (base::GetHourClockType() == base::k24HourClock)); |
- |
- const PrefService::Preference* user_pref = |
- user_pref_registrar_->prefs()->FindPreference(prefs::kUse24HourClock); |
- if (status == ash::user::LOGGED_IN_GUEST && user_pref->IsDefaultValue()) |
- return (system_value_found |
- ? system_use_24_hour_clock |
- : (base::GetHourClockType() == base::k24HourClock)); |
- |
- bool use_24_hour_clock = true; |
- user_pref->GetValue()->GetAsBoolean(&use_24_hour_clock); |
- return use_24_hour_clock; |
- } |
- |
- void UpdateClockType() { |
- if (!user_pref_registrar_) |
- return; |
- |
- const bool use_24_hour_clock = ShouldUse24HourClock(); |
- clock_type_ = use_24_hour_clock ? base::k24HourClock : base::k12HourClock; |
- GetSystemTrayNotifier()->NotifyDateFormatChanged(); |
- // This also works for enterprise-managed devices because they never have |
- // local owner. |
- if (chromeos::UserManager::Get()->IsCurrentUserOwner()) |
- CrosSettings::Get()->SetBoolean(kSystemUse24HourClock, use_24_hour_clock); |
- } |
- |
- void UpdateShowLogoutButtonInTray() { |
- GetSystemTrayNotifier()->NotifyShowLoginButtonChanged( |
- user_pref_registrar_->prefs()->GetBoolean( |
- prefs::kShowLogoutButtonInTray)); |
- } |
- |
- void UpdateSessionStartTime() { |
- const PrefService* local_state = local_state_registrar_->prefs(); |
- if (local_state->HasPrefPath(prefs::kSessionStartTime)) { |
- have_session_start_time_ = true; |
- session_start_time_ = base::TimeTicks::FromInternalValue( |
- local_state->GetInt64(prefs::kSessionStartTime)); |
- } else { |
- have_session_start_time_ = false; |
- session_start_time_ = base::TimeTicks(); |
- } |
- GetSystemTrayNotifier()->NotifySessionStartTimeChanged(); |
- } |
- |
- void UpdateSessionLengthLimit() { |
- const PrefService* local_state = local_state_registrar_->prefs(); |
- if (local_state->HasPrefPath(prefs::kSessionLengthLimit)) { |
- have_session_length_limit_ = true; |
- session_length_limit_ = base::TimeDelta::FromMilliseconds( |
- std::min(std::max(local_state->GetInteger(prefs::kSessionLengthLimit), |
- kSessionLengthLimitMinMs), |
- kSessionLengthLimitMaxMs)); |
- } else { |
- have_session_length_limit_ = false; |
- session_length_limit_ = base::TimeDelta(); |
- } |
- GetSystemTrayNotifier()->NotifySessionLengthLimitChanged(); |
- } |
- |
- // LoginState::Observer overrides. |
- virtual void LoggedInStateChanged() OVERRIDE { |
- // It apparently sometimes takes a while after login before the current user |
- // is recognized as the owner. Make sure that the system-wide clock setting |
- // is updated when the recognition eventually happens |
- // (http://crbug.com/278601). |
- // |
- // Note that it isn't safe to blindly call UpdateClockType() from this |
- // method, as LoggedInStateChanged() is also called before the logged-in |
- // user's profile has actually been loaded (http://crbug.com/317745). The |
- // system tray's time format is updated at login via SetProfile(). |
- if (chromeos::UserManager::Get()->IsCurrentUserOwner()) { |
- CrosSettings::Get()->SetBoolean(kSystemUse24HourClock, |
- ShouldUse24HourClock()); |
- } |
- } |
- |
- // Overridden from SessionManagerClient::Observer. |
- virtual void LockScreen() OVERRIDE { |
- screen_locked_ = true; |
- ash::Shell::GetInstance()->UpdateAfterLoginStatusChange( |
- GetUserLoginStatus()); |
- } |
- |
- virtual void ScreenIsUnlocked() OVERRIDE { |
- screen_locked_ = false; |
- ash::Shell::GetInstance()->UpdateAfterLoginStatusChange( |
- GetUserLoginStatus()); |
- } |
- |
- gfx::NativeWindow GetNativeWindow() const { |
- bool session_started = ash::Shell::GetInstance()->session_state_delegate() |
- ->IsActiveUserSessionStarted(); |
- return GetNativeWindowByStatus(GetUserLoginStatus(), session_started); |
- } |
- |
- // content::NotificationObserver implementation. |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE { |
- switch (type) { |
- case chrome::NOTIFICATION_UPGRADE_RECOMMENDED: { |
- UpgradeDetector* detector = |
- content::Source<UpgradeDetector>(source).ptr(); |
- ash::UpdateObserver::UpdateSeverity severity = |
- ash::UpdateObserver::UPDATE_NORMAL; |
- switch (detector->upgrade_notification_stage()) { |
- case UpgradeDetector::UPGRADE_ANNOYANCE_SEVERE: |
- severity = ash::UpdateObserver::UPDATE_SEVERE_RED; |
- break; |
- |
- case UpgradeDetector::UPGRADE_ANNOYANCE_HIGH: |
- severity = ash::UpdateObserver::UPDATE_HIGH_ORANGE; |
- break; |
- |
- case UpgradeDetector::UPGRADE_ANNOYANCE_ELEVATED: |
- severity = ash::UpdateObserver::UPDATE_LOW_GREEN; |
- break; |
- |
- case UpgradeDetector::UPGRADE_ANNOYANCE_LOW: |
- default: |
- severity = ash::UpdateObserver::UPDATE_NORMAL; |
- break; |
- } |
- GetSystemTrayNotifier()->NotifyUpdateRecommended(severity); |
- break; |
- } |
- case chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED: { |
- // This notification is also sent on login screen when user avatar |
- // is loaded from file. |
- if (GetUserLoginStatus() != ash::user::LOGGED_IN_NONE) { |
- GetSystemTrayNotifier()->NotifyUserUpdate(); |
- } |
- break; |
- } |
- case chrome::NOTIFICATION_PROFILE_CREATED: { |
- SetProfile(content::Source<Profile>(source).ptr()); |
- registrar_->Remove(this, |
- chrome::NOTIFICATION_PROFILE_CREATED, |
- content::NotificationService::AllSources()); |
- break; |
- } |
- case chrome::NOTIFICATION_PROFILE_DESTROYED: { |
- if (UnsetProfile(content::Source<Profile>(source).ptr())) { |
- registrar_->Remove(this, |
- chrome::NOTIFICATION_PROFILE_DESTROYED, |
- content::NotificationService::AllSources()); |
- } |
- break; |
- } |
- case chrome::NOTIFICATION_SESSION_STARTED: { |
- ash::Shell::GetInstance()->UpdateAfterLoginStatusChange( |
- GetUserLoginStatus()); |
- SetProfile(ProfileManager::GetActiveUserProfile()); |
- break; |
- } |
- case chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK: |
- case chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE: |
- case chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER: { |
- AccessibilityStatusEventDetails* accessibility_status = |
- content::Details<AccessibilityStatusEventDetails>(details).ptr(); |
- OnAccessibilityModeChanged(accessibility_status->notify); |
- break; |
- } |
- default: |
- NOTREACHED(); |
- } |
- } |
- |
- void OnLanguageRemapSearchKeyToChanged() { |
- search_key_mapped_to_ = user_pref_registrar_->prefs()->GetInteger( |
- prefs::kLanguageRemapSearchKeyTo); |
- } |
- |
- void OnAccessibilityModeChanged( |
- ash::AccessibilityNotificationVisibility notify) { |
- GetSystemTrayNotifier()->NotifyAccessibilityModeChanged(notify); |
- } |
- |
- void UpdatePerformanceTracing() { |
- if (!user_pref_registrar_) |
- return; |
- bool value = |
- user_pref_registrar_->prefs()->GetBoolean( |
- prefs::kPerformanceTracingEnabled); |
- GetSystemTrayNotifier()->NotifyTracingModeChanged(value); |
- } |
- |
- // Overridden from InputMethodManager::Observer. |
- virtual void InputMethodChanged( |
- input_method::InputMethodManager* manager, bool show_message) OVERRIDE { |
- // |show_message| in ash means the message_center notifications |
- // which should not be shown unless kDisableIMEModeIndicator is |
- // on, since the mode indicator already notifies the user. |
- if (!CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kDisableIMEModeIndicator)) { |
- show_message = false; |
- } |
- GetSystemTrayNotifier()->NotifyRefreshIME(show_message); |
- } |
- |
- virtual void InputMethodPropertyChanged( |
- input_method::InputMethodManager* manager) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyRefreshIME(false); |
- } |
- |
- // drive::JobListObserver overrides. |
- virtual void OnJobAdded(const drive::JobInfo& job_info) OVERRIDE { |
- OnJobUpdated(job_info); |
- } |
- |
- virtual void OnJobDone(const drive::JobInfo& job_info, |
- drive::FileError error) OVERRIDE { |
- ash::DriveOperationStatus status; |
- if (ConvertToFinishedDriveOperationStatus(job_info, error, &status)) |
- GetSystemTrayNotifier()->NotifyDriveJobUpdated(status); |
- } |
- |
- virtual void OnJobUpdated(const drive::JobInfo& job_info) OVERRIDE { |
- ash::DriveOperationStatus status; |
- if (ConvertToDriveOperationStatus(job_info, &status)) |
- GetSystemTrayNotifier()->NotifyDriveJobUpdated(status); |
- } |
- |
- DriveIntegrationService* FindDriveIntegrationService() { |
- return user_profile_ ? |
- DriveIntegrationServiceFactory::FindForProfile(user_profile_) : NULL; |
- } |
- |
- // Overridden from BluetoothAdapter::Observer. |
- virtual void AdapterPresentChanged(device::BluetoothAdapter* adapter, |
- bool present) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyRefreshBluetooth(); |
- } |
- |
- virtual void AdapterPoweredChanged(device::BluetoothAdapter* adapter, |
- bool powered) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyRefreshBluetooth(); |
- } |
- |
- virtual void AdapterDiscoveringChanged(device::BluetoothAdapter* adapter, |
- bool discovering) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyBluetoothDiscoveringChanged(); |
- } |
- |
- virtual void DeviceAdded(device::BluetoothAdapter* adapter, |
- device::BluetoothDevice* device) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyRefreshBluetooth(); |
- } |
- |
- virtual void DeviceChanged(device::BluetoothAdapter* adapter, |
- device::BluetoothDevice* device) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyRefreshBluetooth(); |
- } |
- |
- virtual void DeviceRemoved(device::BluetoothAdapter* adapter, |
- device::BluetoothDevice* device) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyRefreshBluetooth(); |
- } |
- |
- // Overridden from SystemKeyEventListener::CapsLockObserver. |
- virtual void OnCapsLockChange(bool enabled) OVERRIDE { |
- bool search_mapped_to_caps_lock = false; |
- if (!base::SysInfo::IsRunningOnChromeOS() || |
- search_key_mapped_to_ == input_method::kCapsLockKey) |
- search_mapped_to_caps_lock = true; |
- GetSystemTrayNotifier()->NotifyCapsLockChanged( |
- enabled, search_mapped_to_caps_lock); |
- } |
- |
- void UpdateEnterpriseDomain() { |
- std::string enterprise_domain = |
- g_browser_process->browser_policy_connector()->GetEnterpriseDomain(); |
- if (enterprise_domain_ != enterprise_domain) { |
- enterprise_domain_ = enterprise_domain; |
- GetSystemTrayNotifier()->NotifyEnterpriseDomainChanged(); |
- } |
- } |
- |
- // Overridden from CloudPolicyStore::Observer |
- virtual void OnStoreLoaded(policy::CloudPolicyStore* store) OVERRIDE { |
- UpdateEnterpriseDomain(); |
- } |
- |
- virtual void OnStoreError(policy::CloudPolicyStore* store) OVERRIDE { |
- UpdateEnterpriseDomain(); |
- } |
- |
- // Overridden from ash::SessionStateObserver |
- virtual void ActiveUserChanged(const std::string& user_id) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyUserUpdate(); |
- } |
- |
- virtual void UserAddedToSession(const std::string& user_id) OVERRIDE { |
- GetSystemTrayNotifier()->NotifyUserAddedToSession(); |
- } |
- |
- scoped_ptr<base::WeakPtrFactory<SystemTrayDelegate> > ui_weak_ptr_factory_; |
- scoped_ptr<content::NotificationRegistrar> registrar_; |
- scoped_ptr<PrefChangeRegistrar> local_state_registrar_; |
- scoped_ptr<PrefChangeRegistrar> user_pref_registrar_; |
- Profile* user_profile_; |
- base::HourClockType clock_type_; |
- int search_key_mapped_to_; |
- bool screen_locked_; |
- bool have_session_start_time_; |
- base::TimeTicks session_start_time_; |
- bool have_session_length_limit_; |
- base::TimeDelta session_length_limit_; |
- std::string enterprise_domain_; |
- |
- scoped_refptr<device::BluetoothAdapter> bluetooth_adapter_; |
- scoped_ptr<ash::VolumeControlDelegate> volume_control_delegate_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate); |
-}; |
- |
-} // namespace |
- |
-ash::SystemTrayDelegate* CreateSystemTrayDelegate() { |
- return new chromeos::SystemTrayDelegate(); |
-} |
- |
-} // namespace chromeos |