blob: 0d77d7ec416e9d47e99ac9306941881d7b34fe01 [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/extension_function.h"
#include "extensions/browser/extension_function_histogram_value.h"
#include "extensions/browser/scripting_utils.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 UserScriptsExecuteFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.execute", USERSCRIPTS_EXECUTE)
UserScriptsExecuteFunction() = default;
UserScriptsExecuteFunction(const UserScriptsExecuteFunction&) = delete;
const UserScriptsExecuteFunction& operator=(
const UserScriptsExecuteFunction&) = delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsExecuteFunction() override = default;
// Called when the resource files to be injected has been loaded.
void DidLoadResources(ScriptExecutor* script_executor,
ScriptExecutor::FrameScope frame_scope,
std::set<int> frame_ids,
std::vector<std::optional<mojom::JSSourcePtr>> sources,
std::vector<scripting::InjectedFileSource> file_sources,
std::optional<std::string> load_error);
// Triggers the execution of `sources` in the appropriate context.
void Execute(std::vector<std::optional<mojom::JSSourcePtr>> sources,
ScriptExecutor* script_executor,
ScriptExecutor::FrameScope frame_scope,
std::set<int> frame_ids,
std::string* error);
// Invoked when script execution is complete.
void OnScriptExecuted(std::vector<ScriptExecutor::FrameResult> frame_results);
api::user_scripts::UserScriptInjection injection_;
};
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;
};
class UserScriptsGetWorldConfigurationsFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.getWorldConfigurations",
USERSCRIPTS_GETWORLDCONFIGURATIONS)
UserScriptsGetWorldConfigurationsFunction() = default;
UserScriptsGetWorldConfigurationsFunction(
const UserScriptsGetWorldConfigurationsFunction&) = delete;
const UserScriptsGetWorldConfigurationsFunction& operator=(
const UserScriptsGetWorldConfigurationsFunction&) = delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsGetWorldConfigurationsFunction() override = default;
};
class UserScriptsResetWorldConfigurationFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("userScripts.resetWorldConfiguration",
USERSCRIPTS_RESETWORLDCONFIGURATION)
UserScriptsResetWorldConfigurationFunction() = default;
UserScriptsResetWorldConfigurationFunction(
const UserScriptsResetWorldConfigurationFunction&) = delete;
const UserScriptsResetWorldConfigurationFunction& operator=(
const UserScriptsResetWorldConfigurationFunction&) = delete;
// ExtensionFunction:
ResponseAction Run() override;
private:
~UserScriptsResetWorldConfigurationFunction() override = default;
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_USER_SCRIPTS_USER_SCRIPTS_API_H_