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

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 208243019: Move SwapOut methods to RenderFrameHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Nasko's comment Created 6 years, 9 months 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
Index: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index dc1393cb65da8e3bbe1ed4a689f196bc7e20f52c..bb5deff56a36752b6933d2e819e750cc31aefe9d 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -15,6 +15,7 @@
#include "content/browser/frame_host/navigator.h"
#include "content/browser/frame_host/render_frame_host_delegate.h"
#include "content/browser/renderer_host/input/input_router.h"
+#include "content/browser/renderer_host/input/timeout_monitor.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/common/frame_messages.h"
#include "content/common/input_messages.h"
@@ -496,13 +497,29 @@ void RenderFrameHostImpl::OnCrossSiteResponse(
}
void RenderFrameHostImpl::SwapOut() {
- if (render_view_host_->IsRenderViewLive()) {
- Send(new FrameMsg_SwapOut(routing_id_));
- } else {
- // Our RenderViewHost doesn't have a live renderer, so just skip the unload
- // event.
- OnSwappedOut(true);
+ // TODO(creis): Move swapped out state to RFH. Until then, only update it
+ // when swapping out the main frame.
+ if (!GetParent()) {
+ // If this RenderViewHost is not in the default state, it must have already
+ // gone through this, therefore just return.
+ if (render_view_host_->rvh_state_ != RenderViewHostImpl::STATE_DEFAULT)
+ return;
+
+ render_view_host_->SetState(
+ RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK);
+ render_view_host_->unload_event_monitor_timeout_->Start(
+ base::TimeDelta::FromMilliseconds(
+ RenderViewHostImpl::kUnloadTimeoutMS));
}
+
+ if (render_view_host_->IsRenderViewLive())
+ Send(new FrameMsg_SwapOut(routing_id_));
+
+ if (!GetParent())
+ delegate_->SwappedOut(this);
+
+ // Allow the navigation to proceed.
+ frame_tree_node_->render_manager()->SwappedOut(this);
}
void RenderFrameHostImpl::OnDidStartLoading() {
@@ -567,7 +584,12 @@ void RenderFrameHostImpl::OnSwapOutACK() {
}
void RenderFrameHostImpl::OnSwappedOut(bool timed_out) {
- frame_tree_node_->render_manager()->SwappedOutFrame(this);
+ // For now, we only need to update the RVH state machine for top-level swaps.
+ // Subframe swaps (in --site-per-process) can just continue via RFHM.
+ if (!GetParent())
+ render_view_host_->OnSwappedOut(timed_out);
+ else
+ frame_tree_node_->render_manager()->SwappedOut(this);
}
void RenderFrameHostImpl::OnContextMenu(const ContextMenuParams& params) {
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/browser/frame_host/render_frame_host_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698