| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 5ea20a241bde2b32b1bbd01d62a192c58657dd34..5b9e5a1c2a30fb36139584ee69881c34f8a61f24 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -956,14 +956,7 @@ blink::WebFrame* RenderFrameImpl::ResolveOpener(int opener_frame_routing_id,
|
| if (opener_view_routing_id)
|
| *opener_view_routing_id = opener_proxy->render_view()->GetRoutingID();
|
|
|
| - // TODO(nasko,alexmos): This check won't be needed once swappedout:// is
|
| - // gone.
|
| - if (opener_proxy->IsMainFrameDetachedFromTree()) {
|
| - DCHECK(!SiteIsolationPolicy::IsSwappedOutStateForbidden());
|
| - return opener_proxy->render_view()->webview()->mainFrame();
|
| - } else {
|
| - return opener_proxy->web_frame();
|
| - }
|
| + return opener_proxy->web_frame();
|
| }
|
|
|
| RenderFrameImpl* opener_frame =
|
| @@ -1058,17 +1051,6 @@ RenderFrameImpl::~RenderFrameImpl() {
|
| #endif
|
|
|
| if (is_main_frame_) {
|
| - // When using swapped out frames, RenderFrameProxy is owned by
|
| - // RenderFrameImpl in the case it is the main frame. Ensure it is deleted
|
| - // along with this object.
|
| - if (render_frame_proxy_ &&
|
| - !SiteIsolationPolicy::IsSwappedOutStateForbidden()) {
|
| - // The following method calls back into this object and clears
|
| - // |render_frame_proxy_|.
|
| - render_frame_proxy_->frameDetached(
|
| - blink::WebRemoteFrameClient::DetachType::Remove);
|
| - }
|
| -
|
| // Ensure the RenderView doesn't point to this object, once it is destroyed.
|
| // TODO(nasko): Add a check that the |main_render_frame_| of |render_view_|
|
| // is |this|, once the object is no longer leaked.
|
| @@ -1543,8 +1525,6 @@ void RenderFrameImpl::OnSwapOut(
|
| const FrameReplicationState& replicated_frame_state) {
|
| TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_);
|
| RenderFrameProxy* proxy = NULL;
|
| - bool swapped_out_forbidden =
|
| - SiteIsolationPolicy::IsSwappedOutStateForbidden();
|
|
|
| // This codepath should only be hit for subframes when in --site-per-process.
|
| CHECK(is_main_frame_ || SiteIsolationPolicy::AreCrossProcessFramesPossible());
|
| @@ -1586,27 +1566,11 @@ void RenderFrameImpl::OnSwapOut(
|
| if (proxy)
|
| set_render_frame_proxy(proxy);
|
|
|
| - // Now that we're swapped out and filtering IPC messages, stop loading to
|
| - // ensure that no other in-progress navigation continues. We do this here
|
| - // to avoid sending a DidStopLoading message to the browser process.
|
| - // TODO(creis): Should we be stopping all frames here and using
|
| - // StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this
|
| - // frame?
|
| - if (!swapped_out_forbidden)
|
| - OnStop();
|
| -
|
| // Transfer settings such as initial drawing parameters to the remote frame,
|
| // if one is created, that will replace this frame.
|
| if (!is_main_frame_ && proxy)
|
| proxy->web_frame()->initializeFromFrame(frame_);
|
|
|
| - // Replace the page with a blank dummy URL. The unload handler will not be
|
| - // 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 (!swapped_out_forbidden)
|
| - NavigateToSwappedOutURL();
|
| -
|
| // Let WebKit know that this view is hidden so it can drop resources and
|
| // stop compositing.
|
| // TODO(creis): Support this for subframes as well.
|
| @@ -1629,7 +1593,7 @@ void RenderFrameImpl::OnSwapOut(
|
|
|
| // Now that all of the cleanup is complete and the browser side is notified,
|
| // start using the RenderFrameProxy, if one is created.
|
| - if (proxy && swapped_out_forbidden) {
|
| + if (proxy) {
|
| // The swap call deletes this RenderFrame via frameDetached. Do not access
|
| // any members after this call.
|
| // TODO(creis): WebFrame::swap() can return false. Most of those cases
|
| @@ -1655,23 +1619,16 @@ void RenderFrameImpl::OnSwapOut(
|
| proxy->OnDidStartLoading();
|
| }
|
|
|
| - // In --site-per-process, initialize the WebRemoteFrame with the replication
|
| - // state passed by the process that is now rendering the frame.
|
| - // TODO(alexmos): We cannot yet do this for swapped-out main frames, because
|
| - // in that case we leave the LocalFrame as the main frame visible to Blink
|
| - // and don't call swap() above. Because swap() is what creates a RemoteFrame
|
| - // in proxy->web_frame(), the RemoteFrame will not exist for main frames.
|
| - // When we do an unconditional swap for all frames, we can remove
|
| - // !is_main_frame below.
|
| - if (proxy && swapped_out_forbidden)
|
| + // Initialize the WebRemoteFrame with the replication state passed by the
|
| + // process that is now rendering the frame.
|
| + if (proxy)
|
| proxy->SetReplicatedState(replicated_frame_state);
|
|
|
| // Safe to exit if no one else is using the process.
|
| // TODO(nasko): Remove the dependency on RenderViewImpl here and ref count
|
| // the process based on the lifetime of this RenderFrameImpl object.
|
| - if (is_main_frame) {
|
| + if (is_main_frame)
|
| render_view->WasSwappedOut();
|
| - }
|
| }
|
|
|
| void RenderFrameImpl::OnDeleteFrame() {
|
| @@ -2109,18 +2066,8 @@ void RenderFrameImpl::OnPostMessageEvent(
|
| if (params.source_routing_id != MSG_ROUTING_NONE) {
|
| RenderFrameProxy* source_proxy =
|
| RenderFrameProxy::FromRoutingID(params.source_routing_id);
|
| - if (source_proxy) {
|
| - // Currently, navigating a top-level frame cross-process does not swap
|
| - // the WebLocalFrame for a WebRemoteFrame in the frame tree, and the
|
| - // WebRemoteFrame will not have an associated blink::Frame. If this is
|
| - // the case for |source_proxy|, use the corresponding (swapped-out)
|
| - // WebLocalFrame instead, so that event.source for this message can be
|
| - // set and used properly.
|
| - if (source_proxy->IsMainFrameDetachedFromTree())
|
| - source_frame = source_proxy->render_view()->webview()->mainFrame();
|
| - else
|
| - source_frame = source_proxy->web_frame();
|
| - }
|
| + if (source_proxy)
|
| + source_frame = source_proxy->web_frame();
|
| }
|
|
|
| // If the message contained MessagePorts, create the corresponding endpoints.
|
| @@ -4783,33 +4730,28 @@ WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation(
|
| RenderViewImpl::GetReferrerFromRequest(frame_, info.urlRequest));
|
|
|
| // TODO(nick): Is consulting |is_main_frame| here correct?
|
| - if (SiteIsolationPolicy::IsSwappedOutStateForbidden() && !is_main_frame_) {
|
| - // There's no reason to ignore navigations on subframes, since the swap out
|
| - // logic no longer applies.
|
| - } else {
|
| - if (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 (frame_->parent() == NULL) {
|
| - OpenURL(info.urlRequest.url(), referrer, info.defaultPolicy,
|
| - info.replacesCurrentHistoryItem, false);
|
| - 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_main_frame_ && 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 (frame_->parent() == NULL) {
|
| + OpenURL(info.urlRequest.url(), referrer, info.defaultPolicy,
|
| + info.replacesCurrentHistoryItem, false);
|
| + 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.
|
|
|