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

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: includes Created 3 years, 12 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 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 // RenderFrameDevToolsAgentHost::FrameHostHolder ------------------------------- 97 // RenderFrameDevToolsAgentHost::FrameHostHolder -------------------------------
97 98
98 class RenderFrameDevToolsAgentHost::FrameHostHolder { 99 class RenderFrameDevToolsAgentHost::FrameHostHolder {
99 public: 100 public:
100 FrameHostHolder( 101 FrameHostHolder(
101 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host); 102 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host);
102 ~FrameHostHolder(); 103 ~FrameHostHolder();
103 104
104 RenderFrameHostImpl* host() const { return host_; } 105 RenderFrameHostImpl* host() const { return host_; }
105 106
106 void Attach(); 107 void Attach(DevToolsSession* session);
107 void Reattach(FrameHostHolder* old); 108 void Reattach(FrameHostHolder* old);
108 void Detach(); 109 void Detach(int session_id);
109 void DispatchProtocolMessage(int session_id, 110 void DispatchProtocolMessage(int session_id,
110 int call_id, 111 int call_id,
111 const std::string& method, 112 const std::string& method,
112 const std::string& message); 113 const std::string& message);
113 void InspectElement(int session_id, int x, int y); 114 void InspectElement(int session_id, int x, int y);
114 bool ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk); 115 bool ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk);
115 void Suspend(); 116 void Suspend();
116 void Resume(); 117 void Resume();
117 118
118 private: 119 private:
(...skipping 25 matching lines...) Expand all
144 base::Unretained(this))) { 145 base::Unretained(this))) {
145 DCHECK(agent_); 146 DCHECK(agent_);
146 DCHECK(host_); 147 DCHECK(host_);
147 } 148 }
148 149
149 RenderFrameDevToolsAgentHost::FrameHostHolder::~FrameHostHolder() { 150 RenderFrameDevToolsAgentHost::FrameHostHolder::~FrameHostHolder() {
150 if (attached_) 151 if (attached_)
151 RevokePolicy(); 152 RevokePolicy();
152 } 153 }
153 154
154 void RenderFrameDevToolsAgentHost::FrameHostHolder::Attach() { 155 void RenderFrameDevToolsAgentHost::FrameHostHolder::Attach(
156 DevToolsSession* session) {
155 host_->Send(new DevToolsAgentMsg_Attach( 157 host_->Send(new DevToolsAgentMsg_Attach(
156 host_->GetRoutingID(), agent_->GetId(), agent_->session()->session_id())); 158 host_->GetRoutingID(), agent_->GetId(), session->session_id()));
157 GrantPolicy(); 159 GrantPolicy();
158 attached_ = true; 160 attached_ = true;
159 } 161 }
160 162
161 void RenderFrameDevToolsAgentHost::FrameHostHolder::Reattach( 163 void RenderFrameDevToolsAgentHost::FrameHostHolder::Reattach(
162 FrameHostHolder* old) { 164 FrameHostHolder* old) {
163 if (old) 165 if (old)
164 chunk_processor_.set_state_cookie(old->chunk_processor_.state_cookie()); 166 chunk_processor_.set_state_cookie(old->chunk_processor_.state_cookie());
165 host_->Send(new DevToolsAgentMsg_Reattach( 167 host_->Send(new DevToolsAgentMsg_Reattach(
166 host_->GetRoutingID(), agent_->GetId(), agent_->session()->session_id(), 168 host_->GetRoutingID(), agent_->GetId(), agent_->session()->session_id(),
167 chunk_processor_.state_cookie())); 169 chunk_processor_.state_cookie()));
168 if (old) { 170 if (old) {
169 if (IsBrowserSideNavigationEnabled()) { 171 if (IsBrowserSideNavigationEnabled()) {
170 for (const auto& pair : 172 for (const auto& pair :
171 old->sent_messages_whose_reply_came_while_suspended_) { 173 old->sent_messages_whose_reply_came_while_suspended_) {
172 DispatchProtocolMessage(pair.second.session_id, pair.first, 174 DispatchProtocolMessage(pair.second.session_id, pair.first,
173 pair.second.method, pair.second.message); 175 pair.second.method, pair.second.message);
174 } 176 }
175 } 177 }
176 for (const auto& pair : old->sent_messages_) { 178 for (const auto& pair : old->sent_messages_) {
177 DispatchProtocolMessage(pair.second.session_id, pair.first, 179 DispatchProtocolMessage(pair.second.session_id, pair.first,
178 pair.second.method, pair.second.message); 180 pair.second.method, pair.second.message);
179 } 181 }
180 } 182 }
181 GrantPolicy(); 183 GrantPolicy();
182 attached_ = true; 184 attached_ = true;
183 } 185 }
184 186
185 void RenderFrameDevToolsAgentHost::FrameHostHolder::Detach() { 187 void RenderFrameDevToolsAgentHost::FrameHostHolder::Detach(int session_id) {
186 host_->Send(new DevToolsAgentMsg_Detach(host_->GetRoutingID())); 188 host_->Send(new DevToolsAgentMsg_Detach(host_->GetRoutingID()));
187 RevokePolicy(); 189 RevokePolicy();
188 attached_ = false; 190 attached_ = false;
189 } 191 }
190 192
191 void RenderFrameDevToolsAgentHost::FrameHostHolder::GrantPolicy() { 193 void RenderFrameDevToolsAgentHost::FrameHostHolder::GrantPolicy() {
192 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadRawCookies( 194 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadRawCookies(
193 host_->GetProcess()->GetID()); 195 host_->GetProcess()->GetID());
194 } 196 }
195 197
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 NavigationHandle* navigation_handle) { 376 NavigationHandle* navigation_handle) {
375 FrameTreeNode* frame_tree_node = 377 FrameTreeNode* frame_tree_node =
376 static_cast<NavigationHandleImpl*>(navigation_handle)->frame_tree_node(); 378 static_cast<NavigationHandleImpl*>(navigation_handle)->frame_tree_node();
377 while (frame_tree_node && frame_tree_node->parent()) { 379 while (frame_tree_node && frame_tree_node->parent()) {
378 frame_tree_node = frame_tree_node->parent(); 380 frame_tree_node = frame_tree_node->parent();
379 } 381 }
380 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node); 382 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
381 // Note Page.setControlNavigations is intended to control navigations in the 383 // Note Page.setControlNavigations is intended to control navigations in the
382 // main frame and all child frames and |page_handler_| only exists for the 384 // main frame and all child frames and |page_handler_| only exists for the
383 // main frame. 385 // main frame.
384 if (agent_host && agent_host->page_handler_) { 386 if (!agent_host || !agent_host->session())
385 return agent_host->page_handler_->CreateThrottleForNavigation( 387 return nullptr;
386 navigation_handle); 388 protocol::PageHandler* page_handler =
387 } 389 protocol::PageHandler::FromSession(agent_host->session());
388 return nullptr; 390 if (!page_handler)
391 return nullptr;
392 return page_handler->CreateThrottleForNavigation(navigation_handle);
389 } 393 }
390 394
391 // static 395 // static
392 bool RenderFrameDevToolsAgentHost::IsNetworkHandlerEnabled( 396 bool RenderFrameDevToolsAgentHost::IsNetworkHandlerEnabled(
393 FrameTreeNode* frame_tree_node) { 397 FrameTreeNode* frame_tree_node) {
394 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node); 398 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
395 return agent_host && agent_host->network_handler_ && 399 if (!agent_host || !agent_host->session())
396 agent_host->network_handler_->enabled(); 400 return false;
401 return protocol::NetworkHandler::FromSession(agent_host->session())
402 ->enabled();
397 } 403 }
398 404
399 // static 405 // static
400 std::string RenderFrameDevToolsAgentHost::UserAgentOverride( 406 std::string RenderFrameDevToolsAgentHost::UserAgentOverride(
401 FrameTreeNode* frame_tree_node) { 407 FrameTreeNode* frame_tree_node) {
402 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node); 408 RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
403 if (agent_host && agent_host->network_handler_) 409 if (!agent_host || !agent_host->session())
404 return agent_host->network_handler_->UserAgentOverride(); 410 return std::string();
405 return std::string(); 411 return protocol::NetworkHandler::FromSession(agent_host->session())
412 ->UserAgentOverride();
406 } 413 }
407 414
408 // static 415 // static
409 void RenderFrameDevToolsAgentHost::WebContentsCreated( 416 void RenderFrameDevToolsAgentHost::WebContentsCreated(
410 WebContents* web_contents) { 417 WebContents* web_contents) {
411 if (ShouldForceCreation()) { 418 if (ShouldForceCreation()) {
412 // Force agent host. 419 // Force agent host.
413 DevToolsAgentHost::GetOrCreateFor(web_contents); 420 DevToolsAgentHost::GetOrCreateFor(web_contents);
414 } 421 }
415 } 422 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 483
477 BrowserContext* RenderFrameDevToolsAgentHost::GetBrowserContext() { 484 BrowserContext* RenderFrameDevToolsAgentHost::GetBrowserContext() {
478 WebContents* contents = web_contents(); 485 WebContents* contents = web_contents();
479 return contents ? contents->GetBrowserContext() : nullptr; 486 return contents ? contents->GetBrowserContext() : nullptr;
480 } 487 }
481 488
482 WebContents* RenderFrameDevToolsAgentHost::GetWebContents() { 489 WebContents* RenderFrameDevToolsAgentHost::GetWebContents() {
483 return web_contents(); 490 return web_contents();
484 } 491 }
485 492
486 void RenderFrameDevToolsAgentHost::Attach() { 493 void RenderFrameDevToolsAgentHost::AttachSession(DevToolsSession* session) {
487 session()->dispatcher()->setFallThroughForNotFound(true); 494 session->SetFallThroughForNotFound(true);
488 495 session->SetRenderFrameHost(handlers_frame_host_);
489 if (!frame_tree_node_->parent()) { 496 if (!frame_tree_node_->parent()) {
490 emulation_handler_.reset(new protocol::EmulationHandler()); 497 session->AddHandler(base::WrapUnique(new protocol::EmulationHandler()));
491 emulation_handler_->Wire(session()->dispatcher()); 498 session->AddHandler(base::WrapUnique(new protocol::PageHandler()));
492 emulation_handler_->SetRenderFrameHost(handlers_frame_host_); 499 session->AddHandler(base::WrapUnique(new protocol::SecurityHandler()));
493 } 500 }
494 501 session->AddHandler(base::WrapUnique(new protocol::DOMHandler()));
495 dom_handler_.reset(new protocol::DOMHandler()); 502 session->AddHandler(base::WrapUnique(new protocol::InputHandler()));
496 dom_handler_->Wire(session()->dispatcher()); 503 session->AddHandler(base::WrapUnique(new protocol::InspectorHandler()));
497 dom_handler_->SetRenderFrameHost(handlers_frame_host_); 504 session->AddHandler(base::WrapUnique(new protocol::IOHandler(
498 505 GetIOContext())));
499 input_handler_.reset(new protocol::InputHandler()); 506 session->AddHandler(base::WrapUnique(new protocol::NetworkHandler()));
500 input_handler_->Wire(session()->dispatcher()); 507 session->AddHandler(base::WrapUnique(new protocol::SchemaHandler()));
501 input_handler_->SetRenderFrameHost(handlers_frame_host_); 508 session->AddHandler(base::WrapUnique(new protocol::ServiceWorkerHandler()));
502 509 session->AddHandler(base::WrapUnique(new protocol::StorageHandler()));
503 inspector_handler_.reset(new protocol::InspectorHandler()); 510 session->AddHandler(base::WrapUnique(new protocol::TargetHandler()));
504 inspector_handler_->Wire(session()->dispatcher()); 511 session->AddHandler(base::WrapUnique(new protocol::TracingHandler(
505 inspector_handler_->SetRenderFrameHost(handlers_frame_host_);
506
507 io_handler_.reset(new protocol::IOHandler(GetIOContext()));
508 io_handler_->Wire(session()->dispatcher());
509
510 network_handler_.reset(new protocol::NetworkHandler());
511 network_handler_->Wire(session()->dispatcher());
512 network_handler_->SetRenderFrameHost(handlers_frame_host_);
513
514 if (!frame_tree_node_->parent()) {
515 page_handler_.reset(new protocol::PageHandler());
516 page_handler_->Wire(session()->dispatcher());
517 page_handler_->SetRenderFrameHost(handlers_frame_host_);
518 }
519
520 schema_handler_.reset(new protocol::SchemaHandler());
521 schema_handler_->Wire(session()->dispatcher());
522
523 if (!frame_tree_node_->parent()) {
524 security_handler_.reset(new protocol::SecurityHandler());
525 security_handler_->Wire(session()->dispatcher());
526 security_handler_->SetRenderFrameHost(handlers_frame_host_);
527 }
528
529 service_worker_handler_.reset(new protocol::ServiceWorkerHandler());
530 service_worker_handler_->Wire(session()->dispatcher());
531 service_worker_handler_->SetRenderFrameHost(handlers_frame_host_);
532
533 storage_handler_.reset(new protocol::StorageHandler());
534 storage_handler_->Wire(session()->dispatcher());
535 storage_handler_->SetRenderFrameHost(handlers_frame_host_);
536
537 target_handler_.reset(new protocol::TargetHandler());
538 target_handler_->Wire(session()->dispatcher());
539 target_handler_->SetRenderFrameHost(handlers_frame_host_);
540
541 tracing_handler_.reset(new protocol::TracingHandler(
542 protocol::TracingHandler::Renderer, 512 protocol::TracingHandler::Renderer,
543 frame_tree_node_->frame_tree_node_id(), 513 frame_tree_node_->frame_tree_node_id(),
544 GetIOContext())); 514 GetIOContext())));
545 tracing_handler_->Wire(session()->dispatcher());
546 515
547 if (current_) 516 if (current_)
548 current_->Attach(); 517 current_->Attach(session);
549 if (pending_) 518 if (pending_)
550 pending_->Attach(); 519 pending_->Attach(session);
551 OnClientAttached(); 520 OnClientAttached();
552 } 521 }
553 522
554 void RenderFrameDevToolsAgentHost::Detach() { 523 void RenderFrameDevToolsAgentHost::DetachSession(int session_id) {
555 dom_handler_->Disable();
556 dom_handler_.reset();
557 if (emulation_handler_) {
558 emulation_handler_->Disable();
559 emulation_handler_.reset();
560 }
561 input_handler_->Disable();
562 input_handler_.reset();
563 inspector_handler_->Disable();
564 inspector_handler_.reset();
565 io_handler_->Disable();
566 io_handler_.reset();
567 network_handler_->Disable();
568 network_handler_.reset();
569 if (page_handler_) {
570 page_handler_->Disable();
571 page_handler_.reset();
572 }
573 schema_handler_->Disable();
574 schema_handler_.reset();
575 if (security_handler_) {
576 security_handler_->Disable();
577 security_handler_.reset();
578 }
579 service_worker_handler_->Disable();
580 service_worker_handler_.reset();
581 storage_handler_->Disable();
582 storage_handler_.reset();
583 target_handler_->Disable();
584 target_handler_.reset();
585 tracing_handler_->Disable();
586 tracing_handler_.reset();
587
588 if (current_) 524 if (current_)
589 current_->Detach(); 525 current_->Detach(session_id);
590 if (pending_) 526 if (pending_)
591 pending_->Detach(); 527 pending_->Detach(session_id);
592 OnClientDetached(); 528 OnClientDetached();
593 } 529 }
594 530
595 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( 531 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
532 DevToolsSession* session,
596 const std::string& message) { 533 const std::string& message) {
597 int call_id = 0; 534 int call_id = 0;
598 std::string method; 535 std::string method;
599 if (session()->Dispatch(message, &call_id, &method) != 536 if (session->Dispatch(message, true, &call_id, &method) !=
600 protocol::Response::kFallThrough) { 537 protocol::Response::kFallThrough) {
601 return true; 538 return true;
602 } 539 }
603 540
604 if (!navigating_handles_.empty()) { 541 if (!navigating_handles_.empty()) {
605 DCHECK(IsBrowserSideNavigationEnabled()); 542 DCHECK(IsBrowserSideNavigationEnabled());
606 in_navigation_protocol_message_buffer_[call_id] = 543 in_navigation_protocol_message_buffer_[call_id] =
607 { session()->session_id(), method, message }; 544 { session->session_id(), method, message };
608 return true; 545 return true;
609 } 546 }
610 547
611 if (current_) { 548 if (current_) {
612 current_->DispatchProtocolMessage( 549 current_->DispatchProtocolMessage(
613 session()->session_id(), call_id, method, message); 550 session->session_id(), call_id, method, message);
614 } 551 }
615 if (pending_) { 552 if (pending_) {
616 pending_->DispatchProtocolMessage( 553 pending_->DispatchProtocolMessage(
617 session()->session_id(), call_id, method, message); 554 session->session_id(), call_id, method, message);
618 } 555 }
619 return true; 556 return true;
620 } 557 }
621 558
622 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) { 559 void RenderFrameDevToolsAgentHost::InspectElement(
560 DevToolsSession* session,
561 int x,
562 int y) {
623 if (current_) 563 if (current_)
624 current_->InspectElement(session()->session_id(), x, y); 564 current_->InspectElement(session->session_id(), x, y);
625 if (pending_) 565 if (pending_)
626 pending_->InspectElement(session()->session_id(), x, y); 566 pending_->InspectElement(session->session_id(), x, y);
627 } 567 }
628 568
629 void RenderFrameDevToolsAgentHost::OnClientAttached() { 569 void RenderFrameDevToolsAgentHost::OnClientAttached() {
630 if (!web_contents()) 570 if (!web_contents())
631 return; 571 return;
632 572
633 frame_trace_recorder_.reset(new DevToolsFrameTraceRecorder()); 573 frame_trace_recorder_.reset(new DevToolsFrameTraceRecorder());
634 CreatePowerSaveBlocker(); 574 CreatePowerSaveBlocker();
635 } 575 }
636 576
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 } else { 646 } else {
707 DiscardPending(); 647 DiscardPending();
708 } 648 }
709 pending_handle_ = nullptr; 649 pending_handle_ = nullptr;
710 } else if (navigating_handles_.empty()) { 650 } else if (navigating_handles_.empty()) {
711 current_->Resume(); 651 current_->Resume();
712 } 652 }
713 DispatchBufferedProtocolMessagesIfNecessary(); 653 DispatchBufferedProtocolMessagesIfNecessary();
714 654
715 DCHECK(CheckConsistency()); 655 DCHECK(CheckConsistency());
716 if (target_handler_ && navigation_handle->HasCommitted()) 656 if (session() && navigation_handle->HasCommitted())
717 target_handler_->UpdateServiceWorkers(); 657 protocol::TargetHandler::FromSession(session())->UpdateServiceWorkers();
718 } 658 }
719 659
720 void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame( 660 void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame(
721 RenderFrameHost* old_host, 661 RenderFrameHost* old_host,
722 RenderFrameHost* new_host) { 662 RenderFrameHost* new_host) {
723 // CommitPending may destruct |this|. 663 // CommitPending may destruct |this|.
724 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 664 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
725 665
726 if (IsBrowserSideNavigationEnabled()) 666 if (IsBrowserSideNavigationEnabled())
727 return; 667 return;
(...skipping 25 matching lines...) Expand all
753 current_->Suspend(); 693 current_->Suspend();
754 DCHECK(CheckConsistency()); 694 DCHECK(CheckConsistency());
755 } 695 }
756 696
757 void RenderFrameDevToolsAgentHost::RenderFrameHostChanged( 697 void RenderFrameDevToolsAgentHost::RenderFrameHostChanged(
758 RenderFrameHost* old_host, 698 RenderFrameHost* old_host,
759 RenderFrameHost* new_host) { 699 RenderFrameHost* new_host) {
760 // CommitPending may destruct |this|. 700 // CommitPending may destruct |this|.
761 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 701 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
762 702
763 if (target_handler_) 703 if (session())
764 target_handler_->UpdateFrames(); 704 protocol::TargetHandler::FromSession(session())->UpdateFrames();
765 705
766 if (IsBrowserSideNavigationEnabled()) 706 if (IsBrowserSideNavigationEnabled())
767 return; 707 return;
768 708
769 DCHECK(!pending_ || pending_->host() != old_host); 709 DCHECK(!pending_ || pending_->host() != old_host);
770 if (!current_ || current_->host() != old_host) { 710 if (!current_ || current_->host() != old_host) {
771 DCHECK(CheckConsistency()); 711 DCHECK(CheckConsistency());
772 return; 712 return;
773 } 713 }
774 714
(...skipping 23 matching lines...) Expand all
798 else 738 else
799 DCHECK(CheckConsistency()); 739 DCHECK(CheckConsistency());
800 } 740 }
801 741
802 void RenderFrameDevToolsAgentHost::DestroyOnRenderFrameGone() { 742 void RenderFrameDevToolsAgentHost::DestroyOnRenderFrameGone() {
803 DCHECK(current_); 743 DCHECK(current_);
804 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 744 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
805 UpdateProtocolHandlers(nullptr); 745 UpdateProtocolHandlers(nullptr);
806 if (IsAttached()) 746 if (IsAttached())
807 OnClientDetached(); 747 OnClientDetached();
808 HostClosed(); 748 ForceDetach(false);
809 pending_.reset(); 749 pending_.reset();
810 current_.reset(); 750 current_.reset();
811 frame_tree_node_ = nullptr; 751 frame_tree_node_ = nullptr;
812 pending_handle_ = nullptr; 752 pending_handle_ = nullptr;
813 WebContentsObserver::Observe(nullptr); 753 WebContentsObserver::Observe(nullptr);
814 Release(); 754 Release();
815 } 755 }
816 756
817 bool RenderFrameDevToolsAgentHost::CheckConsistency() { 757 bool RenderFrameDevToolsAgentHost::CheckConsistency() {
818 if (current_ && pending_ && current_->host() == pending_->host()) 758 if (current_ && pending_ && current_->host() == pending_->host())
(...skipping 27 matching lines...) Expand all
846 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION: 786 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
847 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: 787 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
848 #if defined(OS_CHROMEOS) 788 #if defined(OS_CHROMEOS)
849 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM: 789 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM:
850 #endif 790 #endif
851 case base::TERMINATION_STATUS_PROCESS_CRASHED: 791 case base::TERMINATION_STATUS_PROCESS_CRASHED:
852 #if defined(OS_ANDROID) 792 #if defined(OS_ANDROID)
853 case base::TERMINATION_STATUS_OOM_PROTECTED: 793 case base::TERMINATION_STATUS_OOM_PROTECTED:
854 #endif 794 #endif
855 case base::TERMINATION_STATUS_LAUNCH_FAILED: 795 case base::TERMINATION_STATUS_LAUNCH_FAILED:
856 if (inspector_handler_) 796 if (session())
857 inspector_handler_->TargetCrashed(); 797 protocol::InspectorHandler::FromSession(session())->TargetCrashed();
858 current_frame_crashed_ = true; 798 current_frame_crashed_ = true;
859 break; 799 break;
860 default: 800 default:
861 if (inspector_handler_) 801 if (session()) {
862 inspector_handler_->TargetDetached("Render process gone."); 802 protocol::InspectorHandler::FromSession(session())
803 ->TargetDetached("Render process gone.");
804 }
863 break; 805 break;
864 } 806 }
865 DCHECK(CheckConsistency()); 807 DCHECK(CheckConsistency());
866 } 808 }
867 809
868 bool RenderFrameDevToolsAgentHost::OnMessageReceived( 810 bool RenderFrameDevToolsAgentHost::OnMessageReceived(
869 const IPC::Message& message) { 811 const IPC::Message& message) {
870 if (!current_) 812 if (!current_)
871 return false; 813 return false;
872 if (message.type() == ViewHostMsg_SwapCompositorFrame::ID) 814 if (message.type() == ViewHostMsg_SwapCompositorFrame::ID)
(...skipping 16 matching lines...) Expand all
889 IPC_MESSAGE_HANDLER(DevToolsClientMsg_DispatchOnInspectorFrontend, 831 IPC_MESSAGE_HANDLER(DevToolsClientMsg_DispatchOnInspectorFrontend,
890 OnDispatchOnInspectorFrontend) 832 OnDispatchOnInspectorFrontend)
891 IPC_MESSAGE_HANDLER(DevToolsAgentHostMsg_RequestNewWindow, 833 IPC_MESSAGE_HANDLER(DevToolsAgentHostMsg_RequestNewWindow,
892 OnRequestNewWindow) 834 OnRequestNewWindow)
893 IPC_MESSAGE_UNHANDLED(handled = false) 835 IPC_MESSAGE_UNHANDLED(handled = false)
894 IPC_END_MESSAGE_MAP() 836 IPC_END_MESSAGE_MAP()
895 return handled; 837 return handled;
896 } 838 }
897 839
898 void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() { 840 void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() {
899 if (page_handler_) 841 protocol::PageHandler* page_handler =
900 page_handler_->DidAttachInterstitialPage(); 842 session() ? protocol::PageHandler::FromSession(session()) : nullptr;
843 if (page_handler)
844 page_handler->DidAttachInterstitialPage();
901 845
902 // TODO(dgozman): this may break for cross-process subframes. 846 // TODO(dgozman): this may break for cross-process subframes.
903 if (!pending_) { 847 if (!pending_) {
904 DCHECK(CheckConsistency()); 848 DCHECK(CheckConsistency());
905 return; 849 return;
906 } 850 }
907 // Pending set in AboutToNavigateRenderFrame turned out to be interstitial. 851 // Pending set in AboutToNavigateRenderFrame turned out to be interstitial.
908 // Connect back to the real one. 852 // Connect back to the real one.
909 DiscardPending(); 853 DiscardPending();
910 pending_handle_ = nullptr; 854 pending_handle_ = nullptr;
911 DCHECK(CheckConsistency()); 855 DCHECK(CheckConsistency());
912 } 856 }
913 857
914 void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() { 858 void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() {
915 if (page_handler_) 859 protocol::PageHandler* page_handler =
916 page_handler_->DidDetachInterstitialPage(); 860 session() ? protocol::PageHandler::FromSession(session()) : nullptr;
861 if (page_handler)
862 page_handler->DidDetachInterstitialPage();
917 } 863 }
918 864
919 void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame( 865 void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame(
920 RenderFrameHost* render_frame_host, 866 RenderFrameHost* render_frame_host,
921 const GURL& url, 867 const GURL& url,
922 ui::PageTransition transition_type) { 868 ui::PageTransition transition_type) {
923 // CommitPending may destruct |this|. 869 // CommitPending may destruct |this|.
924 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 870 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
925 871
926 if (IsBrowserSideNavigationEnabled()) 872 if (IsBrowserSideNavigationEnabled())
927 return; 873 return;
928 if (pending_ && pending_->host() == render_frame_host) 874 if (pending_ && pending_->host() == render_frame_host)
929 CommitPending(); 875 CommitPending();
930 DCHECK(CheckConsistency()); 876 DCHECK(CheckConsistency());
931 if (target_handler_) 877 if (session())
932 target_handler_->UpdateServiceWorkers(); 878 protocol::TargetHandler::FromSession(session())->UpdateServiceWorkers();
933 } 879 }
934 880
935 void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad( 881 void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad(
936 RenderFrameHost* render_frame_host, 882 RenderFrameHost* render_frame_host,
937 const GURL& validated_url, 883 const GURL& validated_url,
938 int error_code, 884 int error_code,
939 const base::string16& error_description, 885 const base::string16& error_description,
940 bool was_ignored_by_handler) { 886 bool was_ignored_by_handler) {
941 if (IsBrowserSideNavigationEnabled()) 887 if (IsBrowserSideNavigationEnabled())
942 return; 888 return;
(...skipping 28 matching lines...) Expand all
971 917
972 void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers( 918 void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers(
973 RenderFrameHostImpl* host) { 919 RenderFrameHostImpl* host) {
974 #if DCHECK_IS_ON() 920 #if DCHECK_IS_ON()
975 // Check that we don't have stale host object here by accessing some random 921 // Check that we don't have stale host object here by accessing some random
976 // properties inside. 922 // properties inside.
977 if (handlers_frame_host_ && handlers_frame_host_->GetRenderWidgetHost()) 923 if (handlers_frame_host_ && handlers_frame_host_->GetRenderWidgetHost())
978 handlers_frame_host_->GetRenderWidgetHost()->GetRoutingID(); 924 handlers_frame_host_->GetRenderWidgetHost()->GetRoutingID();
979 #endif 925 #endif
980 handlers_frame_host_ = host; 926 handlers_frame_host_ = host;
981 if (dom_handler_) 927 if (session())
982 dom_handler_->SetRenderFrameHost(host); 928 session()->SetRenderFrameHost(host);
983 if (emulation_handler_)
984 emulation_handler_->SetRenderFrameHost(host);
985 if (input_handler_)
986 input_handler_->SetRenderFrameHost(host);
987 if (inspector_handler_)
988 inspector_handler_->SetRenderFrameHost(host);
989 if (network_handler_)
990 network_handler_->SetRenderFrameHost(host);
991 if (page_handler_)
992 page_handler_->SetRenderFrameHost(host);
993 if (service_worker_handler_)
994 service_worker_handler_->SetRenderFrameHost(host);
995 if (security_handler_)
996 security_handler_->SetRenderFrameHost(host);
997 if (storage_handler_)
998 storage_handler_->SetRenderFrameHost(host);
999 if (target_handler_)
1000 target_handler_->SetRenderFrameHost(host);
1001 } 929 }
1002 930
1003 void RenderFrameDevToolsAgentHost::DisconnectWebContents() { 931 void RenderFrameDevToolsAgentHost::DisconnectWebContents() {
1004 if (pending_) 932 if (pending_)
1005 DiscardPending(); 933 DiscardPending();
1006 UpdateProtocolHandlers(nullptr); 934 UpdateProtocolHandlers(nullptr);
1007 disconnected_ = std::move(current_); 935 disconnected_ = std::move(current_);
1008 disconnected_->Detach(); 936 if (session())
937 disconnected_->Detach(session()->session_id());
1009 frame_tree_node_ = nullptr; 938 frame_tree_node_ = nullptr;
1010 in_navigation_protocol_message_buffer_.clear(); 939 in_navigation_protocol_message_buffer_.clear();
1011 navigating_handles_.clear(); 940 navigating_handles_.clear();
1012 pending_handle_ = nullptr; 941 pending_handle_ = nullptr;
1013 WebContentsObserver::Observe(nullptr); 942 WebContentsObserver::Observe(nullptr);
1014 } 943 }
1015 944
1016 void RenderFrameDevToolsAgentHost::ConnectWebContents(WebContents* wc) { 945 void RenderFrameDevToolsAgentHost::ConnectWebContents(WebContents* wc) {
1017 // CommitPending may destruct |this|. 946 // CommitPending may destruct |this|.
1018 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); 947 scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 if (content::WebContents* contents = web_contents()) 1057 if (content::WebContents* contents = web_contents())
1129 return contents->GetLastActiveTime(); 1058 return contents->GetLastActiveTime();
1130 return base::TimeTicks(); 1059 return base::TimeTicks();
1131 } 1060 }
1132 1061
1133 void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame( 1062 void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame(
1134 const IPC::Message& message) { 1063 const IPC::Message& message) {
1135 ViewHostMsg_SwapCompositorFrame::Param param; 1064 ViewHostMsg_SwapCompositorFrame::Param param;
1136 if (!ViewHostMsg_SwapCompositorFrame::Read(&message, &param)) 1065 if (!ViewHostMsg_SwapCompositorFrame::Read(&message, &param))
1137 return; 1066 return;
1138 if (page_handler_) { 1067 if (!session())
1139 page_handler_->OnSwapCompositorFrame( 1068 return;
1069 protocol::PageHandler* page_handler =
1070 protocol::PageHandler::FromSession(session());
1071 if (page_handler) {
1072 page_handler->OnSwapCompositorFrame(
1140 std::move(std::get<1>(param).metadata)); 1073 std::move(std::get<1>(param).metadata));
1141 } 1074 }
1142 if (input_handler_) 1075 protocol::InputHandler::FromSession(session())
1143 input_handler_->OnSwapCompositorFrame(std::get<1>(param).metadata); 1076 ->OnSwapCompositorFrame(std::get<1>(param).metadata);
1144 if (frame_trace_recorder_ && tracing_handler_->did_initiate_recording()) { 1077 protocol::TracingHandler* tracing_handler =
1078 protocol::TracingHandler::FromSession(session());
1079 if (frame_trace_recorder_ && tracing_handler->did_initiate_recording()) {
1145 frame_trace_recorder_->OnSwapCompositorFrame( 1080 frame_trace_recorder_->OnSwapCompositorFrame(
1146 current_ ? current_->host() : nullptr, std::get<1>(param).metadata); 1081 current_ ? current_->host() : nullptr, std::get<1>(param).metadata);
1147 } 1082 }
1148 } 1083 }
1149 1084
1150 void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame( 1085 void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame(
1151 RenderFrameHost* frame_host, 1086 RenderFrameHost* frame_host,
1152 cc::CompositorFrameMetadata frame_metadata) { 1087 cc::CompositorFrameMetadata frame_metadata) {
1153 scoped_refptr<RenderFrameDevToolsAgentHost> dtah(FindAgentHost(frame_host)); 1088 scoped_refptr<RenderFrameDevToolsAgentHost> dtah(FindAgentHost(frame_host));
1154 if (dtah) { 1089 if (dtah) {
1155 // Unblock the compositor. 1090 // Unblock the compositor.
1156 BrowserThread::PostTask( 1091 BrowserThread::PostTask(
1157 BrowserThread::UI, FROM_HERE, 1092 BrowserThread::UI, FROM_HERE,
1158 base::Bind( 1093 base::Bind(
1159 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame, 1094 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame,
1160 dtah.get(), 1095 dtah.get(),
1161 base::Passed(std::move(frame_metadata)))); 1096 base::Passed(std::move(frame_metadata))));
1162 } 1097 }
1163 } 1098 }
1164 1099
1165 void RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame( 1100 void RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame(
1166 cc::CompositorFrameMetadata frame_metadata) { 1101 cc::CompositorFrameMetadata frame_metadata) {
1167 if (page_handler_) 1102 if (!session())
1168 page_handler_->OnSynchronousSwapCompositorFrame(std::move(frame_metadata)); 1103 return;
1169 if (input_handler_) 1104 protocol::PageHandler* page_handler =
1170 input_handler_->OnSwapCompositorFrame(frame_metadata); 1105 protocol::PageHandler::FromSession(session());
1171 if (frame_trace_recorder_ && tracing_handler_->did_initiate_recording()) { 1106 if (page_handler)
1107 page_handler->OnSynchronousSwapCompositorFrame(std::move(frame_metadata));
1108 protocol::InputHandler::FromSession(session())
1109 ->OnSwapCompositorFrame(frame_metadata);
1110 protocol::TracingHandler* tracing_handler =
1111 protocol::TracingHandler::FromSession(session());
1112 if (frame_trace_recorder_ && tracing_handler->did_initiate_recording()) {
1172 frame_trace_recorder_->OnSynchronousSwapCompositorFrame( 1113 frame_trace_recorder_->OnSynchronousSwapCompositorFrame(
1173 current_ ? current_->host() : nullptr, 1114 current_ ? current_->host() : nullptr,
1174 frame_metadata); 1115 frame_metadata);
1175 } 1116 }
1176 } 1117 }
1177 1118
1178 void RenderFrameDevToolsAgentHost::OnDispatchOnInspectorFrontend( 1119 void RenderFrameDevToolsAgentHost::OnDispatchOnInspectorFrontend(
1179 RenderFrameHost* sender, 1120 RenderFrameHost* sender,
1180 const DevToolsMessageChunk& message) { 1121 const DevToolsMessageChunk& message) {
1181 bool success = true; 1122 bool success = true;
(...skipping 29 matching lines...) Expand all
1211 RenderFrameHost* host) { 1152 RenderFrameHost* host) {
1212 return (current_ && current_->host() == host) || 1153 return (current_ && current_->host() == host) ||
1213 (pending_ && pending_->host() == host); 1154 (pending_ && pending_->host() == host);
1214 } 1155 }
1215 1156
1216 bool RenderFrameDevToolsAgentHost::IsChildFrame() { 1157 bool RenderFrameDevToolsAgentHost::IsChildFrame() {
1217 return current_ && current_->host()->GetParent(); 1158 return current_ && current_->host()->GetParent();
1218 } 1159 }
1219 1160
1220 } // namespace content 1161 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/render_frame_devtools_agent_host.h ('k') | content/browser/devtools/worker_devtools_agent_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698