diff options
author | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-02 18:38:47 +0000 |
---|---|---|
committer | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-02 18:38:47 +0000 |
commit | 2f61bdd9d0494e27d35eb336d3eef930f43d7740 (patch) | |
tree | b99207c89f8945ba0095e36d930f1be5679d8af6 | |
parent | b7fdae99276f825658262cc2fe44d84cf1b524da (diff) | |
download | chromium_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.cc | 36 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.h | 22 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 9 | ||||
-rw-r--r-- | content/test/layouttest_support.cc | 17 |
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) { |