Index: Source/modules/device_light/DeviceLightDispatcher.cpp |
diff --git a/Source/modules/device_light/DeviceLightDispatcher.cpp b/Source/modules/device_light/DeviceLightDispatcher.cpp |
index ed0b32f440d79863c110cd35ae796445c7559c64..f692131b1a52415413cac7d72ddf535e2363d918 100644 |
--- a/Source/modules/device_light/DeviceLightDispatcher.cpp |
+++ b/Source/modules/device_light/DeviceLightDispatcher.cpp |
@@ -8,6 +8,7 @@ |
#include "core/frame/DeviceSensorEventDispatcher.h" |
#include "modules/device_light/DeviceLightController.h" |
#include "public/platform/Platform.h" |
+#include "wtf/TemporaryChange.h" |
namespace WebCore { |
@@ -26,6 +27,17 @@ |
{ |
} |
+ |
+void DeviceLightDispatcher::addDeviceLightController(DeviceLightController* controller) |
+{ |
+ addController(controller); |
+} |
+ |
+void DeviceLightDispatcher::removeDeviceLightController(DeviceLightController* controller) |
+{ |
+ removeController(controller); |
+} |
+ |
void DeviceLightDispatcher::startListening() |
{ |
blink::Platform::current()->setDeviceLightListener(this); |
@@ -40,7 +52,19 @@ |
void DeviceLightDispatcher::didChangeDeviceLight(double value) |
{ |
m_lastDeviceLightData = value; |
- notifyControllers(); |
+ |
+ { |
+ TemporaryChange<bool> changeIsDispatching(m_isDispatching, true); |
+ // Don't fire controllers removed or added during event dispatch. |
+ size_t size = m_controllers.size(); |
+ for (size_t i = 0; i < size; ++i) { |
+ if (m_controllers[i]) |
+ static_cast<DeviceLightController*>(m_controllers[i])->didChangeDeviceLight(m_lastDeviceLightData); |
+ } |
+ } |
+ |
+ if (m_needsPurge) |
+ purgeControllers(); |
} |
double DeviceLightDispatcher::latestDeviceLightData() const |