| 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 1fa9c79aada887a499c126a5c8d336dc4c6a2b06..8f55fc41fe92143940befb821386fc5e4085ee8c 100644
|
| --- a/content/browser/devtools/render_frame_devtools_agent_host.cc
|
| +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
|
| @@ -141,26 +141,32 @@ RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost(RenderFrameHost* rfh)
|
| input_handler_(new devtools::input::InputHandler()),
|
| inspector_handler_(new devtools::inspector::InspectorHandler()),
|
| network_handler_(new devtools::network::NetworkHandler()),
|
| - page_handler_(new devtools::page::PageHandler()),
|
| + page_handler_(nullptr),
|
| power_handler_(new devtools::power::PowerHandler()),
|
| service_worker_handler_(
|
| new devtools::service_worker::ServiceWorkerHandler()),
|
| tracing_handler_(new devtools::tracing::TracingHandler(
|
| devtools::tracing::TracingHandler::Renderer)),
|
| - emulation_handler_(new devtools::emulation::EmulationHandler(
|
| - page_handler_.get())),
|
| + emulation_handler_(nullptr),
|
| frame_trace_recorder_(new DevToolsFrameTraceRecorder()),
|
| reattaching_(false) {
|
| DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
|
| dispatcher->SetDOMHandler(dom_handler_.get());
|
| - dispatcher->SetEmulationHandler(emulation_handler_.get());
|
| dispatcher->SetInputHandler(input_handler_.get());
|
| dispatcher->SetInspectorHandler(inspector_handler_.get());
|
| dispatcher->SetNetworkHandler(network_handler_.get());
|
| - dispatcher->SetPageHandler(page_handler_.get());
|
| dispatcher->SetPowerHandler(power_handler_.get());
|
| dispatcher->SetServiceWorkerHandler(service_worker_handler_.get());
|
| dispatcher->SetTracingHandler(tracing_handler_.get());
|
| +
|
| + if (!rfh->GetParent()) {
|
| + page_handler_.reset(new devtools::page::PageHandler());
|
| + emulation_handler_.reset(
|
| + new devtools::emulation::EmulationHandler(page_handler_.get()));
|
| + dispatcher->SetPageHandler(page_handler_.get());
|
| + dispatcher->SetEmulationHandler(emulation_handler_.get());
|
| + }
|
| +
|
| SetRenderFrameHost(rfh);
|
| g_instances.Get().push_back(this);
|
| AddRef(); // Balanced in RenderFrameHostDestroyed.
|
| @@ -217,8 +223,10 @@ void RenderFrameDevToolsAgentHost::OnClientDetached() {
|
| #if defined(OS_ANDROID)
|
| power_save_blocker_.reset();
|
| #endif
|
| - emulation_handler_->Detached();
|
| - page_handler_->Detached();
|
| + if (emulation_handler_)
|
| + emulation_handler_->Detached();
|
| + if (page_handler_)
|
| + page_handler_->Detached();
|
| power_handler_->Detached();
|
| service_worker_handler_->Detached();
|
| tracing_handler_->Detached();
|
| @@ -365,7 +373,8 @@ bool RenderFrameDevToolsAgentHost::OnMessageReceived(
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() {
|
| - page_handler_->DidAttachInterstitialPage();
|
| + if (page_handler_)
|
| + page_handler_->DidAttachInterstitialPage();
|
|
|
| if (!render_frame_host_)
|
| return;
|
| @@ -380,7 +389,8 @@ void RenderFrameDevToolsAgentHost::DidAttachInterstitialPage() {
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::DidDetachInterstitialPage() {
|
| - page_handler_->DidDetachInterstitialPage();
|
| + if (page_handler_)
|
| + page_handler_->DidDetachInterstitialPage();
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::TitleWasSet(
|
| @@ -405,6 +415,7 @@ void RenderFrameDevToolsAgentHost::Observe(int type,
|
| const NotificationDetails& details) {
|
| if (type == content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED) {
|
| bool visible = *Details<bool>(details).ptr();
|
| + DCHECK(page_handler_);
|
| page_handler_->OnVisibilityChanged(visible);
|
| }
|
| }
|
| @@ -418,32 +429,43 @@ void RenderFrameDevToolsAgentHost::SetRenderFrameHost(RenderFrameHost* rfh) {
|
| RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
|
| rfh->GetRenderViewHost());
|
| dom_handler_->SetRenderFrameHost(render_frame_host_);
|
| - emulation_handler_->SetRenderViewHost(rvh);
|
| input_handler_->SetRenderViewHost(rvh);
|
| network_handler_->SetRenderFrameHost(render_frame_host_);
|
| - page_handler_->SetRenderViewHost(rvh);
|
| service_worker_handler_->SetRenderFrameHost(render_frame_host_);
|
|
|
| - registrar_.Add(
|
| - this,
|
| - content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
|
| - content::Source<RenderWidgetHost>(rvh));
|
| + WebContentsImpl* web_contents_impl =
|
| + static_cast<WebContentsImpl*>(web_contents());
|
| + if (emulation_handler_)
|
| + emulation_handler_->SetWebContents(web_contents_impl);
|
| + if (page_handler_)
|
| + page_handler_->SetWebContents(web_contents_impl);
|
| +
|
| + if (page_handler_) {
|
| + registrar_.Add(
|
| + this,
|
| + content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
|
| + content::Source<RenderWidgetHost>(rvh));
|
| + }
|
| }
|
|
|
| void RenderFrameDevToolsAgentHost::ClearRenderFrameHost() {
|
| DCHECK(render_frame_host_);
|
| RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
|
| render_frame_host_->GetRenderViewHost());
|
| - registrar_.Remove(
|
| - this,
|
| - content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
|
| - content::Source<RenderWidgetHost>(rvh));
|
| + if (page_handler_) {
|
| + registrar_.Remove(
|
| + this,
|
| + content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
|
| + content::Source<RenderWidgetHost>(rvh));
|
| + }
|
| render_frame_host_ = nullptr;
|
| dom_handler_->SetRenderFrameHost(nullptr);
|
| - emulation_handler_->SetRenderViewHost(nullptr);
|
| + if (emulation_handler_)
|
| + emulation_handler_->SetWebContents(nullptr);
|
| input_handler_->SetRenderViewHost(nullptr);
|
| network_handler_->SetRenderFrameHost(nullptr);
|
| - page_handler_->SetRenderViewHost(nullptr);
|
| + if (page_handler_)
|
| + page_handler_->SetWebContents(nullptr);
|
| service_worker_handler_->SetRenderFrameHost(nullptr);
|
| }
|
|
|
| @@ -512,7 +534,8 @@ void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame(
|
| ViewHostMsg_SwapCompositorFrame::Param param;
|
| if (!ViewHostMsg_SwapCompositorFrame::Read(&message, ¶m))
|
| return;
|
| - page_handler_->OnSwapCompositorFrame(get<1>(param).metadata);
|
| + if (page_handler_)
|
| + page_handler_->OnSwapCompositorFrame(get<1>(param).metadata);
|
| frame_trace_recorder_->OnSwapCompositorFrame(
|
| render_frame_host_, get<1>(param).metadata);
|
| }
|
| @@ -521,7 +544,8 @@ void RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame(
|
| const cc::CompositorFrameMetadata& frame_metadata) {
|
| if (!render_frame_host_)
|
| return;
|
| - page_handler_->OnSwapCompositorFrame(frame_metadata);
|
| + if (page_handler_)
|
| + page_handler_->OnSwapCompositorFrame(frame_metadata);
|
| frame_trace_recorder_->OnSwapCompositorFrame(
|
| render_frame_host_, frame_metadata);
|
| }
|
|
|