10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file.
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Module "mojo/public/js/bindings/core"
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch//
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Note: This file is for documentation purposes only. The code here is not
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// actually executed. The real module is implemented natively in Mojo.
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch//
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// This module provides the JavaScript bindings for mojo/public/c/system/core.h.
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Refer to that file for more detailed documentation for equivalent methods.
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochwhile (1);
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoHandle: An opaque handles to a Mojo object (e.g. a message pipe).
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar kInvalidHandle;
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoResult {number}: Result codes for Mojo operations.
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_OK;
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_CANCELLED;
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_UNKNOWN;
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_INVALID_ARGUMENT;
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_DEADLINE_EXCEEDED;
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_NOT_FOUND;
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_ALREADY_EXISTS;
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_PERMISSION_DENIED;
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_RESOURCE_EXHAUSTED;
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_FAILED_PRECONDITION;
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_ABORTED;
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_OUT_OF_RANGE;
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_UNIMPLEMENTED;
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_INTERNAL;
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_UNAVAILABLE;
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_DATA_LOSS;
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_BUSY;
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar RESULT_SHOULD_WAIT;
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoDeadline {number}: Used to specify deadlines (timeouts), in microseconds.
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar DEADLINE_INDEFINITE;
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * MojoHandleSignals: Used to specify signals that can be waited on for a handle
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *(and which can be triggered), e.g., the ability to read or write to
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * the handle.
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)var HANDLE_SIGNAL_NONE;
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)var HANDLE_SIGNAL_READABLE;
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)var HANDLE_SIGNAL_WRITABLE;
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/*
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoWriteMessageFlags: Used to specify different modes to |writeMessage()|.
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar WRITE_MESSAGE_FLAG_NONE;
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoReadMessageFlags: Used to specify different modes to |readMessage()|.
670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar READ_MESSAGE_FLAG_NONE;
700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar READ_MESSAGE_FLAG_MAY_DISCARD;
710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoCreateDataPipeOptions: Used to specify creation parameters for a data
740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * pipe to |createDataPipe()|.
750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochdictionary MojoCreateDataPipeOptions {
780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  MojoCreateDataPipeOptionsFlags flags;  // See below.
790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  int32 elementNumBytes;  // The size of an element, in bytes.
800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  int32 capacityNumBytes;  // The capacity of the data pipe, in bytes.
810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch};
820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// MojoCreateDataPipeOptionsFlags
840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD;
860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/*
880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoWriteDataFlags: Used to specify different modes to |writeData()|.
890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar WRITE_DATA_FLAG_NONE;
920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar WRITE_DATA_FLAG_ALL_OR_NONE;
930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoReadDataFlags: Used to specify different modes to |readData()|.
960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See core.h for more information.
970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar READ_DATA_FLAG_NONE;
990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar READ_DATA_FLAG_ALL_OR_NONE;
1000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar READ_DATA_FLAG_DISCARD;
1010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvar READ_DATA_FLAG_QUERY;
1020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
1040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Closes the given |handle|. See MojoClose for more info.
1050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoHandle} Handle to close.
1060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {MojoResult} Result code.
1070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
1080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochfunction close(handle) { [native code] }
1090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * Waits on the given handle until a signal indicated by |signals| is
1120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * satisfied or until |deadline| is passed. See MojoWait for more information.
1130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
1140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoHandle} handle Handle to wait on.
115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * @param {MojoHandleSignals} signals Specifies the condition to wait for.
1160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoDeadline} deadline Stops waiting if this is reached.
1170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {MojoResult} Result code.
1180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)function wait(handle, signals, deadline) { [native code] }
1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Waits on |handles[0]|, ..., |handles[handles.length-1]| for at least one of
1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * them to satisfy the state indicated by |flags[0]|, ...,
1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * |flags[handles.length-1]|, respectively, or until |deadline| has passed.
1250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See MojoWaitMany for more information.
1260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {Array.MojoHandle} handles Handles to wait on.
128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * @param {Array.MojoHandleSignals} signals Specifies the condition to wait for,
1290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   for each corresponding handle. Must be the same length as |handles|.
1300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoDeadline} deadline Stops waiting if this is reached.
1310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {MojoResult} Result code.
1320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)function waitMany(handles, signals, deadline) { [native code] }
1340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
1360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Creates a message pipe. This function always succeeds.
1370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See MojoCreateMessagePipe for more information on message pipes.
1380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
1390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {MessagePipe} An object of the form {
1400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     handle0,
1410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     handle1,
1420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   }
1430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   where |handle0| and |handle1| are MojoHandles to each end of the channel.
1440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
1450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochfunction createMessagePipe() { [native code] }
1460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
1480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Writes a message to the message pipe endpoint given by |handle|. See
1490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoWriteMessage for more information, including return codes.
1500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
1510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoHandle} handle The endpoint to write to.
1520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {ArrayBufferView} buffer The message data. May be empty.
1530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {Array.MojoHandle} handlesArray Any handles to attach. Handles are
1540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   transferred on success and will no longer be valid. May be empty.
1550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoWriteMessageFlags} flags Flags.
1560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {MojoResult} Result code.
1570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
1580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochfunction writeMessage(handle, buffer, handlesArray, flags) { [native code] }
1590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
1610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Reads a message from the message pipe endpoint given by |handle|. See
1620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoReadMessage for more information, including return codes.
1630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
1640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoHandle} handle The endpoint to read from.
1650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoReadMessageFlags} flags Flags.
1660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {object} An object of the form {
1670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     result,  // |RESULT_OK| on success, error code otherwise.
1680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     buffer,  // An ArrayBufferView of the message data (only on success).
1690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     handles  // An array of MojoHandles transferred, if any.
1700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   }
1710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
1720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochfunction readMessage(handle, flags) { [native code] }
1730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
1750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Creates a data pipe, which is a unidirectional communication channel for
1760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * unframed data, with the given options. See MojoCreateDataPipe for more
1770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * more information, including return codes.
1780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
1790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoCreateDataPipeOptions} optionsDict Options to control the data
1800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   pipe parameters. May be null.
1810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {object} An object of the form {
1820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     result,  // |RESULT_OK| on success, error code otherwise.
1830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     producerHandle,  // MojoHandle to use with writeData (only on success).
1840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     consumerHandle,  // MojoHandle to use with readData (only on success).
1850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   }
1860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
1870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochfunction createDataPipe(optionsDict) { [native code] }
1880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
1900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Writes the given data to the data pipe producer given by |handle|. See
1910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * MojoWriteData for more information, including return codes.
1920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
1930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoHandle} handle A producerHandle returned by createDataPipe.
1940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {ArrayBufferView} buffer The data to write.
1950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoWriteDataFlags} flags Flags.
1960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {object} An object of the form {
1970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     result,  // |RESULT_OK| on success, error code otherwise.
1980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     numBytes,  // The number of bytes written.
1990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   }
2000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
2010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochfunction writeData(handle, buffer, flags) { [native code] }
2020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
2030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/**
2040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Reads data from the data pipe consumer given by |handle|. May also
2050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * be used to discard data. See MojoReadData for more information, including
2060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * return codes.
2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
2080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoHandle} handle A consumerHandle returned by createDataPipe.
2090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @param {MojoReadDataFlags} flags Flags.
2100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * @return {object} An object of the form {
2110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     result,  // |RESULT_OK| on success, error code otherwise.
2120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *     buffer,  // An ArrayBufferView of the data read (only on success).
2130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *   }
2140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
2150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochfunction readData(handle, flags) { [native code] }
216