blob: 823c8d892388f4b98b63e04361daec0003c5c10d [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/actor/actor_script_tool_receiver.h"
#include "chrome/browser/actor/actor_keyed_service.h"
#include "chrome/browser/actor/actor_task.h"
#include "components/actor/core/actor_features.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
namespace actor {
// static
void ActorScriptToolReceiver::Create(
content::RenderFrameHost* render_frame_host,
mojo::PendingReceiver<blink::mojom::ScriptToolHost> receiver) {
new ActorScriptToolReceiver(*render_frame_host, std::move(receiver));
}
ActorScriptToolReceiver::ActorScriptToolReceiver(
content::RenderFrameHost& render_frame_host,
mojo::PendingReceiver<blink::mojom::ScriptToolHost> receiver)
: DocumentService(render_frame_host, std::move(receiver)) {}
void ActorScriptToolReceiver::PauseExecution() {
auto* web_contents =
content::WebContents::FromRenderFrameHost(&render_frame_host());
if (!web_contents) {
return;
}
auto* service = ActorKeyedService::Get(web_contents->GetBrowserContext());
if (!service) {
return;
}
if (const auto* task =
service->GetActingActorTaskForWebContents(web_contents)) {
if (auto* mutable_task = service->GetTask(task->id())) {
// TODO(crbug.com/484367299): Implement a proper actor task state for
// interrupt-with-user-control.
if (base::FeatureList::IsEnabled(kActorFormScriptToolInterrupt)) {
mutable_task->Interrupt(/*retain_user_control*/ true);
} else {
mutable_task->Pause(/*from_actor=*/true,
/*cancel_existing_action=*/false);
}
}
}
}
} // namespace actor