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

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

Issue 1459343004: RenderFrameDevToolsAgentHost uses new navigation observer API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WIP: RenderFrameHostChanged is no more Created 5 years, 1 month 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_frame_devtools_agent_host.cc
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc
index 3b6a2072432cdfb4936defbf0553de47d0d39fb0..a9c5b03a6bb1c738a79891977aa7d25a50b72021 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.cc
+++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -20,6 +20,7 @@
#include "content/browser/devtools/protocol/security_handler.h"
#include "content/browser/devtools/protocol/service_worker_handler.h"
#include "content/browser/devtools/protocol/tracing_handler.h"
+#include "content/browser/frame_host/navigation_handle_impl.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
@@ -231,6 +232,7 @@ void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() {
// RenderFrameDevToolsAgentHost ------------------------------------------------
+// static
scoped_refptr<DevToolsAgentHost>
DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) {
while (frame_host && !ShouldCreateDevToolsFor(frame_host))
@@ -244,6 +246,7 @@ DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) {
return result;
}
+// static
scoped_refptr<DevToolsAgentHost>
DevToolsAgentHost::GetOrCreateFor(WebContents* web_contents) {
RenderFrameDevToolsAgentHost* result = FindAgentHost(web_contents);
@@ -337,7 +340,8 @@ RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost(
emulation_handler_(nullptr),
frame_trace_recorder_(nullptr),
protocol_handler_(new DevToolsProtocolHandler(this)),
- current_frame_crashed_(false) {
+ current_frame_crashed_(false),
+ frame_tree_node_(host->frame_tree_node()) {
DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
dispatcher->SetDOMHandler(dom_handler_.get());
dispatcher->SetInputHandler(input_handler_.get());
@@ -493,32 +497,51 @@ RenderFrameDevToolsAgentHost::~RenderFrameDevToolsAgentHost() {
g_instances.Get().erase(it);
}
+void RenderFrameDevToolsAgentHost::DidFinishNavigation(
+ NavigationHandle* navigation_handle) {
+ if (MatchesMyTreeNode(navigation_handle) && pending_) {
+ if (navigation_handle->HasCommitted() &&
+ !navigation_handle->IsErrorPage()) {
+ // This was a successful navigation
+ CommitPending();
+ CHECK(current_->host() == navigation_handle->GetRenderFrameHost());
+ } else {
+ // This was an unsuccessful navigation (canceled, failed, interrupted...).
+ DiscardPending();
+ }
+ }
+ service_worker_handler_->UpdateHosts();
+}
+
void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame(
RenderFrameHost* old_host,
RenderFrameHost* new_host) {
- DCHECK(!pending_ || pending_->host() != old_host);
- if (!current_ || current_->host() != old_host)
+ if (!MatchesMyTreeNode(old_host))
return;
+ DCHECK(!pending_ || pending_->host() != old_host);
if (old_host == new_host && !current_frame_crashed_)
return;
DCHECK(!pending_);
SetPending(static_cast<RenderFrameHostImpl*>(new_host));
}
-void RenderFrameDevToolsAgentHost::RenderFrameHostChanged(
- RenderFrameHost* old_host,
- RenderFrameHost* new_host) {
- DCHECK(!pending_ || pending_->host() != old_host);
- if (!current_ || current_->host() != old_host)
- return;
+// void RenderFrameDevToolsAgentHost::RenderFrameHostChanged(
+// RenderFrameHost* old_host,
+// RenderFrameHost* new_host) {
+// if (!MatchesMyTreeNode(old_host))
+// return;
+// DCHECK(!pending_ || pending_->host() != old_host);
- // AboutToNavigateRenderFrame was not called for renderer-initiated
- // navigation.
- if (!pending_)
- SetPending(static_cast<RenderFrameHostImpl*>(new_host));
+// // AboutToNavigateRenderFrame was not called for renderer-initiated
+// // navigation.
+// if (!pending_) {
+// SetPending(static_cast<RenderFrameHostImpl*>(new_host));
+// } else {
+// DCHECK(pending_->host() == new_host);
+// }
- CommitPending();
-}
+// CommitPending();
+// }
void RenderFrameDevToolsAgentHost::FrameDeleted(RenderFrameHost* rfh) {
if (pending_ && pending_->host() == rfh) {
@@ -544,6 +567,8 @@ void RenderFrameDevToolsAgentHost::DestroyOnRenderFrameGone() {
HostClosed();
pending_.reset();
current_.reset();
+ frame_tree_node_ = nullptr;
+ WebContentsObserver::Observe(nullptr);
Release();
}
@@ -618,25 +643,6 @@ void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() {
page_handler_->DidDetachInterstitialPage();
}
-void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame(
- RenderFrameHost* render_frame_host,
- const GURL& url,
- ui::PageTransition transition_type) {
- if (pending_ && pending_->host() == render_frame_host)
- CommitPending();
- service_worker_handler_->UpdateHosts();
-}
-
-void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad(
- RenderFrameHost* render_frame_host,
- const GURL& validated_url,
- int error_code,
- const base::string16& error_description,
- bool was_ignored_by_handler) {
- if (pending_ && pending_->host() == render_frame_host)
- DiscardPending();
-}
-
void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers(
RenderFrameHostImpl* host) {
dom_handler_->SetRenderFrameHost(host);
@@ -659,6 +665,7 @@ void RenderFrameDevToolsAgentHost::DisconnectWebContents() {
UpdateProtocolHandlers(nullptr);
disconnected_ = current_.Pass();
disconnected_->Detach();
+ frame_tree_node_ = nullptr;
WebContentsObserver::Observe(nullptr);
}
@@ -668,6 +675,7 @@ void RenderFrameDevToolsAgentHost::ConnectWebContents(WebContents* wc) {
RenderFrameHostImpl* host =
static_cast<RenderFrameHostImpl*>(wc->GetMainFrame());
DCHECK(host);
+ frame_tree_node_ = host->frame_tree_node();
current_ = disconnected_.Pass();
SetPending(host);
CommitPending();
@@ -754,4 +762,18 @@ bool RenderFrameDevToolsAgentHost::IsChildFrame() {
return current_ && current_->host()->GetParent();
}
+bool RenderFrameDevToolsAgentHost::MatchesMyTreeNode(
+ NavigationHandle* navigation_handle) {
+ return frame_tree_node_ ==
+ static_cast<NavigationHandleImpl*>(navigation_handle)
+ ->frame_tree_node();
+}
+
+bool RenderFrameDevToolsAgentHost::MatchesMyTreeNode(
+ RenderFrameHost* render_frame_host) {
+ return frame_tree_node_ ==
+ static_cast<RenderFrameHostImpl*>(render_frame_host)
+ ->frame_tree_node();
+}
+
} // namespace content
« no previous file with comments | « content/browser/devtools/render_frame_devtools_agent_host.h ('k') | content/browser/frame_host/navigation_handle_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698