| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index b66d2701da33c67c9d0461eee25f180381ed358e..732b914d631de55a19c54de6a3ac371453b881aa 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -78,7 +78,6 @@
|
| #include "content/renderer/notification_provider.h"
|
| #include "content/renderer/npapi/plugin_channel_host.h"
|
| #include "content/renderer/push_messaging_dispatcher.h"
|
| -#include "content/renderer/render_frame_proxy.h"
|
| #include "content/renderer/render_process.h"
|
| #include "content/renderer/render_thread_impl.h"
|
| #include "content/renderer/render_view_impl.h"
|
| @@ -377,34 +376,10 @@
|
| }
|
|
|
| // static
|
| -void RenderFrameImpl::CreateFrame(int routing_id, int parent_routing_id) {
|
| - // TODO(nasko): For now, this message is only sent for subframes, as the
|
| - // top level frame is created when the RenderView is created through the
|
| - // ViewMsg_New IPC.
|
| - CHECK_NE(MSG_ROUTING_NONE, parent_routing_id);
|
| -
|
| - RenderFrameProxy* proxy = RenderFrameProxy::FromRoutingID(parent_routing_id);
|
| -
|
| - // If the browser is sending a valid parent routing id, it should already be
|
| - // created and registered.
|
| - CHECK(proxy);
|
| - blink::WebRemoteFrame* parent_web_frame = proxy->web_frame();
|
| -
|
| - // Create the RenderFrame and WebLocalFrame, linking the two.
|
| - RenderFrameImpl* render_frame =
|
| - RenderFrameImpl::Create(proxy->render_view(), routing_id);
|
| - blink::WebLocalFrame* web_frame =
|
| - parent_web_frame->createLocalChild("", render_frame);
|
| - render_frame->SetWebFrame(web_frame);
|
| - render_frame->Initialize();
|
| -}
|
| -
|
| -// static
|
| RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) {
|
| return RenderFrameImpl::FromWebFrame(web_frame);
|
| }
|
|
|
| -// static
|
| RenderFrameImpl* RenderFrameImpl::FromWebFrame(blink::WebFrame* web_frame) {
|
| FrameMap::iterator iter = g_frame_map.Get().find(web_frame);
|
| if (iter != g_frame_map.Get().end())
|
| @@ -702,13 +677,11 @@
|
| delete message;
|
| return false;
|
| }
|
| - if (frame_->parent() == NULL &&
|
| - (is_swapped_out_ || render_view_->is_swapped_out())) {
|
| + if (is_swapped_out_ || render_view_->is_swapped_out()) {
|
| if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) {
|
| delete message;
|
| return false;
|
| }
|
| -
|
| // In most cases, send IPCs through the proxy when swapped out. In some
|
| // calls the associated RenderViewImpl routing id is used to send
|
| // messages, so don't use the proxy.
|
| @@ -720,13 +693,7 @@
|
| }
|
|
|
| bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
|
| - // TODO(kenrb): document() should not be null, but as a transitional step
|
| - // we have RenderFrameProxy 'wrapping' a RenderFrameImpl, passing messages
|
| - // to this method. This happens for a top-level remote frame, where a
|
| - // document-less RenderFrame is replaced by a RenderFrameProxy but kept
|
| - // around and is still able to receive messages.
|
| - if (!frame_->document().isNull())
|
| - GetContentClient()->SetActiveURL(frame_->document().url());
|
| + GetContentClient()->SetActiveURL(frame_->document().url());
|
|
|
| ObserverListBase<RenderFrameObserver>::Iterator it(observers_);
|
| RenderFrameObserver* observer;
|
| @@ -797,8 +764,7 @@
|
| return;
|
|
|
| // Swap this renderer back in if necessary.
|
| - if (render_view_->is_swapped_out_ &&
|
| - GetWebFrame() == render_view_->webview()->mainFrame()) {
|
| + if (render_view_->is_swapped_out_) {
|
| // We marked the view as hidden when swapping the view out, so be sure to
|
| // reset the visibility state before navigating to the new URL.
|
| render_view_->webview()->setVisibilityState(
|
| @@ -991,8 +957,6 @@
|
|
|
| void RenderFrameImpl::OnSwapOut(int proxy_routing_id) {
|
| RenderFrameProxy* proxy = NULL;
|
| - bool is_site_per_process =
|
| - CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess);
|
|
|
| // Only run unload if we're not swapped out yet, but send the ack either way.
|
| if (!is_swapped_out_ || !render_view_->is_swapped_out_) {
|
| @@ -1015,7 +979,6 @@
|
| frame_->dispatchUnloadEvent();
|
|
|
| // Swap out and stop sending any IPC messages that are not ACKs.
|
| - // TODO(nasko): Do we need RenderFrameImpl::is_swapped_out_ anymore?
|
| if (!frame_->parent())
|
| render_view_->SetSwappedOut(true);
|
| is_swapped_out_ = true;
|
| @@ -1040,8 +1003,7 @@
|
| // run a second time, thanks to a check in FrameLoader::stopLoading.
|
| // TODO(creis): Need to add a better way to do this that avoids running the
|
| // beforeunload handler. For now, we just run it a second time silently.
|
| - if (!is_site_per_process || frame_->parent() == NULL)
|
| - render_view_->NavigateToSwappedOutURL(frame_);
|
| + render_view_->NavigateToSwappedOutURL(frame_);
|
|
|
| // Let WebKit know that this view is hidden so it can drop resources and
|
| // stop compositing.
|
| @@ -1061,17 +1023,8 @@
|
|
|
| // Now that all of the cleanup is complete and the browser side is notified,
|
| // start using the RenderFrameProxy, if one is created.
|
| - if (proxy) {
|
| - if (frame_->parent()) {
|
| - frame_->swap(proxy->web_frame());
|
| - if (is_site_per_process) {
|
| - // TODO(nasko): delete the frame here, since we've replaced it with a
|
| - // proxy.
|
| - }
|
| - } else {
|
| - set_render_frame_proxy(proxy);
|
| - }
|
| - }
|
| + if (proxy)
|
| + set_render_frame_proxy(proxy);
|
| }
|
|
|
| void RenderFrameImpl::OnContextMenuClosed(
|
| @@ -1876,7 +1829,7 @@
|
| FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad());
|
|
|
| Send(new FrameHostMsg_DidStartProvisionalLoadForFrame(
|
| - routing_id_, ds->request().url(), is_transition_navigation));
|
| + routing_id_, ds->request().url(), is_transition_navigation));
|
| }
|
|
|
| void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
|
| @@ -2456,21 +2409,13 @@
|
| if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel) {
|
| request.setFirstPartyForCookies(request.url());
|
| } else {
|
| - // TODO(nasko): When the top-level frame is remote, there is no document.
|
| - // This is broken and should be fixed to propagate the first party.
|
| - WebFrame* top = frame->top();
|
| - if (top->isWebLocalFrame()) {
|
| - request.setFirstPartyForCookies(
|
| - frame->top()->document().firstPartyForCookies());
|
| - }
|
| + request.setFirstPartyForCookies(
|
| + frame->top()->document().firstPartyForCookies());
|
| }
|
| }
|
|
|
| WebFrame* top_frame = frame->top();
|
| - // TODO(nasko): Hack around asking about top-frame data source. This means
|
| - // for out-of-process iframes we are treating the current frame as the
|
| - // top-level frame, which is wrong.
|
| - if (!top_frame || top_frame->isWebRemoteFrame())
|
| + if (!top_frame)
|
| top_frame = frame;
|
| WebDataSource* provisional_data_source = top_frame->provisionalDataSource();
|
| WebDataSource* top_data_source = top_frame->dataSource();
|
| @@ -2564,16 +2509,8 @@
|
| provider_id = provider->provider_id();
|
| }
|
|
|
| - WebFrame* parent = frame->parent();
|
| - int parent_routing_id = MSG_ROUTING_NONE;
|
| - if (!parent) {
|
| - parent_routing_id = -1;
|
| - } else if (parent->isWebLocalFrame()) {
|
| - parent_routing_id = FromWebFrame(parent)->GetRoutingID();
|
| - } else {
|
| - parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id();
|
| - }
|
| -
|
| + int parent_routing_id = frame->parent() ?
|
| + FromWebFrame(frame->parent())->GetRoutingID() : -1;
|
| RequestExtraData* extra_data = new RequestExtraData();
|
| extra_data->set_visibility_state(render_view_->visibilityState());
|
| extra_data->set_custom_user_agent(custom_user_agent);
|
| @@ -3287,37 +3224,29 @@
|
|
|
| Referrer referrer(RenderViewImpl::GetReferrerFromRequest(info.frame,
|
| info.urlRequest));
|
| - const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| -
|
| - bool is_subframe = !!info.frame->parent();
|
| -
|
| - if (command_line.HasSwitch(switches::kSitePerProcess) && is_subframe) {
|
| - // There's no reason to ignore navigations on subframes, since the swap out
|
| - // logic no longer applies.
|
| - } else {
|
| - if (is_swapped_out_ || render_view_->is_swapped_out()) {
|
| - if (info.urlRequest.url() != GURL(kSwappedOutURL)) {
|
| - // Targeted links may try to navigate a swapped out frame. Allow the
|
| - // browser process to navigate the tab instead. Note that it is also
|
| - // possible for non-targeted navigations (from this view) to arrive
|
| - // here just after we are swapped out. It's ok to send them to the
|
| - // browser, as long as they're for the top level frame.
|
| - // TODO(creis): Ensure this supports targeted form submissions when
|
| - // fixing http://crbug.com/101395.
|
| - if (info.frame->parent() == NULL) {
|
| - OpenURL(info.frame, info.urlRequest.url(), referrer,
|
| - info.defaultPolicy);
|
| - return blink::WebNavigationPolicyIgnore; // Suppress the load here.
|
| - }
|
| -
|
| - // We should otherwise ignore in-process iframe navigations, if they
|
| - // arrive just after we are swapped out.
|
| - return blink::WebNavigationPolicyIgnore;
|
| +
|
| + if (is_swapped_out_ || render_view_->is_swapped_out()) {
|
| + if (info.urlRequest.url() != GURL(kSwappedOutURL)) {
|
| + // Targeted links may try to navigate a swapped out frame. Allow the
|
| + // browser process to navigate the tab instead. Note that it is also
|
| + // possible for non-targeted navigations (from this view) to arrive
|
| + // here just after we are swapped out. It's ok to send them to the
|
| + // browser, as long as they're for the top level frame.
|
| + // TODO(creis): Ensure this supports targeted form submissions when
|
| + // fixing http://crbug.com/101395.
|
| + if (info.frame->parent() == NULL) {
|
| + OpenURL(info.frame, info.urlRequest.url(), referrer,
|
| + info.defaultPolicy);
|
| + return blink::WebNavigationPolicyIgnore; // Suppress the load here.
|
| }
|
|
|
| - // Allow kSwappedOutURL to complete.
|
| - return info.defaultPolicy;
|
| - }
|
| + // We should otherwise ignore in-process iframe navigations, if they
|
| + // arrive just after we are swapped out.
|
| + return blink::WebNavigationPolicyIgnore;
|
| + }
|
| +
|
| + // Allow kSwappedOutURL to complete.
|
| + return info.defaultPolicy;
|
| }
|
|
|
| // Webkit is asking whether to navigate to a new URL.
|
| @@ -3335,6 +3264,7 @@
|
| // all top-level navigations to the browser to let it swap processes when
|
| // crossing site boundaries. This is currently expected to break some script
|
| // calls and navigations, such as form submissions.
|
| + const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| bool force_swap_due_to_flag =
|
| command_line.HasSwitch(switches::kEnableStrictSiteIsolation) ||
|
| command_line.HasSwitch(switches::kSitePerProcess);
|
|
|