1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_GEOLOCATION_MOCK_LOCATION_PROVIDER_H_ 6#define CONTENT_BROWSER_GEOLOCATION_MOCK_LOCATION_PROVIDER_H_ 7 8 9#include "base/compiler_specific.h" 10#include "base/memory/ref_counted.h" 11#include "base/threading/thread.h" 12#include "content/browser/geolocation/location_provider_base.h" 13#include "content/public/common/geoposition.h" 14 15namespace content { 16 17// Mock implementation of a location provider for testing. 18class MockLocationProvider : public LocationProviderBase { 19 public: 20 // Will update |*self_ref| to point to |this| on construction, and to NULL 21 // on destruction. 22 explicit MockLocationProvider(MockLocationProvider** self_ref); 23 virtual ~MockLocationProvider(); 24 25 // Updates listeners with the new position. 26 void HandlePositionChanged(const Geoposition& position); 27 28 // LocationProvider implementation. 29 virtual bool StartProvider(bool high_accuracy) OVERRIDE; 30 virtual void StopProvider() OVERRIDE; 31 virtual void GetPosition(Geoposition* position) OVERRIDE; 32 virtual void OnPermissionGranted() OVERRIDE; 33 34 Geoposition position_; 35 enum State { STOPPED, LOW_ACCURACY, HIGH_ACCURACY } state_; 36 bool is_permission_granted_; 37 MockLocationProvider** self_ref_; 38 39 scoped_refptr<base::MessageLoopProxy> provider_loop_; 40 41 // Set when an instance of the mock is created via a factory function. 42 static MockLocationProvider* instance_; 43 44 DISALLOW_COPY_AND_ASSIGN(MockLocationProvider); 45}; 46 47// Factory functions for the various sorts of mock location providers, 48// for use with LocationArbitrator::SetProviderFactoryForTest (i.e. 49// not intended for test code to use to get access to the mock, you can use 50// MockLocationProvider::instance_ for this, or make a custom factory method). 51 52// Creates a mock location provider with no default behavior. 53LocationProvider* NewMockLocationProvider(); 54// Creates a mock location provider that automatically notifies its 55// listeners with a valid location when StartProvider is called. 56LocationProvider* NewAutoSuccessMockLocationProvider(); 57// Creates a mock location provider that automatically notifies its 58// listeners with an error when StartProvider is called. 59LocationProvider* NewAutoFailMockLocationProvider(); 60// Similar to NewAutoSuccessMockLocationProvider but mimicks the behavior of 61// the Network Location provider, in deferring making location updates until 62// a permission request has been confirmed. 63LocationProvider* NewAutoSuccessMockNetworkLocationProvider(); 64 65} // namespace content 66 67#endif // CONTENT_BROWSER_GEOLOCATION_MOCK_LOCATION_PROVIDER_H_ 68