diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-25 00:03:47 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-25 00:03:47 +0000 |
commit | 8f5006a37690081d9a51158212616707e630d0c8 (patch) | |
tree | 0a5a89c2e8e3cc21cf08a33927740bbd0456f2a0 /chrome/renderer/prerender | |
parent | 32458f1088a36b026ae67d8b4f77ca0d6088633b (diff) | |
download | chromium_src-8f5006a37690081d9a51158212616707e630d0c8.zip chromium_src-8f5006a37690081d9a51158212616707e630d0c8.tar.gz chromium_src-8f5006a37690081d9a51158212616707e630d0c8.tar.bz2 |
Lose chrome/renderer/prerender/prerendering_support.*
Move the prerendering_support. functionality into the prerender dispatcher, which is the logical place to handle messages from either the browser or WebKit.
This is being done in preparation for adding events on prerenders, which require more connection between the WebKit/browser messaging.
There's no test, as this should be refactoring only.
BUG=none
R=mmenke@chromium.org
TBR=sky@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11288002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163960 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/prerender')
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher.cc | 62 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher.h | 28 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerendering_support.cc | 43 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerendering_support.h | 26 |
4 files changed, 56 insertions, 103 deletions
diff --git a/chrome/renderer/prerender/prerender_dispatcher.cc b/chrome/renderer/prerender/prerender_dispatcher.cc index c5af1cd..a3f72ec 100644 --- a/chrome/renderer/prerender/prerender_dispatcher.cc +++ b/chrome/renderer/prerender/prerender_dispatcher.cc @@ -6,42 +6,29 @@ #include "base/logging.h" #include "chrome/common/prerender_messages.h" -#include "chrome/renderer/prerender/prerendering_support.h" +#include "chrome/renderer/prerender/prerender_extra_data.h" +#include "content/public/renderer/render_thread.h" #include "googleurl/src/gurl.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebPrerenderingSupport.h" namespace prerender { -PrerenderDispatcher::PrerenderDispatcher() - : prerendering_support_(new PrerenderingSupport()) { - WebKit::WebPrerenderingSupport::initialize(prerendering_support_.get()); +PrerenderDispatcher::PrerenderDispatcher() { + WebKit::WebPrerenderingSupport::initialize(this); } PrerenderDispatcher::~PrerenderDispatcher() { - if (prerendering_support_.get()) - WebKit::WebPrerenderingSupport::shutdown(); + WebKit::WebPrerenderingSupport::shutdown(); } bool PrerenderDispatcher::IsPrerenderURL(const GURL& url) const { return prerender_urls_.find(url) != prerender_urls_.end(); } -bool PrerenderDispatcher::OnControlMessageReceived( - const IPC::Message& message) { - bool handled = true; - IPC_BEGIN_MESSAGE_MAP(PrerenderDispatcher, message) - IPC_MESSAGE_HANDLER(PrerenderMsg_AddPrerenderURL, OnAddPrerenderURL) - IPC_MESSAGE_HANDLER(PrerenderMsg_RemovePrerenderURL, OnRemovePrerenderURL) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP() - - return handled; -} - void PrerenderDispatcher::OnAddPrerenderURL(const GURL& url) { PrerenderMap::iterator it = prerender_urls_.find(url); if (it != prerender_urls_.end()) { - DCHECK(it->second > 0); + DCHECK_LT(0, it->second); it->second += 1; } else { prerender_urls_[url] = 1; @@ -57,10 +44,45 @@ void PrerenderDispatcher::OnRemovePrerenderURL(const GURL& url) { // is unlikely to go to the prerendered page. if (it == prerender_urls_.end()) return; - DCHECK(it->second > 0); + DCHECK_LT(0, it->second); it->second -= 1; if (it->second == 0) prerender_urls_.erase(it); } +bool PrerenderDispatcher::OnControlMessageReceived( + const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(PrerenderDispatcher, message) + IPC_MESSAGE_HANDLER(PrerenderMsg_AddPrerenderURL, OnAddPrerenderURL) + IPC_MESSAGE_HANDLER(PrerenderMsg_RemovePrerenderURL, OnRemovePrerenderURL) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + + return handled; +} + +void PrerenderDispatcher::add(const WebKit::WebPrerender& prerender) { + const PrerenderExtraData& extra_data = + PrerenderExtraData::FromPrerender(prerender); + content::RenderThread::Get()->Send(new PrerenderHostMsg_AddLinkRelPrerender( + extra_data.prerender_id(), GURL(prerender.url()), + content::Referrer(GURL(prerender.referrer()), prerender.referrerPolicy()), + extra_data.size(), extra_data.render_view_route_id())); +} + +void PrerenderDispatcher::cancel(const WebKit::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) { + const PrerenderExtraData& extra_data = + PrerenderExtraData::FromPrerender(prerender); + content::RenderThread::Get()->Send( + new PrerenderHostMsg_AbandonLinkRelPrerender(extra_data.prerender_id())); +} + } // namespace prerender diff --git a/chrome/renderer/prerender/prerender_dispatcher.h b/chrome/renderer/prerender/prerender_dispatcher.h index de81c54..c72620d 100644 --- a/chrome/renderer/prerender/prerender_dispatcher.h +++ b/chrome/renderer/prerender/prerender_dispatcher.h @@ -10,24 +10,23 @@ #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/WebPrerenderingSupport.h" class GURL; namespace prerender { -class PrerenderingSupport; - -// PrerenderDispatcher keeps track of which URLs are being prerendered. There -// is only one PrerenderDispatcher per render process, and it will only be -// aware of prerenders that are triggered by this render process. As well, -// it holds on to other objects that must exist once per-renderer process, -// such as the PrerenderingSupport. -class PrerenderDispatcher : public content::RenderProcessObserver { +// There is one PrerenderDispatcher per render process. It keeps track of which +// prerenders were launched from this renderer, and ensures prerender navigation +// is triggered on navigation to those. It implements the prerendering interface +// supplied to WebKit. +class PrerenderDispatcher : public content::RenderProcessObserver, + public WebKit::WebPrerenderingSupport { public: PrerenderDispatcher(); virtual ~PrerenderDispatcher(); - bool IsPrerenderURL(const GURL & url) const; + bool IsPrerenderURL(const GURL& url) const; private: friend class PrerenderDispatcherTest; @@ -35,15 +34,16 @@ class PrerenderDispatcher : public content::RenderProcessObserver { void OnAddPrerenderURL(const GURL& url); void OnRemovePrerenderURL(const GURL& url); - // RenderProcessObserver: + // From RenderProcessObserver: virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE; + // From WebPrerenderingSupport: + virtual void add(const WebKit::WebPrerender& prerender) OVERRIDE; + virtual void cancel(const WebKit::WebPrerender& prerender) OVERRIDE; + virtual void abandon(const WebKit::WebPrerender& prerender) OVERRIDE; + typedef std::map<GURL, int> PrerenderMap; PrerenderMap prerender_urls_; - - // There is one PrerenderingSupport object per renderer, and it provides - // the interface to prerendering to the WebKit platform. - scoped_ptr<PrerenderingSupport> prerendering_support_; }; } // namespace prerender diff --git a/chrome/renderer/prerender/prerendering_support.cc b/chrome/renderer/prerender/prerendering_support.cc deleted file mode 100644 index a6097b5..0000000 --- a/chrome/renderer/prerender/prerendering_support.cc +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/renderer/prerender/prerendering_support.h" - -#include "chrome/common/prerender_messages.h" -#include "chrome/renderer/prerender/prerender_extra_data.h" -#include "content/public/common/referrer.h" -#include "content/public/renderer/render_thread.h" -#include "content/public/renderer/render_view.h" -#include "third_party/WebKit/Source/Platform/chromium/public/WebPrerenderingSupport.h" - -namespace prerender { - -PrerenderingSupport::~PrerenderingSupport() { -} - -void PrerenderingSupport::add(const WebKit::WebPrerender& prerender) { - const PrerenderExtraData& extra_data = - PrerenderExtraData::FromPrerender(prerender); - content::RenderThread::Get()->Send(new PrerenderHostMsg_AddLinkRelPrerender( - extra_data.prerender_id(), GURL(prerender.url()), - content::Referrer(GURL(prerender.referrer()), prerender.referrerPolicy()), - extra_data.size(), extra_data.render_view_route_id())); -} - -void PrerenderingSupport::cancel(const WebKit::WebPrerender& prerender) { - const PrerenderExtraData& extra_data = - PrerenderExtraData::FromPrerender(prerender); - content::RenderThread::Get()->Send( - new PrerenderHostMsg_CancelLinkRelPrerender(extra_data.prerender_id())); -} - -void PrerenderingSupport::abandon(const WebKit::WebPrerender& prerender) { - const PrerenderExtraData& extra_data = - PrerenderExtraData::FromPrerender(prerender); - content::RenderThread::Get()->Send( - new PrerenderHostMsg_AbandonLinkRelPrerender(extra_data.prerender_id())); -} - -} // namespace prerender - diff --git a/chrome/renderer/prerender/prerendering_support.h b/chrome/renderer/prerender/prerendering_support.h deleted file mode 100644 index 1581f0a..0000000 --- a/chrome/renderer/prerender/prerendering_support.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_RENDERER_PRERENDER_PRERENDERING_SUPPORT_H_ -#define CHROME_RENDERER_PRERENDER_PRERENDERING_SUPPORT_H_ - -#include "base/compiler_specific.h" -#include "third_party/WebKit/Source/Platform/chromium/public/WebPrerenderingSupport.h" - -namespace prerender { - -// Implements the interface that provides Prerendering to WebKit. -class PrerenderingSupport : public WebKit::WebPrerenderingSupport { - public: - virtual ~PrerenderingSupport(); - - virtual void add(const WebKit::WebPrerender& prerender) OVERRIDE; - virtual void cancel(const WebKit::WebPrerender& prerender) OVERRIDE; - virtual void abandon(const WebKit::WebPrerender& prerender) OVERRIDE; -}; - -} // namespace prerender - -#endif // CHROME_RENDERER_PRERENDER_PRERENDERING_SUPPORT_H_ - |