| 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 0c87fb79916d8c4823ea98966ee38dcd07053b56..7cf29be637efaa24c5e09c0d22475f86ab3e7802 100644
|
| --- a/third_party/WebKit/Source/modules/sensor/Sensor.cpp
|
| +++ b/third_party/WebKit/Source/modules/sensor/Sensor.cpp
|
| @@ -32,8 +32,7 @@ Sensor::Sensor(ExecutionContext* execution_context,
|
| : ContextLifecycleObserver(execution_context),
|
| sensor_options_(sensor_options),
|
| type_(type),
|
| - state_(SensorState::kIdle),
|
| - pending_reading_update_(false) {
|
| + state_(SensorState::kIdle) {
|
| // Check secure context.
|
| String error_message;
|
| if (!execution_context->IsSecureContext(error_message)) {
|
| @@ -175,11 +174,9 @@ void Sensor::OnSensorReadingChanged() {
|
|
|
| // Return if reading update is already scheduled or the cached
|
| // reading is up-to-date.
|
| - if (pending_reading_update_)
|
| + if (pending_reading_update_.IsActive())
|
| return;
|
|
|
| - pending_reading_update_ = true;
|
| -
|
| double elapsedTime = sensor_proxy_->reading().timestamp - reading_.timestamp;
|
| DCHECK_GT(elapsedTime, 0.0);
|
|
|
| @@ -195,12 +192,16 @@ void Sensor::OnSensorReadingChanged() {
|
| // Invoke JS callbacks in a different callchain to obviate
|
| // possible modifications of SensorProxy::observers_ container
|
| // while it is being iterated through.
|
| - TaskRunnerHelper::Get(TaskType::kSensor, GetExecutionContext())
|
| - ->PostTask(BLINK_FROM_HERE, std::move(sensor_reading_changed));
|
| + pending_reading_update_ =
|
| + TaskRunnerHelper::Get(TaskType::kSensor, GetExecutionContext())
|
| + ->PostCancellableTask(BLINK_FROM_HERE,
|
| + std::move(sensor_reading_changed));
|
| } else {
|
| - TaskRunnerHelper::Get(TaskType::kSensor, GetExecutionContext())
|
| - ->PostDelayedTask(BLINK_FROM_HERE, std::move(sensor_reading_changed),
|
| - WTF::TimeDelta::FromSecondsD(waitingTime));
|
| + pending_reading_update_ =
|
| + TaskRunnerHelper::Get(TaskType::kSensor, GetExecutionContext())
|
| + ->PostDelayedCancellableTask(
|
| + BLINK_FROM_HERE, std::move(sensor_reading_changed),
|
| + WTF::TimeDelta::FromSecondsD(waitingTime));
|
| }
|
| }
|
|
|
| @@ -252,6 +253,8 @@ void Sensor::StopListening() {
|
| if (state_ == SensorState::kIdle)
|
| return;
|
|
|
| + pending_reading_update_.Cancel();
|
| +
|
| DCHECK(sensor_proxy_);
|
| if (sensor_proxy_->IsInitialized()) {
|
| DCHECK(configuration_);
|
| @@ -299,7 +302,6 @@ void Sensor::HandleError(ExceptionCode code,
|
|
|
| void Sensor::UpdateReading() {
|
| reading_ = sensor_proxy_->reading();
|
| - pending_reading_update_ = false;
|
| DispatchEvent(Event::Create(EventTypeNames::change));
|
| }
|
|
|
|
|