Index: content/renderer/renderer_blink_platform_impl.cc |
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc |
index 0e9864fdc6feb887fb8e3637c9baea5be4aac70a..6883051523e7214ccd83e1cbe064960f11999a68 100644 |
--- a/content/renderer/renderer_blink_platform_impl.cc |
+++ b/content/renderer/renderer_blink_platform_impl.cc |
@@ -1093,12 +1093,6 @@ RendererBlinkPlatformImpl::CreatePlatformEventObserverFromType( |
thread = NULL; |
switch (type) { |
- case blink::WebPlatformEventDeviceMotion: |
- return new DeviceMotionEventPump(thread); |
- case blink::WebPlatformEventDeviceOrientation: |
- return new DeviceOrientationEventPump(thread); |
- case blink::WebPlatformEventDeviceLight: |
- return new DeviceLightEventPump(thread); |
case blink::WebPlatformEventGamepad: |
return new GamepadSharedMemoryReader(thread); |
case blink::WebPlatformEventScreenOrientation: |
@@ -1117,6 +1111,9 @@ void RendererBlinkPlatformImpl::SetPlatformEventObserverForTesting( |
blink::WebPlatformEventType type, |
scoped_ptr<PlatformEventObserverBase> observer) { |
DCHECK(type != blink::WebPlatformEventBattery); |
+ DCHECK(type != blink::WebPlatformEventDeviceMotion); |
+ DCHECK(type != blink::WebPlatformEventDeviceOrientation); |
+ DCHECK(type != blink::WebPlatformEventDeviceLight); |
if (platform_event_observers_.Lookup(type)) |
platform_event_observers_.Remove(type); |
@@ -1126,7 +1123,8 @@ void RendererBlinkPlatformImpl::SetPlatformEventObserverForTesting( |
void RendererBlinkPlatformImpl::startListening( |
blink::WebPlatformEventType type, |
blink::WebPlatformEventListener* listener) { |
- if (type == blink::WebPlatformEventBattery) { |
+ switch (type) { |
+ case blink::WebPlatformEventBattery: |
if (RenderThreadImpl::current() && |
RenderThreadImpl::current()->layout_test_mode()) { |
g_test_battery_status_listener = |
@@ -1136,6 +1134,23 @@ void RendererBlinkPlatformImpl::startListening( |
static_cast<blink::WebBatteryStatusListener*>(listener))); |
} |
return; |
+ case blink::WebPlatformEventDeviceMotion: |
+ device_motion_event_pump_.reset(new DeviceMotionEventPump( |
+ static_cast<blink::WebDeviceMotionListener*>(listener))); |
+ SendFakeDeviceEventDataForTesting(type); |
+ return; |
+ case blink::WebPlatformEventDeviceOrientation: |
+ device_orientation_event_pump_.reset(new DeviceOrientationEventPump( |
+ static_cast<blink::WebDeviceOrientationListener*>(listener))); |
+ SendFakeDeviceEventDataForTesting(type); |
+ return; |
+ case blink::WebPlatformEventDeviceLight: |
+ device_light_event_pump_.reset(new DeviceLightEventPump( |
+ static_cast<blink::WebDeviceLightListener*>(listener))); |
+ SendFakeDeviceEventDataForTesting(type); |
+ return; |
+ default: |
+ break; |
} |
PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type); |
@@ -1146,60 +1161,72 @@ void RendererBlinkPlatformImpl::startListening( |
platform_event_observers_.AddWithID(observer, static_cast<int32>(type)); |
} |
observer->Start(listener); |
+} |
+void RendererBlinkPlatformImpl::SendFakeDeviceEventDataForTesting( |
+ blink::WebPlatformEventType type) { |
// Device events (motion, orientation and light) expect to get an event fired |
// as soon as a listener is registered if a fake data was passed before. |
// TODO(mlamouri,timvolodine): make those send mock values directly instead of |
// using this broken pattern. |
- if (RenderThreadImpl::current() && |
- RenderThreadImpl::current()->layout_test_mode() && |
- (type == blink::WebPlatformEventDeviceMotion || |
- type == blink::WebPlatformEventDeviceOrientation || |
- type == blink::WebPlatformEventDeviceLight)) { |
- SendFakeDeviceEventDataForTesting(type); |
+ if (!RenderThreadImpl::current() || |
+ !RenderThreadImpl::current()->layout_test_mode()) { |
+ return; |
} |
-} |
- |
-void RendererBlinkPlatformImpl::SendFakeDeviceEventDataForTesting( |
- blink::WebPlatformEventType type) { |
- PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type); |
- CHECK(observer); |
void* data = 0; |
+ DeviceSensorEventPump* event_pump = nullptr; |
switch (type) { |
case blink::WebPlatformEventDeviceMotion: |
if (!(g_test_device_motion_data == 0)) |
data = &g_test_device_motion_data.Get(); |
+ event_pump = |
+ static_cast<DeviceSensorEventPump*>(device_motion_event_pump_.get()); |
break; |
case blink::WebPlatformEventDeviceOrientation: |
if (!(g_test_device_orientation_data == 0)) |
data = &g_test_device_orientation_data.Get(); |
+ event_pump = static_cast<DeviceSensorEventPump*>( |
+ device_orientation_event_pump_.get()); |
break; |
case blink::WebPlatformEventDeviceLight: |
if (g_test_device_light_data >= 0) |
data = &g_test_device_light_data; |
+ event_pump = |
+ static_cast<DeviceSensorEventPump*>(device_light_event_pump_.get()); |
break; |
default: |
NOTREACHED(); |
break; |
} |
- if (!data) |
+ if (!data || !event_pump) |
return; |
base::MessageLoopProxy::current()->PostTask( |
- FROM_HERE, |
- base::Bind(&PlatformEventObserverBase::SendFakeDataForTesting, |
- base::Unretained(observer), data)); |
+ FROM_HERE, base::Bind(&DeviceSensorEventPump::SendFakeDataForTesting, |
+ base::Unretained(event_pump), data)); |
} |
void RendererBlinkPlatformImpl::stopListening( |
blink::WebPlatformEventType type) { |
- if (type == blink::WebPlatformEventBattery) { |
- g_test_battery_status_listener = nullptr; |
- battery_status_dispatcher_.reset(); |
- return; |
+ switch (type) { |
+ case blink::WebPlatformEventBattery: |
+ g_test_battery_status_listener = nullptr; |
+ battery_status_dispatcher_.reset(); |
+ return; |
+ case blink::WebPlatformEventDeviceMotion: |
+ device_motion_event_pump_.reset(); |
+ return; |
+ case blink::WebPlatformEventDeviceOrientation: |
+ device_orientation_event_pump_.reset(); |
+ return; |
+ case blink::WebPlatformEventDeviceLight: |
+ device_light_event_pump_.reset(); |
+ return; |
+ default: |
+ break; |
} |
PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type); |