Chromium Code Reviews| Index: content/browser/geolocation/geolocation_dispatcher_host.h |
| =================================================================== |
| --- content/browser/geolocation/geolocation_dispatcher_host.h (revision 269041) |
| +++ content/browser/geolocation/geolocation_dispatcher_host.h (working copy) |
| @@ -5,11 +5,8 @@ |
| #ifndef CONTENT_BROWSER_GEOLOCATION_GEOLOCATION_DISPATCHER_HOST_H_ |
| #define CONTENT_BROWSER_GEOLOCATION_GEOLOCATION_DISPATCHER_HOST_H_ |
| -#include <map> |
| -#include <set> |
| - |
| #include "content/browser/geolocation/geolocation_provider_impl.h" |
| -#include "content/public/browser/browser_message_filter.h" |
| +#include "content/public/browser/web_contents_observer.h" |
| class GURL; |
| @@ -17,75 +14,50 @@ |
| class GeolocationPermissionContext; |
| -// GeolocationDispatcherHost is a browser filter for Geolocation messages. |
| +// GeolocationDispatcherHost is an observer for Geolocation messages. |
| // It's the complement of GeolocationDispatcher (owned by RenderView). |
| -class GeolocationDispatcherHost : public BrowserMessageFilter { |
| +class GeolocationDispatcherHost : public WebContentsObserver { |
| public: |
| - GeolocationDispatcherHost( |
| - int render_process_id, |
| - GeolocationPermissionContext* geolocation_permission_context); |
| + explicit GeolocationDispatcherHost(WebContents* web_contents); |
| + virtual ~GeolocationDispatcherHost(); |
| - // Pause or resumes geolocation for the given |render_view_id|. Should |
| - // be called on the IO thread. Resuming when nothing is paused is a no-op. |
| - // If a renderer is paused while not currently using geolocation but |
| - // then goes on to do so before being resumed, then that renderer will |
| - // not get geolocation updates until it is resumed. |
| - void PauseOrResume(int render_view_id, bool should_pause); |
| + // Pause or resumes geolocation. Resuming when nothing is paused is a no-op. |
| + // If the web contents is paused while not currently using geolocation but |
| + // then goes on to do so before being resumed, then it will not get |
| + // geolocation updates until it is resumed. |
| + void PauseOrResume(bool should_pause); |
| private: |
| - virtual ~GeolocationDispatcherHost(); |
| + // WebContentsObserver |
| + virtual void RenderViewHostChanged(RenderViewHost* old_host, |
| + RenderViewHost* new_host) OVERRIDE; |
| + virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; |
| - // GeolocationDispatcherHost |
| - virtual bool OnMessageReceived(const IPC::Message& msg, |
| - bool* msg_was_ok) OVERRIDE; |
| - |
| // Message handlers: |
| - void OnRequestPermission(int render_view_id, |
| - int bridge_id, |
| + void OnRequestPermission(int bridge_id, |
| const GURL& requesting_frame, |
| bool user_gesture); |
| - void OnCancelPermissionRequest(int render_view_id, |
| - int bridge_id, |
| + void OnCancelPermissionRequest(int bridge_id, |
| const GURL& requesting_frame); |
| - void OnStartUpdating(int render_view_id, |
| - const GURL& requesting_frame, |
| + void OnStartUpdating(const GURL& requesting_frame, |
| bool enable_high_accuracy); |
| - void OnStopUpdating(int render_view_id); |
| + void OnStopUpdating(); |
| - // Updates the |geolocation_provider_| with the currently required update |
| + // Updates the geolocation provider with the currently required update |
| // options. |
| void RefreshGeolocationOptions(); |
| void OnLocationUpdate(const Geoposition& position); |
| - int render_process_id_; |
| scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_; |
| - struct RendererGeolocationOptions { |
| - bool high_accuracy; |
| - bool is_paused; |
| - }; |
| + bool watching_requested_; |
| + bool paused_; |
| + bool high_accuracy_; |
| - // Used to keep track of the renderers in this process that are using |
| - // geolocation and the options associated with them. The map is iterated |
| - // when a location update is available and the fan out to individual bridge |
| - // IDs happens renderer side, in order to minimize context switches. |
| - // Only used on the IO thread. |
| - std::map<int, RendererGeolocationOptions> geolocation_renderers_; |
| + scoped_ptr<content::GeolocationProvider::Subscription> |
|
Michael van Ouwerkerk
2014/05/08 13:20:02
nit: no need for content::
jam
2014/05/08 15:04:58
Done.
|
| + geolocation_subscription_; |
| - // Used by Android WebView to support that case that a renderer is in the |
| - // 'paused' state but not yet using geolocation. If the renderer does start |
| - // using geolocation while paused, we move from this set into |
| - // |geolocation_renderers_|. If the renderer doesn't end up wanting to use |
| - // geolocation while 'paused' then we remove from this set. A renderer id |
| - // can exist only in this set or |geolocation_renderers_|, never both. |
| - std::set<int> pending_paused_geolocation_renderers_; |
| - |
| - // Only set whilst we are registered with the geolocation provider. |
| - GeolocationProviderImpl* geolocation_provider_; |
| - |
| - GeolocationProviderImpl::LocationUpdateCallback callback_; |
| - |
| DISALLOW_COPY_AND_ASSIGN(GeolocationDispatcherHost); |
| }; |