2 * Copyright 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2012 Samsung Electronics. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #include "modules/device_orientation/DeviceMotionController.h"
30 #include "core/dom/Document.h"
31 #include "core/frame/DOMWindow.h"
32 #include "core/page/Page.h"
33 #include "modules/device_orientation/DeviceMotionData.h"
34 #include "modules/device_orientation/DeviceMotionDispatcher.h"
35 #include "modules/device_orientation/DeviceMotionEvent.h"
39 DeviceMotionController::DeviceMotionController(Document& document)
40 : DeviceSensorEventController(document.page())
41 , DOMWindowLifecycleObserver(document.domWindow())
42 , m_document(document)
46 DeviceMotionController::~DeviceMotionController()
51 void DeviceMotionController::didChangeDeviceMotion(DeviceMotionData* deviceMotionData)
53 dispatchDeviceEvent(DeviceMotionEvent::create(EventTypeNames::devicemotion, deviceMotionData));
56 const char* DeviceMotionController::supplementName()
58 return "DeviceMotionController";
61 DeviceMotionController& DeviceMotionController::from(Document& document)
63 DeviceMotionController* controller = static_cast<DeviceMotionController*>(DocumentSupplement::from(document, supplementName()));
65 controller = new DeviceMotionController(document);
66 DocumentSupplement::provideTo(document, supplementName(), adoptPtrWillBeNoop(controller));
71 bool DeviceMotionController::hasLastData()
73 return DeviceMotionDispatcher::instance().latestDeviceMotionData();
76 PassRefPtrWillBeRawPtr<Event> DeviceMotionController::getLastEvent()
78 return DeviceMotionEvent::create(EventTypeNames::devicemotion, DeviceMotionDispatcher::instance().latestDeviceMotionData());
81 void DeviceMotionController::registerWithDispatcher()
83 DeviceMotionDispatcher::instance().addDeviceMotionController(this);
86 void DeviceMotionController::unregisterWithDispatcher()
88 DeviceMotionDispatcher::instance().removeDeviceMotionController(this);
91 bool DeviceMotionController::isNullEvent(Event* event)
93 DeviceMotionEvent* motionEvent = toDeviceMotionEvent(event);
94 return !motionEvent->deviceMotionData()->canProvideEventData();
97 Document* DeviceMotionController::document()
102 void DeviceMotionController::didAddEventListener(DOMWindow* window, const AtomicString& eventType)
104 if (eventType != EventTypeNames::devicemotion)
107 if (page() && page()->visibilityState() == PageVisibilityStateVisible)
110 m_hasEventListener = true;
113 void DeviceMotionController::didRemoveEventListener(DOMWindow* window, const AtomicString& eventType)
115 if (eventType != EventTypeNames::devicemotion || window->hasEventListeners(EventTypeNames::devicemotion))
119 m_hasEventListener = false;
122 void DeviceMotionController::didRemoveAllEventListeners(DOMWindow*)
125 m_hasEventListener = false;
128 } // namespace WebCore