Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Unified Diff: content/browser/device_sensors/device_sensor_browsertest.cc

Issue 2948253002: Revert of Refactor DeviceMotionEventPump to use //device/generic_sensor instead of //device/sensors (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/renderer/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 971fc6c605b2bf8ea118c658c33f0b7b6864b2df..ef16d3810c34451a599a2cac2b32b964eb30b8e7 100644
--- a/content/browser/device_sensors/device_sensor_browsertest.cc
+++ b/content/browser/device_sensors/device_sensor_browsertest.cc
@@ -17,8 +17,6 @@
#include "content/public/test/test_utils.h"
#include "content/shell/browser/shell.h"
#include "content/shell/browser/shell_javascript_dialog_manager.h"
-#include "device/generic_sensor/platform_sensor.h"
-#include "device/generic_sensor/platform_sensor_provider.h"
#include "device/sensors/data_fetcher_shared_memory.h"
#include "device/sensors/device_sensor_service.h"
#include "device/sensors/public/cpp/device_motion_hardware_buffer.h"
@@ -33,6 +31,14 @@
FakeDataFetcher() : sensor_data_available_(true) {}
~FakeDataFetcher() override {}
+ void SetMotionStartedCallback(base::Closure motion_started_callback) {
+ motion_started_callback_ = motion_started_callback;
+ }
+
+ void SetMotionStoppedCallback(base::Closure motion_stopped_callback) {
+ motion_stopped_callback_ = motion_stopped_callback;
+ }
+
void SetOrientationStartedCallback(
base::Closure orientation_started_callback) {
orientation_started_callback_ = orientation_started_callback;
@@ -59,6 +65,15 @@
EXPECT_TRUE(buffer);
switch (consumer_type) {
+ case device::CONSUMER_TYPE_MOTION: {
+ device::DeviceMotionHardwareBuffer* motion_buffer =
+ static_cast<device::DeviceMotionHardwareBuffer*>(buffer);
+ if (sensor_data_available_)
+ UpdateMotion(motion_buffer);
+ SetMotionBufferReady(motion_buffer);
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ motion_started_callback_);
+ } break;
case device::CONSUMER_TYPE_ORIENTATION: {
device::DeviceOrientationHardwareBuffer* orientation_buffer =
static_cast<device::DeviceOrientationHardwareBuffer*>(buffer);
@@ -85,6 +100,10 @@
bool Stop(device::ConsumerType consumer_type) override {
switch (consumer_type) {
+ case device::CONSUMER_TYPE_MOTION:
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ motion_stopped_callback_);
+ break;
case device::CONSUMER_TYPE_ORIENTATION:
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
orientation_stopped_callback_);
@@ -109,9 +128,43 @@
sensor_data_available_ = available;
}
+ void SetMotionBufferReady(device::DeviceMotionHardwareBuffer* buffer) {
+ buffer->seqlock.WriteBegin();
+ buffer->data.all_available_sensors_are_active = true;
+ buffer->seqlock.WriteEnd();
+ }
+
void SetOrientationBufferReady(
device::DeviceOrientationHardwareBuffer* buffer) {
buffer->seqlock.WriteBegin();
+ buffer->data.all_available_sensors_are_active = true;
+ buffer->seqlock.WriteEnd();
+ }
+
+ void UpdateMotion(device::DeviceMotionHardwareBuffer* buffer) {
+ buffer->seqlock.WriteBegin();
+ buffer->data.acceleration_x = 1;
+ buffer->data.has_acceleration_x = true;
+ buffer->data.acceleration_y = 2;
+ buffer->data.has_acceleration_y = true;
+ buffer->data.acceleration_z = 3;
+ buffer->data.has_acceleration_z = true;
+
+ buffer->data.acceleration_including_gravity_x = 4;
+ buffer->data.has_acceleration_including_gravity_x = true;
+ buffer->data.acceleration_including_gravity_y = 5;
+ buffer->data.has_acceleration_including_gravity_y = true;
+ buffer->data.acceleration_including_gravity_z = 6;
+ buffer->data.has_acceleration_including_gravity_z = true;
+
+ buffer->data.rotation_rate_alpha = 7;
+ buffer->data.has_rotation_rate_alpha = true;
+ buffer->data.rotation_rate_beta = 8;
+ buffer->data.has_rotation_rate_beta = true;
+ buffer->data.rotation_rate_gamma = 9;
+ buffer->data.has_rotation_rate_gamma = true;
+
+ buffer->data.interval = 100;
buffer->data.all_available_sensors_are_active = true;
buffer->seqlock.WriteEnd();
}
@@ -143,195 +196,16 @@
}
// 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 motion_stopped_callback_;
base::Closure orientation_stopped_callback_;
base::Closure orientation_absolute_stopped_callback_;
bool sensor_data_available_;
private:
DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher);
-};
-
-class FakeAccelerometer : public device::PlatformSensor {
- public:
- FakeAccelerometer(mojo::ScopedSharedBufferMapping mapping,
- device::PlatformSensorProvider* provider)
- : PlatformSensor(device::mojom::SensorType::ACCELEROMETER,
- std::move(mapping),
- provider) {}
-
- device::mojom::ReportingMode GetReportingMode() override {
- return device::mojom::ReportingMode::ON_CHANGE;
- }
-
- bool StartSensor(
- const device::PlatformSensorConfiguration& configuration) override {
- device::SensorReading reading;
- reading.timestamp =
- (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
- reading.values[0] = 4;
- reading.values[1] = 5;
- reading.values[2] = 6;
- UpdateSensorReading(reading, true);
- return true;
- }
-
- void StopSensor() override {}
-
- protected:
- ~FakeAccelerometer() override = default;
-
- bool CheckSensorConfiguration(
- const device::PlatformSensorConfiguration& configuration) override {
- return true;
- }
-
- device::PlatformSensorConfiguration GetDefaultConfiguration() override {
- return device::PlatformSensorConfiguration(60 /* frequency */);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeAccelerometer);
-};
-
-class FakeLinearAccelerationSensor : public device::PlatformSensor {
- public:
- FakeLinearAccelerationSensor(mojo::ScopedSharedBufferMapping mapping,
- device::PlatformSensorProvider* provider)
- : PlatformSensor(device::mojom::SensorType::LINEAR_ACCELERATION,
- std::move(mapping),
- provider) {}
-
- device::mojom::ReportingMode GetReportingMode() override {
- return device::mojom::ReportingMode::CONTINUOUS;
- }
-
- bool StartSensor(
- const device::PlatformSensorConfiguration& configuration) override {
- device::SensorReading reading;
- reading.timestamp =
- (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
- reading.values[0] = 1;
- reading.values[1] = 2;
- reading.values[2] = 3;
- UpdateSensorReading(reading, true);
- return true;
- }
-
- void StopSensor() override {}
-
- protected:
- ~FakeLinearAccelerationSensor() override = default;
-
- bool CheckSensorConfiguration(
- const device::PlatformSensorConfiguration& configuration) override {
- return true;
- }
-
- device::PlatformSensorConfiguration GetDefaultConfiguration() override {
- return device::PlatformSensorConfiguration(60 /* frequency */);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeLinearAccelerationSensor);
-};
-
-class FakeGyroscope : public device::PlatformSensor {
- public:
- FakeGyroscope(mojo::ScopedSharedBufferMapping mapping,
- device::PlatformSensorProvider* provider)
- : PlatformSensor(device::mojom::SensorType::GYROSCOPE,
- std::move(mapping),
- provider) {}
-
- device::mojom::ReportingMode GetReportingMode() override {
- return device::mojom::ReportingMode::ON_CHANGE;
- }
-
- bool StartSensor(
- const device::PlatformSensorConfiguration& configuration) override {
- device::SensorReading reading;
- reading.timestamp =
- (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
- reading.values[0] = 7;
- reading.values[1] = 8;
- reading.values[2] = 9;
- UpdateSensorReading(reading, true);
- return true;
- }
-
- void StopSensor() override {}
-
- protected:
- ~FakeGyroscope() override = default;
-
- bool CheckSensorConfiguration(
- const device::PlatformSensorConfiguration& configuration) override {
- return true;
- }
-
- device::PlatformSensorConfiguration GetDefaultConfiguration() override {
- return device::PlatformSensorConfiguration(60 /* frequency */);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeGyroscope);
-};
-
-class FakeSensorProvider : public device::PlatformSensorProvider {
- public:
- static FakeSensorProvider* GetInstance() {
- return base::Singleton<FakeSensorProvider, base::LeakySingletonTraits<
- FakeSensorProvider>>::get();
- }
- FakeSensorProvider() {}
- ~FakeSensorProvider() override = default;
-
- void set_accelerometer_is_available(bool accelerometer_is_available) {
- accelerometer_is_available_ = accelerometer_is_available;
- }
-
- void set_linear_acceleration_sensor_is_available(
- bool linear_acceleration_sensor_is_available) {
- linear_acceleration_sensor_is_available_ =
- linear_acceleration_sensor_is_available;
- }
-
- void set_gyroscope_is_available(bool gyroscope_is_available) {
- gyroscope_is_available_ = gyroscope_is_available;
- }
-
- protected:
- void CreateSensorInternal(device::mojom::SensorType type,
- mojo::ScopedSharedBufferMapping mapping,
- const CreateSensorCallback& callback) override {
- // Create Sensors here.
- scoped_refptr<device::PlatformSensor> sensor;
-
- switch (type) {
- case device::mojom::SensorType::ACCELEROMETER:
- if (accelerometer_is_available_)
- sensor = new FakeAccelerometer(std::move(mapping), this);
- break;
- case device::mojom::SensorType::LINEAR_ACCELERATION:
- if (linear_acceleration_sensor_is_available_)
- sensor = new FakeLinearAccelerationSensor(std::move(mapping), this);
- break;
- case device::mojom::SensorType::GYROSCOPE:
- if (gyroscope_is_available_)
- sensor = new FakeGyroscope(std::move(mapping), this);
- break;
- default:
- NOTIMPLEMENTED();
- }
-
- callback.Run(std::move(sensor));
- }
-
- bool accelerometer_is_available_ = true;
- bool linear_acceleration_sensor_is_available_ = true;
- bool gyroscope_is_available_ = true;
};
class DeviceSensorBrowserTest : public ContentBrowserTest {
@@ -344,6 +218,8 @@
void SetUpOnMainThread() override {
// Initialize the RunLoops now that the main thread has been created.
+ motion_started_runloop_.reset(new base::RunLoop());
+ 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());
@@ -351,16 +227,20 @@
#if defined(OS_ANDROID)
// On Android, the DeviceSensorService lives on the UI thread.
SetUpFetcher();
-#endif // defined(OS_ANDROID)
+#else
+ // On all other platforms, the DeviceSensorService lives on the IO thread.
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&DeviceSensorBrowserTest::SetUpOnIOThread,
base::Unretained(this)));
io_loop_finished_event_.Wait();
+#endif
}
void SetUpFetcher() {
fetcher_ = new FakeDataFetcher();
+ fetcher_->SetMotionStartedCallback(motion_started_runloop_->QuitClosure());
+ fetcher_->SetMotionStoppedCallback(motion_stopped_runloop_->QuitClosure());
fetcher_->SetOrientationStartedCallback(
orientation_started_runloop_->QuitClosure());
fetcher_->SetOrientationStoppedCallback(
@@ -374,17 +254,8 @@
}
void SetUpOnIOThread() {
-#if !defined(OS_ANDROID)
- // On non-Android platforms, the DeviceSensorService lives on the IO thread.
SetUpFetcher();
-#endif // !defined(OS_ANDROID)
- sensor_provider_ = FakeSensorProvider::GetInstance();
- device::PlatformSensorProvider::SetProviderForTesting(sensor_provider_);
io_loop_finished_event_.Signal();
- }
-
- void TearDown() override {
- device::PlatformSensorProvider::SetProviderForTesting(nullptr);
}
void DelayAndQuit(base::TimeDelta delay) {
@@ -405,10 +276,11 @@
}
FakeDataFetcher* fetcher_;
- FakeSensorProvider* sensor_provider_;
// NOTE: These can only be initialized once the main thread has been created
// and so must be pointers instead of plain objects.
+ std::unique_ptr<base::RunLoop> motion_started_runloop_;
+ 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_;
@@ -451,6 +323,8 @@
NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+ motion_started_runloop_->Run();
+ motion_stopped_runloop_->Run();
}
IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, OrientationNullTest) {
@@ -485,27 +359,13 @@
// 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
// provided.
- sensor_provider_->set_accelerometer_is_available(false);
- sensor_provider_->set_linear_acceleration_sensor_is_available(false);
- sensor_provider_->set_gyroscope_is_available(false);
+ fetcher_->SetSensorDataAvailable(false);
GURL test_url = GetTestUrl("device_sensors", "device_motion_null_test.html");
NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
-}
-
-IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest,
- MotionOnlySomeSensorsAreAvailableTest) {
- // The test page registers an event handler for motion events and
- // expects to get an event with only the gyroscope and linear acceleration
- // sensor values, because no accelerometer values can be provided.
- sensor_provider_->set_accelerometer_is_available(false);
- GURL test_url =
- GetTestUrl("device_sensors",
- "device_motion_only_some_sensors_are_available_test.html");
- NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
-
- EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+ motion_started_runloop_->Run();
+ motion_stopped_runloop_->Run();
}
IN_PROC_BROWSER_TEST_F(DeviceSensorBrowserTest, NullTestWithAlert) {
@@ -515,9 +375,6 @@
// window after the alert is dismissed and the callbacks are invoked which
// eventually navigate to #pass.
fetcher_->SetSensorDataAvailable(false);
- sensor_provider_->set_accelerometer_is_available(false);
- sensor_provider_->set_linear_acceleration_sensor_is_available(false);
- sensor_provider_->set_gyroscope_is_available(false);
TestNavigationObserver same_tab_observer(shell()->web_contents(), 2);
GURL test_url =
@@ -528,6 +385,8 @@
// delay, crbug.com/360044.
WaitForAlertDialogAndQuitAfterDelay(base::TimeDelta::FromMilliseconds(500));
+ motion_started_runloop_->Run();
+ motion_stopped_runloop_->Run();
orientation_started_runloop_->Run();
orientation_stopped_runloop_->Run();
same_tab_observer.Wait();
« no previous file with comments | « no previous file | content/renderer/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698