diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-11 18:06:07 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-11 18:06:07 +0000 |
commit | 2736c031e3c5193012fe6dba36125fa450c51fcd (patch) | |
tree | c5129d1ddc700c71f7787a4d248ef74c5748bce0 /chrome/renderer/prerender | |
parent | 2c841f7bb90c00ee360e110983af7f330f5c6958 (diff) | |
download | chromium_src-2736c031e3c5193012fe6dba36125fa450c51fcd.zip chromium_src-2736c031e3c5193012fe6dba36125fa450c51fcd.tar.gz chromium_src-2736c031e3c5193012fe6dba36125fa450c51fcd.tar.bz2 |
New link rel=prerender api, using WebKit::WebPrerenderingPlatform
This patch implements the renderer side classes corresponding to
https://bugs.webkit.org/show_bug.cgi?id=85005 , and adds messaging
up to the browser process for link prerender events. A new
PrerenderLinkManager is introduced to handle these events for the
LinkManager.
BUG=84236
Review URL: https://chromiumcodereview.appspot.com/10198040
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136611 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/prerender')
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher.cc | 3 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_extra_data.cc | 31 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_extra_data.h | 40 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerenderer_client.cc | 37 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerenderer_client.h | 30 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerendering_support.cc | 43 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerendering_support.h | 27 |
7 files changed, 211 insertions, 0 deletions
diff --git a/chrome/renderer/prerender/prerender_dispatcher.cc b/chrome/renderer/prerender/prerender_dispatcher.cc index 500d4be..84173fd 100644 --- a/chrome/renderer/prerender/prerender_dispatcher.cc +++ b/chrome/renderer/prerender/prerender_dispatcher.cc @@ -6,11 +6,14 @@ #include "base/logging.h" #include "chrome/common/prerender_messages.h" +#include "chrome/renderer/prerender/prerendering_support.h" #include "googleurl/src/gurl.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebPrerenderingSupport.h" namespace prerender { PrerenderDispatcher::PrerenderDispatcher() { + WebKit::WebPrerenderingSupport::initialize(new PrerenderingSupport()); } PrerenderDispatcher::~PrerenderDispatcher() { diff --git a/chrome/renderer/prerender/prerender_extra_data.cc b/chrome/renderer/prerender/prerender_extra_data.cc new file mode 100644 index 0000000..72b1ea0 --- /dev/null +++ b/chrome/renderer/prerender/prerender_extra_data.cc @@ -0,0 +1,31 @@ +// 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/prerender_extra_data.h" + +#include "base/logging.h" + +namespace prerender { + +PrerenderExtraData::PrerenderExtraData( + int prerender_id, + int render_view_route_id, + const gfx::Size& size) + : prerender_id_(prerender_id), + render_view_route_id_(render_view_route_id), + size_(size) { +} + +PrerenderExtraData::~PrerenderExtraData() { +} + +// static +const PrerenderExtraData& PrerenderExtraData::FromPrerender( + const WebKit::WebPrerender& prerender) { + DCHECK(prerender.extraData()); + return static_cast<const PrerenderExtraData&>(*prerender.extraData()); +} + +} // namespace prerender + diff --git a/chrome/renderer/prerender/prerender_extra_data.h b/chrome/renderer/prerender/prerender_extra_data.h new file mode 100644 index 0000000..a918a17 --- /dev/null +++ b/chrome/renderer/prerender/prerender_extra_data.h @@ -0,0 +1,40 @@ +// 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_PRERENDER_EXTRA_DATA_H_ +#define CHROME_RENDERER_PRERENDER_PRERENDER_EXTRA_DATA_H_ +#pragma once + +#include "base/compiler_specific.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebPrerender.h" +#include "ui/gfx/size.h" + +namespace prerender { + +class PrerenderExtraData : public WebKit::WebPrerender::ExtraData { + public: + PrerenderExtraData(int prerender_id, + int render_view_route_id, + const gfx::Size& size); + virtual ~PrerenderExtraData(); + + int prerender_id() const { return prerender_id_; } + int render_view_route_id() const { return render_view_route_id_; } + const gfx::Size& size() const { return size_; } + + static const PrerenderExtraData& FromPrerender( + const WebKit::WebPrerender& prerender); + + private: + const int prerender_id_; + const int render_view_route_id_; + const gfx::Size size_; + + DISALLOW_COPY_AND_ASSIGN(PrerenderExtraData); +}; + +} // namespace prerender + +#endif // CHROME_RENDERER_PRERENDER_PRERENDER_EXTRA_DATA_H_ + diff --git a/chrome/renderer/prerender/prerenderer_client.cc b/chrome/renderer/prerender/prerenderer_client.cc new file mode 100644 index 0000000..abeabc6 --- /dev/null +++ b/chrome/renderer/prerender/prerenderer_client.cc @@ -0,0 +1,37 @@ +// 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/prerenderer_client.h" + +#include "chrome/renderer/prerender/prerender_extra_data.h" +#include "content/public/renderer/render_view.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" + +namespace { +static int s_last_prerender_id = 0; +} + +namespace prerender { + +PrerendererClient::PrerendererClient(content::RenderView* render_view) + : content::RenderViewObserver(render_view) { + DCHECK(render_view); + DVLOG(5) << "PrerendererClient::PrerendererClient()"; + render_view->GetWebView()->setPrerendererClient(this); +} + +PrerendererClient::~PrerendererClient() { +} + +void PrerendererClient::willAddPrerender( + WebKit::WebPrerender* prerender) { + DVLOG(3) << "PrerendererClient::willAddPrerender url = " + << prerender->url().spec().data(); + prerender->setExtraData(new PrerenderExtraData(++s_last_prerender_id, + routing_id(), + render_view()->GetSize())); +} + +} // namespace prerender + diff --git a/chrome/renderer/prerender/prerenderer_client.h b/chrome/renderer/prerender/prerenderer_client.h new file mode 100644 index 0000000..f6530db --- /dev/null +++ b/chrome/renderer/prerender/prerenderer_client.h @@ -0,0 +1,30 @@ +// 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_PRERENDERER_CLIENT_H_ +#define CHROME_RENDERER_PRERENDER_PRERENDERER_CLIENT_H_ +#pragma once + +#include "base/compiler_specific.h" +#include "content/public/renderer/render_view_observer.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebPrerendererClient.h" + +namespace prerender { + +class PrerendererClient : public content::RenderViewObserver, + public WebKit::WebPrerendererClient { + public: + explicit PrerendererClient(content::RenderView* render_view); + + private: + virtual ~PrerendererClient(); + + // Implements WebKit::WebPrerendererClient + virtual void willAddPrerender(WebKit::WebPrerender* prerender) OVERRIDE; +}; + +} // namespace prerender + +#endif // CHROME_RENDERER_PRERENDER_PRERENDERER_CLIENT_H_ + diff --git a/chrome/renderer/prerender/prerendering_support.cc b/chrome/renderer/prerender/prerendering_support.cc new file mode 100644 index 0000000..a6097b5 --- /dev/null +++ b/chrome/renderer/prerender/prerendering_support.cc @@ -0,0 +1,43 @@ +// 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 new file mode 100644 index 0000000..7caeb37 --- /dev/null +++ b/chrome/renderer/prerender/prerendering_support.h @@ -0,0 +1,27 @@ +// 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_ +#pragma once + +#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_ + |