wasm-bindgen/crates/web-sys/webidls/available/TCPSocket.webidl
Nick Fitzgerald f2f2d7231a
Create the web-sys crate mechanically from WebIDL (#409)
* Create a new `web-sys` crate

This will eventually contain all the WebIDL-generated bindings to Web APIs.

* ci: Test the new `web-sys` crate in CI

* web-sys: Add a small README

* web-sys: Vendor all the WebIDL files from mozilla-central

* backend: Add a pass to remove AST items that use undefined imports

This is necessary for the WebIDL frontend, which can't translate many WebIDL
constructs into equivalent wasm-bindgen AST things yet. It lets us make
incremental progress: we can generate bindings to methods we can support right
now even though there might be methods on the same interface that we can't
support yet.

* webidl: Add a bunch of missing semicolons

* webidl: Make parsing private

It was only `pub` so that we could test it, but we ended up moving towards
integration tests rather than unit tests that assert particular ASTs are parsed
from WebIDL files.

* webidl: Remove uses of undefined import types

* test-project-builder: Build projects in "very verbose" mode

This helps for debugging failing WebIDL-related tests.

* test-project-builder: Add more profiling timers

* test-project-builder: Detect when webpack-dev-server fails

Instead of going into an infinite loop, detect when webpack-dev-server fails to
start up and early exit the test.

* webidl: Specify version for dev-dependency on wasm-bindgen-backend

Instead of only a relative path.

* guide: Add section about contributing to `web-sys`

* WIP enable Event.webidl

Still need to fix and finish the test.

* Update expected webidl output

* Start out a test's status as incomplete

That way if we don't fill it in the error message doesn't look quite so bizarre

* Fix onerror function in headless mode

Otherwise we don't see any output!

* Fix package.json/node_modules handling in project generation

Make sure these are looked up in the git project root rather than the crate root

* Avoid logging body text

This was meant for debugging and is otherwise pretty noisy

* Fix a relative path

* More expected test fixes

* Fix a typo

* test-project-builder: Allow asynchronous tests

* webidl: Convert [Unforgeable] attributes into `#[wasm_bindgen(structural)]`

Fixes #432

* test-project-builder: Print generated WebIDL bindings for debugging purposes

Helps debug bad WebIDL bindings generation inside tests.

* When we can't find a descriptor, say which one can't be found

This helps when debugging things that need to become structural.

* web-sys: Test bindings for Event

* ci: Use `--manifest-path dir` instead of `cd dir && ...`

* web-sys: Just move .webidl files isntead of symlinking to enable them

* tests: Polyfill Array.prototype.values for older browsers in CI

* test-project-builder: Don't panic on poisoned headless test mutex

We only use it to serialize headless tests so that we don't try to bind the port
concurrently. Its OK to run another headless test if an earlier one panicked.

* JsValue: Add {is,as}_{object,function} methods

Allows dynamically casting values to `js::Object` and `js::Function`.

* tidy: Fix whitespace and missing semicolons

* Allow for dynamic feature detection of methods

If we create bindings to a method that doesn't exist in this implementation,
then it shouldn't fail until if/when we actually try and invoke that missing
method.

* tests: Do feature detection in Array.prototype.values test

* Add JsValue::{is_string, as_js_string} methods

And document all the cast/convert/check methods for js value.

* eslint: allow backtick string literals

* Only generate a fallback import function for non-structural imports
2018-07-09 16:35:25 -07:00

211 lines
7.3 KiB
Plaintext
Vendored

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* TCPSocket exposes a TCP client socket (no server sockets yet)
* to highly privileged apps. It provides a buffered, non-blocking
* interface for sending. For receiving, it uses an asynchronous,
* event handler based interface.
*/
enum TCPSocketBinaryType {
"arraybuffer",
"string"
};
dictionary SocketOptions {
boolean useSecureTransport = false;
TCPSocketBinaryType binaryType = "string";
};
enum TCPReadyState {
"connecting",
"open",
"closing",
"closed",
};
[NoInterfaceObject]
interface LegacyMozTCPSocket {
/**
* Legacy constructor for API compatibility.
*/
[Throws]
TCPSocket open(DOMString host, unsigned short port, optional SocketOptions options);
[Throws]
TCPServerSocket listen(unsigned short port, optional ServerSocketOptions options, optional unsigned short backlog = 0);
};
[Constructor(DOMString host, unsigned short port, optional SocketOptions options),
Func="mozilla::dom::TCPSocket::ShouldTCPSocketExist",
Exposed=(Window,System)]
interface TCPSocket : EventTarget {
/**
* Upgrade an insecure connection to use TLS. Throws if the ready state is not OPEN.
*/
[Throws] void upgradeToSecure();
/**
* The UTF16 host of this socket object.
*/
readonly attribute USVString host;
/**
* The port of this socket object.
*/
readonly attribute unsigned short port;
/**
* True if this socket object is an SSL socket.
*/
readonly attribute boolean ssl;
/**
* The number of bytes which have previously been buffered by calls to
* send on this socket.
*/
readonly attribute unsigned long long bufferedAmount;
/**
* Pause reading incoming data and invocations of the ondata handler until
* resume is called. Can be called multiple times without resuming.
*/
void suspend();
/**
* Resume reading incoming data and invoking ondata as usual. There must be
* an equal number of resume as suspends that took place. Throws if the
* socket is not suspended.
*/
[Throws]
void resume();
/**
* Close the socket.
*/
void close();
/**
* Close the socket immediately without waiting for unsent data.
*/
[ChromeOnly] void closeImmediately();
/**
* Write data to the socket.
*
* @param data The data to write to the socket.
*
* @return Send returns true or false as a hint to the caller that
* they may either continue sending more data immediately, or
* may want to wait until the other side has read some of the
* data which has already been written to the socket before
* buffering more. If send returns true, then less than 64k
* has been buffered and it's safe to immediately write more.
* If send returns false, then more than 64k has been buffered,
* and the caller may wish to wait until the ondrain event
* handler has been called before buffering more data by more
* calls to send.
*
* @throws Throws if the ready state is not OPEN.
*/
[Throws]
boolean send(ByteString data);
/**
* Write data to the socket.
*
* @param data The data to write to the socket.
* @param byteOffset The offset within the data from which to begin writing.
* @param byteLength The number of bytes to write.
* Defaults to the byte length of the ArrayBuffer if not present,
* and clamped to (length - byteOffset).
*
* @return Send returns true or false as a hint to the caller that
* they may either continue sending more data immediately, or
* may want to wait until the other side has read some of the
* data which has already been written to the socket before
* buffering more. If send returns true, then less than 64k
* has been buffered and it's safe to immediately write more.
* If send returns false, then more than 64k has been buffered,
* and the caller may wish to wait until the ondrain event
* handler has been called before buffering more data by more
* calls to send.
*
* @throws Throws if the ready state is not OPEN.
*/
[Throws]
boolean send(ArrayBuffer data, optional unsigned long byteOffset = 0, optional unsigned long byteLength);
/**
* The readyState attribute indicates which state the socket is currently
* in.
*/
readonly attribute TCPReadyState readyState;
/**
* The binaryType attribute indicates which mode this socket uses for
* sending and receiving data. If the binaryType: "arraybuffer" option
* was passed to the open method that created this socket, binaryType
* will be "arraybuffer". Otherwise, it will be "string".
*/
readonly attribute TCPSocketBinaryType binaryType;
/**
* The "open" event is dispatched when the connection to the server
* has been established. If the connection is refused, the "error" event
* will be dispatched, instead.
*/
attribute EventHandler onopen;
/**
* After send has buffered more than 64k of data, it returns false to
* indicate that the client should pause before sending more data, to
* avoid accumulating large buffers. This is only advisory, and the client
* is free to ignore it and buffer as much data as desired, but if reducing
* the size of buffers is important (especially for a streaming application)
* the "drain" event will be dispatched once the previously-buffered data has
* been written to the network, at which point the client can resume calling
* send again.
*/
attribute EventHandler ondrain;
/**
* The "data" event will be dispatched repeatedly and asynchronously after
* "open" is dispatched, every time some data was available from the server
* and was read. The event object will be a TCPSocketEvent; if the "arraybuffer"
* binaryType was passed to the constructor, the data attribute of the event
* object will be an ArrayBuffer. If not, it will be a normal JavaScript string,
* truncated at the first null byte found in the payload and the remainder
* interpreted as ASCII bytes.
*
* At any time, the client may choose to pause reading and receiving "data"
* events by calling the socket's suspend() method. Further "data" events
* will be paused until resume() is called.
*/
attribute EventHandler ondata;
/**
* The "error" event will be dispatched when there is an error. The event
* object will be a TCPSocketErrorEvent.
*
* If an "error" event is dispatched before an "open" one, the connection
* was refused, and the "close" event will not be dispatched. If an "error"
* event is dispatched after an "open" event, the connection was lost,
* and a "close" event will be dispatched subsequently.
*/
attribute EventHandler onerror;
/**
* The "close" event is dispatched once the underlying network socket
* has been closed, either by the server, or by the client calling
* close.
*
* If the "error" event was not dispatched before "close", then one of
* the sides cleanly closed the connection.
*/
attribute EventHandler onclose;
};