| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 3ccf69a41919d9518ea4466726a3d03fed111a64..43b012c7b2ea14ed9a2eb394ca45763b14b4db1f 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -954,6 +954,7 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
|
| // RenderViewImpl::frameDetached().
|
| webview()->setMainFrame(WebFrame::create(main_render_frame_.get()));
|
| main_render_frame_->MainWebFrameCreated(webview()->mainFrame());
|
| + main_render_frame_->set_web_frame(webview()->mainFrame());
|
|
|
| if (switches::IsTouchDragDropEnabled())
|
| webview()->settings()->setTouchDragDropEnabled(true);
|
| @@ -2010,7 +2011,16 @@ void RenderViewImpl::UpdateURL(WebFrame* frame) {
|
| DCHECK(!navigation_state->history_list_was_cleared());
|
| params.history_list_was_cleared = false;
|
|
|
| - Send(new ViewHostMsg_FrameNavigate(routing_id_, params));
|
| + // Don't send this message while the subframe is swapped out.
|
| + // TODO(creis): This whole method should move to RenderFrame.
|
| + // TODO(creis): How did this work before for top-level frames?
|
| + bool frame_is_swapped_out = false;
|
| + if (frame->parent()) {
|
| + RenderFrameImpl* rf = RenderFrameImpl::FindByWebFrame(frame);
|
| + frame_is_swapped_out = rf->is_swapped_out();
|
| + }
|
| + if (!frame_is_swapped_out)
|
| + Send(new ViewHostMsg_FrameNavigate(routing_id_, params));
|
| }
|
|
|
| last_page_id_sent_to_browser_ =
|
| @@ -3859,6 +3869,15 @@ void RenderViewImpl::didFinishLoad(WebFrame* frame) {
|
|
|
| FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidFinishLoad(frame));
|
|
|
| + // Don't send this message while the subframe is swapped out.
|
| + // TODO(creis): This whole method should move to RenderFrame.
|
| + // TODO(creis): How did this work before for top-level frames?
|
| + if (frame->parent()) {
|
| + RenderFrameImpl* rf = RenderFrameImpl::FindByWebFrame(frame);
|
| + if (rf && rf->is_swapped_out())
|
| + return;
|
| + }
|
| +
|
| Send(new ViewHostMsg_DidFinishLoad(routing_id_,
|
| frame->identifier(),
|
| ds->request().url(),
|
| @@ -5311,7 +5330,15 @@ void RenderViewImpl::NavigateToSwappedOutURL(blink::WebFrame* frame) {
|
| // synchronously. Otherwise a new navigation can interrupt the navigation
|
| // to kSwappedOutURL. If that happens to be to the page we had been
|
| // showing, then WebKit will never send a commit and we'll be left spinning.
|
| - CHECK(is_swapped_out_);
|
| + // TODO(creis): Until we move this to RenderFrame, we may call this from a
|
| + // swapped out RenderFrame while our own is_swapped_out_ is false.
|
| + // TODO(creis): How did this work before for top-level frames?
|
| + bool is_swapped_out = is_swapped_out_;
|
| + if (frame->parent()) {
|
| + RenderFrameImpl* rf = RenderFrameImpl::FindByWebFrame(frame);
|
| + is_swapped_out |= rf->is_swapped_out();
|
| + }
|
| + CHECK(is_swapped_out);
|
| GURL swappedOutURL(kSwappedOutURL);
|
| WebURLRequest request(swappedOutURL);
|
| frame->loadRequest(request);
|
|
|