Index: device/geolocation/fake_location_provider.cc |
diff --git a/device/geolocation/fake_location_provider.cc b/device/geolocation/fake_location_provider.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..18e25694bbc2652acee1c95db2e9fa5cae511967 |
--- /dev/null |
+++ b/device/geolocation/fake_location_provider.cc |
@@ -0,0 +1,57 @@ |
+// 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. |
+ |
+// This file implements a fake location provider and the factory functions for |
+// various ways of creating it. |
+// TODO(lethalantidote): Convert location_arbitrator_impl to use actual mock |
+// instead of FakeLocationProvider. |
+ |
+#include "device/geolocation/fake_location_provider.h" |
+ |
+#include "base/bind.h" |
+#include "base/bind_helpers.h" |
+#include "base/compiler_specific.h" |
+#include "base/location.h" |
+#include "base/logging.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+ |
+namespace device { |
+ |
+FakeLocationProvider::FakeLocationProvider() |
+ : provider_task_runner_(base::ThreadTaskRunnerHandle::Get()) {} |
+ |
+FakeLocationProvider::~FakeLocationProvider() {} |
+ |
+void FakeLocationProvider::HandlePositionChanged(const Geoposition& position) { |
+ if (provider_task_runner_->BelongsToCurrentThread()) { |
+ // The location arbitrator unit tests rely on this method running |
+ // synchronously. |
+ position_ = position; |
+ NotifyCallback(position_); |
+ } else { |
+ provider_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&FakeLocationProvider::HandlePositionChanged, |
+ base::Unretained(this), position)); |
+ } |
+} |
+ |
+bool FakeLocationProvider::StartProvider(bool high_accuracy) { |
+ state_ = high_accuracy ? HIGH_ACCURACY : LOW_ACCURACY; |
+ return true; |
+} |
+ |
+void FakeLocationProvider::StopProvider() { |
+ state_ = STOPPED; |
+} |
+ |
+const Geoposition& FakeLocationProvider::GetPosition() { |
+ return position_; |
+} |
+ |
+void FakeLocationProvider::OnPermissionGranted() { |
+ is_permission_granted_ = true; |
+} |
+ |
+} // namespace device |