| Index: content/browser/device_sensors/device_sensor_browsertest.cc
|
| diff --git a/content/browser/device_sensors/device_sensor_browsertest.cc b/content/browser/device_sensors/device_sensor_browsertest.cc
|
| index df8fbc7813326720dc05f4ca4250382df9aa75fa..f3d65a6ed8142d90d9ac5c8aafc67b85e770555c 100644
|
| --- a/content/browser/device_sensors/device_sensor_browsertest.cc
|
| +++ b/content/browser/device_sensors/device_sensor_browsertest.cc
|
| @@ -57,6 +57,18 @@ class FakeDataFetcher : public device::DataFetcherSharedMemory {
|
| orientation_stopped_callback_ = orientation_stopped_callback;
|
| }
|
|
|
| + void SetOrientationAbsoluteStartedCallback(
|
| + base::Closure orientation_absolute_started_callback) {
|
| + orientation_absolute_started_callback_ =
|
| + orientation_absolute_started_callback;
|
| + }
|
| +
|
| + void SetOrientationAbsoluteStoppedCallback(
|
| + base::Closure orientation_absolute_stopped_callback) {
|
| + orientation_absolute_stopped_callback_ =
|
| + orientation_absolute_stopped_callback;
|
| + }
|
| +
|
| bool Start(device::ConsumerType consumer_type, void* buffer) override {
|
| EXPECT_TRUE(buffer);
|
|
|
| @@ -79,6 +91,15 @@ class FakeDataFetcher : public device::DataFetcherSharedMemory {
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| orientation_started_callback_);
|
| } break;
|
| + case device::CONSUMER_TYPE_ORIENTATION_ABSOLUTE: {
|
| + device::DeviceOrientationHardwareBuffer* orientation_buffer =
|
| + static_cast<device::DeviceOrientationHardwareBuffer*>(buffer);
|
| + if (sensor_data_available_)
|
| + UpdateOrientationAbsolute(orientation_buffer);
|
| + SetOrientationBufferReady(orientation_buffer);
|
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| + orientation_absolute_started_callback_);
|
| + } break;
|
| case device::CONSUMER_TYPE_LIGHT: {
|
| device::DeviceLightHardwareBuffer* light_buffer =
|
| static_cast<device::DeviceLightHardwareBuffer*>(buffer);
|
| @@ -105,6 +126,10 @@ class FakeDataFetcher : public device::DataFetcherSharedMemory {
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| orientation_stopped_callback_);
|
| break;
|
| + case device::CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
|
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| + orientation_absolute_stopped_callback_);
|
| + break;
|
| case device::CONSUMER_TYPE_LIGHT:
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| light_stopped_callback_);
|
| @@ -178,6 +203,20 @@ class FakeDataFetcher : public device::DataFetcherSharedMemory {
|
| buffer->seqlock.WriteEnd();
|
| }
|
|
|
| + void UpdateOrientationAbsolute(
|
| + device::DeviceOrientationHardwareBuffer* buffer) {
|
| + buffer->seqlock.WriteBegin();
|
| + buffer->data.alpha = 4;
|
| + buffer->data.hasAlpha = true;
|
| + buffer->data.beta = 5;
|
| + buffer->data.hasBeta = true;
|
| + buffer->data.gamma = 6;
|
| + buffer->data.hasGamma = true;
|
| + buffer->data.absolute = true;
|
| + buffer->data.allAvailableSensorsAreActive = true;
|
| + buffer->seqlock.WriteEnd();
|
| + }
|
| +
|
| void UpdateLight(device::DeviceLightHardwareBuffer* buffer, double lux) {
|
| buffer->seqlock.WriteBegin();
|
| buffer->data.value = lux;
|
| @@ -187,9 +226,11 @@ class FakeDataFetcher : public device::DataFetcherSharedMemory {
|
| // The below callbacks should be run on the UI thread.
|
| base::Closure motion_started_callback_;
|
| base::Closure orientation_started_callback_;
|
| + base::Closure orientation_absolute_started_callback_;
|
| base::Closure light_started_callback_;
|
| base::Closure motion_stopped_callback_;
|
| base::Closure orientation_stopped_callback_;
|
| + base::Closure orientation_absolute_stopped_callback_;
|
| base::Closure light_stopped_callback_;
|
| bool sensor_data_available_;
|
|
|
| @@ -213,6 +254,8 @@ class DeviceSensorBrowserTest : public ContentBrowserTest {
|
| motion_stopped_runloop_.reset(new base::RunLoop());
|
| orientation_started_runloop_.reset(new base::RunLoop());
|
| orientation_stopped_runloop_.reset(new base::RunLoop());
|
| + orientation_absolute_started_runloop_.reset(new base::RunLoop());
|
| + orientation_absolute_stopped_runloop_.reset(new base::RunLoop());
|
| #if defined(OS_ANDROID)
|
| // On Android, the DeviceSensorService lives on the UI thread.
|
| SetUpFetcher();
|
| @@ -236,6 +279,10 @@ class DeviceSensorBrowserTest : public ContentBrowserTest {
|
| orientation_started_runloop_->QuitClosure());
|
| fetcher_->SetOrientationStoppedCallback(
|
| orientation_stopped_runloop_->QuitClosure());
|
| + fetcher_->SetOrientationAbsoluteStartedCallback(
|
| + orientation_absolute_started_runloop_->QuitClosure());
|
| + fetcher_->SetOrientationAbsoluteStoppedCallback(
|
| + orientation_absolute_stopped_runloop_->QuitClosure());
|
| device::DeviceSensorService::GetInstance()->SetDataFetcherForTesting(
|
| fetcher_);
|
| }
|
| @@ -279,6 +326,8 @@ class DeviceSensorBrowserTest : public ContentBrowserTest {
|
| std::unique_ptr<base::RunLoop> motion_stopped_runloop_;
|
| std::unique_ptr<base::RunLoop> orientation_started_runloop_;
|
| std::unique_ptr<base::RunLoop> orientation_stopped_runloop_;
|
| + std::unique_ptr<base::RunLoop> orientation_absolute_started_runloop_;
|
| + std::unique_ptr<base::RunLoop> orientation_absolute_stopped_runloop_;
|
|
|
| private:
|
| base::WaitableEvent io_loop_finished_event_;
|
| @@ -296,6 +345,19 @@ IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, OrientationTest) {
|
| orientation_stopped_runloop_->Run();
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, OrientationAbsoluteTest) {
|
| + // The test page will register an event handler for absolute orientation
|
| + // events, expects to get an event with fake values, then removes the event
|
| + // handler and navigates to #pass.
|
| + GURL test_url =
|
| + GetTestUrl("device_sensors", "device_orientation_absolute_test.html");
|
| + NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
|
| +
|
| + EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
|
| + orientation_absolute_started_runloop_->Run();
|
| + orientation_absolute_stopped_runloop_->Run();
|
| +}
|
| +
|
| IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, LightTest) {
|
| // The test page will register an event handler for light events,
|
| // expects to get an event with fake values, then removes the event
|
| @@ -350,6 +412,20 @@ IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, OrientationNullTest) {
|
| orientation_stopped_runloop_->Run();
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, OrientationAbsoluteNullTest) {
|
| + // The test page registers an event handler for absolute orientation events
|
| + // and expects to get an event with null values, because no sensor data can be
|
| + // provided.
|
| + fetcher_->SetSensorDataAvailable(false);
|
| + GURL test_url = GetTestUrl("device_sensors",
|
| + "device_orientation_absolute_null_test.html");
|
| + NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
|
| +
|
| + EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
|
| + orientation_absolute_started_runloop_->Run();
|
| + orientation_absolute_stopped_runloop_->Run();
|
| +}
|
| +
|
| IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, MotionNullTest) {
|
| // The test page registers an event handler for motion events and
|
| // expects to get an event with null values, because no sensor data can be
|
|
|