blob: 286aab9be000cd0083d81b4fcfb2fce326d4edf8 [file] [log] [blame]
// 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 "core/frame/PlatformEventController.h"
#include "core/page/Page.h"
namespace blink {
PlatformEventController::PlatformEventController(Page* page)
: PageVisibilityObserver(page)
, m_hasEventListener(false)
, m_isActive(false)
, m_timer(this, &PlatformEventController::oneShotCallback)
{
}
PlatformEventController::~PlatformEventController()
{
}
void PlatformEventController::oneShotCallback(TimerBase* 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, BLINK_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()->isPageVisible())
startUpdating();
else
stopUpdating();
}
} // namespace blink