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 9f3de1ce7116d82559c6c0eec76461218cb750b4..7581a9ea08c7715856e5d5ca6e19d2d35f460ec9 100644 |
--- a/third_party/WebKit/Source/modules/sensor/Sensor.cpp |
+++ b/third_party/WebKit/Source/modules/sensor/Sensor.cpp |
@@ -58,24 +58,10 @@ Sensor::Sensor(ExecutionContext* execution_context, |
Sensor::~Sensor() = default; |
void Sensor::start() { |
- if (state_ != Sensor::SensorState::kIdle) |
- return; |
- |
- InitSensorProxyIfNeeded(); |
- if (!sensor_proxy_) { |
- ReportError(kInvalidStateError, |
- "The Sensor is no longer associated to a frame."); |
- return; |
- } |
- |
- last_update_timestamp_ = WTF::MonotonicallyIncreasingTime(); |
StartListening(); |
} |
void Sensor::stop() { |
- if (state_ == Sensor::SensorState::kIdle) |
- return; |
- |
StopListening(); |
} |
@@ -166,16 +152,14 @@ void Sensor::InitSensorProxyIfNeeded() { |
} |
void Sensor::ContextDestroyed(ExecutionContext*) { |
- if (state_ == Sensor::SensorState::kActivated || |
- state_ == Sensor::SensorState::kActivating) |
- StopListening(); |
+ StopListening(); |
} |
void Sensor::OnSensorInitialized() { |
if (state_ != Sensor::SensorState::kActivating) |
return; |
- StartListening(); |
+ RequestAddConfiguration(); |
} |
void Sensor::NotifySensorChanged(double timestamp) { |
@@ -194,78 +178,91 @@ void Sensor::NotifySensorChanged(double timestamp) { |
void Sensor::OnSensorError(ExceptionCode code, |
const String& sanitized_message, |
const String& unsanitized_message) { |
- ReportError(code, sanitized_message, unsanitized_message); |
+ HandleError(code, sanitized_message, unsanitized_message); |
} |
-void Sensor::OnStartRequestCompleted(bool result) { |
+void Sensor::OnAddConfigurationRequestCompleted(bool result) { |
if (state_ != SensorState::kActivating) |
return; |
if (!result) { |
- ReportError(kNotReadableError, "start() call has failed."); |
+ HandleError(kNotReadableError, "start() call has failed."); |
return; |
} |
+ // The initial value for m_lastUpdateTimestamp is set to current time, |
+ // so that the first reading update will be notified considering the given |
+ // frequency hint. |
+ last_update_timestamp_ = WTF::MonotonicallyIncreasingTime(); |
+ |
UpdateState(Sensor::SensorState::kActivated); |
+ |
+ if (GetExecutionContext()) { |
+ TaskRunnerHelper::Get(TaskType::kSensor, GetExecutionContext()) |
+ ->PostTask(BLINK_FROM_HERE, WTF::Bind(&Sensor::NotifyOnActivate, |
+ WrapWeakPersistent(this))); |
+ } |
} |
void Sensor::StartListening() { |
- DCHECK(sensor_proxy_); |
- UpdateState(Sensor::SensorState::kActivating); |
+ if (state_ != SensorState::kIdle) |
+ return; |
- sensor_proxy_->AddObserver(this); |
- if (!sensor_proxy_->IsInitialized()) { |
- sensor_proxy_->Initialize(); |
+ InitSensorProxyIfNeeded(); |
+ if (!sensor_proxy_) { |
+ HandleError(kInvalidStateError, |
+ "The Sensor is no longer associated to a frame."); |
return; |
} |
- if (!configuration_) { |
- configuration_ = CreateSensorConfig(); |
- DCHECK(configuration_); |
- DCHECK(configuration_->frequency > 0 && |
- configuration_->frequency <= |
- SensorConfiguration::kMaxAllowedFrequency); |
- } |
+ if (sensor_proxy_->IsInitialized()) |
+ RequestAddConfiguration(); |
+ else |
+ sensor_proxy_->Initialize(); |
- auto start_callback = |
- WTF::Bind(&Sensor::OnStartRequestCompleted, WrapWeakPersistent(this)); |
- sensor_proxy_->AddConfiguration(configuration_->Clone(), |
- std::move(start_callback)); |
+ sensor_proxy_->AddObserver(this); |
+ UpdateState(SensorState::kActivating); |
} |
void Sensor::StopListening() { |
- DCHECK(sensor_proxy_); |
- UpdateState(Sensor::SensorState::kIdle); |
+ if (state_ == SensorState::kIdle) |
+ return; |
+ DCHECK(sensor_proxy_); |
if (sensor_proxy_->IsInitialized()) { |
DCHECK(configuration_); |
sensor_proxy_->RemoveConfiguration(configuration_->Clone()); |
} |
+ |
sensor_proxy_->RemoveObserver(this); |
+ UpdateState(Sensor::SensorState::kIdle); |
} |
-void Sensor::UpdateState(Sensor::SensorState new_state) { |
- if (new_state == state_) |
- return; |
- |
- if (new_state == SensorState::kActivated && GetExecutionContext()) { |
- DCHECK_EQ(SensorState::kActivating, state_); |
- // The initial value for m_lastUpdateTimestamp is set to current time, |
- // so that the first reading update will be notified considering the given |
- // frequency hint. |
- last_update_timestamp_ = WTF::MonotonicallyIncreasingTime(); |
- TaskRunnerHelper::Get(TaskType::kSensor, GetExecutionContext()) |
- ->PostTask(BLINK_FROM_HERE, WTF::Bind(&Sensor::NotifyOnActivate, |
- WrapWeakPersistent(this))); |
+void Sensor::RequestAddConfiguration() { |
+ if (!configuration_) { |
+ configuration_ = CreateSensorConfig(); |
+ DCHECK(configuration_); |
+ DCHECK(configuration_->frequency > 0 && |
+ configuration_->frequency <= |
+ SensorConfiguration::kMaxAllowedFrequency); |
} |
+ DCHECK(sensor_proxy_); |
+ sensor_proxy_->AddConfiguration( |
+ configuration_->Clone(), |
+ WTF::Bind(&Sensor::OnAddConfigurationRequestCompleted, |
+ WrapWeakPersistent(this))); |
+} |
+ |
+void Sensor::UpdateState(Sensor::SensorState new_state) { |
state_ = new_state; |
} |
-void Sensor::ReportError(ExceptionCode code, |
+void Sensor::HandleError(ExceptionCode code, |
const String& sanitized_message, |
const String& unsanitized_message) { |
- UpdateState(SensorState::kIdle); |
+ StopListening(); |
+ |
if (GetExecutionContext()) { |
auto error = |
DOMException::Create(code, sanitized_message, unsanitized_message); |