// 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.
// Use the userScripts API to execute user scripts in the User
// Scripts context.
namespace userScripts {
// The JavaScript world for a user script to execute within.
enum ExecutionWorld {
// Specifies the execution environment of the DOM, which is the execution
// environment shared with the host page's JavaScript.
MAIN,
// Specifies the execution enviroment that is specific to user scripts and
// is exempt from the page's CSP.
USER_SCRIPT
};
// The source of the script to inject.
dictionary ScriptSource {
// A string containing the JavaScript code to inject. Exactly one of
// file or code must be specified.
DOMString? code;
// The path of the JavaScript file to inject relative to the extension's
// root directory. Exactly one of file or code
// must be specified.
DOMString? file;
};
// Describes a user script to be injected into a web page registered through
// this API. The script is injected into a page if its URL matches any of
// "matches" or "include_globs" patterns, and the URL doesn't match
// "exclude_matches" and "exclude_globs" patterns.
dictionary RegisteredUserScript {
// If true, it will inject into all frames, even if the frame is not the
// top-most frame in the tab. Each frame is checked independently for URL
// requirements; it will not inject into child frames if the URL
// requirements are not met. Defaults to false, meaning that only the top
// frame is matched.
boolean? allFrames;
// Excludes pages that this user script would otherwise be injected into.
// See Match Patterns for more details on
// the syntax of these strings.
DOMString[]? excludeMatches;
// The ID of the user script specified in the API call. This property must
// not start with a '_' as it's reserved as a prefix for generated script
// IDs.
DOMString id;
// Specifies wildcard patterns for pages this user script will be injected
// into.
DOMString[]? includeGlobs;
// Specifies wildcard patterns for pages this user script will NOT be
// injected into.
DOMString[]? excludeGlobs;
// The list of ScriptSource objects defining sources of scripts to be
// injected into matching pages.
ScriptSource[] js;
// Specifies which pages this user script will be injected into. See
// Match Patterns for more details on the
// syntax of these strings. This property must be specified for
// ${ref:register}.
DOMString[]? matches;
// Specifies when JavaScript files are injected into the web page. The
// preferred and default value is document_idle.
extensionTypes.RunAt? runAt;
// The JavaScript execution environment to run the script in. The default is
// `USER_SCRIPT`.
ExecutionWorld? world;
};
// An object used to filter user scripts for ${ref:getScripts}.
dictionary UserScriptFilter {
// $(ref:getScripts) only returns scripts with the IDs specified in this
// list.
DOMString[]? ids;
};
// An object used to update the `USER_SCRIPT` world
// configuration. If a propertie is not specified, it will reset it to its
// default value.
dictionary WorldProperties{
// Specifies the world csp. The default is the `ISOLATED`
// world csp.
DOMString? csp;
// Specifies whether messaging APIs are exposed. The default is
// false.
boolean? messaging;
};
callback RegisterCallback = void();
callback GetScriptsCallback = void(RegisteredUserScript[] scripts);
callback UnregisterCallback = void();
callback UpdateCallback = void();
callback ConfigureWorldCallback = void();
interface Functions {
// Registers one or more user scripts for this extension.
// |scripts|: Contains a list of user scripts to be registered.
// |callback|: Called once scripts have been fully registered or if an error
// has ocurred.
[supportsPromises] static void register(RegisteredUserScript[] scripts,
optional RegisterCallback callback);
// Returns all dynamically-registered user scripts for this extension.
// |filter|: If specified, this method returns only the user scripts that
// match it.
// |callback|: Called once scripts have been fully registered or if an error
// occurs.
[supportsPromises] static void getScripts(
optional UserScriptFilter filter,
GetScriptsCallback callback);
// Unregisters all dynamically-registered user scripts for this extension.
// |filter|: If specified, this method unregisters only the user scripts
// that match it.
// |callback|: Called once scripts have been fully unregistered or if an
// error ocurs
[supportsPromises] static void unregister(
optional UserScriptFilter filter,
UnregisterCallback callback);
// Updates one or more user scripts for this extension.
// |scripts|: Contains a list of user scripts to be updated. A property is
// only updated for the existing script if it is specified in this object.
// If there are errors during script parsing/file validation, or if the IDs
// specified do not correspond to a fully registered script, then no scripts
// are updated.
// |callback|: Called once scripts have been fully updated or if an error
// occurs.
[supportsPromises] static void update(
RegisteredUserScript[] scripts,
optional UpdateCallback callback);
// Configures the `USER_SCRIPT` execution environment.
// |properties|: Contains the user script world configuration.
// |callback|: Called once world hase been configured.
[supportsPromises] static void configureWorld(
WorldProperties properties,
optional ConfigureWorldCallback callback);
};
};