| Index: device/generic_sensor/platform_sensor_and_provider_unittest_win.cc | 
| diff --git a/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc b/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc | 
| index 49b4d2244e4f08867b1052dedb730671108dd14b..74b7a2c248a0ddaecf8ad5cae4c7a48d12f40503 100644 | 
| --- a/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc | 
| +++ b/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc | 
| @@ -224,6 +224,20 @@ class PlatformSensorAndProviderTestWin : public ::testing::Test { | 
| return sensor; | 
| } | 
|  | 
| +  // Listening the sensor is asynchronous, therefore inner loop is used to wait | 
| +  // for SetEventSink to be called. | 
| +  bool StartListening(scoped_refptr<PlatformSensor> sensor, | 
| +                      PlatformSensor::Client* client, | 
| +                      const PlatformSensorConfiguration& config) { | 
| +    run_loop_ = base::MakeUnique<base::RunLoop>(); | 
| +    bool ret = sensor->StartListening(client, config); | 
| +    run_loop_->Run(); | 
| +    run_loop_ = nullptr; | 
| +    return ret; | 
| +  } | 
| + | 
| +  void QuitInnerLoop() { run_loop_->Quit(); } | 
| + | 
| // Sets sensor with REFSENSOR_TYPE_ID |sensor| to be supported by mocked | 
| // ISensorMager and it will be present in ISensorCollection. | 
| void SetSupportedSensor(REFSENSOR_TYPE_ID sensor) { | 
| @@ -261,6 +275,12 @@ class PlatformSensorAndProviderTestWin : public ::testing::Test { | 
| .WillByDefault(Invoke([this](ISensorEvents* events) { | 
| events->AddRef(); | 
| sensor_events_.Attach(events); | 
| +          if (this->run_loop_) { | 
| +            message_loop_.task_runner()->PostTask( | 
| +                FROM_HERE, | 
| +                base::Bind(&PlatformSensorAndProviderTestWin::QuitInnerLoop, | 
| +                           base::Unretained(this))); | 
| +          } | 
| return S_OK; | 
| })); | 
|  | 
| @@ -269,6 +289,12 @@ class PlatformSensorAndProviderTestWin : public ::testing::Test { | 
| ON_CALL(*sensor_, SetEventSink(IsNull())) | 
| .WillByDefault(Invoke([this](ISensorEvents* events) { | 
| sensor_events_.Release(); | 
| +          if (this->run_loop_) { | 
| +            message_loop_.task_runner()->PostTask( | 
| +                FROM_HERE, | 
| +                base::Bind(&PlatformSensorAndProviderTestWin::QuitInnerLoop, | 
| +                           base::Unretained(this))); | 
| +          } | 
| return S_OK; | 
| })); | 
| } | 
| @@ -433,7 +459,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStarted) { | 
| EXPECT_CALL(*sensor_, SetEventSink(NotNull())).Times(1); | 
| EXPECT_CALL(*sensor_, SetEventSink(IsNull())).Times(1); | 
| EXPECT_CALL(*sensor_, SetProperties(NotNull(), _)) | 
| -      .WillOnce(Invoke( | 
| +      .WillRepeatedly(Invoke( | 
| [](IPortableDeviceValues* props, IPortableDeviceValues** result) { | 
| ULONG value = 0; | 
| HRESULT hr = props->GetUnsignedIntegerValue( | 
| @@ -449,7 +475,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStarted) { | 
|  | 
| auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); | 
| PlatformSensorConfiguration configuration(10); | 
| -  EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); | 
| +  EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); | 
|  | 
| EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); | 
| GenerateDataUpdatedEvent({{SENSOR_DATA_TYPE_LIGHT_LEVEL_LUX, 3.14}}); | 
| @@ -465,7 +491,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorRemoved) { | 
|  | 
| auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); | 
| PlatformSensorConfiguration configuration(10); | 
| -  EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); | 
| +  EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); | 
| EXPECT_CALL(*client, OnSensorError()).Times(1); | 
|  | 
| GenerateLeaveEvent(); | 
| @@ -480,7 +506,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStateChangedToError) { | 
|  | 
| auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); | 
| PlatformSensorConfiguration configuration(10); | 
| -  EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); | 
| +  EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); | 
| EXPECT_CALL(*client, OnSensorError()).Times(1); | 
|  | 
| GenerateStateChangeEvent(SENSOR_STATE_ERROR); | 
| @@ -495,7 +521,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStateChangedToReady) { | 
|  | 
| auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); | 
| PlatformSensorConfiguration configuration(10); | 
| -  EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); | 
| +  EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); | 
| EXPECT_CALL(*client, OnSensorError()).Times(0); | 
|  | 
| GenerateStateChangeEvent(SENSOR_STATE_READY); | 
| @@ -534,7 +560,7 @@ TEST_F(PlatformSensorAndProviderTestWin, CheckAccelerometerReadingConversion) { | 
|  | 
| auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); | 
| PlatformSensorConfiguration configuration(10); | 
| -  EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); | 
| +  EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); | 
| EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); | 
|  | 
| double x_accel = 0.25; | 
| @@ -567,7 +593,7 @@ TEST_F(PlatformSensorAndProviderTestWin, CheckGyroscopeReadingConversion) { | 
|  | 
| auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); | 
| PlatformSensorConfiguration configuration(10); | 
| -  EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); | 
| +  EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); | 
| EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); | 
|  | 
| double x_ang_accel = 0.0; | 
| @@ -608,7 +634,7 @@ TEST_F(PlatformSensorAndProviderTestWin, CheckMagnetometerReadingConversion) { | 
|  | 
| auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); | 
| PlatformSensorConfiguration configuration(10); | 
| -  EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); | 
| +  EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); | 
| EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); | 
|  | 
| double x_magn_field = 112.0; | 
|  |