summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_contents.cc
diff options
context:
space:
mode:
authorcbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-15 09:50:10 +0000
committercbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-15 09:50:10 +0000
commitf5b9c1b52f6e2f43215538a1c34ff363beaa4468 (patch)
treed7528ad0a80d0f852ba932a55e087918ebbdfb23 /chrome/browser/prerender/prerender_contents.cc
parentb71b8d04cf4a73cb3311671f7e76f2d28672d116 (diff)
downloadchromium_src-f5b9c1b52f6e2f43215538a1c34ff363beaa4468.zip
chromium_src-f5b9c1b52f6e2f43215538a1c34ff363beaa4468.tar.gz
chromium_src-f5b9c1b52f6e2f43215538a1c34ff363beaa4468.tar.bz2
Broadcast prerender URLs to all render processes.
Before this change, a render-initiated navigation could only swap to a prerender if the prerender was created via a <link rel="prerender"> element from a RenderView within the same render process. Now that we are experimenting with local-browsing based prerenders, this means that a lot of prerenders may never be used. The prerenders are created in the browser process, and need to be advertised to all render processes. There is a slight risk that an owned render process can spy on some navigations that a user does due to the broadcast. BUG=239180 Review URL: https://chromiumcodereview.appspot.com/15027009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@200223 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_contents.cc')
-rw-r--r--chrome/browser/prerender/prerender_contents.cc29
1 files changed, 18 insertions, 11 deletions
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index 0302986..e8868ac 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -141,11 +141,6 @@ void PrerenderContents::Observer::OnPrerenderStopLoading(
PrerenderContents* contents) {
}
-void PrerenderContents::Observer::OnPrerenderAddAlias(
- PrerenderContents* contents,
- const GURL& alias_url) {
-}
-
void PrerenderContents::Observer::OnPrerenderCreatedMatchCompleteReplacement(
PrerenderContents* contents, PrerenderContents* replacement) {
}
@@ -370,6 +365,15 @@ PrerenderContents::~PrerenderContents() {
prerender_manager_->RecordFinalStatusWithMatchCompleteStatus(
origin(), experiment_id(), match_complete_status(), final_status());
+ // Broadcast the removal of aliases.
+ for (content::RenderProcessHost::iterator host_iterator =
+ content::RenderProcessHost::AllHostsIterator();
+ !host_iterator.IsAtEnd();
+ host_iterator.Advance()) {
+ content::RenderProcessHost* host = host_iterator.GetCurrentValue();
+ host->Send(new PrerenderMsg_OnPrerenderRemoveAliases(alias_urls_));
+ }
+
// If we still have a WebContents, clean up anything we need to and then
// destroy it.
if (prerender_contents_.get())
@@ -485,11 +489,6 @@ void PrerenderContents::NotifyPrerenderStop() {
observer_list_.Clear();
}
-void PrerenderContents::NotifyPrerenderAddAlias(const GURL& alias_url) {
- FOR_EACH_OBSERVER(Observer, observer_list_, OnPrerenderAddAlias(this,
- alias_url));
-}
-
void PrerenderContents::NotifyPrerenderCreatedMatchCompleteReplacement(
PrerenderContents* replacement) {
FOR_EACH_OBSERVER(Observer, observer_list_,
@@ -531,7 +530,15 @@ bool PrerenderContents::AddAliasURL(const GURL& url) {
}
alias_urls_.push_back(url);
- NotifyPrerenderAddAlias(url);
+
+ for (content::RenderProcessHost::iterator host_iterator =
+ content::RenderProcessHost::AllHostsIterator();
+ !host_iterator.IsAtEnd();
+ host_iterator.Advance()) {
+ content::RenderProcessHost* host = host_iterator.GetCurrentValue();
+ host->Send(new PrerenderMsg_OnPrerenderAddAlias(url));
+ }
+
return true;
}