// Copyright 2019 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. module js_injection.mojom; import "components/js_injection/common/origin_matcher.mojom"; import "mojo/public/mojom/base/string16.mojom"; import "third_party/blink/public/mojom/messaging/message_port_descriptor.mojom"; // JsObject struct represents a JavaScript object we will inject in the main // JavaScript world of a frame. |js_object_name| will be used as the name // of the JavaScript object. We will inject the object if the frame's origin // matches |origin_matcher|. |js_to_browser_messaging| will be used for that // JavaScript object to send message back to browser side. struct JsObject { mojo_base.mojom.String16 js_object_name; pending_associated_remote js_to_browser_messaging; js_injection.mojom.OriginMatcher origin_matcher; }; // DocumentStartJavaScript struct contains the JavaScript snippet |script| and // the corresponding |origin_matcher|. We will run the script if the frame's // origin matches any rules in the |origin_matcher|. struct DocumentStartJavaScript { int32 script_id; mojo_base.mojom.String16 script; js_injection.mojom.OriginMatcher origin_matcher; }; // For JavaScript postMessage() API, implemented by browser. interface JsToBrowserMessaging { // Called from renderer, browser receives |message| and possible |ports|, // The |message| is an opaque type and the contents are defined by the client // of this API. PostMessage(mojo_base.mojom.String16 message, array ports); // When there is a new BrowserToJsMessaging created in renderer, we need to // send/ it to browser, so browser could send message back to Js. SetBrowserToJsMessaging( pending_associated_remote browser_to_js_messaging); }; // For the browser to reply back to injected JavaScript object. Implemented by // the renderer. interface BrowserToJsMessaging { // Called from browser, to send message to page. OnPostMessage(mojo_base.mojom.String16 message); }; // For browser to configure renderer, implemented by renderer. interface JsCommunication { // Called from browser, to tell renderer that if we need to inject // JavaScript objects to the frame based on the |js_objects| array. SetJsObjects(array js_objects); // Called from browser, to add a script for a frame to run at document start // stage. The script will run only if the frame's origin matches any of the // allowed_origin_rules. AddDocumentStartScript(js_injection.mojom.DocumentStartJavaScript script); // Called from browser, to remove the script by the given script_id. RemoveDocumentStartScript(int32 script_id); };