Index: third_party/WebKit/Source/modules/sensor/Sensor.cpp |
diff --git a/third_party/WebKit/Source/modules/sensor/Sensor.cpp b/third_party/WebKit/Source/modules/sensor/Sensor.cpp |
index 0ccfb6fe73e8c97fd04f3cb7beedccd0014c5b0a..a87b8be19f01c7b23dd3bab04323acdaa27be36c 100644 |
--- a/third_party/WebKit/Source/modules/sensor/Sensor.cpp |
+++ b/third_party/WebKit/Source/modules/sensor/Sensor.cpp |
@@ -6,6 +6,7 @@ |
#include "core/dom/Document.h" |
#include "core/dom/ExceptionCode.h" |
+#include "core/dom/ExecutionContextTask.h" |
#include "core/inspector/ConsoleMessage.h" |
#include "device/generic_sensor/public/interfaces/sensor.mojom-blink.h" |
#include "modules/sensor/SensorErrorEvent.h" |
@@ -268,9 +269,13 @@ void Sensor::pollForData() { |
m_sensorProxy->updateInternalReading(); |
DCHECK(m_sensorReading); |
- if (m_sensorReading->isReadingUpdated(m_storedData)) |
- dispatchEvent( |
- SensorReadingEvent::create(EventTypeNames::change, m_sensorReading)); |
+ if (getExecutionContext() && |
+ m_sensorReading->isReadingUpdated(m_storedData)) { |
+ getExecutionContext()->postTask( |
+ BLINK_FROM_HERE, |
+ createSameThreadTask(&Sensor::notifySensorReadingChanged, |
+ wrapWeakPersistent(this))); |
+ } |
m_storedData = m_sensorProxy->reading(); |
} |
@@ -279,7 +284,12 @@ void Sensor::updateState(Sensor::SensorState newState) { |
if (newState == m_state) |
return; |
m_state = newState; |
- dispatchEvent(Event::create(EventTypeNames::statechange)); |
+ if (getExecutionContext()) { |
+ getExecutionContext()->postTask( |
+ BLINK_FROM_HERE, createSameThreadTask(&Sensor::notifyStateChanged, |
+ wrapWeakPersistent(this))); |
+ } |
+ |
updatePollingStatus(); |
} |
@@ -300,4 +310,13 @@ void Sensor::updatePollingStatus() { |
} |
} |
+void Sensor::notifySensorReadingChanged() { |
+ dispatchEvent( |
+ SensorReadingEvent::create(EventTypeNames::change, m_sensorReading)); |
+} |
+ |
+void Sensor::notifyStateChanged() { |
+ dispatchEvent(Event::create(EventTypeNames::statechange)); |
+} |
+ |
} // namespace blink |