blob: bd09fc1e7bb034f33121b79b9b36d18c78746d66 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/devtools/devtools_renderer_channel.h"
#include "content/browser/devtools/devtools_agent_host_impl.h"
#include "content/browser/devtools/devtools_session.h"
#include "content/browser/devtools/protocol/devtools_domain_handler.h"
#include "content/public/common/child_process_host.h"
#include "ui/gfx/geometry/point.h"
namespace content {
DevToolsRendererChannel::DevToolsRendererChannel(DevToolsAgentHostImpl* owner)
: owner_(owner),
binding_(this),
process_id_(ChildProcessHost::kInvalidUniqueID) {}
DevToolsRendererChannel::~DevToolsRendererChannel() = default;
void DevToolsRendererChannel::SetRenderer(
blink::mojom::DevToolsAgentAssociatedPtr agent_ptr,
blink::mojom::DevToolsAgentHostAssociatedRequest host_request,
int process_id,
RenderFrameHostImpl* frame_host) {
binding_.Close();
if (host_request)
binding_.Bind(std::move(host_request));
agent_ptr_ = std::move(agent_ptr);
process_id_ = process_id;
frame_host_ = frame_host;
for (DevToolsSession* session : owner_->sessions()) {
for (auto& pair : session->handlers())
pair.second->SetRenderer(process_id_, frame_host_);
session->AttachToAgent(agent_ptr_.get());
}
}
void DevToolsRendererChannel::AttachSession(DevToolsSession* session) {
if (!agent_ptr_)
owner_->UpdateRendererChannel(true /* force */);
for (auto& pair : session->handlers())
pair.second->SetRenderer(process_id_, frame_host_);
session->AttachToAgent(agent_ptr_.get());
}
void DevToolsRendererChannel::InspectElement(const gfx::Point& point) {
if (!agent_ptr_)
owner_->UpdateRendererChannel(true /* force */);
// Previous call might update |agent_ptr_|
// via SetRenderer(), so we should check it again.
if (agent_ptr_)
agent_ptr_->InspectElement(point);
}
} // namespace content