| // Copyright 2014 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 "sky/engine/config.h" | 
 | #include "sky/engine/core/frame/PlatformEventController.h" | 
 |  | 
 | #include "sky/engine/core/page/Page.h" | 
 |  | 
 | namespace blink { | 
 |  | 
 | PlatformEventController::PlatformEventController(Page* page) | 
 |     : PageLifecycleObserver(page) | 
 |     , m_hasEventListener(false) | 
 |     , m_isActive(false) | 
 |     , m_timer(this, &PlatformEventController::oneShotCallback) | 
 | { | 
 | } | 
 |  | 
 | PlatformEventController::~PlatformEventController() | 
 | { | 
 | } | 
 |  | 
 | void PlatformEventController::oneShotCallback(Timer<PlatformEventController>* timer) | 
 | { | 
 |     ASSERT_UNUSED(timer, timer == &m_timer); | 
 |     ASSERT(hasLastData()); | 
 |     ASSERT(!m_timer.isActive()); | 
 |  | 
 |     didUpdateData(); | 
 | } | 
 |  | 
 | void PlatformEventController::startUpdating() | 
 | { | 
 |     if (m_isActive) | 
 |         return; | 
 |  | 
 |     if (hasLastData() && !m_timer.isActive()) { | 
 |         // Make sure to fire the data as soon as possible. | 
 |         m_timer.startOneShot(0, FROM_HERE); | 
 |     } | 
 |  | 
 |     registerWithDispatcher(); | 
 |     m_isActive = true; | 
 | } | 
 |  | 
 | void PlatformEventController::stopUpdating() | 
 | { | 
 |     if (!m_isActive) | 
 |         return; | 
 |  | 
 |     if (m_timer.isActive()) | 
 |         m_timer.stop(); | 
 |  | 
 |     unregisterWithDispatcher(); | 
 |     m_isActive = false; | 
 | } | 
 |  | 
 | void PlatformEventController::pageVisibilityChanged() | 
 | { | 
 |     if (!m_hasEventListener) | 
 |         return; | 
 |  | 
 |     if (page()->visibilityState() == PageVisibilityStateVisible) | 
 |         startUpdating(); | 
 |     else | 
 |         stopUpdating(); | 
 | } | 
 |  | 
 | } // namespace blink |