summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-02 18:38:47 +0000
committernasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-02 18:38:47 +0000
commit2f61bdd9d0494e27d35eb336d3eef930f43d7740 (patch)
treeb99207c89f8945ba0095e36d930f1be5679d8af6
parentb7fdae99276f825658262cc2fe44d84cf1b524da (diff)
downloadchromium_src-2f61bdd9d0494e27d35eb336d3eef930f43d7740.zip
chromium_src-2f61bdd9d0494e27d35eb336d3eef930f43d7740.tar.gz
chromium_src-2f61bdd9d0494e27d35eb336d3eef930f43d7740.tar.bz2
Implement WebFrameClient in RenderFrame and proxy all calls to RenderView (for now).
This is reland of https://codereview.chromium.org/17114006/, which was reverted due to bug in WebFrameTestProxy. I've fixed the issue in https://codereview.chromium.org/18031013/. BUG=245126 Review URL: https://chromiumcodereview.appspot.com/18178006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209733 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/renderer/render_frame_impl.cc36
-rw-r--r--content/renderer/render_frame_impl.h22
-rw-r--r--content/renderer/render_view_impl.cc9
-rw-r--r--content/test/layouttest_support.cc17
4 files changed, 59 insertions, 25 deletions
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index cc69210..92c7eca 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -9,6 +9,31 @@
namespace content {
+static RenderFrameImpl* (*g_create_render_frame_impl)(RenderViewImpl*, int32) =
+ NULL;
+
+// static
+RenderFrameImpl* RenderFrameImpl::Create(
+ RenderViewImpl* render_view,
+ int32 routing_id) {
+ DCHECK(routing_id != MSG_ROUTING_NONE);
+
+ RenderFrameImpl* render_frame = NULL;
+ if (g_create_render_frame_impl)
+ render_frame = g_create_render_frame_impl(render_view, routing_id);
+ else
+ render_frame = new RenderFrameImpl(render_view, routing_id);
+
+ return render_frame;
+}
+
+// static
+void RenderFrameImpl::InstallCreateHook(
+ RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32)) {
+ CHECK(!g_create_render_frame_impl);
+ g_create_render_frame_impl = create_render_frame_impl;
+}
+
RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
: render_view_(render_view),
routing_id_(routing_id) {
@@ -104,17 +129,6 @@ void RenderFrameImpl::loadURLExternally(
WebKit::WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation(
WebKit::WebFrame* frame,
- WebKit::WebDataSource::ExtraData* extraData,
- const WebKit::WebURLRequest& request,
- WebKit::WebNavigationType type,
- WebKit::WebNavigationPolicy default_policy,
- bool is_redirect) {
- return render_view_->decidePolicyForNavigation(
- frame, extraData, request, type, default_policy, is_redirect);
-}
-
-WebKit::WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation(
- WebKit::WebFrame* frame,
const WebKit::WebURLRequest& request,
WebKit::WebNavigationType type,
WebKit::WebNavigationPolicy default_policy,
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 49130da..2a18c14 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -19,7 +19,15 @@ class CONTENT_EXPORT RenderFrameImpl
: public RenderFrame,
NON_EXPORTED_BASE(public WebKit::WebFrameClient) {
public:
- RenderFrameImpl(RenderViewImpl* render_view, int routing_id);
+ // Creates a new RenderFrame. |render_view| is the RenderView object that this
+ // frame belongs to.
+ static RenderFrameImpl* Create(RenderViewImpl* render_view, int32 routing_id);
+
+ // Used by content_layouttest_support to hook into the creation of
+ // RenderFrameImpls.
+ static void InstallCreateHook(
+ RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32));
+
virtual ~RenderFrameImpl();
// IPC::Sender
@@ -61,15 +69,6 @@ class CONTENT_EXPORT RenderFrameImpl
const WebKit::WebURLRequest& request,
WebKit::WebNavigationPolicy policy,
const WebKit::WebString& suggested_name);
- // The WebDataSource::ExtraData* is assumed to be a DocumentState* subclass.
- virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
- WebKit::WebFrame* frame,
- WebKit::WebDataSource::ExtraData* extraData,
- const WebKit::WebURLRequest& request,
- WebKit::WebNavigationType type,
- WebKit::WebNavigationPolicy default_policy,
- bool is_redirect);
- // DEPRECATED.
virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
WebKit::WebFrame* frame,
const WebKit::WebURLRequest& request,
@@ -208,6 +207,9 @@ class CONTENT_EXPORT RenderFrameImpl
// RenderFrameImpl methods
int routing_id() { return routing_id_; }
+ protected:
+ RenderFrameImpl(RenderViewImpl* render_view, int32 routing_id);
+
private:
RenderViewImpl* render_view_;
int routing_id_;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 0e21891..7bcff21 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -820,8 +820,9 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
}
void RenderViewImpl::Initialize(RenderViewImplParams* params) {
- main_render_frame_.reset(new RenderFrameImpl(
- this, params->main_frame_routing_id));
+ RenderFrameImpl* main_frame = RenderFrameImpl::Create(
+ this, params->main_frame_routing_id);
+ main_render_frame_.reset(main_frame);
#if defined(ENABLE_PLUGINS)
pepper_helper_.reset(new PepperPluginDelegateImpl(this));
@@ -899,7 +900,7 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
ShouldUseTransitionCompositing(device_scale_factor_));
webkit_glue::ApplyWebPreferences(webkit_preferences_, webview());
- webview()->initializeMainFrame(this);
+ webview()->initializeMainFrame(main_render_frame_.get());
if (switches::IsTouchDragDropEnabled())
webview()->settings()->setTouchDragDropEnabled(true);
@@ -2264,7 +2265,7 @@ bool RenderViewImpl::enumerateChosenDirectory(
void RenderViewImpl::initializeHelperPluginWebFrame(
WebKit::WebHelperPlugin* plugin) {
- plugin->initializeFrame(this);
+ plugin->initializeFrame(main_render_frame_.get());
}
void RenderViewImpl::didStartLoading() {
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc
index 8c8a328..3604374e 100644
--- a/content/test/layouttest_support.cc
+++ b/content/test/layouttest_support.cc
@@ -12,6 +12,7 @@
#include "content/renderer/render_view_impl.h"
#include "content/renderer/renderer_webkitplatformsupport_impl.h"
#include "third_party/WebKit/public/platform/WebGamepads.h"
+#include "third_party/WebKit/public/testing/WebFrameTestProxy.h"
#include "third_party/WebKit/public/testing/WebTestProxy.h"
#if defined(OS_WIN) && !defined(USE_AURA)
@@ -25,6 +26,7 @@
using WebKit::WebGamepads;
using WebKit::WebRect;
using WebKit::WebSize;
+using WebTestRunner::WebFrameTestProxy;
using WebTestRunner::WebTestProxy;
using WebTestRunner::WebTestProxyBase;
@@ -46,6 +48,20 @@ RenderViewImpl* CreateWebTestProxy(RenderViewImplParams* params) {
return render_view_proxy;
}
+RenderFrameImpl* CreateWebFrameTestProxy(
+ RenderViewImpl* render_view,
+ int32 routing_id) {
+ typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ViewProxy;
+ typedef WebFrameTestProxy<RenderFrameImpl, RenderViewImpl*, int32> FrameProxy;
+
+ ViewProxy* render_view_proxy = static_cast<ViewProxy*>(render_view);
+ WebTestProxyBase* base = static_cast<WebTestProxyBase*>(render_view_proxy);
+ FrameProxy* render_frame_proxy = new FrameProxy(render_view, routing_id);
+ render_frame_proxy->setBaseProxy(base);
+
+ return render_frame_proxy;
+}
+
} // namespace
@@ -53,6 +69,7 @@ void EnableWebTestProxyCreation(
const base::Callback<void(RenderView*, WebTestProxyBase*)>& callback) {
g_callback.Get() = callback;
RenderViewImpl::InstallCreateHook(CreateWebTestProxy);
+ RenderFrameImpl::InstallCreateHook(CreateWebFrameTestProxy);
}
void SetMockGamepads(const WebGamepads& pads) {