Handle IPC messages related to provisional loads in RenderViewHostImpl

Instead of handling the messages directly in WebContentsImpl, respective
callbacks are added to RenderViewHostDelegate. That way, RenderViewHost can
include a pointer to itself with the messages, so it's clear what RenderView is
navigating.

BUG=126160
TEST=none

Review URL: https://chromiumcodereview.appspot.com/10332012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@135918 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 2bdb987..2aba4bc 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -568,12 +568,6 @@
                         OnRegisterIntentService)
     IPC_MESSAGE_HANDLER(IntentsHostMsg_WebIntentDispatch,
                         OnWebIntentDispatch)
-    IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame,
-                        OnDidStartProvisionalLoadForFrame)
-    IPC_MESSAGE_HANDLER(ViewHostMsg_DidRedirectProvisionalLoad,
-                        OnDidRedirectProvisionalLoad)
-    IPC_MESSAGE_HANDLER(ViewHostMsg_DidFailProvisionalLoadWithError,
-                        OnDidFailProvisionalLoadWithError)
     IPC_MESSAGE_HANDLER(ViewHostMsg_DidLoadResourceFromMemoryCache,
                         OnDidLoadResourceFromMemoryCache)
     IPC_MESSAGE_HANDLER(ViewHostMsg_DidDisplayInsecureContent,
@@ -1488,31 +1482,34 @@
   delegate_->WebIntentDispatch(this, intents_dispatcher);
 }
 
-void WebContentsImpl::OnDidStartProvisionalLoadForFrame(int64 frame_id,
-                                                        bool is_main_frame,
-                                                        const GURL& opener_url,
-                                                        const GURL& url) {
+void WebContentsImpl::DidStartProvisionalLoadForFrame(
+    content::RenderViewHost* render_view_host,
+    int64 frame_id,
+    bool is_main_frame,
+    const GURL& opener_url,
+    const GURL& url) {
   bool is_error_page = (url.spec() == content::kUnreachableWebDataURL);
   GURL validated_url(url);
   GURL validated_opener_url(opener_url);
-  GetRenderViewHostImpl()->FilterURL(
+  RenderViewHostImpl* render_view_host_impl =
+      static_cast<RenderViewHostImpl*>(render_view_host);
+  content::RenderProcessHost* render_process_host =
+      render_view_host->GetProcess();
+  render_view_host_impl->FilterURL(
       ChildProcessSecurityPolicyImpl::GetInstance(),
-      GetRenderProcessHost()->GetID(),
+      render_process_host->GetID(),
       false,
       &validated_url);
-  GetRenderViewHostImpl()->FilterURL(
+  render_view_host_impl->FilterURL(
       ChildProcessSecurityPolicyImpl::GetInstance(),
-      GetRenderProcessHost()->GetID(),
+      render_process_host->GetID(),
       true,
       &validated_opener_url);
 
-  RenderViewHost* rvh =
-      render_manager_.pending_render_view_host() ?
-          render_manager_.pending_render_view_host() : GetRenderViewHost();
   // Notify observers about the start of the provisional load.
   FOR_EACH_OBSERVER(WebContentsObserver, observers_,
                     DidStartProvisionalLoadForFrame(frame_id, is_main_frame,
-                    validated_url, is_error_page, rvh));
+                    validated_url, is_error_page, render_view_host));
 
   if (is_main_frame) {
     // Notify observers about the provisional change in the main frame URL.
@@ -1522,36 +1519,44 @@
   }
 }
 
-void WebContentsImpl::OnDidRedirectProvisionalLoad(int32 page_id,
-                                                   const GURL& opener_url,
-                                                   const GURL& source_url,
-                                                   const GURL& target_url) {
+void WebContentsImpl::DidRedirectProvisionalLoad(
+    content::RenderViewHost* render_view_host,
+    int32 page_id,
+    const GURL& opener_url,
+    const GURL& source_url,
+    const GURL& target_url) {
   // TODO(creis): Remove this method and have the pre-rendering code listen to
   // the ResourceDispatcherHost's RESOURCE_RECEIVED_REDIRECT notification
   // instead.  See http://crbug.com/78512.
   GURL validated_source_url(source_url);
   GURL validated_target_url(target_url);
   GURL validated_opener_url(opener_url);
-  GetRenderViewHostImpl()->FilterURL(
+  RenderViewHostImpl* render_view_host_impl =
+      static_cast<RenderViewHostImpl*>(render_view_host);
+  content::RenderProcessHost* render_process_host =
+      render_view_host->GetProcess();
+  render_view_host_impl->FilterURL(
       ChildProcessSecurityPolicyImpl::GetInstance(),
-      GetRenderProcessHost()->GetID(),
+      render_process_host->GetID(),
       false,
       &validated_source_url);
-  GetRenderViewHostImpl()->FilterURL(
+  render_view_host_impl->FilterURL(
       ChildProcessSecurityPolicyImpl::GetInstance(),
-      GetRenderProcessHost()->GetID(),
+      render_process_host->GetID(),
       false,
       &validated_target_url);
-  GetRenderViewHostImpl()->FilterURL(
+  render_view_host_impl->FilterURL(
       ChildProcessSecurityPolicyImpl::GetInstance(),
-      GetRenderProcessHost()->GetID(),
+      render_process_host->GetID(),
       true,
       &validated_opener_url);
   NavigationEntry* entry;
-  if (page_id == -1)
+  if (page_id == -1) {
     entry = controller_.GetPendingEntry();
-  else
-    entry = controller_.GetEntryWithPageID(GetSiteInstance(), page_id);
+  } else {
+    entry = controller_.GetEntryWithPageID(render_view_host->GetSiteInstance(),
+                                           page_id);
+  }
   if (!entry || entry->GetURL() != validated_source_url)
     return;
 
@@ -1561,7 +1566,8 @@
                                                     validated_opener_url));
 }
 
-void WebContentsImpl::OnDidFailProvisionalLoadWithError(
+void WebContentsImpl::DidFailProvisionalLoadWithError(
+    content::RenderViewHost* render_view_host,
     const ViewHostMsg_DidFailProvisionalLoadWithError_Params& params) {
   VLOG(1) << "Failed Provisional Load: " << params.url.possibly_invalid_spec()
           << ", error_code: " << params.error_code
@@ -1571,9 +1577,13 @@
             params.showing_repost_interstitial
           << ", frame_id: " << params.frame_id;
   GURL validated_url(params.url);
-  GetRenderViewHostImpl()->FilterURL(
+  RenderViewHostImpl* render_view_host_impl =
+      static_cast<RenderViewHostImpl*>(render_view_host);
+  content::RenderProcessHost* render_process_host =
+      render_view_host->GetProcess();
+  render_view_host_impl->FilterURL(
       ChildProcessSecurityPolicyImpl::GetInstance(),
-      GetRenderProcessHost()->GetID(),
+      render_process_host->GetID(),
       false,
       &validated_url);
 
@@ -1612,7 +1622,7 @@
     if (controller_.GetPendingEntry())
       DidCancelLoading();
 
-    render_manager_.RendererAbortedProvisionalLoad(GetRenderViewHost());
+    render_manager_.RendererAbortedProvisionalLoad(render_view_host);
   }
 
   FOR_EACH_OBSERVER(WebContentsObserver,