Index: chrome/browser/ui/ash/chrome_shell_delegate_chromeos.cc |
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate_chromeos.cc b/chrome/browser/ui/ash/chrome_shell_delegate_chromeos.cc |
index 79e85d1cb49ac7919688c08aa4aea7d698fac820..588348f3135d13f12e48833a61d28f67065b272e 100644 |
--- a/chrome/browser/ui/ash/chrome_shell_delegate_chromeos.cc |
+++ b/chrome/browser/ui/ash/chrome_shell_delegate_chromeos.cc |
@@ -35,6 +35,7 @@ |
#include "chrome/browser/ui/browser_window.h" |
#include "chrome/grit/generated_resources.h" |
#include "chromeos/chromeos_switches.h" |
+#include "components/arc/arc_bridge_service.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/user_metrics.h" |
#include "ui/aura/window.h" |
@@ -225,11 +226,14 @@ void ChromeShellDelegate::PreInit() { |
display_configuration_observer_.reset( |
new chromeos::DisplayConfigurationObserver()); |
+ arc_session_observer_.reset(new ArcSessionObserver); |
+ |
chrome_user_metrics_recorder_.reset(new ChromeUserMetricsRecorder); |
} |
void ChromeShellDelegate::PreShutdown() { |
display_configuration_observer_.reset(); |
+ arc_session_observer_.reset(); |
chrome_user_metrics_recorder_.reset(); |
} |
@@ -297,3 +301,32 @@ void ChromeShellDelegate::PlatformInit() { |
chrome::NOTIFICATION_SESSION_STARTED, |
content::NotificationService::AllSources()); |
} |
+ |
+ChromeShellDelegate::ArcSessionObserver::ArcSessionObserver() { |
+ ash::Shell::GetInstance()->AddShellObserver(this); |
+} |
+ |
+ChromeShellDelegate::ArcSessionObserver::~ArcSessionObserver() { |
+ ash::Shell::GetInstance()->RemoveShellObserver(this); |
+} |
+ |
+void ChromeShellDelegate::ArcSessionObserver::OnLoginStateChanged( |
+ ash::user::LoginStatus status) { |
+ switch (status) { |
+ case ash::user::LOGGED_IN_LOCKED: |
+ case ash::user::LOGGED_IN_KIOSK_APP: |
+ return; |
+ |
+ case ash::user::LOGGED_IN_NONE: |
+ arc::ArcBridgeService::Get()->Shutdown(); |
+ break; |
+ |
+ case ash::user::LOGGED_IN_USER: |
+ case ash::user::LOGGED_IN_OWNER: |
+ case ash::user::LOGGED_IN_GUEST: |
+ case ash::user::LOGGED_IN_PUBLIC: |
+ case ash::user::LOGGED_IN_SUPERVISED: |
+ arc::ArcBridgeService::Get()->HandleStartup(); |
+ break; |
+ } |
+} |