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

Side by Side Diff: content/browser/devtools/render_frame_devtools_agent_host.cc

Issue 2590293003: [DevTools] Rework DevToolsSession interaction with domain handlers. (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
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 <tuple> 7 #include <tuple>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/guid.h" 10 #include "base/guid.h"
11 #include "base/json/json_reader.h" 11 #include "base/json/json_reader.h"
12 #include "base/lazy_instance.h" 12 #include "base/lazy_instance.h"
13 #include "base/memory/ptr_util.h"
13 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
14 #include "build/build_config.h" 15 #include "build/build_config.h"
15 #include "content/browser/bad_message.h" 16 #include "content/browser/bad_message.h"
16 #include "content/browser/child_process_security_policy_impl.h" 17 #include "content/browser/child_process_security_policy_impl.h"
17 #include "content/browser/devtools/devtools_frame_trace_recorder.h" 18 #include "content/browser/devtools/devtools_frame_trace_recorder.h"
18 #include "content/browser/devtools/devtools_manager.h" 19 #include "content/browser/devtools/devtools_manager.h"
19 #include "content/browser/devtools/devtools_session.h" 20 #include "content/browser/devtools/devtools_session.h"
20 #include "content/browser/devtools/page_navigation_throttle.h" 21 #include "content/browser/devtools/page_navigation_throttle.h"
21 #include "content/browser/devtools/protocol/dom_handler.h" 22 #include "content/browser/devtools/protocol/dom_handler.h"
22 #include "content/browser/devtools/protocol/emulation_handler.h" 23 #include "content/browser/devtools/protocol/emulation_handler.h"
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 NavigationHandle* navigation_handle) { 373 NavigationHandle* navigation_handle) {
373 FrameTreeNode* frame_tree_node = 374 FrameTreeNode* frame_tree_node =
374 static_cast<NavigationHandleImpl*>(navigation_handle)->frame_tree_node(); 375 static_cast<NavigationHandleImpl*>(navigation_handle)->frame_tree_node();
375 while (frame_tree_node && frame_tree_node->parent()) { 376 while (frame_tree_node && frame_tree_node->parent()) {
376 frame_tree_node = frame_tree_node->parent(); 377 frame_tree_node = frame_tree_node->parent();
377 } 378 }
378 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node); 379 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
379 // Note Page.setControlNavigations is intended to control navigations in the 380 // Note Page.setControlNavigations is intended to control navigations in the
380 // main frame and all child frames and |page_handler_| only exists for the 381 // main frame and all child frames and |page_handler_| only exists for the
381 // main frame. 382 // main frame.
382 if (agent_host && agent_host->page_handler_) { 383 if (!agent_host || !agent_host->session())
383 return agent_host->page_handler_->CreateThrottleForNavigation( 384 return nullptr;
384 navigation_handle); 385 protocol::PageHandler* page_handler = agent_host->session()->GetPageHandler();
385 } 386 if (!page_handler)
386 return nullptr; 387 return nullptr;
388 return page_handler->CreateThrottleForNavigation(navigation_handle);
387 } 389 }
388 390
389 // static 391 // static
390 bool RenderFrameDevToolsAgentHost::IsNetworkHandlerEnabled( 392 bool RenderFrameDevToolsAgentHost::IsNetworkHandlerEnabled(
391 FrameTreeNode* frame_tree_node) { 393 FrameTreeNode* frame_tree_node) {
392 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node); 394 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
393 return agent_host && agent_host->network_handler_ && 395 if (!agent_host || !agent_host->session())
394 agent_host->network_handler_->enabled(); 396 return false;
397 protocol::NetworkHandler* network_handler =
398 agent_host->session()->GetNetworkHandler();
399 return network_handler && network_handler->enabled();
395 } 400 }
396 401
397 // static 402 // static
398 std::string RenderFrameDevToolsAgentHost::UserAgentOverride( 403 std::string RenderFrameDevToolsAgentHost::UserAgentOverride(
399 FrameTreeNode* frame_tree_node) { 404 FrameTreeNode* frame_tree_node) {
400 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node); 405 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
401 if (agent_host && agent_host->network_handler_) 406 if (!agent_host || !agent_host->session())
402 return agent_host->network_handler_->UserAgentOverride(); 407 return std::string();
403 return std::string(); 408 protocol::NetworkHandler* network_handler =
409 agent_host->session()->GetNetworkHandler();
410 if (!network_handler)
411 return std::string();
412 return network_handler->UserAgentOverride();
404 } 413 }
405 414
406 // static 415 // static
407 void RenderFrameDevToolsAgentHost::WebContentsCreated( 416 void RenderFrameDevToolsAgentHost::WebContentsCreated(
408 WebContents* web_contents) { 417 WebContents* web_contents) {
409 if (ShouldForceCreation()) { 418 if (ShouldForceCreation()) {
410 // Force agent host. 419 // Force agent host.
411 DevToolsAgentHost::GetOrCreateFor(web_contents); 420 DevToolsAgentHost::GetOrCreateFor(web_contents);
412 } 421 }
413 } 422 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 483
475 BrowserContext* RenderFrameDevToolsAgentHost::GetBrowserContext() { 484 BrowserContext* RenderFrameDevToolsAgentHost::GetBrowserContext() {
476 WebContents* contents = web_contents(); 485 WebContents* contents = web_contents();
477 return contents ? contents->GetBrowserContext() : nullptr; 486 return contents ? contents->GetBrowserContext() : nullptr;
478 } 487 }
479 488
480 WebContents* RenderFrameDevToolsAgentHost::GetWebContents() { 489 WebContents* RenderFrameDevToolsAgentHost::GetWebContents() {
481 return web_contents(); 490 return web_contents();
482 } 491 }
483 492
484 void RenderFrameDevToolsAgentHost::Attach() { 493 void RenderFrameDevToolsAgentHost::Attach(DevToolsSession* session) {
485 session()->dispatcher()->setFallThroughForNotFound(true); 494 session->SetFallThroughForNotFound(true);
486 495 session->SetRenderFrameHost(handlers_frame_host_);
487 if (!frame_tree_node_->parent()) { 496 if (!frame_tree_node_->parent()) {
488 emulation_handler_.reset(new protocol::EmulationHandler()); 497 session->AddHandler(base::WrapUnique(new protocol::EmulationHandler()));
489 emulation_handler_->Wire(session()->dispatcher()); 498 session->AddHandler(base::WrapUnique(new protocol::PageHandler()));
490 emulation_handler_->SetRenderFrameHost(handlers_frame_host_); 499 session->AddHandler(base::WrapUnique(new protocol::SecurityHandler()));
491 } 500 }
492 501 session->AddHandler(base::WrapUnique(new protocol::DOMHandler()));
493 dom_handler_.reset(new protocol::DOMHandler()); 502 session->AddHandler(base::WrapUnique(new protocol::InputHandler()));
494 dom_handler_->Wire(session()->dispatcher()); 503 session->AddHandler(base::WrapUnique(new protocol::InspectorHandler()));
495 dom_handler_->SetRenderFrameHost(handlers_frame_host_); 504 session->AddHandler(base::WrapUnique(new protocol::IOHandler(
496 505 GetIOContext())));
497 input_handler_.reset(new protocol::InputHandler()); 506 session->AddHandler(base::WrapUnique(new protocol::NetworkHandler()));
498 input_handler_->Wire(session()->dispatcher()); 507 session->AddHandler(base::WrapUnique(new protocol::SchemaHandler()));
499 input_handler_->SetRenderFrameHost(handlers_frame_host_); 508 session->AddHandler(base::WrapUnique(new protocol::ServiceWorkerHandler()));
500 509 session->AddHandler(base::WrapUnique(new protocol::StorageHandler()));
501 inspector_handler_.reset(new protocol::InspectorHandler()); 510 session->AddHandler(base::WrapUnique(new protocol::TargetHandler()));
502 inspector_handler_->Wire(session()->dispatcher()); 511 session->AddHandler(base::WrapUnique(new protocol::TracingHandler(
503 inspector_handler_->SetRenderFrameHost(handlers_frame_host_);
504
505 io_handler_.reset(new protocol::IOHandler(GetIOContext()));
506 io_handler_->Wire(session()->dispatcher());
507
508 network_handler_.reset(new protocol::NetworkHandler());
509 network_handler_->Wire(session()->dispatcher());
510 network_handler_->SetRenderFrameHost(handlers_frame_host_);
511
512 if (!frame_tree_node_->parent()) {
513 page_handler_.reset(new protocol::PageHandler());
514 page_handler_->Wire(session()->dispatcher());
515 page_handler_->SetRenderFrameHost(handlers_frame_host_);
516 }
517
518 schema_handler_.reset(new protocol::SchemaHandler());
519 schema_handler_->Wire(session()->dispatcher());
520
521 if (!frame_tree_node_->parent()) {
522 security_handler_.reset(new protocol::SecurityHandler());
523 security_handler_->Wire(session()->dispatcher());
524 security_handler_->SetRenderFrameHost(handlers_frame_host_);
525 }
526
527 service_worker_handler_.reset(new protocol::ServiceWorkerHandler());
528 service_worker_handler_->Wire(session()->dispatcher());
529 service_worker_handler_->SetRenderFrameHost(handlers_frame_host_);
530
531 storage_handler_.reset(new protocol::StorageHandler());
532 storage_handler_->Wire(session()->dispatcher());
533 storage_handler_->SetRenderFrameHost(handlers_frame_host_);
534
535 target_handler_.reset(new protocol::TargetHandler());
536 target_handler_->Wire(session()->dispatcher());
537 target_handler_->SetRenderFrameHost(handlers_frame_host_);
538
539 tracing_handler_.reset(new protocol::TracingHandler(
540 protocol::TracingHandler::Renderer, 512 protocol::TracingHandler::Renderer,
541 frame_tree_node_->frame_tree_node_id(), 513 frame_tree_node_->frame_tree_node_id(),
542 GetIOContext())); 514 GetIOContext())));
543 tracing_handler_->Wire(session()->dispatcher());
544 515
545 if (current_) 516 if (current_)
546 current_->Attach(); 517 current_->Attach();
547 if (pending_) 518 if (pending_)
548 pending_->Attach(); 519 pending_->Attach();
549 OnClientAttached(); 520 OnClientAttached();
550 } 521 }
551 522
552 void RenderFrameDevToolsAgentHost::Detach() { 523 void RenderFrameDevToolsAgentHost::Detach(DevToolsSession* session) {
553 dom_handler_->Disable();
554 dom_handler_.reset();
555 if (emulation_handler_) {
556 emulation_handler_->Disable();
557 emulation_handler_.reset();
558 }
559 input_handler_->Disable();
560 input_handler_.reset();
561 inspector_handler_->Disable();
562 inspector_handler_.reset();
563 io_handler_->Disable();
564 io_handler_.reset();
565 network_handler_->Disable();
566 network_handler_.reset();
567 if (page_handler_) {
568 page_handler_->Disable();
569 page_handler_.reset();
570 }
571 schema_handler_->Disable();
572 schema_handler_.reset();
573 if (security_handler_) {
574 security_handler_->Disable();
575 security_handler_.reset();
576 }
577 service_worker_handler_->Disable();
578 service_worker_handler_.reset();
579 storage_handler_->Disable();
580 storage_handler_.reset();
581 target_handler_->Disable();
582 target_handler_.reset();
583 tracing_handler_->Disable();
584 tracing_handler_.reset();
585
586 if (current_) 524 if (current_)
587 current_->Detach(); 525 current_->Detach();
588 if (pending_) 526 if (pending_)
589 pending_->Detach(); 527 pending_->Detach();
590 OnClientDetached(); 528 OnClientDetached();
591 } 529 }
592 530
593 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( 531 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
532 DevToolsSession* session,
594 const std::string& message) { 533 const std::string& message) {
595 int call_id = 0; 534 int call_id = 0;
596 std::string method; 535 std::string method;
597 if (session()->Dispatch(message, &call_id, &method) != 536 if (session->Dispatch(message, true, &call_id, &method) !=
598 protocol::Response::kFallThrough) { 537 protocol::Response::kFallThrough) {
599 return true; 538 return true;
600 } 539 }
601 540
602 if (!navigating_handles_.empty()) { 541 if (!navigating_handles_.empty()) {
603 DCHECK(IsBrowserSideNavigationEnabled()); 542 DCHECK(IsBrowserSideNavigationEnabled());
604 in_navigation_protocol_message_buffer_[call_id] = 543 in_navigation_protocol_message_buffer_[call_id] =
605 { session()->session_id(), method, message }; 544 { session->session_id(), method, message };
606 return true; 545 return true;
607 } 546 }
608 547
609 if (current_) { 548 if (current_) {
610 current_->DispatchProtocolMessage( 549 current_->DispatchProtocolMessage(
611 session()->session_id(), call_id, method, message); 550 session->session_id(), call_id, method, message);
612 } 551 }
613 if (pending_) { 552 if (pending_) {
614 pending_->DispatchProtocolMessage( 553 pending_->DispatchProtocolMessage(
615 session()->session_id(), call_id, method, message); 554 session->session_id(), call_id, method, message);
616 } 555 }
617 return true; 556 return true;
618 } 557 }
619 558
620 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) { 559 void RenderFrameDevToolsAgentHost::InspectElement(
560 DevToolsSession* session,
561 int x,
562 int y) {
621 if (current_) 563 if (current_)
622 current_->InspectElement(session()->session_id(), x, y); 564 current_->InspectElement(session->session_id(), x, y);
623 if (pending_) 565 if (pending_)
624 pending_->InspectElement(session()->session_id(), x, y); 566 pending_->InspectElement(session->session_id(), x, y);
625 } 567 }
626 568
627 void RenderFrameDevToolsAgentHost::OnClientAttached() { 569 void RenderFrameDevToolsAgentHost::OnClientAttached() {
628 if (!web_contents()) 570 if (!web_contents())
629 return; 571 return;
630 572
631 frame_trace_recorder_.reset(new DevToolsFrameTraceRecorder()); 573 frame_trace_recorder_.reset(new DevToolsFrameTraceRecorder());
632 CreatePowerSaveBlocker(); 574 CreatePowerSaveBlocker();
633 } 575 }
634 576
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 } else { 646 } else {
705 DiscardPending(); 647 DiscardPending();
706 } 648 }
707 pending_handle_ = nullptr; 649 pending_handle_ = nullptr;
708 } else if (navigating_handles_.empty()) { 650 } else if (navigating_handles_.empty()) {
709 current_->Resume(); 651 current_->Resume();
710 } 652 }
711 DispatchBufferedProtocolMessagesIfNecessary(); 653 DispatchBufferedProtocolMessagesIfNecessary();
712 654
713 DCHECK(CheckConsistency()); 655 DCHECK(CheckConsistency());
714 if (target_handler_ && navigation_handle->HasCommitted()) 656 protocol::TargetHandler* target_handler =
715 target_handler_->UpdateServiceWorkers(); 657 session() ? session()->GetTargetHandler() : nullptr;
658 if (target_handler && navigation_handle->HasCommitted())
659 target_handler->UpdateServiceWorkers();
716 } 660 }
717 661
718 void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame( 662 void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame(
719 RenderFrameHost* old_host, 663 RenderFrameHost* old_host,
720 RenderFrameHost* new_host) { 664 RenderFrameHost* new_host) {
721 // CommitPending may destruct |this|. 665 // CommitPending may destruct |this|.
722 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 666 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
723 667
724 if (IsBrowserSideNavigationEnabled()) 668 if (IsBrowserSideNavigationEnabled())
725 return; 669 return;
(...skipping 25 matching lines...) Expand all
751 current_->Suspend(); 695 current_->Suspend();
752 DCHECK(CheckConsistency()); 696 DCHECK(CheckConsistency());
753 } 697 }
754 698
755 void RenderFrameDevToolsAgentHost::RenderFrameHostChanged( 699 void RenderFrameDevToolsAgentHost::RenderFrameHostChanged(
756 RenderFrameHost* old_host, 700 RenderFrameHost* old_host,
757 RenderFrameHost* new_host) { 701 RenderFrameHost* new_host) {
758 // CommitPending may destruct |this|. 702 // CommitPending may destruct |this|.
759 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 703 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
760 704
761 if (target_handler_) 705 protocol::TargetHandler* target_handler =
762 target_handler_->UpdateFrames(); 706 session() ? session()->GetTargetHandler() : nullptr;
707 if (target_handler)
708 target_handler->UpdateFrames();
763 709
764 if (IsBrowserSideNavigationEnabled()) 710 if (IsBrowserSideNavigationEnabled())
765 return; 711 return;
766 712
767 DCHECK(!pending_ || pending_->host() != old_host); 713 DCHECK(!pending_ || pending_->host() != old_host);
768 if (!current_ || current_->host() != old_host) { 714 if (!current_ || current_->host() != old_host) {
769 DCHECK(CheckConsistency()); 715 DCHECK(CheckConsistency());
770 return; 716 return;
771 } 717 }
772 718
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE))); 779 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE)));
834 if (web_contents()->GetNativeView()) { 780 if (web_contents()->GetNativeView()) {
835 power_save_blocker_->InitDisplaySleepBlocker( 781 power_save_blocker_->InitDisplaySleepBlocker(
836 web_contents()->GetNativeView()); 782 web_contents()->GetNativeView());
837 } 783 }
838 #endif 784 #endif
839 } 785 }
840 786
841 void RenderFrameDevToolsAgentHost::RenderProcessGone( 787 void RenderFrameDevToolsAgentHost::RenderProcessGone(
842 base::TerminationStatus status) { 788 base::TerminationStatus status) {
789 protocol::InspectorHandler* inspector_handler =
790 session() ? session()->GetInspectorHandler() : nullptr;
843 switch(status) { 791 switch(status) {
844 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION: 792 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
845 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: 793 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
846 #if defined(OS_CHROMEOS) 794 #if defined(OS_CHROMEOS)
847 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM: 795 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM:
848 #endif 796 #endif
849 case base::TERMINATION_STATUS_PROCESS_CRASHED: 797 case base::TERMINATION_STATUS_PROCESS_CRASHED:
850 #if defined(OS_ANDROID) 798 #if defined(OS_ANDROID)
851 case base::TERMINATION_STATUS_OOM_PROTECTED: 799 case base::TERMINATION_STATUS_OOM_PROTECTED:
852 #endif 800 #endif
853 case base::TERMINATION_STATUS_LAUNCH_FAILED: 801 case base::TERMINATION_STATUS_LAUNCH_FAILED:
854 if (inspector_handler_) 802 if (inspector_handler)
855 inspector_handler_->TargetCrashed(); 803 inspector_handler->TargetCrashed();
856 current_frame_crashed_ = true; 804 current_frame_crashed_ = true;
857 break; 805 break;
858 default: 806 default:
859 if (inspector_handler_) 807 if (inspector_handler)
860 inspector_handler_->TargetDetached("Render process gone."); 808 inspector_handler->TargetDetached("Render process gone.");
861 break; 809 break;
862 } 810 }
863 DCHECK(CheckConsistency()); 811 DCHECK(CheckConsistency());
864 } 812 }
865 813
866 bool RenderFrameDevToolsAgentHost::OnMessageReceived( 814 bool RenderFrameDevToolsAgentHost::OnMessageReceived(
867 const IPC::Message& message) { 815 const IPC::Message& message) {
868 if (!current_) 816 if (!current_)
869 return false; 817 return false;
870 if (message.type() == ViewHostMsg_SwapCompositorFrame::ID) 818 if (message.type() == ViewHostMsg_SwapCompositorFrame::ID)
(...skipping 16 matching lines...) Expand all
887 IPC_MESSAGE_HANDLER(DevToolsClientMsg_DispatchOnInspectorFrontend, 835 IPC_MESSAGE_HANDLER(DevToolsClientMsg_DispatchOnInspectorFrontend,
888 OnDispatchOnInspectorFrontend) 836 OnDispatchOnInspectorFrontend)
889 IPC_MESSAGE_HANDLER(DevToolsAgentHostMsg_RequestNewWindow, 837 IPC_MESSAGE_HANDLER(DevToolsAgentHostMsg_RequestNewWindow,
890 OnRequestNewWindow) 838 OnRequestNewWindow)
891 IPC_MESSAGE_UNHANDLED(handled = false) 839 IPC_MESSAGE_UNHANDLED(handled = false)
892 IPC_END_MESSAGE_MAP() 840 IPC_END_MESSAGE_MAP()
893 return handled; 841 return handled;
894 } 842 }
895 843
896 void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() { 844 void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() {
897 if (page_handler_) 845 protocol::PageHandler* page_handler =
898 page_handler_->DidAttachInterstitialPage(); 846 session() ? session()->GetPageHandler() : nullptr;
847 if (page_handler)
848 page_handler->DidAttachInterstitialPage();
899 849
900 // TODO(dgozman): this may break for cross-process subframes. 850 // TODO(dgozman): this may break for cross-process subframes.
901 if (!pending_) { 851 if (!pending_) {
902 DCHECK(CheckConsistency()); 852 DCHECK(CheckConsistency());
903 return; 853 return;
904 } 854 }
905 // Pending set in AboutToNavigateRenderFrame turned out to be interstitial. 855 // Pending set in AboutToNavigateRenderFrame turned out to be interstitial.
906 // Connect back to the real one. 856 // Connect back to the real one.
907 DiscardPending(); 857 DiscardPending();
908 pending_handle_ = nullptr; 858 pending_handle_ = nullptr;
909 DCHECK(CheckConsistency()); 859 DCHECK(CheckConsistency());
910 } 860 }
911 861
912 void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() { 862 void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() {
913 if (page_handler_) 863 protocol::PageHandler* page_handler =
914 page_handler_->DidDetachInterstitialPage(); 864 session() ? session()->GetPageHandler() : nullptr;
865 if (page_handler)
866 page_handler->DidDetachInterstitialPage();
915 } 867 }
916 868
917 void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame( 869 void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame(
918 RenderFrameHost* render_frame_host, 870 RenderFrameHost* render_frame_host,
919 const GURL& url, 871 const GURL& url,
920 ui::PageTransition transition_type) { 872 ui::PageTransition transition_type) {
921 // CommitPending may destruct |this|. 873 // CommitPending may destruct |this|.
922 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 874 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
923 875
924 if (IsBrowserSideNavigationEnabled()) 876 if (IsBrowserSideNavigationEnabled())
925 return; 877 return;
926 if (pending_ && pending_->host() == render_frame_host) 878 if (pending_ && pending_->host() == render_frame_host)
927 CommitPending(); 879 CommitPending();
928 DCHECK(CheckConsistency()); 880 DCHECK(CheckConsistency());
929 if (target_handler_) 881 protocol::TargetHandler* target_handler =
930 target_handler_->UpdateServiceWorkers(); 882 session() ? session()->GetTargetHandler() : nullptr;
883 if (target_handler)
884 target_handler->UpdateServiceWorkers();
931 } 885 }
932 886
933 void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad( 887 void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad(
934 RenderFrameHost* render_frame_host, 888 RenderFrameHost* render_frame_host,
935 const GURL& validated_url, 889 const GURL& validated_url,
936 int error_code, 890 int error_code,
937 const base::string16& error_description, 891 const base::string16& error_description,
938 bool was_ignored_by_handler) { 892 bool was_ignored_by_handler) {
939 if (IsBrowserSideNavigationEnabled()) 893 if (IsBrowserSideNavigationEnabled())
940 return; 894 return;
(...skipping 28 matching lines...) Expand all
969 923
970 void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers( 924 void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers(
971 RenderFrameHostImpl* host) { 925 RenderFrameHostImpl* host) {
972 #if DCHECK_IS_ON() 926 #if DCHECK_IS_ON()
973 // Check that we don't have stale host object here by accessing some random 927 // Check that we don't have stale host object here by accessing some random
974 // properties inside. 928 // properties inside.
975 if (handlers_frame_host_ && handlers_frame_host_->GetRenderWidgetHost()) 929 if (handlers_frame_host_ && handlers_frame_host_->GetRenderWidgetHost())
976 handlers_frame_host_->GetRenderWidgetHost()->GetRoutingID(); 930 handlers_frame_host_->GetRenderWidgetHost()->GetRoutingID();
977 #endif 931 #endif
978 handlers_frame_host_ = host; 932 handlers_frame_host_ = host;
979 if (dom_handler_) 933 if (session())
980 dom_handler_->SetRenderFrameHost(host); 934 session()->SetRenderFrameHost(host);
981 if (emulation_handler_)
982 emulation_handler_->SetRenderFrameHost(host);
983 if (input_handler_)
984 input_handler_->SetRenderFrameHost(host);
985 if (inspector_handler_)
986 inspector_handler_->SetRenderFrameHost(host);
987 if (network_handler_)
988 network_handler_->SetRenderFrameHost(host);
989 if (page_handler_)
990 page_handler_->SetRenderFrameHost(host);
991 if (service_worker_handler_)
992 service_worker_handler_->SetRenderFrameHost(host);
993 if (security_handler_)
994 security_handler_->SetRenderFrameHost(host);
995 if (storage_handler_)
996 storage_handler_->SetRenderFrameHost(host);
997 if (target_handler_)
998 target_handler_->SetRenderFrameHost(host);
999 } 935 }
1000 936
1001 void RenderFrameDevToolsAgentHost::DisconnectWebContents() { 937 void RenderFrameDevToolsAgentHost::DisconnectWebContents() {
1002 if (pending_) 938 if (pending_)
1003 DiscardPending(); 939 DiscardPending();
1004 UpdateProtocolHandlers(nullptr); 940 UpdateProtocolHandlers(nullptr);
1005 disconnected_ = std::move(current_); 941 disconnected_ = std::move(current_);
1006 disconnected_->Detach(); 942 disconnected_->Detach();
1007 frame_tree_node_ = nullptr; 943 frame_tree_node_ = nullptr;
1008 in_navigation_protocol_message_buffer_.clear(); 944 in_navigation_protocol_message_buffer_.clear();
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 if (content::WebContents* contents = web_contents()) 1062 if (content::WebContents* contents = web_contents())
1127 return contents->GetLastActiveTime(); 1063 return contents->GetLastActiveTime();
1128 return base::TimeTicks(); 1064 return base::TimeTicks();
1129 } 1065 }
1130 1066
1131 void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame( 1067 void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame(
1132 const IPC::Message& message) { 1068 const IPC::Message& message) {
1133 ViewHostMsg_SwapCompositorFrame::Param param; 1069 ViewHostMsg_SwapCompositorFrame::Param param;
1134 if (!ViewHostMsg_SwapCompositorFrame::Read(&message, &param)) 1070 if (!ViewHostMsg_SwapCompositorFrame::Read(&message, &param))
1135 return; 1071 return;
1136 if (page_handler_) { 1072 protocol::PageHandler* page_handler =
1137 page_handler_->OnSwapCompositorFrame( 1073 session() ? session()->GetPageHandler() : nullptr;
1074 if (page_handler) {
1075 page_handler->OnSwapCompositorFrame(
1138 std::move(std::get<1>(param).metadata)); 1076 std::move(std::get<1>(param).metadata));
1139 } 1077 }
1140 if (input_handler_) 1078 protocol::InputHandler* input_handler =
1141 input_handler_->OnSwapCompositorFrame(std::get<1>(param).metadata); 1079 session() ? session()->GetInputHandler() : nullptr;
1142 if (frame_trace_recorder_ && tracing_handler_->did_initiate_recording()) { 1080 if (input_handler)
1081 input_handler->OnSwapCompositorFrame(std::get<1>(param).metadata);
1082 protocol::TracingHandler* tracing_handler =
1083 session() ? session()->GetTracingHandler() : nullptr;
1084 if (frame_trace_recorder_ && tracing_handler &&
1085 tracing_handler->did_initiate_recording()) {
1143 frame_trace_recorder_->OnSwapCompositorFrame( 1086 frame_trace_recorder_->OnSwapCompositorFrame(
1144 current_ ? current_->host() : nullptr, std::get<1>(param).metadata); 1087 current_ ? current_->host() : nullptr, std::get<1>(param).metadata);
1145 } 1088 }
1146 } 1089 }
1147 1090
1148 void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame( 1091 void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame(
1149 RenderFrameHost* frame_host, 1092 RenderFrameHost* frame_host,
1150 cc::CompositorFrameMetadata frame_metadata) { 1093 cc::CompositorFrameMetadata frame_metadata) {
1151 scoped_refptr<RenderFrameDevToolsAgentHost> dtah(FindAgentHost(frame_host)); 1094 scoped_refptr<RenderFrameDevToolsAgentHost> dtah(FindAgentHost(frame_host));
1152 if (dtah) { 1095 if (dtah) {
1153 // Unblock the compositor. 1096 // Unblock the compositor.
1154 BrowserThread::PostTask( 1097 BrowserThread::PostTask(
1155 BrowserThread::UI, FROM_HERE, 1098 BrowserThread::UI, FROM_HERE,
1156 base::Bind( 1099 base::Bind(
1157 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame, 1100 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame,
1158 dtah.get(), 1101 dtah.get(),
1159 base::Passed(std::move(frame_metadata)))); 1102 base::Passed(std::move(frame_metadata))));
1160 } 1103 }
1161 } 1104 }
1162 1105
1163 void RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame( 1106 void RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame(
1164 cc::CompositorFrameMetadata frame_metadata) { 1107 cc::CompositorFrameMetadata frame_metadata) {
1165 if (page_handler_) 1108 protocol::PageHandler* page_handler =
1166 page_handler_->OnSynchronousSwapCompositorFrame(std::move(frame_metadata)); 1109 session() ? session()->GetPageHandler() : nullptr;
1167 if (input_handler_) 1110 if (page_handler)
1168 input_handler_->OnSwapCompositorFrame(frame_metadata); 1111 page_handler->OnSynchronousSwapCompositorFrame(std::move(frame_metadata));
1169 if (frame_trace_recorder_ && tracing_handler_->did_initiate_recording()) { 1112 protocol::InputHandler* input_handler =
1113 session() ? session()->GetInputHandler() : nullptr;
1114 if (input_handler)
1115 input_handler->OnSwapCompositorFrame(frame_metadata);
1116 protocol::TracingHandler* tracing_handler =
1117 session() ? session()->GetTracingHandler() : nullptr;
1118 if (frame_trace_recorder_ && tracing_handler &&
1119 tracing_handler->did_initiate_recording()) {
1170 frame_trace_recorder_->OnSynchronousSwapCompositorFrame( 1120 frame_trace_recorder_->OnSynchronousSwapCompositorFrame(
1171 current_ ? current_->host() : nullptr, 1121 current_ ? current_->host() : nullptr,
1172 frame_metadata); 1122 frame_metadata);
1173 } 1123 }
1174 } 1124 }
1175 1125
1176 void RenderFrameDevToolsAgentHost::OnDispatchOnInspectorFrontend( 1126 void RenderFrameDevToolsAgentHost::OnDispatchOnInspectorFrontend(
1177 RenderFrameHost* sender, 1127 RenderFrameHost* sender,
1178 const DevToolsMessageChunk& message) { 1128 const DevToolsMessageChunk& message) {
1179 bool success = true; 1129 bool success = true;
(...skipping 29 matching lines...) Expand all
1209 RenderFrameHost* host) { 1159 RenderFrameHost* host) {
1210 return (current_ && current_->host() == host) || 1160 return (current_ && current_->host() == host) ||
1211 (pending_ && pending_->host() == host); 1161 (pending_ && pending_->host() == host);
1212 } 1162 }
1213 1163
1214 bool RenderFrameDevToolsAgentHost::IsChildFrame() { 1164 bool RenderFrameDevToolsAgentHost::IsChildFrame() {
1215 return current_ && current_->host()->GetParent(); 1165 return current_ && current_->host()->GetParent();
1216 } 1166 }
1217 1167
1218 } // namespace content 1168 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698