// 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/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/public/platform/WebGamepads.h" 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 blink::WebGamepads& test_data); virtual ~MockGamepadDataFetcher(); // GamepadDataFetcher. virtual void GetGamepadData(blink::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 blink::WebGamepads& new_data); private: base::Lock lock_; blink::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(); base::MessageLoop& message_loop() { return message_loop_; } private: // This must be constructed before the system monitor. base::MessageLoop message_loop_; 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: explicit GamepadServiceTestConstructor(const blink::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_