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 15 namespace content { 16 17 // Mock implementation of a location provider for testing. 18 class 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 GeolocationArbitrator::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. 53 LocationProvider* NewMockLocationProvider(); 54 // Creates a mock location provider that automatically notifies its 55 // listeners with a valid location when StartProvider is called. 56 LocationProvider* NewAutoSuccessMockLocationProvider(); 57 // Creates a mock location provider that automatically notifies its 58 // listeners with an error when StartProvider is called. 59 LocationProvider* 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. 63 LocationProvider* NewAutoSuccessMockNetworkLocationProvider(); 64 65 } // namespace content 66 67 #endif // CONTENT_BROWSER_GEOLOCATION_MOCK_LOCATION_PROVIDER_H_ 68