| 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
|
|
|