| Index: content/browser/devtools/render_frame_devtools_agent_host.cc
|
| diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc
|
| index cc06aa8418003421d082b02d09cc6e579c5d2b25..bf10bc0932e27f50659ff26b3b39a9256f9a5225 100644
|
| --- a/content/browser/devtools/render_frame_devtools_agent_host.cc
|
| +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/guid.h"
|
| #include "base/json/json_reader.h"
|
| #include "base/lazy_instance.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "build/build_config.h"
|
| #include "content/browser/bad_message.h"
|
| @@ -379,28 +380,36 @@ RenderFrameDevToolsAgentHost::CreateThrottleForNavigation(
|
| // Note Page.setControlNavigations is intended to control navigations in the
|
| // main frame and all child frames and |page_handler_| only exists for the
|
| // main frame.
|
| - if (agent_host && agent_host->page_handler_) {
|
| - return agent_host->page_handler_->CreateThrottleForNavigation(
|
| - navigation_handle);
|
| - }
|
| - return nullptr;
|
| + if (!agent_host || !agent_host->session())
|
| + return nullptr;
|
| + protocol::PageHandler* page_handler = agent_host->session()->GetPageHandler();
|
| + if (!page_handler)
|
| + return nullptr;
|
| + return page_handler->CreateThrottleForNavigation(navigation_handle);
|
| }
|
|
|
| // static
|
| bool RenderFrameDevToolsAgentHost::IsNetworkHandlerEnabled(
|
| FrameTreeNode* frame_tree_node) {
|
| RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
|
| - return agent_host && agent_host->network_handler_ &&
|
| - agent_host->network_handler_->enabled();
|
| + if (!agent_host || !agent_host->session())
|
| + return false;
|
| + protocol::NetworkHandler* network_handler =
|
| + agent_host->session()->GetNetworkHandler();
|
| + return network_handler && network_handler->enabled();
|
| }
|
|
|
| // static
|
| std::string RenderFrameDevToolsAgentHost::UserAgentOverride(
|
| FrameTreeNode* frame_tree_node) {
|
| RenderFrameDevToolsAgentHost* agent_host = FindAgentHost(frame_tree_node);
|
| - if (agent_host && agent_host->network_handler_)
|
| - return agent_host->network_handler_->UserAgentOverride();
|
| - return std::string();
|
| + if (!agent_host || !agent_host->session())
|
| + return std::string();
|
| + protocol::NetworkHandler* network_handler =
|
| + agent_host->session()->GetNetworkHandler();
|
| + if (!network_handler)
|
| + return std::string();
|
| + return network_handler->UserAgentOverride();
|
| }
|
|
|
| // static
|
| @@ -481,66 +490,28 @@ WebContents* RenderFrameDevToolsAgentHost::GetWebContents() {
|
| return web_contents();
|
| }
|
|
|
| -void RenderFrameDevToolsAgentHost::Attach() {
|
| - session()->dispatcher()->setFallThroughForNotFound(true);
|
| -
|
| - if (!frame_tree_node_->parent()) {
|
| - emulation_handler_.reset(new protocol::EmulationHandler());
|
| - emulation_handler_->Wire(session()->dispatcher());
|
| - emulation_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| - }
|
| -
|
| - dom_handler_.reset(new protocol::DOMHandler());
|
| - dom_handler_->Wire(session()->dispatcher());
|
| - dom_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| -
|
| - input_handler_.reset(new protocol::InputHandler());
|
| - input_handler_->Wire(session()->dispatcher());
|
| - input_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| -
|
| - inspector_handler_.reset(new protocol::InspectorHandler());
|
| - inspector_handler_->Wire(session()->dispatcher());
|
| - inspector_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| -
|
| - io_handler_.reset(new protocol::IOHandler(GetIOContext()));
|
| - io_handler_->Wire(session()->dispatcher());
|
| -
|
| - network_handler_.reset(new protocol::NetworkHandler());
|
| - network_handler_->Wire(session()->dispatcher());
|
| - network_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| -
|
| +void RenderFrameDevToolsAgentHost::Attach(DevToolsSession* session) {
|
| + session->SetFallThroughForNotFound(true);
|
| + session->SetRenderFrameHost(handlers_frame_host_);
|
| if (!frame_tree_node_->parent()) {
|
| - page_handler_.reset(new protocol::PageHandler());
|
| - page_handler_->Wire(session()->dispatcher());
|
| - page_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| + session->AddHandler(base::WrapUnique(new protocol::EmulationHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::PageHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::SecurityHandler()));
|
| }
|
| -
|
| - schema_handler_.reset(new protocol::SchemaHandler());
|
| - schema_handler_->Wire(session()->dispatcher());
|
| -
|
| - if (!frame_tree_node_->parent()) {
|
| - security_handler_.reset(new protocol::SecurityHandler());
|
| - security_handler_->Wire(session()->dispatcher());
|
| - security_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| - }
|
| -
|
| - service_worker_handler_.reset(new protocol::ServiceWorkerHandler());
|
| - service_worker_handler_->Wire(session()->dispatcher());
|
| - service_worker_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| -
|
| - storage_handler_.reset(new protocol::StorageHandler());
|
| - storage_handler_->Wire(session()->dispatcher());
|
| - storage_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| -
|
| - target_handler_.reset(new protocol::TargetHandler());
|
| - target_handler_->Wire(session()->dispatcher());
|
| - target_handler_->SetRenderFrameHost(handlers_frame_host_);
|
| -
|
| - tracing_handler_.reset(new protocol::TracingHandler(
|
| + session->AddHandler(base::WrapUnique(new protocol::DOMHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::InputHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::InspectorHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::IOHandler(
|
| + GetIOContext())));
|
| + session->AddHandler(base::WrapUnique(new protocol::NetworkHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::SchemaHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::ServiceWorkerHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::StorageHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::TargetHandler()));
|
| + session->AddHandler(base::WrapUnique(new protocol::TracingHandler(
|
| protocol::TracingHandler::Renderer,
|
| frame_tree_node_->frame_tree_node_id(),
|
| - GetIOContext()));
|
| - tracing_handler_->Wire(session()->dispatcher());
|
| + GetIOContext())));
|
|
|
| if (current_)
|
| current_->Attach();
|
| @@ -549,40 +520,7 @@ void RenderFrameDevToolsAgentHost::Attach() {
|
| OnClientAttached();
|
| }
|
|
|
| -void RenderFrameDevToolsAgentHost::Detach() {
|
| - dom_handler_->Disable();
|
| - dom_handler_.reset();
|
| - if (emulation_handler_) {
|
| - emulation_handler_->Disable();
|
| - emulation_handler_.reset();
|
| - }
|
| - input_handler_->Disable();
|
| - input_handler_.reset();
|
| - inspector_handler_->Disable();
|
| - inspector_handler_.reset();
|
| - io_handler_->Disable();
|
| - io_handler_.reset();
|
| - network_handler_->Disable();
|
| - network_handler_.reset();
|
| - if (page_handler_) {
|
| - page_handler_->Disable();
|
| - page_handler_.reset();
|
| - }
|
| - schema_handler_->Disable();
|
| - schema_handler_.reset();
|
| - if (security_handler_) {
|
| - security_handler_->Disable();
|
| - security_handler_.reset();
|
| - }
|
| - service_worker_handler_->Disable();
|
| - service_worker_handler_.reset();
|
| - storage_handler_->Disable();
|
| - storage_handler_.reset();
|
| - target_handler_->Disable();
|
| - target_handler_.reset();
|
| - tracing_handler_->Disable();
|
| - tracing_handler_.reset();
|
| -
|
| +void RenderFrameDevToolsAgentHost::Detach(DevToolsSession* session) {
|
| if (current_)
|
| current_->Detach();
|
| if (pending_)
|
| @@ -591,10 +529,11 @@ void RenderFrameDevToolsAgentHost::Detach() {
|
| }
|
|
|
| bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
|
| + DevToolsSession* session,
|
| const std::string& message) {
|
| int call_id = 0;
|
| std::string method;
|
| - if (session()->Dispatch(message, &call_id, &method) !=
|
| + if (session->Dispatch(message, true, &call_id, &method) !=
|
| protocol::Response::kFallThrough) {
|
| return true;
|
| }
|
| @@ -602,26 +541,29 @@ bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
|
| if (!navigating_handles_.empty()) {
|
| DCHECK(IsBrowserSideNavigationEnabled());
|
| in_navigation_protocol_message_buffer_[call_id] =
|
| - { session()->session_id(), method, message };
|
| + { session->session_id(), method, message };
|
| return true;
|
| }
|
|
|
| if (current_) {
|
| current_->DispatchProtocolMessage(
|
| - session()->session_id(), call_id, method, message);
|
| + session->session_id(), call_id, method, message);
|
| }
|
| if (pending_) {
|
| pending_->DispatchProtocolMessage(
|
| - session()->session_id(), call_id, method, message);
|
| + session->session_id(), call_id, method, message);
|
| }
|
| return true;
|
| }
|
|
|
| -void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) {
|
| +void RenderFrameDevToolsAgentHost::InspectElement(
|
| + DevToolsSession* session,
|
| + int x,
|
| + int y) {
|
| if (current_)
|
| - current_->InspectElement(session()->session_id(), x, y);
|
| + current_->InspectElement(session->session_id(), x, y);
|
| if (pending_)
|
| - pending_->InspectElement(session()->session_id(), x, y);
|
| + pending_->InspectElement(session->session_id(), x, y);
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::OnClientAttached() {
|
| @@ -711,8 +653,10 @@ void RenderFrameDevToolsAgentHost::DidFinishNavigation(
|
| DispatchBufferedProtocolMessagesIfNecessary();
|
|
|
| DCHECK(CheckConsistency());
|
| - if (target_handler_ && navigation_handle->HasCommitted())
|
| - target_handler_->UpdateServiceWorkers();
|
| + protocol::TargetHandler* target_handler =
|
| + session() ? session()->GetTargetHandler() : nullptr;
|
| + if (target_handler && navigation_handle->HasCommitted())
|
| + target_handler->UpdateServiceWorkers();
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame(
|
| @@ -758,8 +702,10 @@ void RenderFrameDevToolsAgentHost::RenderFrameHostChanged(
|
| // CommitPending may destruct |this|.
|
| scoped_refptr<RenderFrameDevToolsAgentHost> protect(this);
|
|
|
| - if (target_handler_)
|
| - target_handler_->UpdateFrames();
|
| + protocol::TargetHandler* target_handler =
|
| + session() ? session()->GetTargetHandler() : nullptr;
|
| + if (target_handler)
|
| + target_handler->UpdateFrames();
|
|
|
| if (IsBrowserSideNavigationEnabled())
|
| return;
|
| @@ -840,6 +786,8 @@ void RenderFrameDevToolsAgentHost::CreatePowerSaveBlocker() {
|
|
|
| void RenderFrameDevToolsAgentHost::RenderProcessGone(
|
| base::TerminationStatus status) {
|
| + protocol::InspectorHandler* inspector_handler =
|
| + session() ? session()->GetInspectorHandler() : nullptr;
|
| switch(status) {
|
| case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
|
| case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
|
| @@ -851,13 +799,13 @@ void RenderFrameDevToolsAgentHost::RenderProcessGone(
|
| case base::TERMINATION_STATUS_OOM_PROTECTED:
|
| #endif
|
| case base::TERMINATION_STATUS_LAUNCH_FAILED:
|
| - if (inspector_handler_)
|
| - inspector_handler_->TargetCrashed();
|
| + if (inspector_handler)
|
| + inspector_handler->TargetCrashed();
|
| current_frame_crashed_ = true;
|
| break;
|
| default:
|
| - if (inspector_handler_)
|
| - inspector_handler_->TargetDetached("Render process gone.");
|
| + if (inspector_handler)
|
| + inspector_handler->TargetDetached("Render process gone.");
|
| break;
|
| }
|
| DCHECK(CheckConsistency());
|
| @@ -894,8 +842,10 @@ bool RenderFrameDevToolsAgentHost::OnMessageReceived(
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() {
|
| - if (page_handler_)
|
| - page_handler_->DidAttachInterstitialPage();
|
| + protocol::PageHandler* page_handler =
|
| + session() ? session()->GetPageHandler() : nullptr;
|
| + if (page_handler)
|
| + page_handler->DidAttachInterstitialPage();
|
|
|
| // TODO(dgozman): this may break for cross-process subframes.
|
| if (!pending_) {
|
| @@ -910,8 +860,10 @@ void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() {
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() {
|
| - if (page_handler_)
|
| - page_handler_->DidDetachInterstitialPage();
|
| + protocol::PageHandler* page_handler =
|
| + session() ? session()->GetPageHandler() : nullptr;
|
| + if (page_handler)
|
| + page_handler->DidDetachInterstitialPage();
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame(
|
| @@ -926,8 +878,10 @@ void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame(
|
| if (pending_ && pending_->host() == render_frame_host)
|
| CommitPending();
|
| DCHECK(CheckConsistency());
|
| - if (target_handler_)
|
| - target_handler_->UpdateServiceWorkers();
|
| + protocol::TargetHandler* target_handler =
|
| + session() ? session()->GetTargetHandler() : nullptr;
|
| + if (target_handler)
|
| + target_handler->UpdateServiceWorkers();
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::DidFailProvisionalLoad(
|
| @@ -976,26 +930,8 @@ void RenderFrameDevToolsAgentHost::UpdateProtocolHandlers(
|
| handlers_frame_host_->GetRenderWidgetHost()->GetRoutingID();
|
| #endif
|
| handlers_frame_host_ = host;
|
| - if (dom_handler_)
|
| - dom_handler_->SetRenderFrameHost(host);
|
| - if (emulation_handler_)
|
| - emulation_handler_->SetRenderFrameHost(host);
|
| - if (input_handler_)
|
| - input_handler_->SetRenderFrameHost(host);
|
| - if (inspector_handler_)
|
| - inspector_handler_->SetRenderFrameHost(host);
|
| - if (network_handler_)
|
| - network_handler_->SetRenderFrameHost(host);
|
| - if (page_handler_)
|
| - page_handler_->SetRenderFrameHost(host);
|
| - if (service_worker_handler_)
|
| - service_worker_handler_->SetRenderFrameHost(host);
|
| - if (security_handler_)
|
| - security_handler_->SetRenderFrameHost(host);
|
| - if (storage_handler_)
|
| - storage_handler_->SetRenderFrameHost(host);
|
| - if (target_handler_)
|
| - target_handler_->SetRenderFrameHost(host);
|
| + if (session())
|
| + session()->SetRenderFrameHost(host);
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::DisconnectWebContents() {
|
| @@ -1133,13 +1069,20 @@ void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame(
|
| ViewHostMsg_SwapCompositorFrame::Param param;
|
| if (!ViewHostMsg_SwapCompositorFrame::Read(&message, ¶m))
|
| return;
|
| - if (page_handler_) {
|
| - page_handler_->OnSwapCompositorFrame(
|
| + protocol::PageHandler* page_handler =
|
| + session() ? session()->GetPageHandler() : nullptr;
|
| + if (page_handler) {
|
| + page_handler->OnSwapCompositorFrame(
|
| std::move(std::get<1>(param).metadata));
|
| }
|
| - if (input_handler_)
|
| - input_handler_->OnSwapCompositorFrame(std::get<1>(param).metadata);
|
| - if (frame_trace_recorder_ && tracing_handler_->did_initiate_recording()) {
|
| + protocol::InputHandler* input_handler =
|
| + session() ? session()->GetInputHandler() : nullptr;
|
| + if (input_handler)
|
| + input_handler->OnSwapCompositorFrame(std::get<1>(param).metadata);
|
| + protocol::TracingHandler* tracing_handler =
|
| + session() ? session()->GetTracingHandler() : nullptr;
|
| + if (frame_trace_recorder_ && tracing_handler &&
|
| + tracing_handler->did_initiate_recording()) {
|
| frame_trace_recorder_->OnSwapCompositorFrame(
|
| current_ ? current_->host() : nullptr, std::get<1>(param).metadata);
|
| }
|
| @@ -1162,11 +1105,18 @@ void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame(
|
|
|
| void RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame(
|
| cc::CompositorFrameMetadata frame_metadata) {
|
| - if (page_handler_)
|
| - page_handler_->OnSynchronousSwapCompositorFrame(std::move(frame_metadata));
|
| - if (input_handler_)
|
| - input_handler_->OnSwapCompositorFrame(frame_metadata);
|
| - if (frame_trace_recorder_ && tracing_handler_->did_initiate_recording()) {
|
| + protocol::PageHandler* page_handler =
|
| + session() ? session()->GetPageHandler() : nullptr;
|
| + if (page_handler)
|
| + page_handler->OnSynchronousSwapCompositorFrame(std::move(frame_metadata));
|
| + protocol::InputHandler* input_handler =
|
| + session() ? session()->GetInputHandler() : nullptr;
|
| + if (input_handler)
|
| + input_handler->OnSwapCompositorFrame(frame_metadata);
|
| + protocol::TracingHandler* tracing_handler =
|
| + session() ? session()->GetTracingHandler() : nullptr;
|
| + if (frame_trace_recorder_ && tracing_handler &&
|
| + tracing_handler->did_initiate_recording()) {
|
| frame_trace_recorder_->OnSynchronousSwapCompositorFrame(
|
| current_ ? current_->host() : nullptr,
|
| frame_metadata);
|
|
|