| // 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; |
| if (!callback_.is_null()) |
| callback_.Run(this, position_); |
| } else { |
| provider_task_runner_->PostTask( |
| FROM_HERE, base::Bind(&FakeLocationProvider::HandlePositionChanged, |
| base::Unretained(this), position)); |
| } |
| } |
| |
| void FakeLocationProvider::SetUpdateCallback( |
| const LocationProviderUpdateCallback& callback) { |
| callback_ = callback; |
| } |
| |
| 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 |