Index: device/gamepad/gamepad_data_fetcher_manager.cc |
diff --git a/device/gamepad/gamepad_data_fetcher_manager.cc b/device/gamepad/gamepad_data_fetcher_manager.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6b46eb80978a2307afea2a6d5c9440b329c95e99 |
--- /dev/null |
+++ b/device/gamepad/gamepad_data_fetcher_manager.cc |
@@ -0,0 +1,63 @@ |
+// Copyright 2016 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/gamepad/gamepad_data_fetcher_manager.h" |
+ |
+#include "device/gamepad/gamepad_data_fetcher.h" |
+#include "device/gamepad/gamepad_platform_data_fetcher.h" |
+ |
+namespace device { |
+ |
+namespace { |
+GamepadDataFetcherManager* g_gamepad_data_fetcher_manager = 0; |
+} |
+ |
+GamepadDataFetcherManager::GamepadDataFetcherManager() : provider_(nullptr) {} |
+ |
+GamepadDataFetcherManager::~GamepadDataFetcherManager() {} |
+ |
+GamepadDataFetcherManager* GamepadDataFetcherManager::GetInstance() { |
+ if (!g_gamepad_data_fetcher_manager) { |
+ g_gamepad_data_fetcher_manager = new GamepadDataFetcherManager; |
+ |
+ // Add platform specific data fetchers |
+ AddGamepadPlatformDataFetchers(g_gamepad_data_fetcher_manager); |
+ } |
+ return g_gamepad_data_fetcher_manager; |
+} |
+ |
+void GamepadDataFetcherManager::AddFactory(GamepadDataFetcherFactory* factory) { |
+ factories_.push_back(factory); |
+ if (provider_) { |
+ provider_->AddGamepadDataFetcher(factory->CreateDataFetcher()); |
+ } |
+} |
+ |
+void GamepadDataFetcherManager::RemoveSourceFactory(GamepadSource source) { |
+ if (provider_) |
+ provider_->RemoveSourceGamepadDataFetcher(source); |
+ |
+ for (FactoryVector::iterator it = factories_.begin(); it != factories_.end(); |
+ ++it) { |
+ if ((*it)->source() == source) { |
+ delete (*it); |
+ factories_.erase(it); |
+ } |
+ } |
+} |
+ |
+void GamepadDataFetcherManager::InitializeProvider(GamepadProvider* provider) { |
+ DCHECK(!provider_); |
+ |
+ provider_ = provider; |
+ for (const auto& it : factories_) { |
+ provider_->AddGamepadDataFetcher(it->CreateDataFetcher()); |
+ } |
+} |
+ |
+void GamepadDataFetcherManager::ClearProvider() { |
+ provider_ = nullptr; |
+} |
+ |
+} // namespace device |