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 | |
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')
-rw-r--r-- | chrome/browser/prerender/prerender_contents.cc | 29 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_contents.h | 6 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_handle.cc | 9 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_handle.h | 7 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_link_manager.cc | 12 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_link_manager.h | 2 |
6 files changed, 18 insertions, 47 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; } diff --git a/chrome/browser/prerender/prerender_contents.h b/chrome/browser/prerender/prerender_contents.h index b7e8776..4b3422c 100644 --- a/chrome/browser/prerender/prerender_contents.h +++ b/chrome/browser/prerender/prerender_contents.h @@ -81,11 +81,6 @@ class PrerenderContents : public content::NotificationObserver, // Signals that the prerender has stopped running. virtual void OnPrerenderStop(PrerenderContents* contents) = 0; - // Signals the discovery, through redirects, of a new alias for this - // prerender. - virtual void OnPrerenderAddAlias(PrerenderContents* contents, - const GURL& alias_url); - // Signals that this prerender has just become a MatchComplete replacement. virtual void OnPrerenderCreatedMatchCompleteReplacement( PrerenderContents* contents, PrerenderContents* replacement); @@ -298,7 +293,6 @@ class PrerenderContents : public content::NotificationObserver, void NotifyPrerenderStart(); void NotifyPrerenderStopLoading(); void NotifyPrerenderStop(); - void NotifyPrerenderAddAlias(const GURL& alias_url); void NotifyPrerenderCreatedMatchCompleteReplacement( PrerenderContents* replacement); diff --git a/chrome/browser/prerender/prerender_handle.cc b/chrome/browser/prerender/prerender_handle.cc index b4ebcd8..877d202 100644 --- a/chrome/browser/prerender/prerender_handle.cc +++ b/chrome/browser/prerender/prerender_handle.cc @@ -115,15 +115,6 @@ void PrerenderHandle::OnPrerenderStop(PrerenderContents* prerender_contents) { observer_->OnPrerenderStop(this); } -void PrerenderHandle::OnPrerenderAddAlias(PrerenderContents* prerender_contents, - const GURL& alias_url) { - DCHECK(CalledOnValidThread()); - DCHECK(prerender_data_); - DCHECK_EQ(prerender_data_->contents(), prerender_contents); - if (observer_) - observer_->OnPrerenderAddAlias(this, alias_url); -} - void PrerenderHandle::OnPrerenderCreatedMatchCompleteReplacement( PrerenderContents* contents, PrerenderContents* replacement) { DCHECK(CalledOnValidThread()); diff --git a/chrome/browser/prerender/prerender_handle.h b/chrome/browser/prerender/prerender_handle.h index 67cae39..3e2e946 100644 --- a/chrome/browser/prerender/prerender_handle.h +++ b/chrome/browser/prerender/prerender_handle.h @@ -41,11 +41,6 @@ class PrerenderHandle : public base::NonThreadSafe, // Signals that the prerender has stopped running. virtual void OnPrerenderStop(PrerenderHandle* handle) = 0; - // Signals the discovery, through redirects, of a new alias for this - // prerender. - virtual void OnPrerenderAddAlias(PrerenderHandle* handle, - const GURL& alias_url) = 0; - protected: Observer(); virtual ~Observer(); @@ -91,8 +86,6 @@ class PrerenderHandle : public base::NonThreadSafe, virtual void OnPrerenderStopLoading(PrerenderContents* prerender_contents) OVERRIDE; virtual void OnPrerenderStop(PrerenderContents* prerender_contents) OVERRIDE; - virtual void OnPrerenderAddAlias(PrerenderContents* prerender_contents, - const GURL& alias_url) OVERRIDE; virtual void OnPrerenderCreatedMatchCompleteReplacement( PrerenderContents* contents, PrerenderContents* replacement) OVERRIDE; diff --git a/chrome/browser/prerender/prerender_link_manager.cc b/chrome/browser/prerender/prerender_link_manager.cc index 8b099b9..14cdc6e 100644 --- a/chrome/browser/prerender/prerender_link_manager.cc +++ b/chrome/browser/prerender/prerender_link_manager.cc @@ -338,16 +338,4 @@ void PrerenderLinkManager::OnPrerenderStop( StartPrerenders(); } -void PrerenderLinkManager::OnPrerenderAddAlias( - PrerenderHandle* prerender_handle, - const GURL& alias_url) { - LinkPrerender* prerender = FindByPrerenderHandle(prerender_handle); - if (!prerender) - return; - - Send(prerender->launcher_child_id, - new PrerenderMsg_OnPrerenderAddAlias(prerender->prerender_id, - alias_url)); -} - } // namespace prerender diff --git a/chrome/browser/prerender/prerender_link_manager.h b/chrome/browser/prerender/prerender_link_manager.h index bb8ea07..97d0377 100644 --- a/chrome/browser/prerender/prerender_link_manager.h +++ b/chrome/browser/prerender/prerender_link_manager.h @@ -121,8 +121,6 @@ class PrerenderLinkManager : public ProfileKeyedService, virtual void OnPrerenderStopLoading(PrerenderHandle* prerender_handle) OVERRIDE; virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE; - virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle, - const GURL& alias_url) OVERRIDE; bool has_shutdown_; |