// 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. // Internal namespace for representing content scripts. namespace scriptsInternal { // The source of the user script. This will also determine certain // capabilities of the script (such as whether it can use globs, raw strings // for code, etc). enum Source { DYNAMIC_CONTENT_SCRIPT, DYNAMIC_USER_SCRIPT, MANIFEST_CONTENT_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 serialized script, intended for storage and persistence across // browser sessions. // Note: Though it is called "UserScript", this is used for scripts through // the scripting API (dynamic content scripts), content scripts in the // manifest (static content scripts), and user scripts through the userScripts // API. "UserScript" was chosen because it matches the correspodning // extenisons::UserScript object (the runtime representation of this) and // because "Script" is ambiguous (e.g. background script, general JS script, // etc). dictionary SerializedUserScript { // Whether the script will inject into all frames, regardless if it is not // the top-most frame in the tab. boolean? allFrames; // The list of CSS files to be injected into matching pages. Note that, // today, we only expect these to contain files. It is represented as a // ScriptSource for compatibility and consistency with `js`. ScriptSource[]? css; // Excludes pages that this user script would otherwise be injected into. DOMString[]? excludeMatches; // Specifies wildcard patterns for pages this user script will NOT be // injected into. DOMString[]? excludeGlobs; // The ID of the script. DOMString id; // Specifies wildcard patterns for pages this user script will be injected // into. DOMString[]? includeGlobs; // The list of sources of javascript to be injected into matching pages. ScriptSource[]? js; // Specifies which pages this user script will be injected into. DOMString[] matches; // Whether the script should inject into any frames where the URL belongs to // a scheme that would never match a specified Match Pattern, including // about:, data:, blob:, and filesystem: schemes. boolean? matchOriginAsFallback; // Specifies when JavaScript files are injected into the web page. extensionTypes.RunAt? runAt; // The "source" of the user script. Source source; // The JavaScript "world" to run the script in. extensionTypes.ExecutionWorld world; // The ID of the world into which to inject. If omitted, uses the default // world. DOMString? worldId; }; };