Dispatch geolocation IPCs on the UI thread. Aside from simplifying the code to avoid a lot of thread hops, this sets things up for converting the code to work on RenderFrames instead of RenderViews.

In the process I also switched the code to use CallbackList which simplifies the registration.

BUG=304341
[email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]

Review URL: https://codereview.chromium.org/273523007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269795 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 0ca0f1a..7db4ec6 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -48,6 +48,7 @@
 class BrowserPluginGuestManager;
 class DateTimeChooserAndroid;
 class DownloadItem;
+class GeolocationDispatcherHost;
 class InterstitialPageImpl;
 class JavaScriptDialogManager;
 class PowerSaveBlocker;
@@ -160,6 +161,10 @@
 
   WebContentsView* GetView() const;
 
+  GeolocationDispatcherHost* geolocation_dispatcher_host() {
+    return geolocation_dispatcher_host_.get();
+  }
+
   // WebContents ------------------------------------------------------
   virtual WebContentsDelegate* GetDelegate() OVERRIDE;
   virtual void SetDelegate(WebContentsDelegate* delegate) OVERRIDE;
@@ -1092,6 +1097,8 @@
   // Whether the last JavaScript dialog shown was suppressed. Used for testing.
   bool last_dialog_suppressed_;
 
+  scoped_ptr<GeolocationDispatcherHost> geolocation_dispatcher_host_;
+
   DISALLOW_COPY_AND_ASSIGN(WebContentsImpl);
 };