1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "config.h" 6#include "core/frame/PlatformEventController.h" 7 8#include "core/page/Page.h" 9 10namespace blink { 11 12PlatformEventController::PlatformEventController(Page* page) 13 : PageLifecycleObserver(page) 14 , m_hasEventListener(false) 15 , m_isActive(false) 16 , m_timer(this, &PlatformEventController::oneShotCallback) 17{ 18} 19 20PlatformEventController::~PlatformEventController() 21{ 22} 23 24void PlatformEventController::oneShotCallback(Timer<PlatformEventController>* timer) 25{ 26 ASSERT_UNUSED(timer, timer == &m_timer); 27 ASSERT(hasLastData()); 28 ASSERT(!m_timer.isActive()); 29 30 didUpdateData(); 31} 32 33void PlatformEventController::startUpdating() 34{ 35 if (m_isActive) 36 return; 37 38 if (hasLastData() && !m_timer.isActive()) { 39 // Make sure to fire the data as soon as possible. 40 m_timer.startOneShot(0, FROM_HERE); 41 } 42 43 registerWithDispatcher(); 44 m_isActive = true; 45} 46 47void PlatformEventController::stopUpdating() 48{ 49 if (!m_isActive) 50 return; 51 52 if (m_timer.isActive()) 53 m_timer.stop(); 54 55 unregisterWithDispatcher(); 56 m_isActive = false; 57} 58 59void PlatformEventController::pageVisibilityChanged() 60{ 61 if (!m_hasEventListener) 62 return; 63 64 if (page()->visibilityState() == PageVisibilityStateVisible) 65 startUpdating(); 66 else 67 stopUpdating(); 68} 69 70} // namespace blink 71