15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Copyright 2013 The Chromium Authors. All rights reserved. 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Use of this source code is governed by a BSD-style license that can be 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// found in the LICENSE file. 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "chrome/browser/ui/ash/chrome_shell_delegate.h" 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <vector> 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ash/accessibility_delegate.h" 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ash/magnifier/magnifier_constants.h" 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ash/media_delegate.h" 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ash/system/tray/default_system_tray_delegate.h" 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ash/wm/window_util.h" 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/command_line.h" 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/accessibility/accessibility_events.h" 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/browser_process.h" 177573098b83e780d1c5bea13b384b610d8f155676Steve Naroff#include "chrome/browser/chrome_notification_types.h" 18a95d3750441ac8ad03e36af8e6e74039c9a3109dTed Kremenek#include "chrome/browser/prefs/session_startup_pref.h" 195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/profiles/profile.h" 20d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor#include "chrome/browser/profiles/profile_manager.h" 219caf8b1ca6beb254f420dada3c0e94d5ef027f58Ted Kremenek#include "chrome/browser/signin/signin_error_notifier_factory_ash.h" 228ffb159441e923322bef6b5dee1aaf24c738d75eTed Kremenek#include "chrome/browser/sync/sync_error_notifier_factory_ash.h" 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/ui/ash/chrome_new_window_delegate.h" 248189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek#include "chrome/browser/ui/ash/session_state_delegate_views.h" 256e340496341a4704be0ede9c1ff4f8eacea7ee2cChris Lattner#include "chrome/browser/ui/ash/solid_color_user_wallpaper_delegate.h" 267573098b83e780d1c5bea13b384b610d8f155676Steve Naroff#include "chrome/browser/ui/browser.h" 277573098b83e780d1c5bea13b384b610d8f155676Steve Naroff#include "chrome/browser/ui/browser_finder.h" 2841ef0c3472a3d09c29bc1792f3d26842f2b8a695Douglas Gregor#include "chrome/browser/ui/browser_list.h" 2941ef0c3472a3d09c29bc1792f3d26842f2b8a695Douglas Gregor#include "chrome/browser/ui/browser_tabstrip.h" 3041ef0c3472a3d09c29bc1792f3d26842f2b8a695Douglas Gregor#include "chrome/browser/ui/browser_window.h" 3141ef0c3472a3d09c29bc1792f3d26842f2b8a695Douglas Gregor#include "chrome/browser/ui/host_desktop.h" 325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" 33e2563ca02a519c2ad6d64dfed87d6e86c5d3c072Sam Bishop#include "chrome/browser/ui/startup/startup_browser_creator_impl.h" 345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/common/chrome_switches.h" 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "content/public/browser/notification_service.h" 367ba138abd329e591a8f6d5001f60dd7082f71b3bSteve Naroff 374b07b2968f87f3cd5a3d8c76145f1cbfd718d42dSebastian Redl#if defined(OS_WIN) 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/ui/ash/system_tray_delegate_win.h" 390c727a35718556866a978f64ac549d9798735f08Chris Lattner#endif 406a0ef4b83c91a6d6d5acb4ed5577c4659fe022a3Anders Carlsson 416c36be5b383875b490684bcf439d6d427298c1afChris Lattner#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#include "chrome/browser/ui/ash/system_tray_delegate_linux.h" 43ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek#endif 44ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek 45ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremeneknamespace { 46ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek 47ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenekclass NewWindowDelegateImpl : public ChromeNewWindowDelegate { 481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump public: 49ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek NewWindowDelegateImpl() {} 50ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual ~NewWindowDelegateImpl() {} 511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 52ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek // Overridden from ash::NewWindowDelegate: 53ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual void OpenFileManager() OVERRIDE {} 54ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual void OpenCrosh() OVERRIDE {} 55ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual void ShowKeyboardOverlay() OVERRIDE {} 561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 57ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek private: 58ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek DISALLOW_COPY_AND_ASSIGN(NewWindowDelegateImpl); 59ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek}; 60ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek 61ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenekclass MediaDelegateImpl : public ash::MediaDelegate { 62ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek public: 63ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek MediaDelegateImpl() {} 64ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual ~MediaDelegateImpl() {} 65ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual void HandleMediaNextTrack() OVERRIDE {} 66ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual void HandleMediaPlayPause() OVERRIDE {} 67ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual void HandleMediaPrevTrack() OVERRIDE {} 68ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual ash::MediaCaptureState GetMediaCaptureState( 69ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek content::BrowserContext* context) OVERRIDE { 701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return ash::MEDIA_CAPTURE_NONE; 71ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek } 721705fe9ec0efb65f77a46e669e48302923204fe8Benjamin Kramer 73ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek private: 741705fe9ec0efb65f77a46e669e48302923204fe8Benjamin Kramer DISALLOW_COPY_AND_ASSIGN(MediaDelegateImpl); 751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}; 76ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek 771705fe9ec0efb65f77a46e669e48302923204fe8Benjamin Kramerclass EmptyAccessibilityDelegate : public ash::AccessibilityDelegate { 781705fe9ec0efb65f77a46e669e48302923204fe8Benjamin Kramer public: 79ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek EmptyAccessibilityDelegate() {} 80ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual ~EmptyAccessibilityDelegate() {} 81ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek 82ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual void ToggleHighContrast() OVERRIDE { 83ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek } 84ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek 85ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual bool IsHighContrastEnabled() const OVERRIDE { 86ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek return false; 871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 89ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek virtual bool IsSpokenFeedbackEnabled() const OVERRIDE { 90ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek return false; 91ce2fc3a343ea6098a96d587071cee7299f11957aTed Kremenek } 921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual void ToggleSpokenFeedback( 945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ash::AccessibilityNotificationVisibility notify) OVERRIDE { 955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual void SetLargeCursorEnabled(bool enalbed) OVERRIDE { 98f2cad8633e46cce12fc3d77c0bd451ffd7264bafDouglas Gregor } 99f2cad8633e46cce12fc3d77c0bd451ffd7264bafDouglas Gregor 1007381d5cfbd599fa2b9e215011ad7cbd449de231aSean Hunt virtual bool IsLargeCursorEnabled() const OVERRIDE { 1019a55591af3e5506b95a9718e15380129fbfc5ebcSean Hunt return false; 1027381d5cfbd599fa2b9e215011ad7cbd449de231aSean Hunt } 1039a55591af3e5506b95a9718e15380129fbfc5ebcSean Hunt 1047381d5cfbd599fa2b9e215011ad7cbd449de231aSean Hunt virtual void SetMagnifierEnabled(bool enabled) OVERRIDE { 1054bfe1968410ea8ffe3b4f629addd7c4bcf484765Sean Hunt } 1068e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual void SetMagnifierType(ash::MagnifierType type) OVERRIDE { 1088189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek } 1098189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek 1108189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek virtual bool IsMagnifierEnabled() const OVERRIDE { 1118189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek return false; 1128189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek } 1138189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek 1148189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek virtual void SetAutoclickEnabled(bool enabled) OVERRIDE { 1158189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek } 1168189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek 1171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual bool IsAutoclickEnabled() const OVERRIDE { 1188e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return false; 1198e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall } 1208e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1218e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall virtual ash::MagnifierType GetMagnifierType() const OVERRIDE { 1228e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return ash::kDefaultMagnifierType; 1238e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall } 1248e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1258e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall virtual void SaveScreenMagnifierScale(double scale) OVERRIDE { 1268e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall } 1278e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1288e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall virtual double GetSavedScreenMagnifierScale() OVERRIDE { 1298e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return std::numeric_limits<double>::min(); 1308e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall } 1318e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1328e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall virtual bool ShouldShowAccessibilityMenu() const OVERRIDE { 1338e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return false; 1348e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall } 1358e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1368e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall virtual bool IsBrailleDisplayConnected() const OVERRIDE { return false; } 1378e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 138d967e31ee796efff24b84b704a063634f6b55627Douglas Gregor virtual void SilenceSpokenFeedback() const OVERRIDE { 139bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor } 140bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor 141bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor virtual void SetVirtualKeyboardEnabled(bool enabled) OVERRIDE { 142bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor } 143bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor 144bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor virtual bool IsVirtualKeyboardEnabled() const OVERRIDE { 145bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor return false; 146bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor } 147bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor 148bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor virtual void TriggerAccessibilityAlert( 149bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor ash::AccessibilityAlert alert) OVERRIDE { 150bebbe0d9b7568ce43a464286bee49429489ef483Douglas Gregor } 1518e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1528e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall virtual ash::AccessibilityAlert GetLastAccessibilityAlert() OVERRIDE { 1538e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return ash::A11Y_ALERT_NONE; 154f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall } 1558e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1568e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall virtual void PlayEarcon(int sound_key) OVERRIDE { 157d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor } 1588e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 159d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor virtual base::TimeDelta PlayShutdownSound() const OVERRIDE { 1608e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return base::TimeDelta(); 161cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth } 162cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth 163cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth private: 164cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth DISALLOW_COPY_AND_ASSIGN(EmptyAccessibilityDelegate); 165cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth}; 166cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth 167cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth} // namespace 1683aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth 169cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruthbool ChromeShellDelegate::IsFirstRunAfterBoot() const { 170cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth return false; 1718e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall} 1728e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 1738e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCallvoid ChromeShellDelegate::PreInit() { 1748e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall} 1752bb5d00fcf71a7b4d478d478be778fff0494aff6John McCall 1762bb5d00fcf71a7b4d478d478be778fff0494aff6John McCallvoid ChromeShellDelegate::PreShutdown() { 1778e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall} 1788e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 179cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourneash::NewWindowDelegate* ChromeShellDelegate::CreateNewWindowDelegate() { 180cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourne return new NewWindowDelegateImpl; 181cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourne} 182cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourne 183cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourneash::MediaDelegate* ChromeShellDelegate::CreateMediaDelegate() { 184cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourne return new MediaDelegateImpl; 185cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourne} 186f85e193739c953358c865005855253af4f68a497John McCall 187f85e193739c953358c865005855253af4f68a497John McCallash::SessionStateDelegate* ChromeShellDelegate::CreateSessionStateDelegate() { 188f85e193739c953358c865005855253af4f68a497John McCall return new SessionStateDelegate; 189f85e193739c953358c865005855253af4f68a497John McCall} 190f85e193739c953358c865005855253af4f68a497John McCall 191f85e193739c953358c865005855253af4f68a497John McCallash::SystemTrayDelegate* ChromeShellDelegate::CreateSystemTrayDelegate() { 192f85e193739c953358c865005855253af4f68a497John McCall#if defined(OS_WIN) 1938e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return CreateWindowsSystemTrayDelegate(); 19463c00d7f35fa060c0a446c9df3a4402d9c7757feJohn McCall#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) 19563c00d7f35fa060c0a446c9df3a4402d9c7757feJohn McCall return CreateLinuxSystemTrayDelegate(); 19663c00d7f35fa060c0a446c9df3a4402d9c7757feJohn McCall#else 1978e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall return new ash::DefaultSystemTrayDelegate; 1988e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall#endif 1998e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall} 200cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth 2018e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCallash::AccessibilityDelegate* ChromeShellDelegate::CreateAccessibilityDelegate() { 202cc324ad80ab940efca006b0064f7ca70a6181816Peter Collingbourne return new EmptyAccessibilityDelegate; 203f85e193739c953358c865005855253af4f68a497John McCall} 2048e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall 2058e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCallash::UserWallpaperDelegate* ChromeShellDelegate::CreateUserWallpaperDelegate() { 206d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor return CreateSolidColorUserWallpaperDelegate(); 207d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor} 2088189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek 2098189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenekvoid ChromeShellDelegate::Observe(int type, 2101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const content::NotificationSource& source, 2118189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek const content::NotificationDetails& details) { 212f4e689b8528770001f4792f1f4ebdfb09d859e3dDouglas Gregor switch (type) { 2138189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek case chrome::NOTIFICATION_PROFILE_ADDED: { 2148189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek // Start the error notifier services to show sync/auth notifications. 2151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Profile* profile = content::Source<Profile>(source).ptr(); 2168189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek SigninErrorNotifierFactory::GetForProfile(profile); 217f4e689b8528770001f4792f1f4ebdfb09d859e3dDouglas Gregor SyncErrorNotifierFactory::GetForProfile(profile); 2188189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek break; 2198189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek } 2201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump case chrome::NOTIFICATION_ASH_SESSION_STARTED: { 2218189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek // Start the error notifier services for the already loaded profiles. 2228189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek const std::vector<Profile*> profiles = 2238189cde56b4f6f938cd65f53c932fe1860d0204cTed Kremenek g_browser_process->profile_manager()->GetLoadedProfiles(); 224e2dedf8f61b8f306f704781456b482eb61871e8eDouglas Gregor for (std::vector<Profile*>::const_iterator it = profiles.begin(); 225fb523e16dd1f860ff02a3ae03e5e3e25327a5860Chris Lattner it != profiles.end(); ++it) { 226fb523e16dd1f860ff02a3ae03e5e3e25327a5860Chris Lattner SigninErrorNotifierFactory::GetForProfile(*it); 227e2dedf8f61b8f306f704781456b482eb61871e8eDouglas Gregor SyncErrorNotifierFactory::GetForProfile(*it); 228fb523e16dd1f860ff02a3ae03e5e3e25327a5860Chris Lattner } 229e2dedf8f61b8f306f704781456b482eb61871e8eDouglas Gregor 230025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor#if defined(OS_WIN) 231025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor // If we are launched to service a windows 8 search request then let the 232025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor // IPC which carries the search string create the browser and initiate 233025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor // the navigation. 234025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor if (CommandLine::ForCurrentProcess()->HasSwitch( 235025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor switches::kWindows8Search)) 2369c1863ef36a74e8203f00289d19856ad956f48b9Ted Kremenek break; 237025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor#endif 2388e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall // If Chrome ASH is launched when no browser is open in the desktop, 2398e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall // we should execute the startup code. 240025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor // If there are browsers open in the desktop, we create a browser window 241025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor // and open a new tab page, if session restore is not on. 242025452fa0eda63e150cfaeebe64f0a19c96b3a06Douglas Gregor BrowserList* desktop_list = BrowserList::GetInstance( 2435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer chrome::HOST_DESKTOP_TYPE_NATIVE); 2448e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall if (desktop_list->empty()) { 2458e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall // We pass a dummy command line here, because the browser is launched in 2465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // silent-mode by the metro viewer process, which causes the 2475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // StartupBrowserCreatorImpl class to not create any browsers which is 2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // not the behavior we want. 249c302113179a1c2b1254224ea9b6f5316ceeb375cSean Hunt CommandLine dummy(CommandLine::NO_PROGRAM); 2508e6285af719adc6f86d6faa235d22a08eb68ee3aJohn McCall StartupBrowserCreatorImpl startup_impl( 251b2f81cf7f8445e0c65c0428f4fbb0442566916b8Douglas Gregor base::FilePath(), 2525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer dummy, 2531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump chrome::startup::IS_NOT_FIRST_RUN); 254b5a69586f1b8855ee4c1f0bb7a8f0ff4fe32ce09Steve Naroff startup_impl.Launch( 255b5a69586f1b8855ee4c1f0bb7a8f0ff4fe32ce09Steve Naroff ProfileManager::GetActiveUserProfile(), 256b5a69586f1b8855ee4c1f0bb7a8f0ff4fe32ce09Steve Naroff std::vector<GURL>(), 25763c00d7f35fa060c0a446c9df3a4402d9c7757feJohn McCall true, 25863c00d7f35fa060c0a446c9df3a4402d9c7757feJohn McCall chrome::HOST_DESKTOP_TYPE_ASH); 259311ff02fae0392bee6abe7723cdf5a69b2899a47Chris Lattner } else { 260311ff02fae0392bee6abe7723cdf5a69b2899a47Chris Lattner Browser* browser = 2615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer chrome::FindBrowserWithWindow(ash::wm::GetActiveWindow()); 2625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (browser && browser->is_type_tabbed()) { 2635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer chrome::AddTabAt(browser, GURL(), -1, true); 2642024f4d4b0d57616f79ea742fa782d633d414462Kovarththanan Rajaratnam return; 2655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2666000dace22f110d8768476989313e9d981d690d0Chris Lattner 2676000dace22f110d8768476989313e9d981d690d0Chris Lattner chrome::ScopedTabbedBrowserDisplayer displayer( 2686000dace22f110d8768476989313e9d981d690d0Chris Lattner ProfileManager::GetActiveUserProfile(), 2696000dace22f110d8768476989313e9d981d690d0Chris Lattner chrome::HOST_DESKTOP_TYPE_ASH); 2705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer chrome::AddTabAt(displayer.browser(), GURL(), -1, true); 271e300c870f08d08badf2ebcb53ded49f304af37fcChris Lattner } 2729668033ee4c25efd019e6c7e6dd96aa2e6364a46Argyrios Kyrtzidis break; 2736000dace22f110d8768476989313e9d981d690d0Chris Lattner } 2746000dace22f110d8768476989313e9d981d690d0Chris Lattner case chrome::NOTIFICATION_ASH_SESSION_ENDED: 2756000dace22f110d8768476989313e9d981d690d0Chris Lattner break; 276e300c870f08d08badf2ebcb53ded49f304af37fcChris Lattner default: 2776000dace22f110d8768476989313e9d981d690d0Chris Lattner NOTREACHED() << "Unexpected notification " << type; 2786000dace22f110d8768476989313e9d981d690d0Chris Lattner } 2796000dace22f110d8768476989313e9d981d690d0Chris Lattner} 28048d14a222276fad5279e994d1a062f36ae6fcbceEli Friedman 2811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpvoid ChromeShellDelegate::PlatformInit() { 282e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner#if defined(OS_WIN) 28348d14a222276fad5279e994d1a062f36ae6fcbceEli Friedman registrar_.Add(this, 28448d14a222276fad5279e994d1a062f36ae6fcbceEli Friedman chrome::NOTIFICATION_PROFILE_ADDED, 28548d14a222276fad5279e994d1a062f36ae6fcbceEli Friedman content::NotificationService::AllSources()); 286e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner registrar_.Add(this, 2871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump chrome::NOTIFICATION_ASH_SESSION_STARTED, 288e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner content::NotificationService::AllSources()); 289d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor registrar_.Add(this, 2901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump chrome::NOTIFICATION_ASH_SESSION_ENDED, 291d2a4a1af1088fca80e2dc76eb3369db0fbbfdefdTed Kremenek content::NotificationService::AllSources()); 292d2a4a1af1088fca80e2dc76eb3369db0fbbfdefdTed Kremenek#endif 293d2a4a1af1088fca80e2dc76eb3369db0fbbfdefdTed Kremenek} 2941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump