summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/prerender
diff options
context:
space:
mode:
authorgavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-11 18:06:07 +0000
committergavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-11 18:06:07 +0000
commit2736c031e3c5193012fe6dba36125fa450c51fcd (patch)
treec5129d1ddc700c71f7787a4d248ef74c5748bce0 /chrome/renderer/prerender
parent2c841f7bb90c00ee360e110983af7f330f5c6958 (diff)
downloadchromium_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.cc3
-rw-r--r--chrome/renderer/prerender/prerender_extra_data.cc31
-rw-r--r--chrome/renderer/prerender/prerender_extra_data.h40
-rw-r--r--chrome/renderer/prerender/prerenderer_client.cc37
-rw-r--r--chrome/renderer/prerender/prerenderer_client.h30
-rw-r--r--chrome/renderer/prerender/prerendering_support.cc43
-rw-r--r--chrome/renderer/prerender/prerendering_support.h27
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_
+