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

Unified Diff: content/renderer/device_orientation/device_motion_event_pump_unittest.cc

Issue 14678012: Implement the content/renderer and content/browser part of the Device Motion API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compilation: peer_handle -> PeerHandle() Created 7 years, 5 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
Index: content/renderer/device_orientation/device_motion_event_pump_unittest.cc
diff --git a/content/renderer/device_orientation/device_motion_event_pump_unittest.cc b/content/renderer/device_orientation/device_motion_event_pump_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..fef8bbc684ee21f5d6d7ffc9f128dfc3c8be96b9
--- /dev/null
+++ b/content/renderer/device_orientation/device_motion_event_pump_unittest.cc
@@ -0,0 +1,183 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device_motion_event_pump.h"
+
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop.h"
+#include "content/common/device_motion_hardware_buffer.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/platform/WebDeviceMotionListener.h"
+
+namespace content {
+
+class DeviceMotionEventPumpTest : public testing::Test {
+};
+
+class MockDeviceMotionListener : public WebKit::WebDeviceMotionListener {
+ public:
+ MockDeviceMotionListener();
+ virtual ~MockDeviceMotionListener() { }
+ virtual void didChangeDeviceMotion(
+ const WebKit::WebDeviceMotionData&) OVERRIDE;
+ bool did_change_device_motion_;
+ WebKit::WebDeviceMotionData data_;
+};
+
+MockDeviceMotionListener::MockDeviceMotionListener()
+ : did_change_device_motion_(false) {
+ memset(&data_, 0, sizeof(data_));
+}
+
+void MockDeviceMotionListener::didChangeDeviceMotion(
+ const WebKit::WebDeviceMotionData& data) {
+ memcpy(&data_, &data, sizeof(data));
+ did_change_device_motion_ = true;
+}
+
+class DeviceMotionEventPumpForTesting : public DeviceMotionEventPump {
+ public:
+ DeviceMotionEventPumpForTesting() { }
+ virtual ~DeviceMotionEventPumpForTesting() { }
+ void OnDidStartDeviceMotion(base::SharedMemoryHandle handle);
+ bool SetListener(WebKit::WebDeviceMotionListener*);
+ bool StartFetchingDeviceMotion();
+ bool StopFetchingDeviceMotion();
+};
+
+bool DeviceMotionEventPumpForTesting::StartFetchingDeviceMotion() {
+ state_ = PENDING_START;
+ return true;
+}
+
+bool DeviceMotionEventPumpForTesting::StopFetchingDeviceMotion() {
+ if (timer_.IsRunning())
+ timer_.Stop();
+ state_ = STOPPED;
+ return true;
+}
+
+bool DeviceMotionEventPumpForTesting::SetListener(
+ WebKit::WebDeviceMotionListener* listener) {
+ listener_ = listener;
+ return (listener_) ? StartFetchingDeviceMotion() : StopFetchingDeviceMotion();
+}
+
+void DeviceMotionEventPumpForTesting::OnDidStartDeviceMotion(
+ base::SharedMemoryHandle handle) {
+ DeviceMotionEventPump::OnDidStartDeviceMotion(handle);
+}
+
+// Always failing in the win try bot. See http://crbug.com/256782.
+#if defined(OS_WIN)
+#define MAYBE_DidStartPolling DISABLED_DidStartPolling
+#else
+#define MAYBE_DidStartPolling DidStartPolling
+#endif
+TEST_F(DeviceMotionEventPumpTest, MAYBE_DidStartPolling) {
+ base::MessageLoop loop(base::MessageLoop::TYPE_UI);
+ scoped_ptr<MockDeviceMotionListener> listener(new MockDeviceMotionListener);
+ scoped_ptr<DeviceMotionEventPumpForTesting> motion_pump(
+ new DeviceMotionEventPumpForTesting);
+
+ base::SharedMemoryHandle handle;
+ base::SharedMemory shared_memory;
+ EXPECT_TRUE(shared_memory.CreateAndMapAnonymous(
+ sizeof(DeviceMotionHardwareBuffer)));
+ DeviceMotionHardwareBuffer* buffer =
+ static_cast<DeviceMotionHardwareBuffer*>(shared_memory.memory());
+ memset(buffer, 0, sizeof(DeviceMotionHardwareBuffer));
+ shared_memory.ShareToProcess(base::kNullProcessHandle, &handle);
+
+ WebKit::WebDeviceMotionData& data = buffer->data;
+ data.accelerationX = 1;
+ data.hasAccelerationX = true;
+ data.accelerationY = 2;
+ data.hasAccelerationY = true;
+ data.accelerationZ = 3;
+ data.hasAccelerationZ = true;
+ data.allAvailableSensorsAreActive = true;
+
+ motion_pump->SetListener(listener.get());
+ motion_pump->OnDidStartDeviceMotion(handle);
+ base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
+ DeviceMotionEventPump::GetDelayMillis() * 2));
+ RunAllPendingInMessageLoop();
+ motion_pump->SetListener(0);
+
+ WebKit::WebDeviceMotionData& received_data = listener->data_;
+ EXPECT_TRUE(listener->did_change_device_motion_);
+ EXPECT_TRUE(received_data.hasAccelerationX);
+ EXPECT_EQ(1, (double)received_data.accelerationX);
+ EXPECT_TRUE(received_data.hasAccelerationX);
+ EXPECT_EQ(2, (double)received_data.accelerationY);
+ EXPECT_TRUE(received_data.hasAccelerationY);
+ EXPECT_EQ(3, (double)received_data.accelerationZ);
+ EXPECT_TRUE(received_data.hasAccelerationZ);
+ EXPECT_FALSE(received_data.hasAccelerationIncludingGravityX);
+ EXPECT_FALSE(received_data.hasAccelerationIncludingGravityY);
+ EXPECT_FALSE(received_data.hasAccelerationIncludingGravityZ);
+ EXPECT_FALSE(received_data.hasRotationRateAlpha);
+ EXPECT_FALSE(received_data.hasRotationRateBeta);
+ EXPECT_FALSE(received_data.hasRotationRateGamma);
+}
+
+// Although this test passes on windows builds it is not certain if it does
+// so for the right reason. See http://crbug.com/256782.
+#if defined(OS_WIN)
+#define MAYBE_DidStartPollingNotAllSensorsActive \
+ DISABLED_DidStartPollingNotAllSensorsActive
+#else
+#define MAYBE_DidStartPollingNotAllSensorsActive \
+ DidStartPollingNotAllSensorsActive
+#endif
+TEST_F(DeviceMotionEventPumpTest, MAYBE_DidStartPollingNotAllSensorsActive) {
+ base::MessageLoop loop(base::MessageLoop::TYPE_UI);
+ scoped_ptr<MockDeviceMotionListener> listener(new MockDeviceMotionListener);
+ scoped_ptr<DeviceMotionEventPumpForTesting> motion_pump(
+ new DeviceMotionEventPumpForTesting);
+
+ base::SharedMemoryHandle handle;
+ base::SharedMemory shared_memory;
+ EXPECT_TRUE(shared_memory.CreateAndMapAnonymous(
+ sizeof(DeviceMotionHardwareBuffer)));
+ DeviceMotionHardwareBuffer* buffer =
+ static_cast<DeviceMotionHardwareBuffer*>(shared_memory.memory());
+ memset(buffer, 0, sizeof(DeviceMotionHardwareBuffer));
+ shared_memory.ShareToProcess(base::kNullProcessHandle, &handle);
+
+ WebKit::WebDeviceMotionData& data = buffer->data;
+ data.accelerationX = 1;
+ data.hasAccelerationX = true;
+ data.accelerationY = 2;
+ data.hasAccelerationY = true;
+ data.accelerationZ = 3;
+ data.hasAccelerationZ = true;
+ data.allAvailableSensorsAreActive = false;
+
+ motion_pump->SetListener(listener.get());
+ motion_pump->OnDidStartDeviceMotion(handle);
+ base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
+ DeviceMotionEventPump::GetDelayMillis() * 2));
+ RunAllPendingInMessageLoop();
+ motion_pump->SetListener(0);
+
+ WebKit::WebDeviceMotionData& received_data = listener->data_;
+ // No change in device motion because allAvailableSensorsAreActive is false.
+ EXPECT_FALSE(listener->did_change_device_motion_);
+ EXPECT_FALSE(received_data.hasAccelerationX);
+ EXPECT_FALSE(received_data.hasAccelerationX);
+ EXPECT_FALSE(received_data.hasAccelerationY);
+ EXPECT_FALSE(received_data.hasAccelerationZ);
+ EXPECT_FALSE(received_data.hasAccelerationIncludingGravityX);
+ EXPECT_FALSE(received_data.hasAccelerationIncludingGravityY);
+ EXPECT_FALSE(received_data.hasAccelerationIncludingGravityZ);
+ EXPECT_FALSE(received_data.hasRotationRateAlpha);
+ EXPECT_FALSE(received_data.hasRotationRateBeta);
+ EXPECT_FALSE(received_data.hasRotationRateGamma);
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698