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.
6 #include "core/frame/DeviceSingleWindowEventController.h"
8 #include "core/dom/Document.h"
9 #include "core/events/Event.h"
10 #include "core/frame/LocalDOMWindow.h"
11 #include "core/page/Page.h"
15 DeviceSingleWindowEventController::DeviceSingleWindowEventController(Document& document)
16 : PlatformEventController(document.page())
17 , DOMWindowLifecycleObserver(document.domWindow())
18 , m_needsCheckingNullEvents(true)
19 , m_document(document)
23 DeviceSingleWindowEventController::~DeviceSingleWindowEventController()
27 void DeviceSingleWindowEventController::didUpdateData()
29 dispatchDeviceEvent(lastEvent());
32 void DeviceSingleWindowEventController::dispatchDeviceEvent(PassRefPtrWillBeRawPtr<Event> prpEvent)
34 if (!document().domWindow() || document().activeDOMObjectsAreSuspended() || document().activeDOMObjectsAreStopped())
37 RefPtrWillBeRawPtr<Event> event = prpEvent;
38 document().domWindow()->dispatchEvent(event);
40 if (m_needsCheckingNullEvents) {
41 if (isNullEvent(event.get()))
44 m_needsCheckingNullEvents = false;
48 void DeviceSingleWindowEventController::didAddEventListener(LocalDOMWindow* window, const AtomicString& eventType)
50 if (eventType != eventTypeName())
53 if (page() && page()->visibilityState() == PageVisibilityStateVisible)
56 m_hasEventListener = true;
59 void DeviceSingleWindowEventController::didRemoveEventListener(LocalDOMWindow* window, const AtomicString& eventType)
61 if (eventType != eventTypeName() || window->hasEventListeners(eventTypeName()))
65 m_hasEventListener = false;
68 void DeviceSingleWindowEventController::didRemoveAllEventListeners(LocalDOMWindow*)
71 m_hasEventListener = false;
74 void DeviceSingleWindowEventController::trace(Visitor* visitor)
76 visitor->trace(m_document);
77 PlatformEventController::trace(visitor);