Index: chrome/browser/prerender/prerender_contents.cc |
=================================================================== |
--- chrome/browser/prerender/prerender_contents.cc (revision 239602) |
+++ chrome/browser/prerender/prerender_contents.cc (working copy) |
@@ -26,6 +26,7 @@ |
#include "chrome/common/url_constants.h" |
#include "content/public/browser/browser_child_process_host.h" |
#include "content/public/browser/notification_service.h" |
+#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/resource_request_details.h" |
@@ -327,6 +328,14 @@ |
prerender_contents_.get()->GetController().LoadURLWithParams(load_url_params); |
} |
+void PrerenderContents::PrerenderingDone() { |
+ for (std::set<content::RenderFrameHost*>::iterator i = |
+ render_frame_hosts_.begin(); i != render_frame_hosts_.end(); ++i) { |
+ (*i)->Send(new PrerenderMsg_SetIsPrerendering((*i)->GetRoutingID(), false)); |
+ } |
+ render_frame_hosts_.clear(); |
+} |
+ |
bool PrerenderContents::GetChildId(int* child_id) const { |
CHECK(child_id); |
DCHECK_GE(child_id_, -1); |
@@ -401,16 +410,6 @@ |
content::Details<RenderViewHost> new_render_view_host(details); |
OnRenderViewHostCreated(new_render_view_host.ptr()); |
- // When a new RenderView is created for a prerendering WebContents, |
- // tell the new RenderView it's being used for prerendering before any |
- // navigations occur. Note that this is always triggered before the |
- // first navigation, so there's no need to send the message just after |
- // the WebContents is created. |
- new_render_view_host->Send( |
- new PrerenderMsg_SetIsPrerendering( |
- new_render_view_host->GetRoutingID(), |
- true)); |
- |
// Make sure the size of the RenderViewHost has been passed to the new |
// RenderView. Otherwise, the size may not be sent until the |
// RenderViewReady event makes it from the render process to the UI |
@@ -548,6 +547,22 @@ |
Destroy(FINAL_STATUS_RENDERER_CRASHED); |
} |
+void PrerenderContents::RenderFrameCreated( |
+ content::RenderFrameHost* render_frame_host) { |
+ render_frame_hosts_.insert(render_frame_host); |
+ // When a new RenderFrame is created for a prerendering WebContents, tell the |
+ // new RenderFrame it's being used for prerendering before any navigations |
+ // occur. Note that this is always triggered before the first navigation, so |
+ // there's no need to send the message just after the WebContents is created. |
+ render_frame_host->Send(new PrerenderMsg_SetIsPrerendering( |
+ render_frame_host->GetRoutingID(), true)); |
mmenke
2013/12/10 20:56:41
Are there any races here? I'm not familiar with f
jam
2013/12/10 21:14:17
no, this is called from the same place that NOTIFI
|
+} |
+ |
+void PrerenderContents::RenderFrameDeleted( |
+ content::RenderFrameHost* render_frame_host) { |
+ render_frame_hosts_.erase(render_frame_host); |
+} |
+ |
void PrerenderContents::DidStopLoading( |
content::RenderViewHost* render_view_host) { |
has_stopped_loading_ = true; |