Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / geolocation / geolocation_provider_impl.h
index 6613f44..d3cc121 100644 (file)
@@ -21,43 +21,30 @@ template<typename Type> struct DefaultSingletonTraits;
 namespace content {
 class LocationArbitrator;
 
-// This is the main API to the geolocation subsystem. The application will hold
-// a single instance of this class and can register multiple clients to be
-// notified of location changes:
-// * Callbacks are registered by AddLocationUpdateCallback() and will keep
-//   receiving updates until unregistered by RemoveLocationUpdateCallback().
-// The application must instantiate the GeolocationProvider on the IO thread and
-// must communicate with it on the same thread.
-// The underlying location arbitrator will only be enabled whilst there is at
-// least one registered observer or pending callback. The arbitrator and the
-// location providers it uses run on a separate Geolocation thread.
 class CONTENT_EXPORT GeolocationProviderImpl
     : public NON_EXPORTED_BASE(GeolocationProvider),
       public base::Thread {
  public:
   // GeolocationProvider implementation:
-  virtual void AddLocationUpdateCallback(const LocationUpdateCallback& callback,
-                                         bool use_high_accuracy) OVERRIDE;
-  virtual bool RemoveLocationUpdateCallback(
-      const LocationUpdateCallback& callback) OVERRIDE;
+  virtual scoped_ptr<GeolocationProvider::Subscription>
+      AddLocationUpdateCallback(const LocationUpdateCallback& callback,
+                                bool use_high_accuracy) OVERRIDE;
   virtual void UserDidOptIntoLocationServices() OVERRIDE;
-
-  bool LocationServicesOptedIn() const;
-
-  // Overrides the location for automation/testing. Suppresses any further
-  // updates from the actual providers and sends an update with the overridden
-  // position to all registered clients.
-  void OverrideLocationForTesting(const Geoposition& override_position);
+  virtual void OverrideLocationForTesting(const Geoposition& position) OVERRIDE;
 
   // Callback from the LocationArbitrator. Public for testing.
   void OnLocationUpdate(const Geoposition& position);
 
   // Gets a pointer to the singleton instance of the location relayer, which
   // is in turn bound to the browser's global context objects. This must only be
-  // called on the IO thread so that the GeolocationProviderImpl is always
+  // called on the UI thread so that the GeolocationProviderImpl is always
   // instantiated on the same thread. Ownership is NOT returned.
   static GeolocationProviderImpl* GetInstance();
 
+  bool user_did_opt_into_location_services_for_testing() {
+    return user_did_opt_into_location_services_;
+  }
+
  protected:
   friend struct DefaultSingletonTraits<GeolocationProviderImpl>;
   GeolocationProviderImpl();
@@ -67,9 +54,6 @@ class CONTENT_EXPORT GeolocationProviderImpl
   virtual LocationArbitrator* CreateArbitrator();
 
  private:
-  typedef std::pair<LocationUpdateCallback, bool> LocationUpdateInfo;
-  typedef std::list<LocationUpdateInfo> CallbackList;
-
   bool OnGeolocationThread() const;
 
   // Start and stop providers as needed when clients are added or removed.
@@ -94,8 +78,9 @@ class CONTENT_EXPORT GeolocationProviderImpl
   virtual void Init() OVERRIDE;
   virtual void CleanUp() OVERRIDE;
 
-  // Only used on the IO thread
-  CallbackList callbacks_;
+  base::CallbackList<void(const Geoposition&)> high_accuracy_callbacks_;
+  base::CallbackList<void(const Geoposition&)> low_accuracy_callbacks_;
+
   bool user_did_opt_into_location_services_;
   Geoposition position_;