summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender
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
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')
-rw-r--r--chrome/browser/prerender/prerender_contents.cc29
-rw-r--r--chrome/browser/prerender/prerender_contents.h6
-rw-r--r--chrome/browser/prerender/prerender_handle.cc9
-rw-r--r--chrome/browser/prerender/prerender_handle.h7
-rw-r--r--chrome/browser/prerender/prerender_link_manager.cc12
-rw-r--r--chrome/browser/prerender/prerender_link_manager.h2
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_;