diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-18 02:23:52 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-18 02:23:52 +0000 |
commit | 762c724a9bcf0c3d20d63dd1b6d17e4b9d2b68c0 (patch) | |
tree | 5b08b4e0a35424eb7bf0fda722b9cf8b10d1d03f /chrome/renderer/prerender | |
parent | bb2b60ac4a5cc1ebde77d71f9022a32e04286d83 (diff) | |
download | chromium_src-762c724a9bcf0c3d20d63dd1b6d17e4b9d2b68c0.zip chromium_src-762c724a9bcf0c3d20d63dd1b6d17e4b9d2b68c0.tar.gz chromium_src-762c724a9bcf0c3d20d63dd1b6d17e4b9d2b68c0.tar.bz2 |
Add Start/Stop event signalling on Prerenders.
We've switched to our new event names, we've made sure that the PrerenderHandle and the PrerenderLinkManager are connected, and now, we pass these events into WebKit.
This change depends on the WebKit changes in https://bugs.webkit.org/show_bug.cgi?id=96474 landing first. As well, this CL depends on the earlier work in https://chromiumcodereview.appspot.com/11316311/ , which makes the PrerenderHandle an observer of the PrerenderContents, being landed first. As well, since this code depends on WebPrerender.h changing, it actually needs to be staged carefully between WebKit & Chrome. Careful readers will also observe that this change obsoletes https://chromiumcodereview.appspot.com/10918189/ .
R=mmenke@chromium.org
BUG=None
Review URL: https://chromiumcodereview.appspot.com/11459003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173625 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/prerender')
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher.cc | 30 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher.h | 5 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher_unittest.cc | 5 |
3 files changed, 26 insertions, 14 deletions
diff --git a/chrome/renderer/prerender/prerender_dispatcher.cc b/chrome/renderer/prerender/prerender_dispatcher.cc index 013ca9a..d9c4b93 100644 --- a/chrome/renderer/prerender/prerender_dispatcher.cc +++ b/chrome/renderer/prerender/prerender_dispatcher.cc @@ -34,10 +34,16 @@ bool PrerenderDispatcher::IsPrerenderURL(const GURL& url) const { void PrerenderDispatcher::OnPrerenderStart(int prerender_id) { DCHECK_NE(0u, prerenders_.count(prerender_id)); - std::map<int, GURL>::iterator it = prerenders_.find(prerender_id); - const GURL& url = it->second; - running_prerender_urls_.insert( - std::multimap<GURL, int>::value_type(url, prerender_id)); + std::map<int, WebPrerender>::iterator it = prerenders_.find(prerender_id); + + WebPrerender& prerender = it->second; + + // The prerender should only be null in unit tests. + if (prerender.isNull()) + return; + + prerender.didStartPrerender(); + OnPrerenderAddAlias(prerender_id, prerender.url()); } void PrerenderDispatcher::OnPrerenderAddAlias(int prerender_id, @@ -49,6 +55,11 @@ void PrerenderDispatcher::OnPrerenderAddAlias(int prerender_id, void PrerenderDispatcher::OnPrerenderStop(int prerender_id) { DCHECK_NE(0u, prerenders_.count(prerender_id)); + WebPrerender& prerender = prerenders_[prerender_id]; + + // The prerender should only be null in unit tests. + if (!prerender.isNull()) + prerender.didStopPrerender(); // TODO(cbentzel): We'd also want to send the map of active prerenders when // creating a new render process, so the Add/Remove go relative to that. @@ -81,25 +92,26 @@ bool PrerenderDispatcher::OnControlMessageReceived( return handled; } -void PrerenderDispatcher::add(const WebKit::WebPrerender& prerender) { +void PrerenderDispatcher::add(const WebPrerender& prerender) { const PrerenderExtraData& extra_data = PrerenderExtraData::FromPrerender(prerender); - prerenders_[extra_data.prerender_id()] = prerender.url(); + prerenders_[extra_data.prerender_id()] = prerender; content::RenderThread::Get()->Send(new PrerenderHostMsg_AddLinkRelPrerender( extra_data.prerender_id(), GURL(prerender.url()), - content::Referrer(GURL(prerender.referrer()), prerender.referrerPolicy()), + content::Referrer(GURL(prerender.referrer()), + prerender.referrerPolicy()), extra_data.size(), extra_data.render_view_route_id())); } -void PrerenderDispatcher::cancel(const WebKit::WebPrerender& prerender) { +void PrerenderDispatcher::cancel(const WebPrerender& prerender) { const PrerenderExtraData& extra_data = PrerenderExtraData::FromPrerender(prerender); content::RenderThread::Get()->Send( new PrerenderHostMsg_CancelLinkRelPrerender(extra_data.prerender_id())); } -void PrerenderDispatcher::abandon(const WebKit::WebPrerender& prerender) { +void PrerenderDispatcher::abandon(const WebPrerender& prerender) { const PrerenderExtraData& extra_data = PrerenderExtraData::FromPrerender(prerender); content::RenderThread::Get()->Send( diff --git a/chrome/renderer/prerender/prerender_dispatcher.h b/chrome/renderer/prerender/prerender_dispatcher.h index 1c981169..9d63639 100644 --- a/chrome/renderer/prerender/prerender_dispatcher.h +++ b/chrome/renderer/prerender/prerender_dispatcher.h @@ -10,6 +10,7 @@ #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "content/public/renderer/render_process_observer.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebPrerender.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebPrerenderingSupport.h" class GURL; @@ -45,9 +46,7 @@ class PrerenderDispatcher : public content::RenderProcessObserver, virtual void abandon(const WebKit::WebPrerender& prerender) OVERRIDE; // From WebKit, prerender elements launched by renderers in our process. - // TODO(gavinp): Store a WebKit::WebPrerender* here once the WebKit API - // updates to allow this. - std::map<int, GURL> prerenders_; + std::map<int, WebKit::WebPrerender> prerenders_; // From the browser process, which prerenders are running, indexed by URL. // Updated by the browser processes as aliases are discovered. diff --git a/chrome/renderer/prerender/prerender_dispatcher_unittest.cc b/chrome/renderer/prerender/prerender_dispatcher_unittest.cc index b46a537..e46cc94 100644 --- a/chrome/renderer/prerender/prerender_dispatcher_unittest.cc +++ b/chrome/renderer/prerender/prerender_dispatcher_unittest.cc @@ -36,15 +36,16 @@ class PrerenderDispatcherTest : public testing::Test { return prerender_dispatcher_.IsPrerenderURL(url); } - const std::map<int, GURL>& prerenders() const { + const std::map<int, WebPrerender>& prerenders() const { return prerender_dispatcher_.prerenders_; } int StartPrerender(const GURL& url) { DCHECK_EQ(0u, prerender_dispatcher_.prerenders_.count(g_next_prerender_id)); - prerender_dispatcher_.prerenders_[g_next_prerender_id] = url; + prerender_dispatcher_.prerenders_[g_next_prerender_id] = WebPrerender(); prerender_dispatcher_.OnPrerenderStart(g_next_prerender_id); + prerender_dispatcher_.OnPrerenderAddAlias(g_next_prerender_id, url); return g_next_prerender_id++; } |