blob: e1cf627bdc6fd551d035921b0a7bef4fa0eb7231 [file] [log] [blame]
// Copyright 2018 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.
library chromium.web;
using fuchsia.mem;
using fuchsia.sys;
using fuchsia.ui.viewsv1token;
enum ExecuteMode {
IMMEDIATE_ONCE = 1; // Will evaluate the script immediately.
ON_PAGE_LOAD = 2; // Will evaluate the script on all subsequent page loads.
};
enum LogLevel : int32 {
NONE = 100; // No logging.
DEBUG = -1; // Outputs messages from console.debug().
INFO = 0; // Outputs messages from console.log().
WARN = 1; // Outputs messages from console.warn().
ERROR = 2; // Outputs messages from console.error().
};
interface Frame {
// Creates a new view using the specified |view_token|. Caller should pass the
// other end of the token to CreateViewHolderCmd() to attach the new view to a
// the view tree.
//
// |view_token|: Token for the new view.
CreateView2(handle<eventpair> view_token,
request<fuchsia.sys.ServiceProvider>? incoming_services,
fuchsia.sys.ServiceProvider? outgoing_services);
// Deprecated.
// TODO(crbug.com/899348): Update all code to use CreateView2()
// and remove CreateView().
CreateView(request<fuchsia.ui.viewsv1token.ViewOwner> view_owner,
request<fuchsia.sys.ServiceProvider>? services);
// Returns an interface through which the frame may be navigated to
// a desired URL, reloaded, etc.
//
// |view_provider|: An interface request for the Frame's
// NavigationController.
GetNavigationController(request<NavigationController> controller);
// Executes |script| in the frame if the frame's URL has an origin which
// matches entries in |origins|.
// At least one |origins| entry must be specified.
// If a wildcard "*" is specified in |origins|, then the script will be
// evaluated for all documents.
// If |mode| is NOW, then the script is evaluated immediately.
// If |mode| is ON_PAGE_LOAD, then the script is evaluated on every future
// document load prior to the page's script's execution.
//
// Multiple scripts can be registered by calling ExecuteJavascript()
// repeatedly.
//
// Note that scripts share the same execution context as the document,
// meaning that document may modify variables, classes, or objects set by the
// script in arbitrary or unpredictable ways.
// TODO(crbug.com/900391): Investigate if we can run the scripts in isolated
// JS worlds.
//
// Returns |true| if the script was executed, |false| if the script was
// rejected due to injection being blocked by the parent Context, or because
// the script's text encoding was invalid.
ExecuteJavaScript(
vector<string> origins, fuchsia.mem.Buffer script, ExecuteMode mode) ->
(bool success);
// Posts a message to the frame's onMessage handler.
//
// |targetOrigin| restricts message delivery to the specified origin.
// If |targetOrigin| is "*", then the message will be sent to the document
// regardless of its origin.
// See html.spec.whatwg.org/multipage/web-messaging.html sect. 9.4.3
// for more details on how the target origin policy is applied.
//
// Returns |false| if |message| is invalid or |targetOrigin| is missing.
PostMessage(WebMessage message, string targetOrigin) -> (bool success);
// Sets the observer for handling page navigation events.
//
// |observer|: The observer to use. Unregisters any existing observers
// if null.
SetNavigationEventObserver(NavigationEventObserver? observer);
// If set to a value other than NONE, allows web content to log messages
// to the system logger using console.log(), console.info(), console.warn(),
// and console.error().
SetJavaScriptLogLevel(LogLevel level);
};
struct WebMessage {
// The message payload, encoded as an UTF-8 string.
fuchsia.mem.Buffer data;
// List of objects transferred into the MessagePort from the FIDL client.
// TODO(crbug.com/893236): make this a vector when FIDL-354 is fixed.
IncomingTransferable? incoming_transfer;
// List of objects transferred out of the MessagePort to the FIDL client.
OutgoingTransferable? outgoing_transfer;
};
union OutgoingTransferable {
request<MessagePort> message_port;
};
union IncomingTransferable {
MessagePort message_port;
};
// Represents one end of an HTML5 MessageChannel. Can be used to send
// and exchange Messages with the peered MessagePort in the Frame's script
// context. The port is destroyed when either end of the MessagePort channel
// is torn down.
interface MessagePort {
// Sends a WebMessage to the peer.
PostMessage(WebMessage message) -> (bool success);
// Asynchronously reads the next message from the channel.
// The client should invoke the callback when it is ready to process
// another message.
// Unreceived messages are buffered on the sender's side and bounded
// by its available resources.
ReceiveMessage() -> (WebMessage message);
};