| // Copyright 2017 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 "components/arc/lock_screen/arc_lock_screen_bridge.h" | 
 |  | 
 | #include "base/bind.h" | 
 | #include "base/logging.h" | 
 | #include "base/memory/singleton.h" | 
 | #include "base/threading/thread_task_runner_handle.h" | 
 | #include "components/arc/arc_bridge_service.h" | 
 | #include "components/arc/arc_browser_context_keyed_service_factory_base.h" | 
 | #include "components/arc/arc_service_manager.h" | 
 | #include "components/session_manager/core/session_manager.h" | 
 | #include "mojo/public/cpp/system/platform_handle.h" | 
 |  | 
 | namespace arc { | 
 |  | 
 | namespace { | 
 |  | 
 | // Singleton factory for ArcLockScreenBridge. | 
 | class ArcLockScreenBridgeFactory | 
 |     : public internal::ArcBrowserContextKeyedServiceFactoryBase< | 
 |           ArcLockScreenBridge, | 
 |           ArcLockScreenBridgeFactory> { | 
 |  public: | 
 |   // Factory name used by ArcBrowserContextKeyedServiceFactoryBase. | 
 |   static constexpr const char* kName = "ArcLockScreenBridgeFactory"; | 
 |  | 
 |   static ArcLockScreenBridgeFactory* GetInstance() { | 
 |     return base::Singleton<ArcLockScreenBridgeFactory>::get(); | 
 |   } | 
 |  | 
 |  private: | 
 |   friend base::DefaultSingletonTraits<ArcLockScreenBridgeFactory>; | 
 |   ArcLockScreenBridgeFactory() = default; | 
 |   ~ArcLockScreenBridgeFactory() override = default; | 
 | }; | 
 |  | 
 | }  // namespace | 
 |  | 
 | // static | 
 | ArcLockScreenBridge* ArcLockScreenBridge::GetForBrowserContext( | 
 |     content::BrowserContext* context) { | 
 |   return ArcLockScreenBridgeFactory::GetForBrowserContext(context); | 
 | } | 
 |  | 
 | ArcLockScreenBridge::ArcLockScreenBridge(content::BrowserContext* context, | 
 |                                          ArcBridgeService* bridge_service) | 
 |     : arc_bridge_service_(bridge_service) { | 
 |   arc_bridge_service_->lock_screen()->AddObserver(this); | 
 |   session_manager::SessionManager::Get()->AddObserver(this); | 
 | } | 
 |  | 
 | ArcLockScreenBridge::~ArcLockScreenBridge() { | 
 |   arc_bridge_service_->lock_screen()->RemoveObserver(this); | 
 |   session_manager::SessionManager::Get()->RemoveObserver(this); | 
 | } | 
 |  | 
 | void ArcLockScreenBridge::OnConnectionReady() { | 
 |   SendDeviceLockedState(); | 
 | } | 
 |  | 
 | void ArcLockScreenBridge::OnSessionStateChanged() { | 
 |   SendDeviceLockedState(); | 
 | } | 
 |  | 
 | void ArcLockScreenBridge::SendDeviceLockedState() { | 
 |   mojom::LockScreenInstance* lock_screen_instance = ARC_GET_INSTANCE_FOR_METHOD( | 
 |       arc_bridge_service_->lock_screen(), SetDeviceLocked); | 
 |   if (!lock_screen_instance) | 
 |     return; | 
 |   lock_screen_instance->SetDeviceLocked( | 
 |       session_manager::SessionManager::Get()->IsUserSessionBlocked()); | 
 | } | 
 |  | 
 | }  // namespace arc |