• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "modules/device_orientation/DeviceOrientationController.h"
7 
8 #include "core/dom/Document.h"
9 #include "modules/EventModules.h"
10 #include "modules/device_orientation/DeviceOrientationData.h"
11 #include "modules/device_orientation/DeviceOrientationDispatcher.h"
12 #include "modules/device_orientation/DeviceOrientationEvent.h"
13 
14 namespace WebCore {
15 
DeviceOrientationController(Document & document)16 DeviceOrientationController::DeviceOrientationController(Document& document)
17     : DeviceSingleWindowEventController(document)
18 {
19 }
20 
~DeviceOrientationController()21 DeviceOrientationController::~DeviceOrientationController()
22 {
23     stopUpdating();
24 }
25 
didUpdateData()26 void DeviceOrientationController::didUpdateData()
27 {
28     if (m_overrideOrientationData)
29         return;
30     dispatchDeviceEvent(lastEvent());
31 }
32 
supplementName()33 const char* DeviceOrientationController::supplementName()
34 {
35     return "DeviceOrientationController";
36 }
37 
from(Document & document)38 DeviceOrientationController& DeviceOrientationController::from(Document& document)
39 {
40     DeviceOrientationController* controller = static_cast<DeviceOrientationController*>(DocumentSupplement::from(document, supplementName()));
41     if (!controller) {
42         controller = new DeviceOrientationController(document);
43         DocumentSupplement::provideTo(document, supplementName(), adoptPtrWillBeNoop(controller));
44     }
45     return *controller;
46 }
47 
lastData() const48 DeviceOrientationData* DeviceOrientationController::lastData() const
49 {
50     return m_overrideOrientationData ? m_overrideOrientationData.get() : DeviceOrientationDispatcher::instance().latestDeviceOrientationData();
51 }
52 
hasLastData()53 bool DeviceOrientationController::hasLastData()
54 {
55     return lastData();
56 }
57 
registerWithDispatcher()58 void DeviceOrientationController::registerWithDispatcher()
59 {
60     DeviceOrientationDispatcher::instance().addController(this);
61 }
62 
unregisterWithDispatcher()63 void DeviceOrientationController::unregisterWithDispatcher()
64 {
65     DeviceOrientationDispatcher::instance().removeController(this);
66 }
67 
lastEvent() const68 PassRefPtrWillBeRawPtr<Event> DeviceOrientationController::lastEvent() const
69 {
70     return DeviceOrientationEvent::create(eventTypeName(), lastData());
71 }
72 
isNullEvent(Event * event) const73 bool DeviceOrientationController::isNullEvent(Event* event) const
74 {
75     DeviceOrientationEvent* orientationEvent = toDeviceOrientationEvent(event);
76     return !orientationEvent->orientation()->canProvideEventData();
77 }
78 
eventTypeName() const79 const AtomicString& DeviceOrientationController::eventTypeName() const
80 {
81     return EventTypeNames::deviceorientation;
82 }
83 
setOverride(DeviceOrientationData * deviceOrientationData)84 void DeviceOrientationController::setOverride(DeviceOrientationData* deviceOrientationData)
85 {
86     ASSERT(deviceOrientationData);
87     m_overrideOrientationData = deviceOrientationData;
88     dispatchDeviceEvent(lastEvent());
89 }
90 
clearOverride()91 void DeviceOrientationController::clearOverride()
92 {
93     if (!m_overrideOrientationData)
94         return;
95     m_overrideOrientationData.clear();
96     if (lastData())
97         didUpdateData();
98 }
99 
trace(Visitor * visitor)100 void DeviceOrientationController::trace(Visitor* visitor)
101 {
102     visitor->trace(m_overrideOrientationData);
103     DocumentSupplement::trace(visitor);
104 }
105 
106 } // namespace WebCore
107