| Index: content/renderer/renderer_webkitplatformsupport_impl.cc
|
| diff --git a/content/renderer/renderer_webkitplatformsupport_impl.cc b/content/renderer/renderer_webkitplatformsupport_impl.cc
|
| index c150e0c624ae7bda6806483818d2a117c2a8e005..53ca489c897418a3fabcf2e8cde0a3acabcc4175 100644
|
| --- a/content/renderer/renderer_webkitplatformsupport_impl.cc
|
| +++ b/content/renderer/renderer_webkitplatformsupport_impl.cc
|
| @@ -33,13 +33,11 @@
|
| #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
|
| #include "content/common/gpu/gpu_process_launch_causes.h"
|
| #include "content/common/mime_registry_messages.h"
|
| -#include "content/common/screen_orientation_messages.h"
|
| #include "content/common/view_messages.h"
|
| #include "content/public/common/content_switches.h"
|
| #include "content/public/common/webplugininfo.h"
|
| #include "content/public/renderer/content_renderer_client.h"
|
| #include "content/renderer/battery_status/battery_status_dispatcher.h"
|
| -#include "content/renderer/battery_status/fake_battery_status_dispatcher.h"
|
| #include "content/renderer/device_sensors/device_light_event_pump.h"
|
| #include "content/renderer/device_sensors/device_motion_event_pump.h"
|
| #include "content/renderer/device_sensors/device_orientation_event_pump.h"
|
| @@ -52,6 +50,7 @@
|
| #include "content/renderer/media/webcontentdecryptionmodule_impl.h"
|
| #include "content/renderer/render_thread_impl.h"
|
| #include "content/renderer/renderer_clipboard_client.h"
|
| +#include "content/renderer/screen_orientation/screen_orientation_observer.h"
|
| #include "content/renderer/webclipboard_impl.h"
|
| #include "content/renderer/webgraphicscontext3d_provider_impl.h"
|
| #include "content/renderer/webpublicsuffixlist_impl.h"
|
| @@ -151,8 +150,6 @@ base::LazyInstance<blink::WebDeviceMotionData>::Leaky
|
| g_test_device_motion_data = LAZY_INSTANCE_INITIALIZER;
|
| base::LazyInstance<blink::WebDeviceOrientationData>::Leaky
|
| g_test_device_orientation_data = LAZY_INSTANCE_INITIALIZER;
|
| -base::LazyInstance<FakeBatteryStatusDispatcher>::Leaky
|
| - g_test_battery_status_dispatcher = LAZY_INSTANCE_INITIALIZER;
|
|
|
| } // namespace
|
|
|
| @@ -232,8 +229,7 @@ RendererWebKitPlatformSupportImpl::RendererWebKitPlatformSupportImpl()
|
| sudden_termination_disables_(0),
|
| plugin_refresh_allowed_(true),
|
| child_thread_loop_(base::MessageLoopProxy::current()),
|
| - web_scrollbar_behavior_(new WebScrollbarBehaviorImpl),
|
| - gamepad_provider_(NULL) {
|
| + web_scrollbar_behavior_(new WebScrollbarBehaviorImpl) {
|
| if (g_sandbox_enabled && sandboxEnabled()) {
|
| sandbox_support_.reset(
|
| new RendererWebKitPlatformSupportImpl::SandboxSupport);
|
| @@ -873,8 +869,11 @@ WebBlobRegistry* RendererWebKitPlatformSupportImpl::blobRegistry() {
|
| //------------------------------------------------------------------------------
|
|
|
| void RendererWebKitPlatformSupportImpl::sampleGamepads(WebGamepads& gamepads) {
|
| - DCHECK(gamepad_provider_);
|
| - gamepad_provider_->SampleGamepads(gamepads);
|
| + PlatformEventObserverBase* observer =
|
| + platform_event_observers_.Lookup(blink::WebPlatformEventGamepad);
|
| + if (!observer)
|
| + return;
|
| + static_cast<RendererGamepadProvider*>(observer)->SampleGamepads(gamepads);
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
| @@ -1039,147 +1038,119 @@ void RendererWebKitPlatformSupportImpl::cancelVibration() {
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| -void RendererWebKitPlatformSupportImpl::startListening(
|
| - blink::WebPlatformEventType type,
|
| - blink::WebPlatformEventListener* listener) {
|
| +// static
|
| +PlatformEventObserverBase*
|
| +RendererWebKitPlatformSupportImpl::CreatePlatformEventObserverFromType(
|
| + blink::WebPlatformEventType type) {
|
| + RenderThread* thread = RenderThreadImpl::current();
|
| +
|
| + // When running layout tests, those observers should not listen to the actual
|
| + // hardware changes. In order to make that happen, they will receive a null
|
| + // thread.
|
| + if (thread && RenderThreadImpl::current()->layout_test_mode())
|
| + thread = 0;
|
| +
|
| switch (type) {
|
| - case blink::WebPlatformEventDeviceMotion:
|
| - SetDeviceMotionListener(
|
| - static_cast<blink::WebDeviceMotionListener*>(listener));
|
| - break;
|
| - case blink::WebPlatformEventDeviceOrientation:
|
| - SetDeviceOrientationListener(
|
| - static_cast<blink::WebDeviceOrientationListener*>(listener));
|
| - break;
|
| - case blink::WebPlatformEventDeviceLight:
|
| - SetDeviceLightListener(
|
| - static_cast<blink::WebDeviceLightListener*>(listener));
|
| - break;
|
| - case blink::WebPlatformEventBattery:
|
| - SetBatteryStatusListener(
|
| - static_cast<blink::WebBatteryStatusListener*>(listener));
|
| - break;
|
| + case blink::WebPlatformEventDeviceMotion: {
|
| + return new DeviceMotionEventPump(thread);
|
| + }
|
| + case blink::WebPlatformEventDeviceOrientation: {
|
| + return new DeviceOrientationEventPump(thread);
|
| + }
|
| + case blink::WebPlatformEventDeviceLight: {
|
| + return new DeviceLightEventPump(thread);
|
| + }
|
| + case blink::WebPlatformEventBattery: {
|
| + return new BatteryStatusDispatcher(thread);
|
| + }
|
| case blink::WebPlatformEventGamepad:
|
| - SetGamepadListener(
|
| - static_cast<blink::WebGamepadListener*>(listener));
|
| + return new GamepadSharedMemoryReader(thread);
|
| break;
|
| case blink::WebPlatformEventScreenOrientation:
|
| - RenderThread::Get()->Send(new ScreenOrientationHostMsg_StartListening());
|
| - break;
|
| + return new ScreenOrientationObserver();
|
| default:
|
| // A default statement is required to prevent compilation errors when Blink
|
| // adds a new type.
|
| VLOG(1) << "RendererWebKitPlatformSupportImpl::startListening() with "
|
| "unknown type.";
|
| }
|
| +
|
| + return 0;
|
| }
|
|
|
| -void RendererWebKitPlatformSupportImpl::stopListening(
|
| +void RendererWebKitPlatformSupportImpl::SetPlatformEventObserverForTesting(
|
| + blink::WebPlatformEventType type,
|
| + scoped_ptr<PlatformEventObserverBase> observer) {
|
| + if (platform_event_observers_.Lookup(type))
|
| + platform_event_observers_.Remove(type);
|
| + platform_event_observers_.AddWithID(observer.release(), type);
|
| +}
|
| +
|
| +void RendererWebKitPlatformSupportImpl::startListening(
|
| + blink::WebPlatformEventType type,
|
| + blink::WebPlatformEventListener* listener) {
|
| + PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type);
|
| + if (!observer) {
|
| + observer = CreatePlatformEventObserverFromType(type);
|
| + if (!observer)
|
| + return;
|
| + platform_event_observers_.AddWithID(observer, static_cast<int32>(type));
|
| + }
|
| + observer->Start(listener);
|
| +
|
| + // 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);
|
| + }
|
| +}
|
| +
|
| +void RendererWebKitPlatformSupportImpl::SendFakeDeviceEventDataForTesting(
|
| blink::WebPlatformEventType type) {
|
| - switch (type) {
|
| + PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type);
|
| + CHECK(observer);
|
| +
|
| + void* data = 0;
|
| +
|
| + switch (type) {
|
| case blink::WebPlatformEventDeviceMotion:
|
| - SetDeviceMotionListener(0);
|
| + if (!(g_test_device_motion_data == 0))
|
| + data = &g_test_device_motion_data.Get();
|
| break;
|
| case blink::WebPlatformEventDeviceOrientation:
|
| - SetDeviceOrientationListener(0);
|
| + if (!(g_test_device_orientation_data == 0))
|
| + data = &g_test_device_orientation_data.Get();
|
| break;
|
| case blink::WebPlatformEventDeviceLight:
|
| - SetDeviceLightListener(0);
|
| - break;
|
| - case blink::WebPlatformEventBattery:
|
| - SetBatteryStatusListener(0);
|
| - break;
|
| - case blink::WebPlatformEventGamepad:
|
| - SetGamepadListener(0);
|
| - break;
|
| - case blink::WebPlatformEventScreenOrientation:
|
| - RenderThread::Get()->Send(new ScreenOrientationHostMsg_StopListening());
|
| + if (g_test_device_light_data >= 0)
|
| + data = &g_test_device_light_data;
|
| break;
|
| default:
|
| - // A default statement is required to prevent compilation errors when Blink
|
| - // adds a new type.
|
| - VLOG(1) << "RendererWebKitPlatformSupportImpl::stopListening() with "
|
| - "unknown type.";
|
| - }
|
| -}
|
| -
|
| -void RendererWebKitPlatformSupportImpl::SetDeviceMotionListener(
|
| - blink::WebDeviceMotionListener* listener) {
|
| - if (g_test_device_motion_data == 0) {
|
| - if (!device_motion_event_pump_) {
|
| - device_motion_event_pump_.reset(new DeviceMotionEventPump);
|
| - device_motion_event_pump_->Attach(RenderThreadImpl::current());
|
| - }
|
| - device_motion_event_pump_->SetListener(listener);
|
| - } else if (listener) {
|
| - // Testing mode: just echo the test data to the listener.
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&blink::WebDeviceMotionListener::didChangeDeviceMotion,
|
| - base::Unretained(listener),
|
| - g_test_device_motion_data.Get()));
|
| - }
|
| -}
|
| -
|
| -void RendererWebKitPlatformSupportImpl::SetDeviceOrientationListener(
|
| - blink::WebDeviceOrientationListener* listener) {
|
| - if (g_test_device_orientation_data == 0) {
|
| - if (!device_orientation_event_pump_) {
|
| - device_orientation_event_pump_.reset(new DeviceOrientationEventPump);
|
| - device_orientation_event_pump_->Attach(RenderThreadImpl::current());
|
| - }
|
| - device_orientation_event_pump_->SetListener(listener);
|
| - } else if (listener) {
|
| - // Testing mode: just echo the test data to the listener.
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(
|
| - &blink::WebDeviceOrientationListener::didChangeDeviceOrientation,
|
| - base::Unretained(listener),
|
| - g_test_device_orientation_data.Get()));
|
| + NOTREACHED();
|
| + break;
|
| }
|
| -}
|
|
|
| -void RendererWebKitPlatformSupportImpl::SetDeviceLightListener(
|
| - blink::WebDeviceLightListener* listener) {
|
| - if (g_test_device_light_data < 0) {
|
| - if (!device_light_event_pump_) {
|
| - device_light_event_pump_.reset(new DeviceLightEventPump);
|
| - device_light_event_pump_->Attach(RenderThreadImpl::current());
|
| - }
|
| - device_light_event_pump_->SetListener(listener);
|
| - } else if (listener) {
|
| - // Testing mode: just echo the test data to the listener.
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&blink::WebDeviceLightListener::didChangeDeviceLight,
|
| - base::Unretained(listener),
|
| - g_test_device_light_data));
|
| - }
|
| -}
|
| + if (!data)
|
| + return;
|
|
|
| -void RendererWebKitPlatformSupportImpl::SetGamepadListener(
|
| - blink::WebGamepadListener* listener) {
|
| - DCHECK(gamepad_provider_);
|
| - gamepad_provider_->SetGamepadListener(listener);
|
| + base::MessageLoopProxy::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&PlatformEventObserverBase::SendFakeDataForTesting,
|
| + base::Unretained(observer), data));
|
| }
|
|
|
| -void RendererWebKitPlatformSupportImpl::SetBatteryStatusListener(
|
| - blink::WebBatteryStatusListener* listener) {
|
| - if (RenderThreadImpl::current() &&
|
| - RenderThreadImpl::current()->layout_test_mode()) {
|
| - // If we are in test mode, we want to use a fake battery status dispatcher,
|
| - // which does not communicate with the browser process. Battery status
|
| - // changes are signalled by invoking MockBatteryStatusChangedForTesting().
|
| - g_test_battery_status_dispatcher.Get().SetListener(listener);
|
| +void RendererWebKitPlatformSupportImpl::stopListening(
|
| + blink::WebPlatformEventType type) {
|
| + PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type);
|
| + if (!observer)
|
| return;
|
| - }
|
| -
|
| - if (!battery_status_dispatcher_) {
|
| - battery_status_dispatcher_.reset(
|
| - new BatteryStatusDispatcher(RenderThreadImpl::current()));
|
| - }
|
| - battery_status_dispatcher_->SetListener(listener);
|
| + observer->Stop();
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
| @@ -1200,10 +1171,13 @@ void RendererWebKitPlatformSupportImpl::queryStorageUsageAndQuota(
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| -// static
|
| void RendererWebKitPlatformSupportImpl::MockBatteryStatusChangedForTesting(
|
| const blink::WebBatteryStatus& status) {
|
| - g_test_battery_status_dispatcher.Get().PostBatteryStatusChange(status);
|
| + PlatformEventObserverBase* observer =
|
| + platform_event_observers_.Lookup(blink::WebPlatformEventBattery);
|
| + if (!observer)
|
| + return;
|
| + observer->SendFakeDataForTesting((void*)&status);
|
| }
|
|
|
| } // namespace content
|
|
|