Index: Source/modules/device_orientation/DeviceOrientationController.cpp |
diff --git a/Source/modules/device_orientation/DeviceOrientationController.cpp b/Source/modules/device_orientation/DeviceOrientationController.cpp |
index 038c419c6dc7dccf2990f5bc9ccc518e850990a4..d78e016aa58d9308d3a7478178136142da5404cb 100644 |
--- a/Source/modules/device_orientation/DeviceOrientationController.cpp |
+++ b/Source/modules/device_orientation/DeviceOrientationController.cpp |
@@ -49,6 +49,8 @@ DeviceOrientationController::~DeviceOrientationController() |
void DeviceOrientationController::didChangeDeviceOrientation(DeviceOrientationData* deviceOrientationData) |
{ |
+ if (m_overrideOrientationData) |
+ return; |
dispatchDeviceEvent(DeviceOrientationEvent::create(EventTypeNames::deviceorientation, deviceOrientationData)); |
} |
@@ -67,15 +69,19 @@ DeviceOrientationController& DeviceOrientationController::from(Document& documen |
return *controller; |
} |
+DeviceOrientationData* DeviceOrientationController::lastData() |
+{ |
+ return m_overrideOrientationData ? m_overrideOrientationData.get() : DeviceOrientationDispatcher::instance().latestDeviceOrientationData(); |
+} |
+ |
bool DeviceOrientationController::hasLastData() |
{ |
- return DeviceOrientationDispatcher::instance().latestDeviceOrientationData(); |
+ return lastData(); |
} |
PassRefPtr<Event> DeviceOrientationController::getLastEvent() |
{ |
- return DeviceOrientationEvent::create(EventTypeNames::deviceorientation, |
- DeviceOrientationDispatcher::instance().latestDeviceOrientationData()); |
+ return DeviceOrientationEvent::create(EventTypeNames::deviceorientation, lastData()); |
} |
void DeviceOrientationController::registerWithDispatcher() |
@@ -117,4 +123,21 @@ void DeviceOrientationController::didRemoveAllEventListeners(DOMWindow* window) |
m_hasEventListener = false; |
} |
+void DeviceOrientationController::setOverride(DeviceOrientationData* deviceOrientationData) |
+{ |
+ m_overrideOrientationData.clear(); |
+ didChangeDeviceOrientation(deviceOrientationData); |
+ m_overrideOrientationData = deviceOrientationData; |
+} |
+ |
+void DeviceOrientationController::clearOverride() |
+{ |
+ if (!m_overrideOrientationData) |
+ return; |
+ m_overrideOrientationData.clear(); |
+ DeviceOrientationData* orientation = lastData(); |
+ if (orientation) |
+ didChangeDeviceOrientation(orientation); |
+} |
+ |
} // namespace WebCore |