blob: 667288cc6799bef61d94d122839dbc7021e85748 [file] [log] [blame]
// Copyright 2022 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/extensions/api/side_panel/side_panel_api.h"
#include "base/values.h"
#include "chrome/browser/extensions/api/side_panel/side_panel_service.h"
#include "chrome/common/extensions/api/side_panel.h"
#include "extensions/common/extension_features.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace extensions {
namespace {
bool IsSidePanelApiAvailable() {
return base::FeatureList::IsEnabled(
extensions_features::kExtensionSidePanelIntegration);
}
} // namespace
SidePanelApiFunction::SidePanelApiFunction() = default;
SidePanelApiFunction::~SidePanelApiFunction() = default;
SidePanelService* SidePanelApiFunction::GetService() {
return extensions::SidePanelService::Get(browser_context());
}
ExtensionFunction::ResponseAction SidePanelApiFunction::Run() {
if (!IsSidePanelApiAvailable())
return RespondNow(Error("API Unavailable"));
return RunFunction();
}
ExtensionFunction::ResponseAction SidePanelGetOptionsFunction::RunFunction() {
absl::optional<api::side_panel::GetOptions::Params> params =
api::side_panel::GetOptions::Params::Create(args());
EXTENSION_FUNCTION_VALIDATE(params);
auto tab_id = params->options.tab_id
? absl::optional<int>(*(params->options.tab_id))
: absl::nullopt;
const api::side_panel::PanelOptions& options =
GetService()->GetOptions(*extension(), tab_id);
return RespondNow(WithArguments(options.ToValue()));
}
ExtensionFunction::ResponseAction SidePanelSetOptionsFunction::RunFunction() {
absl::optional<api::side_panel::SetOptions::Params> params =
api::side_panel::SetOptions::Params::Create(args());
EXTENSION_FUNCTION_VALIDATE(params);
// TODO(crbug.com/1328645): Validate the relative extension path exists.
GetService()->SetOptions(*extension(), std::move(params->options));
return RespondNow(NoArguments());
}
ExtensionFunction::ResponseAction
SidePanelSetPanelBehaviorFunction::RunFunction() {
absl::optional<api::side_panel::SetPanelBehavior::Params> params =
api::side_panel::SetPanelBehavior::Params::Create(args());
EXTENSION_FUNCTION_VALIDATE(params);
if (params->behavior.open_panel_on_action_click.has_value()) {
GetService()->SetOpenSidePanelOnIconClick(
extension()->id(), *params->behavior.open_panel_on_action_click);
}
return RespondNow(NoArguments());
}
ExtensionFunction::ResponseAction
SidePanelGetPanelBehaviorFunction::RunFunction() {
api::side_panel::PanelBehavior behavior;
behavior.open_panel_on_action_click =
GetService()->OpenSidePanelOnIconClick(extension()->id());
return RespondNow(WithArguments(behavior.ToValue()));
}
} // namespace extensions