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

Unified Diff: content/browser/devtools/render_view_devtools_agent_host.cc

Issue 868673002: OOPIF: report both original and destination rfh in AboutToNavigateRenderFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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/devtools/render_view_devtools_agent_host.cc
diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc
index e6a12ca401c62876e69d7a3fc87d643aaa09981d..a18e37c425d0491eb8495f4e18314f4d93bec8bc 100644
--- a/content/browser/devtools/render_view_devtools_agent_host.cc
+++ b/content/browser/devtools/render_view_devtools_agent_host.cc
@@ -45,19 +45,23 @@ typedef std::vector<RenderViewDevToolsAgentHost*> Instances;
namespace {
base::LazyInstance<Instances>::Leaky g_instances = LAZY_INSTANCE_INITIALIZER;
-// Returns RenderViewDevToolsAgentHost attached to any of RenderFrameHost
-// instances associated with |web_contents|
-static RenderViewDevToolsAgentHost* FindAgentHost(WebContents* web_contents) {
+static RenderViewDevToolsAgentHost* FindAgentHost(RenderFrameHost* host) {
if (g_instances == NULL)
return NULL;
for (Instances::iterator it = g_instances.Get().begin();
it != g_instances.Get().end(); ++it) {
- if ((*it)->GetWebContents() == web_contents)
+ if ((*it)->HasRenderFrameHost(host))
return *it;
}
return NULL;
}
+// Returns RenderViewDevToolsAgentHost attached to any of RenderFrameHost
dgozman 2015/01/22 13:54:09 The comment is wrong. It's only for the main frame
pfeldman 2015/01/22 22:10:05 Done.
+// instances associated with |web_contents|
+static RenderViewDevToolsAgentHost* FindAgentHost(WebContents* web_contents) {
+ return FindAgentHost(web_contents->GetMainFrame());
+}
+
} // namespace
scoped_refptr<DevToolsAgentHost>
@@ -105,11 +109,7 @@ std::vector<WebContents*> DevToolsAgentHostImpl::GetInspectableWebContents() {
void RenderViewDevToolsAgentHost::OnCancelPendingNavigation(
RenderFrameHost* pending,
RenderFrameHost* current) {
- if (current->GetParent())
- return;
- WebContents* web_contents =
- WebContents::FromRenderFrameHost(pending);
- RenderViewDevToolsAgentHost* agent_host = FindAgentHost(web_contents);
+ RenderViewDevToolsAgentHost* agent_host = FindAgentHost(current);
dgozman 2015/01/22 13:54:09 pending
pfeldman 2015/01/22 22:10:05 Done, but we'll have to carefully manage the state
if (!agent_host)
return;
agent_host->DisconnectRenderFrameHost();
@@ -268,30 +268,27 @@ RenderViewDevToolsAgentHost::~RenderViewDevToolsAgentHost() {
// TODO(creis): Consider removing this in favor of RenderFrameHostChanged.
dgozman 2015/01/22 13:54:09 Remove TODO? This (or similar) notification is not
nasko 2015/01/22 21:20:12 I do believe that this notification will go away,
pfeldman 2015/01/22 22:10:05 Leave the TODO for now, as agreed.
void RenderViewDevToolsAgentHost::AboutToNavigateRenderFrame(
- RenderFrameHost* render_frame_host) {
- if (!render_frame_host_)
- return;
- if (render_frame_host->GetParent())
+ RenderFrameHost* old_host,
+ RenderFrameHost* new_host) {
+ if (render_frame_host_ != old_host)
return;
// TODO(creis): This will need to be updated for --site-per-process, since
// RenderViewHost is going away and navigations could happen in any frame.
- if (render_frame_host_ == render_frame_host) {
+ if (render_frame_host_ == new_host) {
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
render_frame_host_->GetRenderViewHost());
if (rvh->render_view_termination_status() ==
base::TERMINATION_STATUS_STILL_RUNNING)
return;
}
- ReattachToRenderFrameHost(render_frame_host);
+ ReattachToRenderFrameHost(new_host);
}
void RenderViewDevToolsAgentHost::RenderFrameHostChanged(
RenderFrameHost* old_host,
RenderFrameHost* new_host) {
- if (new_host->GetParent())
- return;
- if (new_host != render_frame_host_) {
+ if (old_host == render_frame_host_ && new_host != render_frame_host_) {
// AboutToNavigateRenderFrame was not called for renderer-initiated
nasko 2015/01/22 21:20:12 Since you already handle this case, why is AboutTo
pfeldman 2015/01/22 22:10:05 It is too late, we've already failed to seed the r
// navigation.
ReattachToRenderFrameHost(new_host);
@@ -401,7 +398,6 @@ void RenderViewDevToolsAgentHost::Observe(int type,
void RenderViewDevToolsAgentHost::SetRenderFrameHost(RenderFrameHost* rfh) {
DCHECK(!render_frame_host_);
- DCHECK(!rfh->GetParent());
dgozman 2015/01/22 13:54:09 I think we can keep this until we support child fr
pfeldman 2015/01/22 22:10:04 Ack. But it is only called for GetMainFrame and I
render_frame_host_ = static_cast<RenderFrameHostImpl*>(rfh);
WebContentsObserver::Observe(WebContents::FromRenderFrameHost(rfh));
@@ -504,6 +500,11 @@ void RenderViewDevToolsAgentHost::SynchronousSwapCompositorFrame(
page_handler_->OnSwapCompositorFrame(frame_metadata);
}
+bool RenderViewDevToolsAgentHost::HasRenderFrameHost(
+ RenderFrameHost* host) {
+ return host == render_frame_host_;
+}
+
void RenderViewDevToolsAgentHost::OnSaveAgentRuntimeState(
const std::string& state) {
if (!render_frame_host_)

Powered by Google App Engine
This is Rietveld 408576698