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

Unified 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 side-by-side diff with in-line comments
Download patch
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, &param))
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);

Powered by Google App Engine
This is Rietveld 408576698