Index: content/browser/gamepad/gamepad_test_helpers.h |
diff --git a/content/browser/gamepad/gamepad_test_helpers.h b/content/browser/gamepad/gamepad_test_helpers.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a31b147e59b319adcca07d2f030597ba0901545c |
--- /dev/null |
+++ b/content/browser/gamepad/gamepad_test_helpers.h |
@@ -0,0 +1,90 @@ |
+// Copyright (c) 2012 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. |
+ |
+#ifndef CONTENT_BROWSER_GAMEPAD_GAMEPAD_TEST_HELPERS_H_ |
+#define CONTENT_BROWSER_GAMEPAD_GAMEPAD_TEST_HELPERS_H_ |
+ |
+#include "base/memory/scoped_ptr.h" |
+#include "base/message_loop.h" |
+#include "base/synchronization/lock.h" |
+#include "base/synchronization/waitable_event.h" |
+#include "content/browser/gamepad/gamepad_data_fetcher.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebGamepads.h" |
+ |
+namespace base { |
+class SystemMonitor; |
+} |
+ |
+namespace content { |
+ |
+class GamepadService; |
+ |
+// Data fetcher that returns canned data for the gamepad provider. |
+class MockGamepadDataFetcher : public GamepadDataFetcher { |
+ public: |
+ // Initializes the fetcher with the given gamepad data, which will be |
+ // returned when the provider queries us. |
+ explicit MockGamepadDataFetcher(const WebKit::WebGamepads& test_data); |
+ |
+ virtual ~MockGamepadDataFetcher(); |
+ |
+ // GamepadDataFetcher. |
+ virtual void GetGamepadData(WebKit::WebGamepads* pads, |
+ bool devices_changed_hint) OVERRIDE; |
+ |
+ // Blocks the current thread until the GamepadProvider reads from this |
+ // fetcher on the background thread. |
+ void WaitForDataRead(); |
+ |
+ // Updates the test data. |
+ void SetTestData(const WebKit::WebGamepads& new_data); |
+ |
+ private: |
+ base::Lock lock_; |
+ WebKit::WebGamepads test_data_; |
+ base::WaitableEvent read_data_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MockGamepadDataFetcher); |
+}; |
+ |
+// Base class for the other test helpers. This just sets up the system monitor. |
+class GamepadTestHelper { |
+ public: |
+ GamepadTestHelper(); |
+ virtual ~GamepadTestHelper(); |
+ |
+ MessageLoop& message_loop() { return message_loop_; } |
+ |
+ private: |
+ // This must be constructed before the system monitor. |
+ MessageLoop message_loop_; |
+ |
+ scoped_ptr<base::SystemMonitor> system_monitor_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GamepadTestHelper); |
+}; |
+ |
+// Constructs a GamepadService with a mock data source. This bypasses the |
+// global singleton for the gamepad service. |
+class GamepadServiceTestConstructor : public GamepadTestHelper { |
+ public: |
+ GamepadServiceTestConstructor(const WebKit::WebGamepads& test_data); |
+ virtual ~GamepadServiceTestConstructor(); |
+ |
+ GamepadService* gamepad_service() { return gamepad_service_; } |
+ MockGamepadDataFetcher* data_fetcher() { return data_fetcher_; } |
+ |
+ private: |
+ // Owning pointer (can't be a scoped_ptr due to private destructor). |
+ GamepadService* gamepad_service_; |
+ |
+ // Pointer owned by the provider (which is owned by the gamepad service). |
+ MockGamepadDataFetcher* data_fetcher_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GamepadServiceTestConstructor); |
+}; |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_BROWSER_GAMEPAD_GAMEPAD_TEST_HELPERS_H_ |