Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1762)

Unified Diff: content/renderer/render_view_impl.cc

Issue 30323002: [DRAFT] Create RenderFrameHostManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Misc fixes Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | content/test/test_render_view_host.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | content/test/test_render_view_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698