blob: 1b7d08ac39ca4bb924d256fdfcf01934fa4969dd [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_API_USER_SCRIPTS_USER_SCRIPTS_API_H_
#define EXTENSIONS_BROWSER_API_USER_SCRIPTS_USER_SCRIPTS_API_H_
#include "extensions/browser/api/scripting/scripting_utils.h"
#include "extensions/browser/extension_function.h"
#include "extensions/browser/extension_function_histogram_value.h"
#include "extensions/common/api/user_scripts.h"
namespace extensions {
class UserScriptsRegisterFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.register", USERSCRIPTS_REGISTER)
UserScriptsRegisterFunction() = default;
UserScriptsRegisterFunction(const UserScriptsRegisterFunction&) = delete;
const UserScriptsRegisterFunction& operator=(
const UserScriptsRegisterFunction&) = delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsRegisterFunction() override = default;
// Called when user script files have been validated.
void OnUserScriptFilesValidated(scripting::ValidateScriptsResult result);
// Called when user scripts have been registered.
void OnUserScriptsRegistered(const std::optional<std::string>& error);
};
class UserScriptsGetScriptsFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.getScripts", USERSCRIPTS_GETSCRIPTS)
UserScriptsGetScriptsFunction() = default;
UserScriptsGetScriptsFunction(const UserScriptsRegisterFunction&) = delete;
const UserScriptsGetScriptsFunction& operator=(
const UserScriptsGetScriptsFunction&) = delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsGetScriptsFunction() override = default;
};
class UserScriptsUnregisterFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.unregister", USERSCRIPTS_UNREGISTER)
UserScriptsUnregisterFunction() = default;
UserScriptsUnregisterFunction(const UserScriptsUnregisterFunction&) = delete;
const UserScriptsUnregisterFunction& operator=(
const UserScriptsUnregisterFunction&) = delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsUnregisterFunction() override = default;
// Called when user scripts have been unregistered..
void OnUserScriptsUnregistered(const std::optional<std::string>& error);
};
class UserScriptsUpdateFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.update", USERSCRIPTS_UPDATE)
UserScriptsUpdateFunction() = default;
UserScriptsUpdateFunction(const UserScriptsUpdateFunction&) = delete;
const UserScriptsUpdateFunction& operator=(const UserScriptsUpdateFunction&) =
delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsUpdateFunction() override = default;
// Returns a UserScript object by updating the `original_script` with the
// `new_script` given delta. If the updated script cannot be parsed, populates
// `parse_error` and returns nullptr.
std::unique_ptr<UserScript> ApplyUpdate(
api::user_scripts::RegisteredUserScript& new_script,
api::user_scripts::RegisteredUserScript& original_script,
std::u16string* parse_error);
// Called when user script files have been validated.
void OnUserScriptFilesValidated(scripting::ValidateScriptsResult result);
// Called when user scripts have been updated..
void OnUserScriptsUpdated(const std::optional<std::string>& error);
};
class UserScriptsConfigureWorldFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.configureWorld",
USERSCRIPTS_CONFIGUREWORLD)
UserScriptsConfigureWorldFunction() = default;
UserScriptsConfigureWorldFunction(const UserScriptsConfigureWorldFunction&) =
delete;
const UserScriptsConfigureWorldFunction& operator=(
const UserScriptsConfigureWorldFunction&) = delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsConfigureWorldFunction() override = default;
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_USER_SCRIPTS_USER_SCRIPTS_API_H_