| // Copyright 2018 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 "content/browser/screenlock_monitor/screenlock_monitor.h" | 
 |  | 
 | #include "base/trace_event/trace_event.h" | 
 | #include "content/browser/screenlock_monitor/screenlock_monitor_source.h" | 
 |  | 
 | namespace content { | 
 |  | 
 | static ScreenlockMonitor* g_screenlock_monitor = nullptr; | 
 |  | 
 | ScreenlockMonitor::ScreenlockMonitor( | 
 |     std::unique_ptr<ScreenlockMonitorSource> source) | 
 |     : observers_(new base::ObserverListThreadSafe<ScreenlockObserver>()), | 
 |       source_(std::move(source)) { | 
 |   DCHECK(!g_screenlock_monitor); | 
 |   g_screenlock_monitor = this; | 
 | } | 
 |  | 
 | ScreenlockMonitor::~ScreenlockMonitor() { | 
 |   DCHECK_EQ(this, g_screenlock_monitor); | 
 |   g_screenlock_monitor = nullptr; | 
 | } | 
 |  | 
 | // static | 
 | ScreenlockMonitor* ScreenlockMonitor::Get() { | 
 |   return g_screenlock_monitor; | 
 | } | 
 |  | 
 | void ScreenlockMonitor::AddObserver(ScreenlockObserver* obs) { | 
 |   observers_->AddObserver(obs); | 
 | } | 
 |  | 
 | void ScreenlockMonitor::RemoveObserver(ScreenlockObserver* obs) { | 
 |   observers_->RemoveObserver(obs); | 
 | } | 
 |  | 
 | void ScreenlockMonitor::NotifyScreenLocked() { | 
 |   TRACE_EVENT_INSTANT0("screenlock_monitor", | 
 |                        "ScreenlockMonitor::NotifyScreenLocked", | 
 |                        TRACE_EVENT_SCOPE_GLOBAL); | 
 |   DVLOG(1) << "Screen Locked"; | 
 |   observers_->Notify(FROM_HERE, &ScreenlockObserver::OnScreenLocked); | 
 | } | 
 |  | 
 | void ScreenlockMonitor::NotifyScreenUnlocked() { | 
 |   TRACE_EVENT_INSTANT0("screenlock_monitor", | 
 |                        "ScreenlockMonitor::NotifyScreenUnlocked", | 
 |                        TRACE_EVENT_SCOPE_GLOBAL); | 
 |   DVLOG(1) << "Screen Unlocked"; | 
 |   observers_->Notify(FROM_HERE, &ScreenlockObserver::OnScreenUnlocked); | 
 | } | 
 |  | 
 | }  // namespace content |