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

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

Powered by Google App Engine
This is Rietveld 408576698