// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module extensions.mojom;
import "extensions/common/mojom/css_origin.mojom";
import "extensions/common/mojom/execution_world.mojom";
import "third_party/blink/public/mojom/script/script_evaluation_params.mojom";
import "url/mojom/url.mojom";
// A single JS source to execute in the renderer.
struct JSSource {
// The Javascript code to execute.
string code;
// The URL of the script that was injected, if any.
url.mojom.Url script_url;
};
// A single CSS source to execute in the renderer.
struct CSSSource {
// The CSS code to insert.
string code;
// A generated injection key for the CSS, which can be used to remove it
// later.
string? key;
};
// A struct representing a collection of JS code to inject in the renderer.
struct JSInjection {
// The JS sources to execute.
array<JSSource> sources;
// The JS world into which to inject the scripts.
ExecutionWorld world;
// An optional world ID. All injections specifying a given world ID will be
// injected into the same world. All injections omitting a world ID will be
// injected into a "default" world.
string? world_id;
// Whether the caller is interested in the result value. Manifest-declared
// content scripts and executeScript() calls without a response callback
// are examples of when this will be `kNoResult`.
blink.mojom.WantResultOption wants_result;
// Whether the code to be executed with synthesized user activation.
blink.mojom.UserActivationOption user_gesture;
// For scripts that evaluate to promises, whether to wait for the resolution
// of the resulting promises.
blink.mojom.PromiseResultOption wait_for_promise;
};
// A struct representing a collection of CSS code to insert in the renderer.
struct CSSInjection {
enum Operation {
kAdd,
kRemove,
};
// The CSS sources to insert.
array<CSSSource> sources;
// The origin of the CSS.
CSSOrigin css_origin;
// The type of operation to perform.
Operation operation;
};
// A single CodeInjection, which is allowed to contain exactly one of
// CSS and JS.
union CodeInjection {
CSSInjection css;
JSInjection js;
};