// Copyright 2023 The Chromium Authors. All rights reserved.
// 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 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.
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 content 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;
// The list of ScriptSource objects defining sources of scripts to be
// injected into matching pages.
ScriptSource[] js;
// Specifies which pages this content script will be injected into. See
// Match Patterns for more details on the
// syntax of these strings.
DOMString[]? matches;
// Specifies when JavaScript files are injected into the web page. The
// preferred and default value is document_idle.
extensionTypes.RunAt? runAt;
};
// 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;
};
callback RegisterCallback = void();
callback GetScriptsCallback = void(RegisteredUserScript[] scripts);
callback UnregisterCallback = 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);
};
};