Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1091)

Unified Diff: chrome/browser/prerender/prerender_contents.cc

Issue 9416031: Prerendered pages are swapped in at browser::Navigate time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More cleanup Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_contents.cc
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index c6355229ebc06cfa4a38c2a4832df6aaccfb9e32..d967fc17b21f05aeb0872722f16f83b16bc21801 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -21,7 +21,7 @@
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/icon_messages.h"
-#include "chrome/common/render_messages.h"
+#include "chrome/common/prerender_messages.h"
#include "chrome/common/url_constants.h"
#include "content/browser/in_process_webkit/session_storage_namespace.h"
#include "content/browser/renderer_host/render_view_host.h"
@@ -240,6 +240,27 @@ PrerenderContents::Factory* PrerenderContents::CreateFactory() {
return new PrerenderContentsFactoryImpl();
}
+void BroadcastPrerender(const GURL& url, bool is_add) {
+ content::RenderProcessHost::iterator host_it =
+ content::RenderProcessHost::AllHostsIterator();
+ while (!host_it.IsAtEnd()) {
+ content::RenderProcessHost* host = host_it.GetCurrentValue();
+ host_it.Advance();
+ if (!host)
+ continue;
+ // TODO(cbentzel): Need to filter to the current profile only.
dominich 2012/02/28 16:21:00 Should you also filter to the RPH that was the sou
cbentzel 2012/02/29 18:16:13 I am limiting to that now, per your comment as wel
+ IPC::Message* message = NULL;
dominich 2012/02/28 16:21:00 IPC::Message* message = is_add ? new PrerenderMsg_
cbentzel 2012/02/29 18:16:13 This doesn't work because then the operands of the
+ if (is_add) {
+ message = new PrerenderMsg_AddPrerenderURL(url);
+ } else {
+ message = new PrerenderMsg_RemovePrerenderURL(url);
+ }
+ // TODO(cbentzel): Make sure that sending a message doesn't
+ // adjust the iterator.
+ host->Send(message);
+ }
+}
+
void PrerenderContents::StartPrerendering(
const RenderViewHost* source_render_view_host,
SessionStorageNamespace* session_storage_namespace) {
@@ -248,6 +269,8 @@ void PrerenderContents::StartPrerendering(
DCHECK(prerender_contents_.get() == NULL);
prerendering_has_started_ = true;
+ BroadcastPrerender(prerender_url_, true);
+
WebContents* new_contents = WebContents::Create(
profile_, NULL, MSG_ROUTING_NONE, NULL, session_storage_namespace);
prerender_contents_.reset(new TabContentsWrapper(new_contents));
@@ -418,7 +441,7 @@ void PrerenderContents::Observe(int type,
// first navigation, so there's no need to send the message just after
// the TabContents is created.
new_render_view_host->Send(
- new ChromeViewMsg_SetIsPrerendering(
+ new PrerenderMsg_SetIsPrerendering(
new_render_view_host->routing_id(),
true));
@@ -543,6 +566,7 @@ bool PrerenderContents::ShouldSuppressDialogs() {
}
void PrerenderContents::Destroy(FinalStatus final_status) {
+ BroadcastPrerender(prerender_url_, false);
if (prerendering_has_been_cancelled_)
return;

Powered by Google App Engine
This is Rietveld 408576698