| Index: third_party/WebKit/Source/modules/sensor/SensorProxy.h | 
| diff --git a/third_party/WebKit/Source/modules/sensor/SensorProxy.h b/third_party/WebKit/Source/modules/sensor/SensorProxy.h | 
| index 4c32534e9ae1a38158f008f63bd99cfdfe4bff11..3243636775cef146e6edd103933ced25ff4c15ad 100644 | 
| --- a/third_party/WebKit/Source/modules/sensor/SensorProxy.h | 
| +++ b/third_party/WebKit/Source/modules/sensor/SensorProxy.h | 
| @@ -6,12 +6,15 @@ | 
| #define SensorProxy_h | 
|  | 
| #include "core/dom/ExceptionCode.h" | 
| +#include "core/page/PageVisibilityObserver.h" | 
| #include "device/generic_sensor/public/cpp/sensor_reading.h" | 
| #include "device/generic_sensor/public/interfaces/sensor.mojom-blink.h" | 
| #include "device/generic_sensor/public/interfaces/sensor_provider.mojom-blink.h" | 
| #include "mojo/public/cpp/bindings/binding.h" | 
| #include "platform/Supplementable.h" | 
| +#include "platform/Timer.h" | 
| #include "platform/heap/Handle.h" | 
| +#include "wtf/Vector.h" | 
|  | 
| namespace blink { | 
|  | 
| @@ -22,7 +25,9 @@ class SensorReadingFactory; | 
| // This class wraps 'Sensor' mojo interface and used by multiple | 
| // JS sensor instances of the same type (within a single frame). | 
| class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>, | 
| -                          public device::mojom::blink::SensorClient { | 
| +                          public device::mojom::blink::SensorClient, | 
| +                          public PageVisibilityObserver { | 
| +  USING_GARBAGE_COLLECTED_MIXIN(SensorProxy); | 
| USING_PRE_FINALIZER(SensorProxy, dispose); | 
| WTF_MAKE_NONCOPYABLE(SensorProxy); | 
|  | 
| @@ -32,12 +37,14 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>, | 
| // Has valid 'Sensor' binding, {add, remove}Configuration() | 
| // methods can be called. | 
| virtual void onSensorInitialized() {} | 
| -    // Platfrom sensort reading has changed (for 'ONCHANGE' reporting mode). | 
| +    // Platfrom sensort reading has changed. | 
| virtual void onSensorReadingChanged() {} | 
| // An error has occurred. | 
| virtual void onSensorError(ExceptionCode, | 
| const String& sanitizedMessage, | 
| const String& unsanitizedMessage) {} | 
| +    // Sensor reading change notification is suspended. | 
| +    virtual void onSuspended() {} | 
| }; | 
|  | 
| ~SensorProxy(); | 
| @@ -54,8 +61,8 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>, | 
|  | 
| void addConfiguration(device::mojom::blink::SensorConfigurationPtr, | 
| std::unique_ptr<Function<void(bool)>>); | 
| -  void removeConfiguration(device::mojom::blink::SensorConfigurationPtr, | 
| -                           std::unique_ptr<Function<void(bool)>>); | 
| + | 
| +  void removeConfiguration(device::mojom::blink::SensorConfigurationPtr); | 
|  | 
| void suspend(); | 
| void resume(); | 
| @@ -72,31 +79,45 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>, | 
|  | 
| double maximumFrequency() const { return m_maximumFrequency; } | 
|  | 
| -  // Updates sensor reading from shared buffer. | 
| -  void updateSensorReading(); | 
| - | 
| DECLARE_VIRTUAL_TRACE(); | 
|  | 
| private: | 
| friend class SensorProviderProxy; | 
| SensorProxy(device::mojom::blink::SensorType, | 
| SensorProviderProxy*, | 
| +              Page*, | 
| std::unique_ptr<SensorReadingFactory>); | 
| +  // Returns true if this instance is using polling timer to | 
| +  // periodically fetch reading data from shared buffer. | 
| +  bool usesPollingTimer() const; | 
| + | 
| +  // Updates sensor reading from shared buffer. | 
| +  void updateSensorReading(); | 
|  | 
| // device::mojom::blink::SensorClient overrides. | 
| void RaiseError() override; | 
| void SensorReadingChanged() override; | 
|  | 
| +  // PageVisibilityObserver overrides. | 
| +  void pageVisibilityChanged() override; | 
| + | 
| // Generic handler for a fatal error. | 
| // String parameters are intentionally copied. | 
| void handleSensorError(ExceptionCode = UnknownError, | 
| String sanitizedMessage = String(), | 
| String unsanitizedMessage = String()); | 
| - | 
| +  // mojo call callbacks. | 
| void onSensorCreated(device::mojom::blink::SensorInitParamsPtr, | 
| device::mojom::blink::SensorClientRequest); | 
| +  void onAddConfigurationCompleted( | 
| +      double frequency, | 
| +      std::unique_ptr<Function<void(bool)>> callback, | 
| +      bool result); | 
| +  void onRemoveConfigurationCompleted(double frequency, bool result); | 
|  | 
| bool tryReadFromBuffer(device::SensorReading& result); | 
| +  void updatePollingStatus(); | 
| +  void onTimerFired(TimerBase*); | 
|  | 
| device::mojom::blink::SensorType m_type; | 
| device::mojom::blink::ReportingMode m_mode; | 
| @@ -117,6 +138,10 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>, | 
| std::unique_ptr<SensorReadingFactory> m_readingFactory; | 
| double m_maximumFrequency; | 
|  | 
| +  // Used for continious reporting mode. | 
| +  Timer<SensorProxy> m_timer; | 
| +  WTF::Vector<double> m_frequenciesUsed; | 
| + | 
| using ReadingBuffer = device::SensorReadingSharedBuffer; | 
| static_assert( | 
| sizeof(ReadingBuffer) == | 
|  |