146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ui/ash/system_tray_delegate_linux.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <string> 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/shell.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/shell_delegate.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/system/tray/system_tray.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/volume_control_delegate.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/time/time.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ui/chrome_pages.h" 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/upgrade_detector.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h" 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/browser/notification_service.h" 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace { 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class SystemTrayDelegateLinux : public ash::SystemTrayDelegate, 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public content::NotificationObserver { 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SystemTrayDelegateLinux() 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : clock_type_(base::GetHourClockType()) { 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Register notifications on construction so that events such as 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // PROFILE_CREATED do not get missed if they happen before Initialize(). 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registrar_.reset(new content::NotificationRegistrar); 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registrar_->Add(this, 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::NOTIFICATION_UPGRADE_RECOMMENDED, 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::NotificationService::AllSources()); 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~SystemTrayDelegateLinux() { 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registrar_.reset(); 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Overridden from ash::SystemTrayDelegate: 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void Initialize() OVERRIDE { 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) UpdateClockType(); 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void Shutdown() OVERRIDE { 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool GetTrayVisibilityOnStartup() OVERRIDE { 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ash::user::LoginStatus GetUserLoginStatus() const OVERRIDE { 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return ash::user::LOGGED_IN_OWNER; 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ChangeProfilePicture() OVERRIDE { 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual const std::string GetEnterpriseDomain() const OVERRIDE { 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return std::string(); 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual const base::string16 GetEnterpriseMessage() const OVERRIDE { 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return base::string16(); 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual const std::string GetSupervisedUserManager() const OVERRIDE { 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return std::string(); 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual const base::string16 GetSupervisedUserManagerName() const OVERRIDE { 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return base::string16(); 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual const base::string16 GetSupervisedUserMessage() const OVERRIDE { 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return base::string16(); 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool IsUserSupervised() const OVERRIDE { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool SystemShouldUpgrade() const OVERRIDE { 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return UpgradeDetector::GetInstance()->notify_upgrade(); 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual base::HourClockType GetHourClockType() const OVERRIDE { 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return clock_type_; 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowSettings() OVERRIDE { 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool ShouldShowSettings() OVERRIDE { 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowDateSettings() OVERRIDE { 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowSetTimeDialog() OVERRIDE { 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowNetworkSettings(const std::string& service_path) OVERRIDE { 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowBluetoothSettings() OVERRIDE { 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowDisplaySettings() OVERRIDE { 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowChromeSlow() OVERRIDE { 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::ScopedTabbedBrowserDisplayer displayer( 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProfileManager::GetPrimaryUserProfile(), chrome::HOST_DESKTOP_TYPE_ASH); 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::ShowSlow(displayer.browser()); 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool ShouldShowDisplayNotification() OVERRIDE { 12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowIMESettings() OVERRIDE { 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowHelp() OVERRIDE { 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::ShowHelpForProfile( 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProfileManager::GetLastUsedProfile(), 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH, 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::HELP_SOURCE_MENU); 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowAccessibilityHelp() OVERRIDE { 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowAccessibilitySettings() OVERRIDE { 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowPublicAccountInfo() OVERRIDE { 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void ShowSupervisedUserInfo() OVERRIDE { 15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowEnterpriseInfo() OVERRIDE { 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowUserLogin() OVERRIDE { 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool ShowSpringChargerReplacementDialog() OVERRIDE { 15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 16046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsSpringChargerReplacementDialogVisible() OVERRIDE { 16346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 16446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool HasUserConfirmedSafeSpringCharger() OVERRIDE { 16746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShutDown() OVERRIDE { 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 17246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void SignOut() OVERRIDE { 17446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void RequestLockScreen() OVERRIDE { 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void RequestRestartForUpdate() OVERRIDE { 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::AttemptRestart(); 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void GetAvailableBluetoothDevices( 18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ash::BluetoothDeviceList* list) OVERRIDE { 18546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void BluetoothStartDiscovering() OVERRIDE { 18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void BluetoothStopDiscovering() OVERRIDE { 19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ConnectToBluetoothDevice(const std::string& address) OVERRIDE { 19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsBluetoothDiscovering() OVERRIDE { 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void GetCurrentIME(ash::IMEInfo* info) OVERRIDE { 20146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 20246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void GetAvailableIMEList(ash::IMEInfoList* list) OVERRIDE { 20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 20546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void GetCurrentIMEProperties( 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ash::IMEPropertyInfoList* list) OVERRIDE { 20846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 20946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 21046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void SwitchIME(const std::string& ime_id) OVERRIDE { 21146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 21246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 21346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ActivateIMEProperty(const std::string& key) OVERRIDE { 21446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 21546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void ShowNetworkConfigure(const std::string& network_id) OVERRIDE { 21746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 21846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool EnrollNetwork(const std::string& network_id) OVERRIDE { 22046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 22146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 22246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ManageBluetoothDevices() OVERRIDE { 22446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 22546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ToggleBluetooth() OVERRIDE { 22746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 22846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowMobileSimDialog() OVERRIDE { 23046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowMobileSetupDialog(const std::string& service_path) OVERRIDE { 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ShowOtherNetworkDialog(const std::string& type) OVERRIDE { 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool GetBluetoothAvailable() OVERRIDE { 23946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool GetBluetoothEnabled() OVERRIDE { 24346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 24546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool GetBluetoothDiscovering() OVERRIDE { 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 24846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ChangeProxySettings() OVERRIDE { 25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 25246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 25346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ash::VolumeControlDelegate* 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetVolumeControlDelegate() const OVERRIDE { 25546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return NULL; 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 25746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 25846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void SetVolumeControlDelegate( 25946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<ash::VolumeControlDelegate> delegate) OVERRIDE { 26046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 26146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 26246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool GetSessionStartTime( 26346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::TimeTicks* session_start_time) OVERRIDE { 26446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 26546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 26646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 26746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool GetSessionLengthLimit( 26846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::TimeDelta* session_length_limit) OVERRIDE { 26946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 27046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 27146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 27246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual int GetSystemTrayMenuWidth() OVERRIDE { 27346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return l10n_util::GetLocalizedContentsWidthInPixels( 27446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) IDS_SYSTEM_TRAY_MENU_BUBBLE_WIDTH_PIXELS); 27546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 27646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 27746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ActiveUserWasChanged() OVERRIDE { 27846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 27946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 28046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsSearchKeyMappedToCapsLock() OVERRIDE { 28146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 28246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 28346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 28446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ash::tray::UserAccountsDelegate* GetUserAccountsDelegate( 28546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& user_id) OVERRIDE { 28646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return NULL; 28746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 28846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 28946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ash::SystemTrayNotifier* GetSystemTrayNotifier() { 29146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return ash::Shell::GetInstance()->system_tray_notifier(); 29246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 29346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 29446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void UpdateClockType() { 29546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) clock_type_ = (base::GetHourClockType() == base::k24HourClock) ? 29646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::k24HourClock : base::k12HourClock; 29746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetSystemTrayNotifier()->NotifyDateFormatChanged(); 29846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 29946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 30046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // content::NotificationObserver implementation. 30146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void Observe(int type, 30246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const content::NotificationSource& source, 30346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 30446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (type == chrome::NOTIFICATION_UPGRADE_RECOMMENDED) { 30546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) UpgradeDetector* detector = 30646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::Source<UpgradeDetector>(source).ptr(); 30746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ash::UpdateObserver::UpdateSeverity severity = 30846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ash::UpdateObserver::UPDATE_NORMAL; 30946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) switch (detector->upgrade_notification_stage()) { 31046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case UpgradeDetector::UPGRADE_ANNOYANCE_CRITICAL: 31146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case UpgradeDetector::UPGRADE_ANNOYANCE_SEVERE: 31246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) severity = ash::UpdateObserver::UPDATE_SEVERE_RED; 31346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) break; 31446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case UpgradeDetector::UPGRADE_ANNOYANCE_HIGH: 31546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) severity = ash::UpdateObserver::UPDATE_HIGH_ORANGE; 31646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) break; 31746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case UpgradeDetector::UPGRADE_ANNOYANCE_ELEVATED: 31846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) severity = ash::UpdateObserver::UPDATE_LOW_GREEN; 31946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) break; 32046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case UpgradeDetector::UPGRADE_ANNOYANCE_LOW: 32146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case UpgradeDetector::UPGRADE_ANNOYANCE_NONE: 32246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) severity = ash::UpdateObserver::UPDATE_NORMAL; 32346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) break; 32446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 32546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetSystemTrayNotifier()->NotifyUpdateRecommended(severity); 32646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 32746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NOTREACHED(); 32846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 32946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 33046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 33146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<content::NotificationRegistrar> registrar_; 33246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::HourClockType clock_type_; 33346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 33446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegateLinux); 33546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 33646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 33746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace 33846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 33946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 34046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)ash::SystemTrayDelegate* CreateLinuxSystemTrayDelegate() { 34146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return new SystemTrayDelegateLinux(); 34246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 343