Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 2113dc9edc6a936d431e7b477241772597d80a1c..a931d8a432975c211eed2283a2de309853cd4127 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -542,6 +542,17 @@ void RenderFrameImpl::CreateFrame( |
const FrameReplicationState& replicated_state, |
CompositorDependencies* compositor_deps, |
const FrameMsg_NewFrame_WidgetParams& widget_params) { |
+ // 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); |
+ |
+ LOG(ERROR) << "RF::CreateFrame:" |
+ << " routing_id:" << routing_id |
+ << " parent:" << parent_routing_id |
+ << " proxy:" << proxy_routing_id |
+ << " sibling:" << previous_sibling_routing_id; |
+ |
blink::WebLocalFrame* web_frame; |
RenderFrameImpl* render_frame; |
if (proxy_routing_id == MSG_ROUTING_NONE) { |
@@ -569,6 +580,9 @@ void RenderFrameImpl::CreateFrame( |
RenderFrameProxy* proxy = |
RenderFrameProxy::FromRoutingID(proxy_routing_id); |
CHECK(proxy); |
+ LOG(ERROR) << "RF::CreateFrame:" |
+ << " parent_routing_id:" << parent_routing_id |
+ << " proxy->web_frame->parent():" << proxy->web_frame()->parent(); |
render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); |
web_frame = |
blink::WebLocalFrame::create(replicated_state.scope, render_frame); |
@@ -657,6 +671,9 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) |
accessibility_mode_(AccessibilityModeOff), |
renderer_accessibility_(NULL), |
weak_factory_(this) { |
+ LOG(ERROR) << "RF[" << this << "]::RF:" |
+ << " routing_id:" << routing_id_; |
+ |
std::pair<RoutingIDFrameMap::iterator, bool> result = |
g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this)); |
CHECK(result.second) << "Inserting a duplicate item."; |
@@ -688,18 +705,6 @@ RenderFrameImpl::~RenderFrameImpl() { |
#endif |
if (!is_subframe_) { |
- // When not using --site-per-process, 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_ && |
- !base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kSitePerProcess)) { |
- // 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. |
@@ -710,6 +715,7 @@ RenderFrameImpl::~RenderFrameImpl() { |
render_view_->UnregisterRenderFrame(this); |
g_routing_id_frame_map.Get().erase(routing_id_); |
RenderThread::Get()->RemoveRoute(routing_id_); |
+ LOG(ERROR) << "RF[" << this << "]::~RF"; |
} |
void RenderFrameImpl::SetWebFrame(blink::WebLocalFrame* web_frame) { |
@@ -725,6 +731,10 @@ void RenderFrameImpl::SetWebFrame(blink::WebLocalFrame* web_frame) { |
void RenderFrameImpl::Initialize() { |
is_subframe_ = !!frame_->parent(); |
is_local_root_ = !frame_->parent() || frame_->parent()->isWebRemoteFrame(); |
+ LOG(ERROR) << "RF[" << this << "]::Init:" |
+ << " is_subframe_:" << is_subframe_ |
+ << " is_local_root_:" << is_local_root_ |
+ << " rv:" << render_view_.get(); |
#if defined(ENABLE_PLUGINS) |
new PepperBrowserConnection(this); |
@@ -1109,11 +1119,24 @@ void RenderFrameImpl::OnSwapOut( |
int proxy_routing_id, |
bool is_loading, |
const FrameReplicationState& replicated_frame_state) { |
+ LOG(ERROR) << "RF[" << this << "]::OnSwapOut:" |
+ << " proxy:" << proxy_routing_id |
+ << " is loading:" << is_loading; |
+ |
TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_); |
RenderFrameProxy* proxy = NULL; |
bool is_site_per_process = base::CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kSitePerProcess); |
bool is_main_frame = !frame_->parent(); |
+ bool swapped_out_forbidden = true; |
+ |
+ // Chrome no longer supports swapped out RenderFrameImpl. |
+ // TODO(nasko): Remove this check and the associated boolean variable once |
+ // the removal work has had enough time to verify it works. |
+ CHECK(!is_swapped_out_); |
+ |
+ // This codepath should only be hit for subframes when in --site-per-process. |
+ CHECK_IMPLIES(!is_main_frame, is_site_per_process); |
// Only run unload if we're not swapped out yet, but send the ack either way. |
if (!is_swapped_out_) { |
@@ -1155,7 +1178,7 @@ void RenderFrameImpl::OnSwapOut( |
// TODO(creis): Should we be stopping all frames here and using |
// StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this |
// frame? |
- if (!is_site_per_process) |
+ if (!swapped_out_forbidden) |
OnStop(); |
// Transfer settings such as initial drawing parameters to the remote frame, |
@@ -1167,7 +1190,7 @@ void RenderFrameImpl::OnSwapOut( |
// 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) |
+ if (!swapped_out_forbidden) |
NavigateToSwappedOutURL(); |
// Let WebKit know that this view is hidden so it can drop resources and |
@@ -1191,7 +1214,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) { |
- if (is_site_per_process || !is_main_frame) { |
+ if (swapped_out_forbidden) { |
frame_->swap(proxy->web_frame()); |
if (is_loading) |
@@ -1207,7 +1230,7 @@ void RenderFrameImpl::OnSwapOut( |
// 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 (is_site_per_process && proxy) |
+ if (swapped_out_forbidden && proxy) |
proxy->SetReplicatedState(replicated_frame_state); |
// Safe to exit if no one else is using the process. |
@@ -1375,6 +1398,10 @@ void RenderFrameImpl::OnJavaScriptExecuteRequestForTests( |
TRACE_EVENT_INSTANT0("test_tracing", "OnJavaScriptExecuteRequestForTests", |
TRACE_EVENT_SCOPE_THREAD); |
+ LOG(ERROR) << "RF[" << this << "]::OnJSExecForTests: " |
+ << " id:" << id |
+ << " script:|" << jscript << "|"; |
+ |
// A bunch of tests expect to run code in the context of a user gesture, which |
// can grant additional privileges (e.g. the ability to create popups). |
scoped_ptr<blink::WebScopedUserGesture> gesture( |
@@ -1547,6 +1574,7 @@ void RenderFrameImpl::OnSnapshotAccessibilityTree(int callback_id) { |
} |
void RenderFrameImpl::OnDisownOpener() { |
+ LOG(ERROR) << "RF[" << this << "]::OnDisownOpener"; |
// TODO(creis): We should only see this for main frames for now. To support |
// disowning the opener on subframes, we will need to move WebContentsImpl's |
// opener_ to FrameTreeNode. |
@@ -2122,13 +2150,19 @@ blink::WebFrame* RenderFrameImpl::createChildFrame( |
} |
void RenderFrameImpl::didDisownOpener(blink::WebLocalFrame* frame) { |
+ LOG(ERROR) << "RF[" << this << "]::didDisownOpener"; |
+ |
DCHECK(!frame_ || frame_ == frame); |
// We only need to notify the browser if the active, top-level frame clears |
// its opener. We can ignore cases where a swapped out frame clears its |
// opener after hearing about it from the browser, and the browser does not |
// (yet) care about subframe openers. |
- if (is_swapped_out_ || frame->parent()) |
+ if (is_swapped_out_ || frame->parent()) { |
+ LOG(ERROR) << "RF[" << this << "]::didDisownOpener:" |
+ << " swapped_out:" << is_swapped_out_ |
+ << " parent:" << frame->parent(); |
return; |
+ } |
// Notify WebContents and all its swapped out RenderViews. |
Send(new FrameHostMsg_DidDisownOpener(routing_id_)); |
@@ -2486,6 +2520,9 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, |
is_swapped_out_) << |
"Heard swappedout:// when not swapped out."; |
+ LOG(ERROR) << "RF[" << this << "]::didStartProvLoad:" |
+ << " url:" << ds->request().url(); |
+ |
// Update the request time if WebKit has better knowledge of it. |
if (document_state->request_time().is_null() && |
triggering_event_time != 0.0) { |
@@ -2590,6 +2627,10 @@ void RenderFrameImpl::didCommitProvisionalLoad( |
NavigationStateImpl* navigation_state = |
static_cast<NavigationStateImpl*>(document_state->navigation_state()); |
+ LOG(ERROR) << "RF[" << this << "]::didCommitProvLoad:" |
+ << " url:" << GetLoadingUrl() |
+ << " proxy_routing_id_:" << proxy_routing_id_; |
+ |
if (proxy_routing_id_ != MSG_ROUTING_NONE) { |
RenderFrameProxy* proxy = |
RenderFrameProxy::FromRoutingID(proxy_routing_id_); |
@@ -2603,8 +2644,11 @@ void RenderFrameImpl::didCommitProvisionalLoad( |
if (!is_subframe_) { |
CHECK(!render_view_->main_render_frame_); |
render_view_->main_render_frame_ = this; |
- if (render_view_->is_swapped_out()) |
+ LOG(ERROR) << "RF[" << this << "]::didCommitProvLoad:" |
+ << " main frame, rv swapped_out:" << render_view_->is_swapped_out(); |
+ if (render_view_->is_swapped_out()) { |
render_view_->SetSwappedOut(false); |
+ } |
} |
} |
@@ -4450,7 +4494,7 @@ void RenderFrameImpl::NavigateInternal( |
// process. |
DCHECK(!frame_->parent()); |
render_view_->history_controller()->GoToEntry( |
- entry.Pass(), navigation_params.Pass(), cache_policy); |
+ frame_, entry.Pass(), navigation_params.Pass(), cache_policy); |
} else { |
// In --site-per-process, the browser process sends a single |
// WebHistoryItem destined for this frame. |