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/DeviceSingleWindowEventController.h" 7 8#include "core/dom/Document.h" 9#include "core/events/Event.h" 10#include "core/frame/LocalDOMWindow.h" 11#include "core/page/Page.h" 12 13namespace blink { 14 15DeviceSingleWindowEventController::DeviceSingleWindowEventController(Document& document) 16 : PlatformEventController(document.page()) 17 , DOMWindowLifecycleObserver(document.domWindow()) 18 , m_needsCheckingNullEvents(true) 19 , m_document(document) 20{ 21} 22 23DeviceSingleWindowEventController::~DeviceSingleWindowEventController() 24{ 25} 26 27void DeviceSingleWindowEventController::didUpdateData() 28{ 29 dispatchDeviceEvent(lastEvent()); 30} 31 32void DeviceSingleWindowEventController::dispatchDeviceEvent(PassRefPtrWillBeRawPtr<Event> prpEvent) 33{ 34 if (!document().domWindow() || document().activeDOMObjectsAreSuspended() || document().activeDOMObjectsAreStopped()) 35 return; 36 37 RefPtrWillBeRawPtr<Event> event = prpEvent; 38 document().domWindow()->dispatchEvent(event); 39 40 if (m_needsCheckingNullEvents) { 41 if (isNullEvent(event.get())) 42 stopUpdating(); 43 else 44 m_needsCheckingNullEvents = false; 45 } 46} 47 48void DeviceSingleWindowEventController::didAddEventListener(LocalDOMWindow* window, const AtomicString& eventType) 49{ 50 if (eventType != eventTypeName()) 51 return; 52 53 if (page() && page()->visibilityState() == PageVisibilityStateVisible) 54 startUpdating(); 55 56 m_hasEventListener = true; 57} 58 59void DeviceSingleWindowEventController::didRemoveEventListener(LocalDOMWindow* window, const AtomicString& eventType) 60{ 61 if (eventType != eventTypeName() || window->hasEventListeners(eventTypeName())) 62 return; 63 64 stopUpdating(); 65 m_hasEventListener = false; 66} 67 68void DeviceSingleWindowEventController::didRemoveAllEventListeners(LocalDOMWindow*) 69{ 70 stopUpdating(); 71 m_hasEventListener = false; 72} 73 74void DeviceSingleWindowEventController::trace(Visitor* visitor) 75{ 76 visitor->trace(m_document); 77} 78 79} // namespace blink 80