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

Unified Diff: content/browser/geolocation/wifi_data_provider_manager.cc

Issue 2188933002: Revert of Reland: Geolocation: move from content/browser to device/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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/browser/geolocation/wifi_data_provider_manager.cc
diff --git a/content/browser/geolocation/wifi_data_provider_manager.cc b/content/browser/geolocation/wifi_data_provider_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cf53657e53a61ba13ffbac13d8307ac6e6761c82
--- /dev/null
+++ b/content/browser/geolocation/wifi_data_provider_manager.cc
@@ -0,0 +1,98 @@
+// Copyright 2014 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 "content/browser/geolocation/wifi_data_provider_manager.h"
+
+#include "content/browser/geolocation/wifi_data_provider.h"
+
+namespace content {
+
+// static
+WifiDataProviderManager* WifiDataProviderManager::instance_ = NULL;
+
+// static
+WifiDataProviderManager::ImplFactoryFunction
+ WifiDataProviderManager::factory_function_ = DefaultFactoryFunction;
+
+// static
+void WifiDataProviderManager::SetFactoryForTesting(
+ ImplFactoryFunction factory_function_in) {
+ factory_function_ = factory_function_in;
+}
+
+// static
+void WifiDataProviderManager::ResetFactoryForTesting() {
+ factory_function_ = DefaultFactoryFunction;
+}
+
+// static
+WifiDataProviderManager* WifiDataProviderManager::Register(
+ WifiDataUpdateCallback* callback) {
+ bool need_to_start_data_provider = false;
+ if (!instance_) {
+ instance_ = new WifiDataProviderManager();
+ need_to_start_data_provider = true;
+ }
+ DCHECK(instance_);
+ instance_->AddCallback(callback);
+ // Start the provider after adding the callback, to avoid any race in
+ // it running early.
+ if (need_to_start_data_provider)
+ instance_->StartDataProvider();
+ return instance_;
+}
+
+// static
+bool WifiDataProviderManager::Unregister(WifiDataUpdateCallback* callback) {
+ DCHECK(instance_);
+ DCHECK(instance_->has_callbacks());
+ if (!instance_->RemoveCallback(callback)) {
+ return false;
+ }
+ if (!instance_->has_callbacks()) {
+ // Must stop the data provider (and any implementation threads) before
+ // destroying to avoid any race conditions in access to the provider in
+ // the destructor chain.
+ instance_->StopDataProvider();
+ delete instance_;
+ instance_ = NULL;
+ }
+ return true;
+}
+
+WifiDataProviderManager::WifiDataProviderManager() {
+ DCHECK(factory_function_);
+ impl_ = (*factory_function_)();
+ DCHECK(impl_.get());
+}
+
+WifiDataProviderManager::~WifiDataProviderManager() {
+ DCHECK(impl_.get());
+}
+
+bool WifiDataProviderManager::GetData(WifiData* data) {
+ return impl_->GetData(data);
+}
+
+void WifiDataProviderManager::AddCallback(WifiDataUpdateCallback* callback) {
+ impl_->AddCallback(callback);
+}
+
+bool WifiDataProviderManager::RemoveCallback(WifiDataUpdateCallback* callback) {
+ return impl_->RemoveCallback(callback);
+}
+
+bool WifiDataProviderManager::has_callbacks() const {
+ return impl_->has_callbacks();
+}
+
+void WifiDataProviderManager::StartDataProvider() {
+ impl_->StartDataProvider();
+}
+
+void WifiDataProviderManager::StopDataProvider() {
+ impl_->StopDataProvider();
+}
+
+} // namespace content
« no previous file with comments | « content/browser/geolocation/wifi_data_provider_manager.h ('k') | content/browser/geolocation/wifi_data_provider_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698