blob: 85f6951f859c0faffe3b2c879de962552ef78540 [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.
#include "chrome/browser/actor/tools/media_control_tool_request.h"
#include "chrome/browser/actor/tools/media_control_tool.h"
#include "chrome/browser/actor/tools/tool_request_visitor_functor.h"
#include "chrome/common/actor.mojom.h"
#include "chrome/common/actor/action_result.h"
#include "third_party/abseil-cpp/absl/strings/str_format.h"
namespace actor {
namespace {
struct MediaControlNameVisitor {
std::string operator()(const PlayMedia&) const { return "PlayMedia"; }
std::string operator()(const PauseMedia&) const { return "PauseMedia"; }
std::string operator()(const SeekMedia&) const { return "SeekMedia"; }
};
} // namespace
std::string MediaControlName(const MediaControl& media_control) {
return std::visit(MediaControlNameVisitor{}, media_control);
}
MediaControlToolRequest::MediaControlToolRequest(tabs::TabHandle tab_handle,
MediaControl media_control)
: TabToolRequest(tab_handle), media_control_(media_control) {}
MediaControlToolRequest::~MediaControlToolRequest() = default;
ToolRequest::CreateToolResult MediaControlToolRequest::CreateTool(
TaskId task_id,
ToolDelegate& tool_delegate) const {
tabs::TabInterface* tab = GetTabHandle().Get();
if (!tab) {
return {/*tool=*/nullptr, MakeResult(mojom::ActionResultCode::kTabWentAway,
/*requires_page_stabilization=*/false,
"The tab is no longer present.")};
}
return {std::make_unique<MediaControlTool>(task_id, tool_delegate, *tab,
media_control_),
MakeOkResult()};
}
void MediaControlToolRequest::Apply(ToolRequestVisitorFunctor& f) const {
f.Apply(*this);
}
std::string MediaControlToolRequest::Name() const {
return "MediaControl";
}
std::string MediaControlToolRequest::JournalEvent() const {
return absl::StrFormat("%s[%s]", Name(), MediaControlName(media_control_));
}
} // namespace actor