| // 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 <code>userScripts</code> 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 environment 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 |
| // <code>file</code> or <code>code</code> must be specified. |
| DOMString? code; |
| // The path of the JavaScript file to inject relative to the extension's |
| // root directory. Exactly one of <code>file</code> or <code>code</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 <a href="develop/concepts/match-patterns">Match Patterns</a> 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. |
| // This property must be specified for ${ref:register}, and when specified |
| // it must be a non-empty array. |
| ScriptSource[]? js; |
| // Specifies which pages this user script will be injected into. See |
| // <a href="develop/concepts/match-patterns">Match Patterns</a> 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 <code>document_idle</code>. |
| extensionTypes.RunAt? runAt; |
| // The JavaScript execution environment to run the script in. The default is |
| // <code>`USER_SCRIPT`</code>. |
| ExecutionWorld? world; |
| // Specifies the user script world ID to execute in. If omitted, the script |
| // will execute in the default user script world. Only valid if `world` is |
| // omitted or is `USER_SCRIPT`. Values with leading underscores (`_`) are |
| // reserved. |
| DOMString? worldId; |
| }; |
| |
| // 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; |
| }; |
| |
| dictionary InjectionTarget { |
| // Whether the script should inject into all frames within the tab. Defaults |
| // to false. This must not be true if <code>frameIds</code> is specified. |
| boolean? allFrames; |
| // The IDs of specific documentIds to inject into. This must not be set if |
| // <code>frameIds</code> is set. |
| DOMString[]? documentIds; |
| // The IDs of specific frames to inject into. |
| long[]? frameIds; |
| // The ID of the tab into which to inject. |
| long tabId; |
| }; |
| |
| dictionary InjectionResult { |
| // The document associated with the injection. |
| DOMString documentId; |
| // The frame associated with the injection. |
| long frameId; |
| // The result of the script execution. |
| any? result; |
| // The error, if any. <code>error</code> and <code>result</code> are |
| // mutually exclusive. |
| DOMString? error; |
| }; |
| |
| dictionary UserScriptInjection { |
| // Whether the injection should be triggered in the target as soon as |
| // possible. Note that this is not a guarantee that injection will occur |
| // prior to page load, as the page may have already loaded by the time the |
| // script reaches the target. |
| boolean? injectImmediately; |
| // The list of ScriptSource objects defining sources of scripts to be |
| // injected into the target. |
| ScriptSource[] js; |
| // Details specifying the target into which to inject the script. |
| InjectionTarget target; |
| // The JavaScript "world" to run the script in. The default is |
| // <code>USER_SCRIPT</code>. |
| ExecutionWorld? world; |
| // Specifies the user script world ID to execute in. If omitted, the script |
| // will execute in the default user script world. Only valid if `world` is |
| // omitted or is `USER_SCRIPT`. Values with leading underscores (`_`) are |
| // reserved. |
| DOMString? worldId; |
| }; |
| |
| // An object used to update the <code>`USER_SCRIPT`</code> world |
| // configuration. If a property is not specified, it will reset it to its |
| // default value. |
| dictionary WorldProperties{ |
| // Specifies the ID of the specific user script world to update. |
| // If not provided, updates the properties of the default user script world. |
| // Values with leading underscores (`_`) are reserved. |
| DOMString? worldId; |
| |
| // Specifies the world csp. The default is the <code>`ISOLATED`</code> |
| // world csp. |
| DOMString? csp; |
| |
| // Specifies whether messaging APIs are exposed. The default is |
| // <code>false</code>. |
| boolean? messaging; |
| }; |
| |
| callback RegisterCallback = void(); |
| |
| callback GetScriptsCallback = void(RegisteredUserScript[] scripts); |
| |
| callback UnregisterCallback = void(); |
| |
| callback UpdateCallback = void(); |
| |
| callback ExecuteCallback = void(InjectionResult[] result); |
| |
| callback ConfigureWorldCallback = void(); |
| |
| callback GetAllWorldConfigurationsCallback = void(WorldProperties[] worlds); |
| |
| callback ResetWorldConfigurationCallback = 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. |
| 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. |
| 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 |
| 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. |
| static void update( |
| RegisteredUserScript[] scripts, |
| optional UpdateCallback callback); |
| |
| // Injects a script into a target context. By default, the script will be |
| // run at <code>document_idle</code>, or immediately if the page has already |
| // loaded. If the <code>injectImmediately</code> property is set, the script |
| // will inject without waiting, even if the page has not finished loading. |
| // If the script evaluates to a promise, the browser will wait for the |
| // promise to settle and return the resulting value. |
| static void execute( |
| UserScriptInjection injection, |
| optional ExecuteCallback callback); |
| |
| // Configures the <code>`USER_SCRIPT`</code> execution environment. |
| // |properties|: Contains the user script world configuration. |
| // |callback|: Called once world hase been configured. |
| static void configureWorld( |
| WorldProperties properties, |
| optional ConfigureWorldCallback callback); |
| |
| // Retrieves all registered world configurations. |
| // |callback|: Called with the registered world configurations. |
| static void getWorldConfigurations( |
| GetAllWorldConfigurationsCallback callback); |
| |
| // Resets the configuration for a user script world. Any scripts that inject |
| // into the world with the specified ID will use the default world |
| // configuration. |
| // |worldId|: The ID of the user script world to reset. If omitted, resets |
| // the default world's configuration. |
| // |callback|: Called when the configuration is reset. |
| static void resetWorldConfiguration( |
| optional DOMString worldId, |
| ResetWorldConfigurationCallback callback); |
| }; |
| }; |