diff options
author | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-15 09:50:10 +0000 |
---|---|---|
committer | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-15 09:50:10 +0000 |
commit | f5b9c1b52f6e2f43215538a1c34ff363beaa4468 (patch) | |
tree | d7528ad0a80d0f852ba932a55e087918ebbdfb23 /chrome/browser/prerender/prerender_contents.cc | |
parent | b71b8d04cf4a73cb3311671f7e76f2d28672d116 (diff) | |
download | chromium_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.cc | 29 |
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; } |