// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
[ExternalExtensionType="extensionTypes.RunAt"]
typedef object ExtensionTypesRunAt;
[ExternalExtensionType="extensionTypes.ExecutionWorld"]
typedef object ExtensionTypesExecutionWorld;
// Describes a content script to be injected into a web page.
dictionary ContentScript {
// Specifies which pages this content script will be injected into. See
// Match Patterns for more
// details on the syntax of these strings.
required sequence matches;
// Excludes pages that this content script would otherwise be injected into.
// See Match Patterns for more
// details on the syntax of these strings.
sequence exclude_matches;
// The list of CSS files to be injected into matching pages. These are
// injected in the order they appear in this array, before any DOM is
// constructed or displayed for the page.
sequence css;
// The list of JavaScript files to be injected into matching pages. These
// are injected in the order they appear in this array.
sequence js;
// If specified 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 all_frames;
// 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. In these cases, in order
// to determine if the script should inject, the origin of the URL is
// checked. If the origin is `null` (as is the case for data: URLs), then
// the "initiator" or "creator" origin is used (i.e., the origin of the
// frame that created or navigated this frame). Note that this may not
// be the parent frame, if the frame was navigated by another frame in the
// document hierarchy.
boolean match_origin_as_fallback;
// Whether the script should inject into an about:blank frame where the
// parent or opener frame matches one of the patterns declared in matches.
// Defaults to false.
boolean match_about_blank;
// Applied after matches to include only those URLs that also match this
// glob. Intended to emulate the
// @include
// Greasemonkey keyword.
sequence include_globs;
// Applied after matches to exclude URLs that match this glob. Intended to
// emulate the
// @exclude
// Greasemonkey keyword.
sequence exclude_globs;
// Specifies when JavaScript files are injected into the web page. The
// preferred and default value is document_idle.
ExtensionTypesRunAt run_at;
// The JavaScript "world" to run the script in. Defaults to
// ISOLATED. Only available in Manifest V3 extensions.
ExtensionTypesExecutionWorld world;
};
// Stub namespace for the "content_scripts" manifest key.
[generate_error_messages, Namespace=contentScripts]
partial dictionary ExtensionManifest {
sequence content_scripts;
};