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

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: rebaselined 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 f863cc709be8cc402a1c8365398de93b8b788c00..1f1edec7a22ab2fffb1969583daafbac56ece12c 100644
--- a/content/browser/devtools/render_view_devtools_agent_host.cc
+++ b/content/browser/devtools/render_view_devtools_agent_host.cc
@@ -44,6 +44,17 @@ typedef std::vector<RenderViewDevToolsAgentHost*> Instances;
namespace {
base::LazyInstance<Instances>::Leaky g_instances = LAZY_INSTANCE_INITIALIZER;
+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)->HasRenderFrameHost(host))
+ return *it;
+ }
+ return NULL;
+}
+
// Returns RenderViewDevToolsAgentHost attached to any of RenderFrameHost
// instances associated with |web_contents|
static RenderViewDevToolsAgentHost* FindAgentHost(WebContents* web_contents) {
@@ -104,11 +115,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(pending);
if (!agent_host)
return;
agent_host->DisconnectRenderFrameHost();
@@ -267,30 +274,27 @@ RenderViewDevToolsAgentHost::~RenderViewDevToolsAgentHost() {
// TODO(creis): Consider removing this in favor of RenderFrameHostChanged.
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
// navigation.
ReattachToRenderFrameHost(new_host);
@@ -398,7 +402,6 @@ void RenderViewDevToolsAgentHost::Observe(int type,
void RenderViewDevToolsAgentHost::SetRenderFrameHost(RenderFrameHost* rfh) {
DCHECK(!render_frame_host_);
- DCHECK(!rfh->GetParent());
render_frame_host_ = static_cast<RenderFrameHostImpl*>(rfh);
WebContentsObserver::Observe(WebContents::FromRenderFrameHost(rfh));
@@ -501,6 +504,11 @@ void RenderViewDevToolsAgentHost::SynchronousSwapCompositorFrame(
page_handler_->OnSwapCompositorFrame(frame_metadata);
}
+bool RenderViewDevToolsAgentHost::HasRenderFrameHost(
+ RenderFrameHost* host) {
+ return host == render_frame_host_;
+}
+
void RenderViewDevToolsAgentHost::OnDispatchOnInspectorFrontend(
const DevToolsMessageChunk& message) {
if (!IsAttached() || !render_frame_host_)
« no previous file with comments | « content/browser/devtools/render_view_devtools_agent_host.h ('k') | content/browser/frame_host/navigator_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698