OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/sensor/Sensor.h" | 5 #include "modules/sensor/Sensor.h" |
6 | 6 |
7 #include "core/dom/Document.h" | 7 #include "core/dom/Document.h" |
8 #include "core/dom/ExceptionCode.h" | 8 #include "core/dom/ExceptionCode.h" |
9 #include "core/dom/ExecutionContextTask.h" | 9 #include "core/dom/ExecutionContextTask.h" |
10 #include "core/dom/TaskRunnerHelper.h" | 10 #include "core/dom/TaskRunnerHelper.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 if (!toDocument(executionContext)->domWindow()->frame() || | 39 if (!toDocument(executionContext)->domWindow()->frame() || |
40 !toDocument(executionContext)->frame()->isMainFrame()) { | 40 !toDocument(executionContext)->frame()->isMainFrame()) { |
41 exceptionState.throwSecurityError( | 41 exceptionState.throwSecurityError( |
42 "Must be in a top-level browsing context"); | 42 "Must be in a top-level browsing context"); |
43 return; | 43 return; |
44 } | 44 } |
45 | 45 |
46 // Check the given frequency value. | 46 // Check the given frequency value. |
47 if (m_sensorOptions.hasFrequency()) { | 47 if (m_sensorOptions.hasFrequency()) { |
48 double frequency = m_sensorOptions.frequency(); | 48 double frequency = m_sensorOptions.frequency(); |
49 if (frequency <= 0.0) { | |
50 exceptionState.throwRangeError("Frequency must be positive."); | |
51 return; | |
52 } | |
53 | |
54 if (frequency > SensorConfiguration::kMaxAllowedFrequency) { | 49 if (frequency > SensorConfiguration::kMaxAllowedFrequency) { |
55 m_sensorOptions.setFrequency(SensorConfiguration::kMaxAllowedFrequency); | 50 m_sensorOptions.setFrequency(SensorConfiguration::kMaxAllowedFrequency); |
56 ConsoleMessage* consoleMessage = ConsoleMessage::create( | 51 ConsoleMessage* consoleMessage = ConsoleMessage::create( |
57 JSMessageSource, InfoMessageLevel, "Frequency is limited to 60 Hz."); | 52 JSMessageSource, InfoMessageLevel, "Frequency is limited to 60 Hz."); |
58 executionContext->addConsoleMessage(consoleMessage); | 53 executionContext->addConsoleMessage(consoleMessage); |
59 } | 54 } |
60 } | 55 } |
61 } | 56 } |
62 | 57 |
63 Sensor::~Sensor() = default; | 58 Sensor::~Sensor() = default; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 m_state == Sensor::SensorState::Idle || | 140 m_state == Sensor::SensorState::Idle || |
146 m_state == Sensor::SensorState::Errored) | 141 m_state == Sensor::SensorState::Errored) |
147 return false; | 142 return false; |
148 return getExecutionContext() && hasEventListeners(); | 143 return getExecutionContext() && hasEventListeners(); |
149 } | 144 } |
150 | 145 |
151 auto Sensor::createSensorConfig() -> SensorConfigurationPtr { | 146 auto Sensor::createSensorConfig() -> SensorConfigurationPtr { |
152 auto result = SensorConfiguration::New(); | 147 auto result = SensorConfiguration::New(); |
153 | 148 |
154 double defaultFrequency = m_sensorProxy->defaultConfig()->frequency; | 149 double defaultFrequency = m_sensorProxy->defaultConfig()->frequency; |
155 double maximumFrequency = m_sensorProxy->maximumFrequency(); | 150 double minimumFrequency = m_sensorProxy->frequencyLimits().first; |
| 151 double maximumFrequency = m_sensorProxy->frequencyLimits().second; |
156 | 152 |
157 double frequency = m_sensorOptions.hasFrequency() | 153 double frequency = m_sensorOptions.hasFrequency() |
158 ? m_sensorOptions.frequency() | 154 ? m_sensorOptions.frequency() |
159 : defaultFrequency; | 155 : defaultFrequency; |
160 | 156 |
161 if (frequency > maximumFrequency) | 157 if (frequency > maximumFrequency) |
162 frequency = maximumFrequency; | 158 frequency = maximumFrequency; |
| 159 if (frequency < minimumFrequency) |
| 160 frequency = minimumFrequency; |
163 | 161 |
164 result->frequency = frequency; | 162 result->frequency = frequency; |
165 return result; | 163 return result; |
166 } | 164 } |
167 | 165 |
168 double Sensor::readingValue(int index, bool& isNull) const { | 166 double Sensor::readingValue(int index, bool& isNull) const { |
169 if (!canReturnReadings()) { | 167 if (!canReturnReadings()) { |
170 isNull = true; | 168 isNull = true; |
171 return 0.0; | 169 return 0.0; |
172 } | 170 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 m_sensorProxy->addObserver(this); | 240 m_sensorProxy->addObserver(this); |
243 if (!m_sensorProxy->isInitialized()) { | 241 if (!m_sensorProxy->isInitialized()) { |
244 m_sensorProxy->initialize(); | 242 m_sensorProxy->initialize(); |
245 return; | 243 return; |
246 } | 244 } |
247 | 245 |
248 if (!m_configuration) { | 246 if (!m_configuration) { |
249 m_configuration = createSensorConfig(); | 247 m_configuration = createSensorConfig(); |
250 DCHECK(m_configuration); | 248 DCHECK(m_configuration); |
251 DCHECK(m_configuration->frequency > 0 && | 249 DCHECK(m_configuration->frequency > 0 && |
252 m_configuration->frequency <= m_sensorProxy->maximumFrequency()); | 250 m_configuration->frequency <= |
| 251 SensorConfiguration::kMaxAllowedFrequency); |
253 } | 252 } |
254 | 253 |
255 auto startCallback = | 254 auto startCallback = |
256 WTF::bind(&Sensor::onStartRequestCompleted, wrapWeakPersistent(this)); | 255 WTF::bind(&Sensor::onStartRequestCompleted, wrapWeakPersistent(this)); |
257 m_sensorProxy->addConfiguration(m_configuration->Clone(), | 256 m_sensorProxy->addConfiguration(m_configuration->Clone(), |
258 std::move(startCallback)); | 257 std::move(startCallback)); |
259 } | 258 } |
260 | 259 |
261 void Sensor::stopListening() { | 260 void Sensor::stopListening() { |
262 DCHECK(m_sensorProxy); | 261 DCHECK(m_sensorProxy); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 } | 320 } |
322 | 321 |
323 bool Sensor::canReturnReadings() const { | 322 bool Sensor::canReturnReadings() const { |
324 if (m_state != Sensor::SensorState::Activated) | 323 if (m_state != Sensor::SensorState::Activated) |
325 return false; | 324 return false; |
326 DCHECK(m_sensorProxy); | 325 DCHECK(m_sensorProxy); |
327 return m_sensorProxy->reading().timestamp != 0.0; | 326 return m_sensorProxy->reading().timestamp != 0.0; |
328 } | 327 } |
329 | 328 |
330 } // namespace blink | 329 } // namespace blink |
OLD | NEW |