blob: 96e7cc79c847249358d888048d7d7e5011286d99 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/shell/browser/protocol/browser_handler.h"
#include "base/functional/bind.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/web_contents.h"
namespace content::shell::protocol {
namespace {
std::unique_ptr<Browser::Bounds> CreateBrowserBounds(
WebContents* web_contents) {
gfx::Rect bounds = web_contents->GetContainerBounds();
return Browser::Bounds::Create()
.SetLeft(bounds.x())
.SetTop(bounds.y())
.SetWidth(bounds.width())
.SetHeight(bounds.height())
.SetWindowState("normal")
.Build();
}
} // namespace
BrowserHandler::BrowserHandler(
const raw_ref<const BrowserContext> browser_context,
std::string target_id)
: browser_context_(browser_context), target_id_(std::move(target_id)) {}
BrowserHandler::~BrowserHandler() = default;
void BrowserHandler::Wire(UberDispatcher* dispatcher) {
Browser::Dispatcher::wire(dispatcher, this);
}
Response BrowserHandler::Disable() {
return Response::Success();
}
Response BrowserHandler::GetWindowForTarget(
std::optional<std::string> target_id,
int* out_window_id,
std::unique_ptr<Browser::Bounds>* out_bounds) {
scoped_refptr<DevToolsAgentHost> agent_host =
DevToolsAgentHost::GetForId(target_id.value_or(target_id_));
if (!agent_host) {
return Response::InvalidParams("No target with given id found");
}
WebContents* web_contents = agent_host->GetWebContents();
if (!web_contents) {
return Response::ServerError("No web contents for the given target id");
}
*out_window_id = 1;
*out_bounds = CreateBrowserBounds(web_contents);
return Response::Success();
}
} // namespace content::shell::protocol