Home | History | Annotate | Download | only in frame
      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 
     10 namespace blink {
     11 
     12 PlatformEventController::PlatformEventController(Page* page)
     13     : PageLifecycleObserver(page)
     14     , m_hasEventListener(false)
     15     , m_isActive(false)
     16     , m_timer(this, &PlatformEventController::oneShotCallback)
     17 {
     18 }
     19 
     20 PlatformEventController::~PlatformEventController()
     21 {
     22 }
     23 
     24 void 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 
     33 void 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 
     47 void 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 
     59 void 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