12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // 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.
- // A wifi data provider provides wifi data from the device that is used by a
- // NetworkLocationProvider to obtain a position fix. We use a singleton
- // instance of the wifi data provider manager, which is used by multiple
- // NetworkLocationProvider objects.
- //
- // This file provides WifiDataProviderHandle, which provides static methods to
- // access the singleton instance. The singleton instance uses a private
- // implementation of WifiDataProvider to abstract across platforms and also to
- // allow mock providers to be used for testing.
- #ifndef SERVICES_DEVICE_GEOLOCATION_WIFI_DATA_PROVIDER_HANDLE_H_
- #define SERVICES_DEVICE_GEOLOCATION_WIFI_DATA_PROVIDER_HANDLE_H_
- #include "base/bind.h"
- #include "base/callback.h"
- #include "base/memory/ref_counted.h"
- #include "base/strings/string_util.h"
- #include "services/device/geolocation/wifi_data.h"
- namespace device {
- class WifiDataProvider;
- // A handle for using wifi data providers.
- //
- // We use a singleton instance of WifiDataProvider which is shared by multiple
- // network location providers.
- class WifiDataProviderHandle {
- public:
- typedef WifiDataProvider* (*ImplFactoryFunction)();
- typedef base::RepeatingClosure WifiDataUpdateCallback;
- // Sets the factory function which will be used by Register to create the
- // implementation used by the singleton instance. This factory approach is
- // used both to abstract across platform-specific implementations and to
- // inject mock implementations for testing.
- static void SetFactoryForTesting(ImplFactoryFunction factory_function_in);
- // Resets the factory function to the default.
- static void ResetFactoryForTesting();
- // Creates a handle on WifiDataProvider.
- static std::unique_ptr<WifiDataProviderHandle> CreateHandle(
- WifiDataUpdateCallback* callback);
- ~WifiDataProviderHandle();
- WifiDataProviderHandle(const WifiDataProviderHandle&) = delete;
- WifiDataProviderHandle& operator=(const WifiDataProviderHandle&) = delete;
- // Returns true if the data provider is currently delayed by polling policy.
- bool DelayedByPolicy();
- // Provides whatever data the provider has, which may be nothing. Return
- // value indicates whether this is all the data the provider could ever
- // obtain.
- bool GetData(WifiData* data);
- void ForceRescan();
- private:
- explicit WifiDataProviderHandle(WifiDataUpdateCallback* callback);
- void AddCallback(WifiDataUpdateCallback* callback);
- bool RemoveCallback(WifiDataUpdateCallback* callback);
- bool has_callbacks() const;
- void StartDataProvider();
- void StopDataProvider();
- static WifiDataProvider* DefaultFactoryFunction();
- static scoped_refptr<WifiDataProvider> GetOrCreateProvider();
- // The factory function used to create the singleton instance.
- static ImplFactoryFunction factory_function_;
- scoped_refptr<WifiDataProvider> impl_;
- WifiDataUpdateCallback* callback_;
- };
- } // namespace device
- #endif // SERVICES_DEVICE_GEOLOCATION_WIFI_DATA_PROVIDER_HANDLE_H_
|