blob: a709090fb53993ea27f9e89bc3992531d0d9ecde [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ACTOR_TOOLS_PAGE_TOOL_REQUEST_H_
#define CHROME_BROWSER_ACTOR_TOOLS_PAGE_TOOL_REQUEST_H_
#include <memory>
#include <optional>
#include <string>
#include <variant>
#include "chrome/browser/actor/shared_types.h"
#include "chrome/browser/actor/tools/tool_request.h"
#include "chrome/common/actor.mojom-forward.h"
#include "chrome/common/actor/task_id.h"
#include "ui/gfx/geometry/point.h"
#include "url/gurl.h"
namespace content {
class RenderFrameHost;
} // namespace content
namespace actor {
mojom::ToolTargetPtr ToMojo(const PageTarget& target);
// Tool requests targeting a specific, existing document should inherit from
// this subclass. Being page-scoped implies also being tab-scoped since a page
// exists inside a tab.
//
// Note: A page tool is scoped to a specific (local root) document, however,
// until tool invocation time it isn't valid to dereference the RenderFrameHost
// from the request. This is because the final frame that will be used isn't
// known until the request goes through TimeOfUseValidation and the tool is
// ready to invoke.
class PageToolRequest : public TabToolRequest {
public:
PageToolRequest(tabs::TabHandle tab_handle, const PageTarget& target);
~PageToolRequest() override;
PageToolRequest(const PageToolRequest& other);
// Converts this request into the ToolAction mojo message which can be
// executed in the renderer.
virtual mojom::ToolActionPtr ToMojoToolAction(
content::RenderFrameHost& frame) const = 0;
virtual std::unique_ptr<PageToolRequest> Clone() const = 0;
// ToolRequest
CreateToolResult CreateTool(TaskId task_id,
ToolDelegate& tool_delegate) const override;
// Returns what in the page the tool should act upon.
const PageTarget& GetTarget() const;
private:
PageTarget target_;
};
} // namespace actor
#endif // CHROME_BROWSER_ACTOR_TOOLS_PAGE_TOOL_REQUEST_H_