| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/devtools/render_frame_devtools_agent_host.h" | 5 #include "content/browser/devtools/render_frame_devtools_agent_host.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "content/public/browser/render_widget_host_view.h" | 41 #include "content/public/browser/render_widget_host_view.h" |
| 42 #endif | 42 #endif |
| 43 | 43 |
| 44 namespace content { | 44 namespace content { |
| 45 | 45 |
| 46 typedef std::vector<RenderFrameDevToolsAgentHost*> Instances; | 46 typedef std::vector<RenderFrameDevToolsAgentHost*> Instances; |
| 47 | 47 |
| 48 namespace { | 48 namespace { |
| 49 base::LazyInstance<Instances>::Leaky g_instances = LAZY_INSTANCE_INITIALIZER; | 49 base::LazyInstance<Instances>::Leaky g_instances = LAZY_INSTANCE_INITIALIZER; |
| 50 | 50 |
| 51 bool browser_side_navigation = false; | |
| 52 | |
| 53 static RenderFrameDevToolsAgentHost* FindAgentHost(RenderFrameHost* host) { | 51 static RenderFrameDevToolsAgentHost* FindAgentHost(RenderFrameHost* host) { |
| 54 if (g_instances == NULL) | 52 if (g_instances == NULL) |
| 55 return NULL; | 53 return NULL; |
| 56 for (Instances::iterator it = g_instances.Get().begin(); | 54 for (Instances::iterator it = g_instances.Get().begin(); |
| 57 it != g_instances.Get().end(); ++it) { | 55 it != g_instances.Get().end(); ++it) { |
| 58 if ((*it)->HasRenderFrameHost(host)) | 56 if ((*it)->HasRenderFrameHost(host)) |
| 59 return *it; | 57 return *it; |
| 60 } | 58 } |
| 61 return NULL; | 59 return NULL; |
| 62 } | 60 } |
| 63 | 61 |
| 62 static RenderFrameDevToolsAgentHost* FindAgentHost( |
| 63 FrameTreeNode* frame_tree_node) { |
| 64 if (g_instances == NULL) |
| 65 return NULL; |
| 66 for (Instances::iterator it = g_instances.Get().begin(); |
| 67 it != g_instances.Get().end(); ++it) { |
| 68 if ((*it)->frame_tree_node() == frame_tree_node) |
| 69 return *it; |
| 70 } |
| 71 return NULL; |
| 72 } |
| 73 |
| 64 // Returns RenderFrameDevToolsAgentHost attached to any of RenderFrameHost | 74 // Returns RenderFrameDevToolsAgentHost attached to any of RenderFrameHost |
| 65 // instances associated with |web_contents| | 75 // instances associated with |web_contents| |
| 66 static RenderFrameDevToolsAgentHost* FindAgentHost(WebContents* web_contents) { | 76 static RenderFrameDevToolsAgentHost* FindAgentHost(WebContents* web_contents) { |
| 67 if (g_instances == NULL) | 77 if (g_instances == NULL) |
| 68 return NULL; | 78 return NULL; |
| 69 for (Instances::iterator it = g_instances.Get().begin(); | 79 for (Instances::iterator it = g_instances.Get().begin(); |
| 70 it != g_instances.Get().end(); ++it) { | 80 it != g_instances.Get().end(); ++it) { |
| 71 if ((*it)->GetWebContents() == web_contents) | 81 if ((*it)->GetWebContents() == web_contents) |
| 72 return *it; | 82 return *it; |
| 73 } | 83 } |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 RenderFrameDevToolsAgentHost::AppendAgentHostForFrameIfApplicable, | 315 RenderFrameDevToolsAgentHost::AppendAgentHostForFrameIfApplicable, |
| 306 base::Unretained(result)); | 316 base::Unretained(result)); |
| 307 for (const auto& wc : WebContentsImpl::GetAllWebContents()) | 317 for (const auto& wc : WebContentsImpl::GetAllWebContents()) |
| 308 wc->ForEachFrame(callback); | 318 wc->ForEachFrame(callback); |
| 309 } | 319 } |
| 310 | 320 |
| 311 // static | 321 // static |
| 312 void RenderFrameDevToolsAgentHost::OnCancelPendingNavigation( | 322 void RenderFrameDevToolsAgentHost::OnCancelPendingNavigation( |
| 313 RenderFrameHost* pending, | 323 RenderFrameHost* pending, |
| 314 RenderFrameHost* current) { | 324 RenderFrameHost* current) { |
| 315 if (browser_side_navigation) | 325 if (IsBrowserSideNavigationEnabled()) |
| 316 return; | 326 return; |
| 317 | 327 |
| 318 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(pending); | 328 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(pending); |
| 319 if (!agent_host) | 329 if (!agent_host) |
| 320 return; | 330 return; |
| 321 if (agent_host->pending_ && agent_host->pending_->host() == pending) { | 331 if (agent_host->pending_ && agent_host->pending_->host() == pending) { |
| 322 DCHECK(agent_host->current_ && agent_host->current_->host() == current); | 332 DCHECK(agent_host->current_ && agent_host->current_->host() == current); |
| 323 agent_host->DiscardPending(); | 333 agent_host->DiscardPending(); |
| 324 } | 334 } |
| 325 } | 335 } |
| 326 | 336 |
| 327 // static | 337 // static |
| 328 void RenderFrameDevToolsAgentHost::OnBeforeNavigation( | 338 void RenderFrameDevToolsAgentHost::OnBeforeNavigation( |
| 329 RenderFrameHost* current, RenderFrameHost* pending) { | 339 RenderFrameHost* current, RenderFrameHost* pending) { |
| 330 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(current); | 340 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(current); |
| 331 if (agent_host) | 341 if (agent_host) |
| 332 agent_host->AboutToNavigateRenderFrame(current, pending); | 342 agent_host->AboutToNavigateRenderFrame(current, pending); |
| 333 } | 343 } |
| 334 | 344 |
| 345 // static |
| 346 void RenderFrameDevToolsAgentHost::OnBeforeNavigation( |
| 347 NavigationHandle* navigation_handle) { |
| 348 FrameTreeNode* frame_tree_node = |
| 349 static_cast<NavigationHandleImpl*>(navigation_handle)->frame_tree_node(); |
| 350 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node); |
| 351 if (agent_host) |
| 352 agent_host->AboutToNavigate(navigation_handle); |
| 353 } |
| 354 |
| 335 RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost( | 355 RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost( |
| 336 RenderFrameHostImpl* host) | 356 RenderFrameHostImpl* host) |
| 337 : dom_handler_(new devtools::dom::DOMHandler()), | 357 : dom_handler_(new devtools::dom::DOMHandler()), |
| 338 input_handler_(new devtools::input::InputHandler()), | 358 input_handler_(new devtools::input::InputHandler()), |
| 339 inspector_handler_(new devtools::inspector::InspectorHandler()), | 359 inspector_handler_(new devtools::inspector::InspectorHandler()), |
| 340 io_handler_(new devtools::io::IOHandler(GetIOContext())), | 360 io_handler_(new devtools::io::IOHandler(GetIOContext())), |
| 341 network_handler_(new devtools::network::NetworkHandler()), | 361 network_handler_(new devtools::network::NetworkHandler()), |
| 342 page_handler_(nullptr), | 362 page_handler_(nullptr), |
| 343 security_handler_(nullptr), | 363 security_handler_(nullptr), |
| 344 service_worker_handler_( | 364 service_worker_handler_( |
| 345 new devtools::service_worker::ServiceWorkerHandler()), | 365 new devtools::service_worker::ServiceWorkerHandler()), |
| 346 tracing_handler_(new devtools::tracing::TracingHandler( | 366 tracing_handler_(new devtools::tracing::TracingHandler( |
| 347 devtools::tracing::TracingHandler::Renderer, | 367 devtools::tracing::TracingHandler::Renderer, |
| 348 host->GetFrameTreeNodeId(), | 368 host->GetFrameTreeNodeId(), |
| 349 GetIOContext())), | 369 GetIOContext())), |
| 350 emulation_handler_(nullptr), | 370 emulation_handler_(nullptr), |
| 351 frame_trace_recorder_(nullptr), | 371 frame_trace_recorder_(nullptr), |
| 352 protocol_handler_(new DevToolsProtocolHandler(this)), | 372 protocol_handler_(new DevToolsProtocolHandler(this)), |
| 353 current_frame_crashed_(false), | 373 current_frame_crashed_(false), |
| 354 pending_handle_(nullptr), | 374 pending_handle_(nullptr), |
| 355 in_navigation_(0), | |
| 356 frame_tree_node_(host->frame_tree_node()) { | 375 frame_tree_node_(host->frame_tree_node()) { |
| 357 browser_side_navigation = IsBrowserSideNavigationEnabled(); | |
| 358 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); | 376 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); |
| 359 dispatcher->SetDOMHandler(dom_handler_.get()); | 377 dispatcher->SetDOMHandler(dom_handler_.get()); |
| 360 dispatcher->SetInputHandler(input_handler_.get()); | 378 dispatcher->SetInputHandler(input_handler_.get()); |
| 361 dispatcher->SetInspectorHandler(inspector_handler_.get()); | 379 dispatcher->SetInspectorHandler(inspector_handler_.get()); |
| 362 dispatcher->SetIOHandler(io_handler_.get()); | 380 dispatcher->SetIOHandler(io_handler_.get()); |
| 363 dispatcher->SetNetworkHandler(network_handler_.get()); | 381 dispatcher->SetNetworkHandler(network_handler_.get()); |
| 364 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get()); | 382 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get()); |
| 365 dispatcher->SetTracingHandler(tracing_handler_.get()); | 383 dispatcher->SetTracingHandler(tracing_handler_.get()); |
| 366 | 384 |
| 367 if (!host->GetParent()) { | 385 if (!host->GetParent()) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 pending_->Detach(); | 467 pending_->Detach(); |
| 450 OnClientDetached(); | 468 OnClientDetached(); |
| 451 } | 469 } |
| 452 | 470 |
| 453 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( | 471 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( |
| 454 const std::string& message) { | 472 const std::string& message) { |
| 455 int call_id = 0; | 473 int call_id = 0; |
| 456 if (protocol_handler_->HandleOptionalMessage(session_id(), message, &call_id)) | 474 if (protocol_handler_->HandleOptionalMessage(session_id(), message, &call_id)) |
| 457 return true; | 475 return true; |
| 458 | 476 |
| 459 if (in_navigation_ > 0) { | 477 if (!navigating_handles_.empty()) { |
| 460 DCHECK(browser_side_navigation); | 478 DCHECK(IsBrowserSideNavigationEnabled()); |
| 461 in_navigation_protocol_message_buffer_[call_id] = | 479 in_navigation_protocol_message_buffer_[call_id] = |
| 462 std::make_pair(session_id(), message); | 480 std::make_pair(session_id(), message); |
| 463 return true; | 481 return true; |
| 464 } | 482 } |
| 465 | 483 |
| 466 if (current_) | 484 if (current_) |
| 467 current_->DispatchProtocolMessage(session_id(), call_id, message); | 485 current_->DispatchProtocolMessage(session_id(), call_id, message); |
| 468 if (pending_) | 486 if (pending_) |
| 469 pending_->DispatchProtocolMessage(session_id(), call_id, message); | 487 pending_->DispatchProtocolMessage(session_id(), call_id, message); |
| 470 return true; | 488 return true; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 } | 532 } |
| 515 | 533 |
| 516 RenderFrameDevToolsAgentHost::~RenderFrameDevToolsAgentHost() { | 534 RenderFrameDevToolsAgentHost::~RenderFrameDevToolsAgentHost() { |
| 517 Instances::iterator it = std::find(g_instances.Get().begin(), | 535 Instances::iterator it = std::find(g_instances.Get().begin(), |
| 518 g_instances.Get().end(), | 536 g_instances.Get().end(), |
| 519 this); | 537 this); |
| 520 if (it != g_instances.Get().end()) | 538 if (it != g_instances.Get().end()) |
| 521 g_instances.Get().erase(it); | 539 g_instances.Get().erase(it); |
| 522 } | 540 } |
| 523 | 541 |
| 524 void RenderFrameDevToolsAgentHost::DidStartNavigation( | |
| 525 NavigationHandle* navigation_handle) { | |
| 526 if (!browser_side_navigation) | |
| 527 return; | |
| 528 if (!MatchesMyTreeNode(navigation_handle)) | |
| 529 return; | |
| 530 DCHECK(current_); | |
| 531 DCHECK(in_navigation_ >= 0); | |
| 532 ++in_navigation_; | |
| 533 } | |
| 534 | |
| 535 void RenderFrameDevToolsAgentHost::ReadyToCommitNavigation( | 542 void RenderFrameDevToolsAgentHost::ReadyToCommitNavigation( |
| 536 NavigationHandle* navigation_handle) { | 543 NavigationHandle* navigation_handle) { |
| 537 // ReadyToCommitNavigation should only be called in PlzNavigate. | 544 // ReadyToCommitNavigation should only be called in PlzNavigate. |
| 538 DCHECK(browser_side_navigation); | 545 DCHECK(IsBrowserSideNavigationEnabled()); |
| 539 | 546 |
| 540 if (MatchesMyTreeNode(navigation_handle) && in_navigation_ != 0) { | 547 // If the navigation is not tracked, return; |
| 541 RenderFrameHostImpl* render_frame_host_impl = | 548 if (navigating_handles_.count(navigation_handle) == 0) |
| 542 static_cast<RenderFrameHostImpl*>( | 549 return; |
| 543 navigation_handle->GetRenderFrameHost()); | 550 |
| 544 if (current_->host() != render_frame_host_impl || current_frame_crashed_) { | 551 RenderFrameHostImpl* render_frame_host_impl = |
| 545 SetPending(render_frame_host_impl); | 552 static_cast<RenderFrameHostImpl*>( |
| 546 pending_handle_ = navigation_handle; | 553 navigation_handle->GetRenderFrameHost()); |
| 547 } | 554 if (current_->host() != render_frame_host_impl || current_frame_crashed_) { |
| 555 SetPending(render_frame_host_impl); |
| 556 pending_handle_ = navigation_handle; |
| 548 } | 557 } |
| 549 } | 558 } |
| 550 | 559 |
| 551 void RenderFrameDevToolsAgentHost::DidFinishNavigation( | 560 void RenderFrameDevToolsAgentHost::DidFinishNavigation( |
| 552 NavigationHandle* navigation_handle) { | 561 NavigationHandle* navigation_handle) { |
| 553 if (!browser_side_navigation) | 562 if (!IsBrowserSideNavigationEnabled()) |
| 554 return; | 563 return; |
| 555 | 564 |
| 556 if (MatchesMyTreeNode(navigation_handle) && in_navigation_ != 0) { | 565 // If the navigation is not tracked, return; |
| 557 --in_navigation_; | 566 if (navigating_handles_.count(navigation_handle) == 0) |
| 558 DCHECK(in_navigation_ >= 0); | 567 return; |
| 559 if (pending_handle_ == navigation_handle) { | 568 |
| 560 // This navigation handle did set the pending FrameHostHolder. | 569 // Now that the navigation is finished, remove the handle from the list of |
| 561 DCHECK(pending_); | 570 // navigating handles. |
| 562 if (navigation_handle->HasCommitted()) { | 571 navigating_handles_.erase(navigation_handle); |
| 563 DCHECK(pending_->host() == navigation_handle->GetRenderFrameHost()); | 572 |
| 564 CommitPending(); | 573 if (pending_handle_ == navigation_handle) { |
| 565 } else { | 574 // This navigation handle did set the pending FrameHostHolder. |
| 566 DiscardPending(); | 575 DCHECK(pending_); |
| 567 } | 576 if (navigation_handle->HasCommitted()) { |
| 568 pending_handle_ = nullptr; | 577 DCHECK(pending_->host() == navigation_handle->GetRenderFrameHost()); |
| 578 CommitPending(); |
| 579 } else { |
| 580 DiscardPending(); |
| 569 } | 581 } |
| 570 DispatchBufferedProtocolMessagesIfNecessary(); | 582 pending_handle_ = nullptr; |
| 571 } | 583 } |
| 584 DispatchBufferedProtocolMessagesIfNecessary(); |
| 572 | 585 |
| 573 if (navigation_handle->HasCommitted()) | 586 if (navigation_handle->HasCommitted()) |
| 574 service_worker_handler_->UpdateHosts(); | 587 service_worker_handler_->UpdateHosts(); |
| 575 } | 588 } |
| 576 | 589 |
| 577 void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame( | 590 void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame( |
| 578 RenderFrameHost* old_host, | 591 RenderFrameHost* old_host, |
| 579 RenderFrameHost* new_host) { | 592 RenderFrameHost* new_host) { |
| 580 if (browser_side_navigation) | 593 if (IsBrowserSideNavigationEnabled()) |
| 581 return; | 594 return; |
| 582 | 595 |
| 583 DCHECK(!pending_ || pending_->host() != old_host); | 596 DCHECK(!pending_ || pending_->host() != old_host); |
| 584 if (!current_ || current_->host() != old_host) | 597 if (!current_ || current_->host() != old_host) |
| 585 return; | 598 return; |
| 586 if (old_host == new_host && !current_frame_crashed_) | 599 if (old_host == new_host && !current_frame_crashed_) |
| 587 return; | 600 return; |
| 588 DCHECK(!pending_); | 601 DCHECK(!pending_); |
| 589 SetPending(static_cast<RenderFrameHostImpl*>(new_host)); | 602 SetPending(static_cast<RenderFrameHostImpl*>(new_host)); |
| 590 } | 603 } |
| 591 | 604 |
| 605 void RenderFrameDevToolsAgentHost::AboutToNavigate( |
| 606 NavigationHandle* navigation_handle) { |
| 607 if (!IsBrowserSideNavigationEnabled()) |
| 608 return; |
| 609 DCHECK(current_); |
| 610 navigating_handles_.insert(navigation_handle); |
| 611 } |
| 612 |
| 592 void RenderFrameDevToolsAgentHost::RenderFrameHostChanged( | 613 void RenderFrameDevToolsAgentHost::RenderFrameHostChanged( |
| 593 RenderFrameHost* old_host, | 614 RenderFrameHost* old_host, |
| 594 RenderFrameHost* new_host) { | 615 RenderFrameHost* new_host) { |
| 595 if (browser_side_navigation) | 616 if (IsBrowserSideNavigationEnabled()) |
| 596 return; | 617 return; |
| 597 | 618 |
| 598 DCHECK(!pending_ || pending_->host() != old_host); | 619 DCHECK(!pending_ || pending_->host() != old_host); |
| 599 if (!current_ || current_->host() != old_host) | 620 if (!current_ || current_->host() != old_host) |
| 600 return; | 621 return; |
| 601 | 622 |
| 602 // AboutToNavigateRenderFrame was not called for renderer-initiated | 623 // AboutToNavigateRenderFrame was not called for renderer-initiated |
| 603 // navigation. | 624 // navigation. |
| 604 if (!pending_) | 625 if (!pending_) |
| 605 SetPending(static_cast<RenderFrameHostImpl*>(new_host)); | 626 SetPending(static_cast<RenderFrameHostImpl*>(new_host)); |
| 606 | 627 |
| 607 CommitPending(); | 628 CommitPending(); |
| 608 } | 629 } |
| 609 | 630 |
| 610 void RenderFrameDevToolsAgentHost::FrameDeleted(RenderFrameHost* rfh) { | 631 void RenderFrameDevToolsAgentHost::FrameDeleted(RenderFrameHost* rfh) { |
| 611 if (pending_ && pending_->host() == rfh) { | 632 if (pending_ && pending_->host() == rfh) { |
| 612 if (!browser_side_navigation) | 633 if (!IsBrowserSideNavigationEnabled()) |
| 613 DiscardPending(); | 634 DiscardPending(); |
| 614 return; | 635 return; |
| 615 } | 636 } |
| 616 | 637 |
| 617 if (current_ && current_->host() == rfh) | 638 if (current_ && current_->host() == rfh) |
| 618 DestroyOnRenderFrameGone(); // |this| may be deleted at this point. | 639 DestroyOnRenderFrameGone(); // |this| may be deleted at this point. |
| 619 } | 640 } |
| 620 | 641 |
| 621 void RenderFrameDevToolsAgentHost::RenderFrameDeleted(RenderFrameHost* rfh) { | 642 void RenderFrameDevToolsAgentHost::RenderFrameDeleted(RenderFrameHost* rfh) { |
| 622 if (!current_frame_crashed_) | 643 if (!current_frame_crashed_) |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 | 726 |
| 706 void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() { | 727 void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() { |
| 707 if (page_handler_) | 728 if (page_handler_) |
| 708 page_handler_->DidDetachInterstitialPage(); | 729 page_handler_->DidDetachInterstitialPage(); |
| 709 } | 730 } |
| 710 | 731 |
| 711 void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame( | 732 void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame( |
| 712 RenderFrameHost* render_frame_host, | 733 RenderFrameHost* render_frame_host, |
| 713 const GURL& url, | 734 const GURL& url, |
| 714 ui::PageTransition transition_type) { | 735 ui::PageTransition transition_type) { |
| 715 if (browser_side_navigation) | 736 if (IsBrowserSideNavigationEnabled()) |
| 716 return; | 737 return; |
| 717 if (pending_ && pending_->host() == render_frame_host) | 738 if (pending_ && pending_->host() == render_frame_host) |
| 718 CommitPending(); | 739 CommitPending(); |
| 719 service_worker_handler_->UpdateHosts(); | 740 service_worker_handler_->UpdateHosts(); |
| 720 } | 741 } |
| 721 | 742 |
| 722 void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad( | 743 void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad( |
| 723 RenderFrameHost* render_frame_host, | 744 RenderFrameHost* render_frame_host, |
| 724 const GURL& validated_url, | 745 const GURL& validated_url, |
| 725 int error_code, | 746 int error_code, |
| 726 const base::string16& error_description, | 747 const base::string16& error_description, |
| 727 bool was_ignored_by_handler) { | 748 bool was_ignored_by_handler) { |
| 728 if (browser_side_navigation) | 749 if (IsBrowserSideNavigationEnabled()) |
| 729 return; | 750 return; |
| 730 if (pending_ && pending_->host() == render_frame_host) | 751 if (pending_ && pending_->host() == render_frame_host) |
| 731 DiscardPending(); | 752 DiscardPending(); |
| 732 } | 753 } |
| 733 | 754 |
| 734 void RenderFrameDevToolsAgentHost:: | 755 void RenderFrameDevToolsAgentHost:: |
| 735 DispatchBufferedProtocolMessagesIfNecessary() { | 756 DispatchBufferedProtocolMessagesIfNecessary() { |
| 736 if (in_navigation_ == 0 && in_navigation_protocol_message_buffer_.size()) { | 757 if (navigating_handles_.empty() && |
| 758 in_navigation_protocol_message_buffer_.size()) { |
| 737 DCHECK(current_); | 759 DCHECK(current_); |
| 738 for (const auto& pair : in_navigation_protocol_message_buffer_) { | 760 for (const auto& pair : in_navigation_protocol_message_buffer_) { |
| 739 current_->DispatchProtocolMessage(pair.second.first, pair.first, | 761 current_->DispatchProtocolMessage(pair.second.first, pair.first, |
| 740 pair.second.second); | 762 pair.second.second); |
| 741 } | 763 } |
| 742 in_navigation_protocol_message_buffer_.clear(); | 764 in_navigation_protocol_message_buffer_.clear(); |
| 743 } | 765 } |
| 744 } | 766 } |
| 745 | 767 |
| 746 void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers( | 768 void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 760 } | 782 } |
| 761 | 783 |
| 762 void RenderFrameDevToolsAgentHost::DisconnectWebContents() { | 784 void RenderFrameDevToolsAgentHost::DisconnectWebContents() { |
| 763 if (pending_) | 785 if (pending_) |
| 764 DiscardPending(); | 786 DiscardPending(); |
| 765 UpdateProtocolHandlers(nullptr); | 787 UpdateProtocolHandlers(nullptr); |
| 766 disconnected_ = std::move(current_); | 788 disconnected_ = std::move(current_); |
| 767 disconnected_->Detach(); | 789 disconnected_->Detach(); |
| 768 frame_tree_node_ = nullptr; | 790 frame_tree_node_ = nullptr; |
| 769 in_navigation_protocol_message_buffer_.clear(); | 791 in_navigation_protocol_message_buffer_.clear(); |
| 770 in_navigation_ = 0; | 792 navigating_handles_.clear(); |
| 771 pending_handle_ = nullptr; | 793 pending_handle_ = nullptr; |
| 772 WebContentsObserver::Observe(nullptr); | 794 WebContentsObserver::Observe(nullptr); |
| 773 } | 795 } |
| 774 | 796 |
| 775 void RenderFrameDevToolsAgentHost::ConnectWebContents(WebContents* wc) { | 797 void RenderFrameDevToolsAgentHost::ConnectWebContents(WebContents* wc) { |
| 776 DCHECK(!current_); | 798 DCHECK(!current_); |
| 777 DCHECK(!pending_); | 799 DCHECK(!pending_); |
| 778 RenderFrameHostImpl* host = | 800 RenderFrameHostImpl* host = |
| 779 static_cast<RenderFrameHostImpl*>(wc->GetMainFrame()); | 801 static_cast<RenderFrameHostImpl*>(wc->GetMainFrame()); |
| 780 DCHECK(host); | 802 DCHECK(host); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 bool RenderFrameDevToolsAgentHost::HasRenderFrameHost( | 907 bool RenderFrameDevToolsAgentHost::HasRenderFrameHost( |
| 886 RenderFrameHost* host) { | 908 RenderFrameHost* host) { |
| 887 return (current_ && current_->host() == host) || | 909 return (current_ && current_->host() == host) || |
| 888 (pending_ && pending_->host() == host); | 910 (pending_ && pending_->host() == host); |
| 889 } | 911 } |
| 890 | 912 |
| 891 bool RenderFrameDevToolsAgentHost::IsChildFrame() { | 913 bool RenderFrameDevToolsAgentHost::IsChildFrame() { |
| 892 return current_ && current_->host()->GetParent(); | 914 return current_ && current_->host()->GetParent(); |
| 893 } | 915 } |
| 894 | 916 |
| 895 bool RenderFrameDevToolsAgentHost::MatchesMyTreeNode( | |
| 896 NavigationHandle* navigation_handle) { | |
| 897 return frame_tree_node_ == | |
| 898 static_cast<NavigationHandleImpl*>(navigation_handle) | |
| 899 ->frame_tree_node(); | |
| 900 } | |
| 901 | |
| 902 } // namespace content | 917 } // namespace content |
| OLD | NEW |