Presentation API
Abstract
This specification defines an API to enable Web content to access presentation displays and use them for presenting Web content.
Status of This Document
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.
This document was published by the Second Screen Working Group as an Editor's Draft. Comments regarding this document are welcome. Please send them to public-secondscreen@w3.org (subscribe, archives).
Please see the Working Group's implementation report.
Since publication as Candidate Recommendation on 14 July
2016, the Working Group updated most algorithms in the spec to fix issues identified through testing and implementation feedback. Interfaces defined in this document did not change, except
PresentationConnectionClosedReason and
PresentationConnectionClosedEvent, which were renamed to improve consistency with the rest of the Web platform. The API was also restricted to secure contexts. See the list of changes for details.
No feature has been identified as being at risk.
The Second Screen Working Group will refine the test suite for the Presentation API during the Candidate Recommendation period and update the preliminary implementation report. For this specification to advance to Proposed Recommendation, two independent, interoperable implementations of each feature must be demonstrated, as detailed in the CR exit criteria section.
Publication as an Editor's Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
This document is governed by the 1 March 2017 W3C Process Document.
1. Introduction
This section is non-normative.
The Presentation API aims to make presentation displays such as projectors, attached monitors, and network-connected TVs available to the Web. It takes into account displays that are attached using wired (HDMI, DVI, or similar) and wireless technologies (Miracast, Chromecast, DLNA, AirPlay, or similar).
Devices with limited screen size lack the ability to show Web content to a larger audience: a group of colleagues in a conference room, or friends and family at home. Web content shown on a larger presentation display has greater perceived quality, legibility, and impact.
At its core, the Presentation API enables a controller page to show a presentation page on a presentation display and exchange messages with it. How the presentation page is transmitted to the display and how messages are exchanged between it and the controller page are left to the implementation; this allows the use of a wide variety of display technologies.
For example, if the presentation display is connected by HDMI or Miracast, which only allow audio and video to be transmitted, the user agent (UA) hosting the controller will also render the presentation. It then uses the operating system to send the resulting graphical and audio output to the presentation display. We refer to this situation as the 1-UA mode implementation of the Presentation API. The only requirements are that the user agent is able to send graphics and audio from rendering the presentation to the presentation display, and exchange messages internally between the controller and presentation pages.
If the presentation display is able to render HTML natively and communicate with the controller via a network, the user agent hosting the controller does not need to render the presentation. Instead, the user agent acts as a proxy that requests the presentation display to load and render the presentation page itself. Message exchange is done over a network connection between the user agent and the presentation display. We refer to this situation as the 2-UA mode implementation of the Presentation API.
The Presentation API defined is intended to be used with user agents that attach to presentation displays in 1-UA mode, 2-UA mode, and possibly other means not listed above. To improve interoperability between user agents and presentation displays, standardization of network communication between browsers and displays is being considered in the Second Screen Community Group.
2. Use cases and requirements
This section is non-normative.
Use cases and requirements are captured in a separate Presentation API Use Cases and Requirements document.
3. Conformance
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY, MUST, OPTIONAL, SHOULD, and SHOULD NOT are to be interpreted as described in [RFC2119].
Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" or "return false and terminate these steps") are to be interpreted with the meaning of the key word (" MUST", "SHOULD", "MAY", etc.) used in introducing the algorithm.
Conformance requirements phrased as algorithms or specific steps may be implemented in any manner, so long as the result is equivalent. (In particular, the algorithms defined in this specification are intended to be easy to follow, and not intended to be performant.)
3.1 Conformance classes
This specification describes the conformance criteria for two classes of user agents.
- Controlling user agent
-
Web browsers that conform to the specifications of a controlling user agent must be able to start and control presentations by providing a controlling browsing context as described in this specification. This context implements the
,Presentation,PresentationAvailability,PresentationConnection,PresentationConnectionAvailableEvent, andPresentationConnectionCloseEventinterfaces.PresentationRequest - Receiving user agent
-
Web browsers that conform to the specifications of a receiving user agent must be able to render presentations by providing a receiving browsing context as described in this specification. This context implements the
,Presentation,PresentationConnection,PresentationConnectionAvailableEvent,PresentationConnectionCloseEvent, andPresentationConnectionListinterfaces.PresentationReceiver
One user agent may act both as a controlling user agent and as a receiving user agent, if it provides both browsing contexts and implements all of their required interfaces. This can happen when the same user agent is able to host the controlling browsing context and the receiving browsing context for a presentation, as in the 1-UA mode implementation of the API.
Conformance requirements phrased against a user agent apply either to a controlling user agent, a receiving user agent or to both classes, depending on the context.
4. Terminology
The following terms are defined in [HTML51]:
- active sandboxing flag set
- application cache
- browsing context
- creating a new browsing context
- current realm
- current settings object
- discard a browsing context
-
EventHandler - event handler
- event handler event type
- firing an event
- firing a simple event
- in parallel
- list of descendant browsing contexts
- navigate
-
Navigator - nested browsing context
- parse a sandboxing directive
- queue a task
- relevant settings object
- responsible browsing context
- sandboxed auxiliary navigation browsing context flag
- sandboxed top-level navigation browsing context flag
- sandboxed modals flag
- sandboxed presentation browsing context flag (defined in [ HTML52])
- sandboxing flag set
- session history
- task source
- top-level browsing context
- trusted event
- unload a document
The term JavaScript realm is defined in [ECMASCRIPT].
The terms EventTarget,
Event,
EventInit are defined in [DOM].
The term MessageEvent is defined in [WEBMESSAGING].
This document provides interface definitions using the Web IDL standard [ WEBIDL-2].
The terms throw, Promise, ArrayBuffer, ArrayBufferView, and the following exception names are defined in [WEBIDL-2]:
-
InvalidAccessError -
NotFoundError -
NotSupportedError -
OperationError -
SecurityError -
SyntaxError -
NotAllowedError
The terms resolving a Promise and rejecting a Promise are used as explained in [PROMGUIDE].
The term URL is defined in the WHATWG URL standard [URL].
The term Blob is defined in the File API specification [FILEAPI].
The header Accept-Language is defined in HTTP/1.1 [rfc7231].
HTTP authentication is defined in HTTP/1.1: Authentication [ rfc7235].
The term RTCDataChannel is defined in the WebRTC API specification [WEBRTC].
The term cookie store is defined in RFC 6265 [COOKIES].
The term UUID is defined in RFC 4122 [rfc4122].
The terms permission descriptor type and permission state are defined in [PERMISSIONS].
The term database is defined in [INDEXEDDB].
The terms local storage areas and session storage areas are defined in [WEBSTORAGE].
The term a priori authenticated URL is defined in [MIXED-CONTENT].
The terms service worker, a list of registered service worker registrations, caches, window client and worker client are defined in [SERVICE-WORKERS].
5. Examples
This section is non-normative.
This section shows example codes that highlight the usage of main features of the Presentation API. In these examples,
controller.html implements the controller and
presentation.html implements the presentation. Both pages are served from the domain https://example.org (https://example.org/controller.html and
https://example.org/presentation.html). These examples assume that the controlling page is managing one presentation at a time. Please refer to the comments in the code examples for further details.
5.1 Monitor availability of presentation displays example
Example 1
<button id="presentBtn" style="display: none;">Present</button> <script> var presentBtn = document.getElementById("presentBtn"); var presUrls = ["https://example.com/presentation.html", "https://example.net/alternate.html"]; var handleAvailabilityChange = function(available) { presentBtn.style.display = available ? "inline" : "none"; }; var request = new PresentationRequest(presUrls); request.getAvailability().then(function(availability) { handleAvailabilityChange(availability.value); availability.onchange = function() { handleAvailabilityChange(this.value); }; }).catch(function() { handleAvailabilityChange(true); }); </script>
5.2 Starting a new presentation example
Example 2
<script> presentBtn.onclick = function () { request.start() .then(setConnection); }; </script>
5.3 Reconnect to a presentation example
Example 3
<button id="reconnectBtn" style="display: none;">Reconnect</button> <script> var reconnect = function () { var presId = localStorage["presId"]; if (!!presId) { request.reconnect(presId) .then(setConnection); } }; document.addEventListener("DOMContentLoaded", reconnect); const reconnectBtn = document.querySelector("#reconnectBtn"); reconnectBtn.onclick = reconnect; </script>
5.4 Presentation initiation by the controlling UA example
Example 4
<script> navigator.presentation.defaultRequest = new PresentationRequest(presUrls); navigator.presentation.defaultRequest.onconnectionavailable = function(evt) { setConnection(evt.connection); }; </script>
5.5 Monitor connection's state and exchange data example
Example 5
<button id="disconnectBtn" style="display: none;">Disconnect</button> <button id="stopBtn" style="display: none;">Stop</button> <script> let connection; const stopBtn = document.querySelector("#stopBtn"); const disconnectBtn = document.querySelector("#disconnectBtn"); stopBtn.onclick = _ => { connection && connection.terminate(); }; disconnectBtn.onclick = _ => { connection && connection.close(); }; function setConnection(newConnection) { if (connection && connection != newConnection && connection.state != 'closed') { connection.onclosed = undefined; connection.close(); } connection = newConnection; localStorage["presId"] = connection.id; function showConnectedUI() { stopBtn.style.display = "inline"; disconnectBtn.style.display = "inline"; reconnectBtn.style.display = "none"; } function showDisconnectedUI() { disconnectBtn.style.display = "none"; stopBtn.style.display = "none"; reconnectBtn.style.display = localStorage["presId"] ? "inline" : "none"; } connection.onconnect = _ => { showConnectedUI(); connection.onmessage = message => { console.log(`Received message: ${message.data}`); }; connection.send("Say hello"); }; connection.onclose = _ => { connection = null; showDisconnectedUI(); }; connection.onterminate = _ => { delete localStorage["presId"]; connection = null; showDisconnectedUI(); }; }; </script>
5.6 Monitor available connection(s) and say hello
Example 6
<script> var addConnection = function(connection) { this.onmessage = function (message) { if (message.data == "say hello") this.send("hello"); }; }; navigator.presentation.receiver.connectionList.then(function (list) { list.connections.map(function (connection) { addConnection(connection); }); list.onconnectionavailable = function (evt) { addConnection(evt.connection); }; }); </script>
5.7 Passing locale information with a message
Example 7
<script> connection.send("{string: '你好,世界!', lang: 'zh-CN'}"); connection.send("{string: 'こんにちは、世界!', lang: 'ja'}"); connection.send("{string: '안녕하세요, 세계!', lang: 'ko'}"); connection.send("{string: 'Hello, world!', lang: 'en-US'}"); </script> <script> connection.onmessage = function (message) { var messageObj = JSON.parse(message.data); var spanElt = document.createElement("SPAN"); spanElt.lang = messageObj.lang; spanElt.textContent = messageObj.string; document.appendChild(spanElt); }; </script>
6.1 Common idioms
A presentation display refers to a graphical and/or audio output device available to the user agent via an implementation specific connection technology.
A presentation connection is an object relating a controlling browsing context to its receiving browsing context and enables two-way-messaging between them. Each presentation connection has a presentation connection state, a unique presentation identifier to distinguish it from other presentations, and a presentation URL that is a URL used to create or reconnect to the presentation. A valid presentation identifier consists of alphanumeric ASCII characters only and is at least 16 characters long.
Some presentation displays may only be able to display a subset of Web content because of functional, security or hardware limitations. Examples are set-top boxes, smart TVs, or networked speakers capable of rendering only audio. We say that such a display is an available presentation display for a presentation URL if the controlling user agent can reasonably guarantee that presentation of the URL on that display will succeed.
A
controlling browsing context (or controller for short) is a browsing context that has connected to a
presentation by calling
start or reconnect, or received a presentation
connection via a connectionavailable event. In algorithms for , the controlling
browsing context is the responsible browsing context whose
JavaScript realm was used to construct the
PresentationRequest.
PresentationRequest
The receiving browsing context (or presentation for short) is the browsing context responsible for rendering to a presentation display. A receiving browsing context can reside in the same user agent as the controlling browsing context or a different one. A receiving browsing context is created by following the steps to create a receiving browsing context.
In a procedure, the destination browsing context is the receiving browsing context when the procedure is initiated at the controlling browsing context, or the controlling browsing context if it is initiated at the receiving browsing context.
The set of controlled presentations, initially empty, contains the presentation connections created by the
controlling browsing contexts for the controlling user
agent (or a specific user profile within that user agent). The
set of controlled presentations is represented by a list of
PresentationConnection objects that represent the underlying
presentation connections. Several
PresentationConnection objects may share the same
presentation URL and presentation identifier in that set, but there can be only one PresentationConnection with a specific presentation URL and presentation identifier for a given controlling browsing context.
The set of presentation controllers, initially empty, contains the presentation connections created by a
receiving browsing context for the receiving user
agent. The set of presentation controllers is represented by a list of PresentationConnection objects that represent the underlying presentation connections. All presentation
connections in this set share the same presentation URL and presentation identifier.
In a receiving browsing context, the presentation
controllers monitor, initially set to null, exposes the current set of presentation controllers to the receiving application. The presentation controllers monitor is represented by a PresentationConnectionList.
In a receiving browsing context, the presentation
controllers promise, which is initially set to
null, provides the presentation controllers
monitor once the initial presentation connection is established. The presentation controllers promise is represented by a Promise that resolves with the
presentation controllers monitor.
In a controlling browsing context, the default
presentation request, which is initially set to
null, represents the request to use when the user wishes to initiate a presentation connection from the browser chrome.
The task source for the tasks mentioned in this specification is the presentation task source.
Unless otherwise specified, the JavaScript realm for script objects constructed by algorithm steps is the current realm.
6.2 Interface Presentation
The presentation attribute is used to retrieve an instance of the interface. It MUST return the Presentation instance.
Presentation
6.2.1 Controlling user agent
Controlling user agents MUST implement the following partial interface:
partial interface Presentation {
attribute PresentationRequest? defaultRequest;
};
The defaultRequest attribute MUST return the default presentation request if any, null otherwise. On setting, the default
presentation request MUST be set to the new value.
The controlling user agent SHOULD initiate presentation using the default presentation request only when the user has expressed an intention to do so via a user gesture, for example by clicking a button in the browser chrome.
To initiate presentation using the default presentation request, the controlling user agent MUST follow the steps to start a presentation from a default presentation request.
Support for initiating a presentation using the default presentation request is OPTIONAL.
Note
If a controlling user agent does not support starting a
presentation from a default presentation request, that user agent should ignore any value set for defaultRequest.
6.2.2 Receiving user agent
Receiving user agents MUST implement the following partial interface:
partial interface Presentation {
readonly attribute PresentationReceiver? receiver;
};
The receiver attribute
MUST return the instance associated with the receiving browsing context and created by the receiving user agent when the receiving browsing
context is created. In any other
browsing context (including nested browsing contexts of the
receiving browsing context) it MUST return
PresentationReceivernull.
Note
Web developers can use navigator.presentation.receiver to detect when a document is loaded as a presentation.
6.3 Interface PresentationRequest
A object is associated with a request to initiate or reconnect to a presentation made by a
controlling browsing context. The
PresentationRequest object MUST be implemented in a controlling browsing context provided by a controlling
user agent.
PresentationRequest
When a is constructed, the given PresentationRequesturls MUST be used as the list of presentation request URLs which are each a possible presentation URL for the
instance.
PresentationRequest
6.3.1 Constructing a PresentationRequest
When the PresentationRequest constructor is called, the
controlling user agent MUST run these steps:
- Input
- url or urls, the presentation request URLs
- Output
-
A
PresentationRequestobject
- If the document object's active sandboxing flag set has the sandboxed presentation browsing context flag set, then throw a
SecurityErrorand abort these steps. - If urls is an empty sequence, then throw a
NotSupportedErrorand abort all remaining steps. - If a single url was provided, let urls be a one item array containing url.
- Let presentationUrls be an empty list of URLs.
- For each URL U in urls:
- Resolve U relative to the API base URL specified by the current settings object, and add the resulting absolute URL (if any) to presentationUrls.
- If the resolve a URL algorithm failed, then throw a
SyntaxErrorexception and abort all remaining steps.
- If any member of presentationUrls is not an a
priori authenticated URL, then throw a
SecurityErrorand abort these steps. - Construct a new
PresentationRequestobject with presentationUrls as its presentation request URLs and return it.
6.3.2 Selecting a presentation display
When the start method is called, the user agent MUST run the following steps to select a presentation display.
- Input
-
presentationRequest, the
PresentationRequestobject that received the call tostart - Output
- A Promise
- If the algorithm isn't allowed to show a popup, return a
Promise rejected with an
InvalidAccessErrorexception and abort these steps. - Let topContext be the top-level browsing context of the controlling browsing context.
- If there is already an unsettled Promise from a previous call to
startin topContext or any browsing context in the list of descendant browsing contexts of topContext, return a new Promise rejected with anOperationErrorexception and abort all remaining steps. - Let P be a new Promise.
- Return P, but continue running these steps in parallel.
- If the user agent is not monitoring the list of available presentation displays, run the steps to monitor the list of available presentation displays in parallel.
- Let presentationUrls be the presentation request URLs of presentationRequest.
- Request user permission for the use of a presentation display and selection of one presentation display.
- If either of the following is true:
- The list of available presentation displays is empty and will remain so before the request for user permission is completed.
- No member in the list of available presentation displays is an available presentation display for any member of presentationUrls.
-
Reject P with a
NotFoundErrorexception. - Abort all remaining steps.
- If the user denies permission to use a display, reject
P with an
NotAllowedErrorexception, and abort all remaining steps. - Otherwise, the user grants permission to use a display; let D be that display.
- Run the steps to start a presentation connection with presentationRequest, D, and P.
Note
The details of implementing the permission request and display selection are left to the user agent; for example it may show the user a dialog and allow the user to select an available display (granting permission), or cancel the selection (denying permission). Implementers are encouraged to show the user whether an available display is currently in use, to facilitate presentations that can make use of multiple displays.
Note
Receiving user agents are encouraged to advertise a user friendly name for the presentation display, e.g. "Living Room TV", to assist the user in selecting the intended display. Implementers of receiving user agents are also encouraged to advertise the locale and intended text direction of the user friendly name. Implementers of controlling user agents are encouraged to render a user friendly name using its locale and text direction when they are known.
6.3.3 Starting a presentation from a default presentation request
When the user expresses an intent to start presentation of a document on a presentation display using the browser chrome (via a dedicated button, user gesture, or other signal), that user agent MUST run the following steps to start a presentation from a default presentation request. If no default presentation request is set on the document, these steps MUST not be run.
- Input
- W, the document on which the user has expressed an intent to start presentation
-
presentationRequest, the non-
nullvalue of navigator.presentation.defaultRequest set on W - D, the presentation display that is the target for presentation
- Let presentationUrls be the presentation request URLs of presentationRequest.
- If there is no presentation request URL for presentationRequest for which D is an available presentation display, then abort these steps.
- Run the steps to start a presentation connection with presentationRequest and D.
Note
When starting a presentation from a default presentation request, a controlling user agent may allow the user to request presentation and choose the intended presentation display with the same user gesture. For example, the browser chrome could allow the user to pick a display from a menu, or allow the user to tap on an Near Field Communications (NFC) enabled display.
6.3.4 Starting a presentation connection
When the user agent is to start a presentation connection, it MUST run the following steps:
- Input
-
presentationRequest, the
PresentationRequestthat is used to start the presentation connection - D, the selected presentation display
- P, an optional Promise that will be resolved with a new presentation connection
- Let I be a new valid presentation identifier unique among all presentation identifiers for known presentation connections in the set of controlled presentations. To avoid fingerprinting, implementations SHOULD set the presentation identifier to a UUID generated by following forms 4.4 or 4.5 of [rfc4122].
- Create a new
PresentationConnectionS. - Set the presentation identifier of S to I.
- Let presentationUrls be the presentation request URLs of presentationRequest.
- Set the presentation URL for S to the first presentationUrl in presentationUrls for which there exists an entry (presentationUrl, D) in the list of available presentation displays.
- Set the presentation connection state of S to
connecting. - Add S to the set of controlled presentations.
- If P is provided, resolve P with S.
-
Queue a task to fire a trusted event with the name
connectionavailable, that uses thePresentationConnectionAvailableEventinterface, with theconnectionattribute initialized to S, at presentationRequest. The event must not bubble, must not be cancelable, and has no default action. - Let U be the user agent connected to D.
- If the next step fails, abort all remaining steps and close
the presentation connection S with
erroras closeReason, and a human readable message describing the failure as closeMessage. - Using an implementation specific mechanism, tell U to create a receiving browsing context with D, presentationUrl, and I as parameters.
- Establish a presentation connection with S.
Note
The presentationUrl should name a resource accessible to the local or a remote user agent. This specification defines behavior for presentationUrl using the http or https schemes; behavior for other schemes is not defined by this specification.
6.3.5 Reconnecting to a presentation
When the reconnect method is called, the user agent MUST run the following steps to
reconnect to a presentation:
- Input
-
presentationRequest, the
PresentationRequestobject thatreconnectwas called on - presentationId, a valid presentation identifier
- Output
- P, a Promise
- Let P be a new Promise.
- Return P, but continue running these steps in parallel.
- Search the set of controlled presentations for a
PresentationConnectionthat meets the following criteria:- Its controlling browsing context is the current browsing context
- Its presentation connection state is not
terminated - Its presentation URL is equal to one of the presentation request URLs of presentationRequest
- Its presentation identifier is equal to presentationId
- If such a
PresentationConnectionexists, run the following steps:- Let existingConnection be that
PresentationConnection. - Resolve P with existingConnection.
- If the presentation connection state of
existingConnection is
connectingorconnected, then abort all remaining steps. - Set the presentation connection state of
existingConnection to
connecting. - Establish a presentation connection with existingConnection.
- Abort all remaining steps.
- Let existingConnection be that
- Search the set of controlled presentations for the first
PresentationConnectionthat meets the following criteria:- Its controlling browsing context is not the current browsing context
- Its presentation connection state is not
terminated - Its presentation URL is equal to one of the presentation request URLs of presentationRequest
- Its presentation identifier is equal to presentationId
- If such a
PresentationConnectionexists, run the following steps:- Let existingConnection be that
PresentationConnection. - Create a new
PresentationConnectionnewConnection. - Set the presentation identifier of newConnection to presentationId.
- Set the presentation URL of newConnection to the presentation URL of existingConnection.
- Set the presentation connection state of
newConnection to
connecting. - Add newConnection to the set of controlled presentations.
- Resolve P with newConnection.
-
Queue a task to fire a trusted event with the name
connectionavailable, that uses thePresentationConnectionAvailableEventinterface, with theconnectionattribute initialized to newConnection, at presentationRequest. The event must not bubble, must not be cancelable, and has no default action. - Establish a presentation connection with newConnection.
- Abort all remaining steps.
- Let existingConnection be that
-
Reject P with a
NotFoundErrorexception.
6.3.6 Event Handlers
The following are the event handlers (and their corresponding event handler event types) that must be supported, as event handler IDL attributes, by objects implementing the PresentationRequest interface:
| Event handler | Event handler event type |
|---|---|
onconnectionavailable
|
connectionavailable
|
6.5 Interface PresentationConnection
Each presentation connection is represented by a
PresentationConnection object. Both the controlling user
agent and receiving user agent MUST implement
PresentationConnection.
The id attribute specifies the
presentation connection's presentation identifier.
The url attribute specifies the
presentation connection's presentation URL.
The state attribute represents the
presentation connection's current state. It can take one of the values of PresentationConnectionState depending on the connection state:
-
connectingmeans that the user agent is attempting to establish a presentation connection with the destination browsing context. This is the initial state when aPresentationConnectionobject is created. -
connectedmeans that the presentation connection is established and communication is possible. -
closedmeans that the presentation connection has been closed, or could not be opened. It may be re-opened through a call toreconnect. No communication is possible. -
terminatedmeans that the receiving browsing context has been terminated. Any presentation connection to that presentation is also terminated and cannot be re-opened. No communication is possible.
When the close method is called on a
PresentationConnection S, the user agent
MUST start closing the presentation connection S with closed as
closeReason and an empty message as
closeMessage.
When the terminate method is called on a
PresentationConnection S in a controlling
browsing context, the user agent MUST run the algorithm to terminate a presentation in a controlling browsing
context using S.
When the terminate method is called on a
PresentationConnection S in a receiving
browsing context, the user agent MUST run the algorithm to terminate a presentation in a receiving browsing context using S.
The binaryType attribute can take one of the values of
BinaryType. When a PresentationConnection object is created, its binaryType attribute MUST be set to the string "arraybuffer". On getting, it MUST return the last value it was set to. On setting, the user agent MUST set the attribute to the new value.
Note
The binaryType attribute allows authors to control how binary data is exposed to scripts. By setting the attribute to "
blob", binary data is returned in
Blob form; by setting it to "arraybuffer", it is returned in
ArrayBuffer form. The attribute defaults to "
arraybuffer". This attribute has no effect on data sent in a string form.
When the send method is called on a PresentationConnection S, the
user agent MUST run the algorithm to send a message through S.
When a PresentationConnection object S is discarded (because the document owning it is navigating or is closed) while the presentation connection state of
S is connecting or connected, the user
agent MUST start closing the presentation connection
S with wentaway as
closeReason and an empty closeMessage.
If the user agent receives a signal from the destination
browsing context that a PresentationConnection
S is to be closed, it MUST close the presentation
connection S with closed or wentaway as
closeReason and an empty closeMessage.
6.5.1 Establishing a presentation connection
When the user agent is to establish a presentation connection using a presentation connection, it MUST run the following steps:
- Input
-
presentationConnection, the
PresentationConnectionobject that is to be connected
- If the presentation connection state of
presentationConnection is not
connecting, then abort all remaining steps. - Request connection of presentationConnection to the receiving browsing context. The presentation identifier of presentationConnection MUST be sent with this request.
- If connection completes successfully, queue a task to run the following steps:
- Set the presentation connection state of
presentationConnection to
connected. -
Fire a simple event named
connectat presentationConnection.
- Set the presentation connection state of
presentationConnection to
- If the connection cannot be completed, close the
presentation connection S with
erroras closeReason, and a human readable message describing the failure as closeMessage.
Note
The mechanism that is used to present on the remote display and connect the controlling browsing context with the presented document is an implementation choice of the user agent. The connection must provide a two-way messaging abstraction capable of carrying DOMString and binary payloads in a reliable and in-order fashion as described in the Send a Message and
Receive a Message steps below.
6.5.2 Sending a message through PresentationConnection
Note
No specific transport for the connection between the controlling
browsing context and the receiving browsing context is mandated, except that for multiple calls to send it has to be ensured that messages are delivered to the other end reliably and in sequence. The transport should function equivalently to an
in reliable mode.
RTCDataChannel
Let presentation message data be the payload data to be transmitted between two browsing contexts. Let presentation
message type be the type of that data, one of
text or binary.
When the user agent is to send a message through a presentation connection, it MUST run the following steps:
- Input
- presentationConnection, the presentation connection connected to the other browsing context
- messageOrData, the presentation message data to send to the other browsing context
- If the
stateproperty of presentationConnection is notconnected, throw anInvalidStateErrorexception. - If the closing procedure of presentationConnection has started, then abort these steps.
- Let presentation message type messageType be
binaryif messageOrData is of type ArrayBuffer, ArrayBufferView, orBlob. Let messageType betextif messageOrData is of typeDOMString. - Using an implementation specific mechanism, transmit the contents of messageOrData as the presentation message data and messageType as the presentation message type to the destination browsing context.
- If the previous step encounters an unrecoverable error, then abruptly close the presentation connection
presentationConnection with
erroras closeReason, and a closeMessage describing the error encountered.
Note
To assist applications in recovery from an error sending a message through a presentation connection, the user agent should include details of which attempt failed in closeMessage, along with a human readable string explaining the failure reason. Example renditions of closeMessage:
-
Unable to send text message (network_error): "hello"forDOMStringmessages, where"hello"is the first 256 characters of the failed message. -
Unable to send binary message (invalid_message)for ArrayBuffer, ArrayBufferView andBlobmessages.
Note
When sending a user-visible string via a presentation connection, the page author should take care to ensure that locale information is also propagated so that the destination user agent can know how to best render the string. See the examples for one solution.
6.5.3 Receiving a message through PresentationConnection
When the user agent has received a transmission from the remote side consisting of presentation message data and
presentation message type, it MUST run the following steps to receive a message through a PresentationConnection:
- Input
- presentationConnection, the presentation connection receiving the message
- messageType, the presentation message type of the message
- messageData, the presentation message data of the message
- If the
stateproperty of presentationConnection is notconnected, abort these steps. - Let event be a newly created trusted event that uses the
MessageEventinterface, with the event typemessage, which does not bubble, is not cancelable, and has no default action. - Initialize the event's data attribute as follows:
- If messageType is
text, then initialize event'sdataattribute to messageData with typeDOMString. - If messageType is
binary, andbinaryTypeattribute is set to "blob", then initialize event'sdataattribute to a newBlobobject with messageData as its raw data. - If messageType is
binary, andbinaryTypeattribute is set to "arraybuffer", then initialize event'sdataattribute to a new ArrayBuffer object whose contents are messageData.
- If messageType is
- Queue a task to fire event at presentationConnection.
If the user agent encounters an unrecoverable error while
receiving a message through
presentationConnection, it MUST abruptly close the
presentation connection presentationConnection with
error as
closeReason. It SHOULD use a human readable description of the error encountered as closeMessage.
6.5.4 Interface PresentationConnectionCloseEvent
A PresentationConnectionCloseEvent is fired when a
presentation connection enters a closed state. The reason attribute provides the reason why the connection was closed. It can take one of the values of PresentationConnectionCloseReason:
-
errormeans that the mechanism for connecting or communicating with a presentation entered an unrecoverable error. -
closedmeans that either the controlling browsing context or the receiving browsing context that were connected by thePresentationConnectioncalledclose. -
wentawaymeans that the browser closed the connection, for example, because the browsing context that owned the connection navigated or was discarded.
When the reason attribute is error, the user agent SHOULD set the message attribute to a human readable description of how the communication channel encountered an error.
When the PresentationConnectionCloseEvent constructor is called, the user agent MUST construct a new
PresentationConnectionCloseEvent object, with its reason attribute set to the
reason member of the PresentationConnectionCloseEventInit object passed to the constructor, and its message attribute set to the
message member of this PresentationConnectionCloseEventInit object if set, to an empty string otherwise.
6.5.5 Closing a PresentationConnection
When the user agent is to start closing a presentation connection, it MUST do the following:
- Input
- presentationConnection, the presentation connection to be closed
-
closeReason, the
PresentationConnectionCloseReasondescribing why the connection is to be closed - closeMessage, a human-readable message with details of why the connection was closed
- If the presentation connection state of
presentationConnection is not
connectingorconnectedthen abort the remaining steps. - Set the presentation connection state of
presentationConnection to
closed. - Start to signal to the destination browsing context the intention to close the corresponding
PresentationConnection, passing the closeReason to that context. The user agent does not need to wait for acknowledgement that the correspondingPresentationConnectionwas actually closed before proceeding to the next step. - If closeReason is not
wentaway, then locally run the steps to close the presentation connection with presentationConnection, closeReason, and closeMessage.
When the user agent is to close a presentation connection, it MUST do the following:
- Input
- presentationConnection, the presentation connection to be closed
-
closeReason, the
PresentationConnectionCloseReasondescribing why the connection is to be closed - closeMessage, a human-readable message with details of why the connection was closed.
- If there is a pending close the presentation connection task for presentationConnection, or a close the presentation connection task has already run for presentationConnection, then abort the remaining steps.
-
Queue a task to run the following steps:
- If the presentation connection state of
presentationConnection is not
connecting,connected, orclosed, then abort the remaining steps. - If the presentation connection state of
presentationConnection is not
closed, set it toclosed. - If the presentationConnection was created as a result of monitoring incoming presentation connections in a receiving browsing context, run the following sub-steps.
- Remove presentationConnection from the set of presentation controllers.
- Populate the presentation controllers monitor with the set of presentation controllers.
-
Fire a trusted event with the name
close, that uses thePresentationConnectionCloseEventinterface, with thereasonattribute initialized to closeReason and themessageattribute initialized to closeMessage, at presentationConnection. The event must not bubble, must not be cancelable, and has no default action.
- If the presentation connection state of
presentationConnection is not
6.5.6 Terminating a presentation in a controlling browsing context
When a controlling user agent is to terminate a presentation in a controlling browsing context using connection, it MUST run the following steps:
- If the presentation connection state of
connection is not
connectedorconnecting, then abort these steps. - Otherwise, for each known connection in the set
of controlled presentations in the controlling user
agent:
- If the presentation identifier of known
connection and connection are equal, and the
presentation connection state of known
connection is
connectedorconnecting, then queue a task to run the following steps:- Set the presentation connection state of
known connection to
terminated. -
Fire a simple event named
terminateat known connection.
- Set the presentation connection state of
known connection to
- If the presentation identifier of known
connection and connection are equal, and the
presentation connection state of known
connection is
- Send a termination request for the presentation to its receiving user agent using an implementation specific mechanism.
6.5.7 Terminating a presentation in a receiving browsing context
When any of the following occur, the receiving user agent MUST terminate a presentation in a receiving browsing context:
- The receiving user agent is to unload a document corresponding to the receiving browsing context, e.g. in response to a request to navigate that context to a new resource.
- The user requests to terminate the presentation via the
receiving user agent.
Note
This could happen by an explicit user action, or as a policy of the user agent. For example, the receiving user agent could be configured to terminate presentations whose
PresentationConnectionobjects are all closed for 30 minutes. - A controlling user agent sends a termination request to the receiving user agent for that presentation.
When a receiving user agent is to terminate a presentation in a receiving browsing context, it MUST run the following steps:
- Let P be the presentation to be terminated, let allControllers be the set of presentation controllers that were created for P, and connectedControllers an empty list.
- For each connection in allControllers, run the following steps:
- If the presentation connection state of
connection is
connected, then add connection to connectedControllers. - Set the presentation connection state of
connection to
terminated.
- If the presentation connection state of
connection is
- If there is a receiving browsing context for P, and it has a document for P that is not unloaded, unload a document corresponding to that browsing context, remove that browsing context from the user interface and discard it.
- For each connection in
connectedControllers, queue a task to send a termination confirmation for P using an implementation specific mechanism to the controlling user agent that owns the destination browsing context for connection.
Note
Only one termination confirmation needs to be sent per controlling user agent.
6.5.8 Handling a termination confirmation in a controlling user agent
When a receiving user agent is to send a termination confirmation for a presentation P, and that confirmation was received by a controlling user agent, the controlling user agent MUST run the following steps:
- For each connection in the set of controlled
presentations that was connected to P, queue a
task to run the following steps:
- If the presentation connection state of
connection is not
connectedorconnecting, then abort the following steps. - Set the presentation connection state of
connection to
terminated. -
Fire a simple event named
terminateat connection.
- If the presentation connection state of
connection is not
6.5.9 Event Handlers
The following are the event handlers (and their corresponding event handler event types) that must be supported, as event handler IDL attributes, by objects implementing the
PresentationConnection interface:
| Event handler | Event handler event type |
|---|---|
onmessage
|
message
|
onconnect
|
connect
|
onclose
|
close
|
onterminate
|
terminate
|
6.6 Interface PresentationReceiver
The PresentationReceiver interface allows a receiving
browsing context to access the controlling browsing contexts and communicate with them. The PresentationReceiver interface MUST be implemented in a receiving browsing context provided by a
receiving user agent.
On getting, the connectionList attribute MUST return the result of running the following steps:
- If the presentation controllers promise is not
null, return the presentation controllers promise and abort all remaining steps. - Otherwise, let the presentation controllers promise be a new Promise constructed in the JavaScript realm of this
PresentationReceiverobject. - Return the presentation controllers promise.
- If the presentation controllers monitor is not
null, resolve the presentation controllers promise with the presentation controllers monitor.
6.6.1 Creating a receiving browsing context
When the user agent is to create a receiving browsing context, it MUST run the following steps:
- Input
- D, a presentation display chosen by the user
- presentationUrl, the presentation request URL
- presentationId, the presentation identifier
- Create a new top-level browsing context C, set to display content on D.
- Set the session history of C to be the empty list.
- Set the sandboxed top-level navigation browsing context flag, the sandboxed modals flag, and the sandboxed auxiliary navigation browsing context flag on C.
- If the receiving user agent implements [PERMISSIONS], set the permission state of all permission descriptor
types for C to
"denied". - Create a new empty cookie store for C.
- Create a new empty store for C to hold HTTP authentication states.
- Create a new empty application cache storage for C.
- If the receiving user agent implements [INDEXEDDB], create a new empty storage for IndexedDB databases for C.
- If the receiving user agent implements [WEBSTORAGE], create a new empty storage for session storage areas and local storage areas for C.
- If the receiving user agent implements [ SERVICE-WORKERS], create a new empty list of registered service worker registrations and a new empty caches for C.
- Navigate C to presentationUrl.
- Start monitoring incoming presentation connections for C with presentationId and presentationUrl.
All nested browsing contexts created by the presented document, i.e. that have the receiving browsing context as their top-level browsing context, MUST also have restrictions 2-4 above. All of these browsing contexts MUST also share the same browsing state (storage) for features 5-10 listed above.
Window clients and worker clients associated with the receiving browsing context and its list of descendant browsing contexts must not be exposed to service workers associated with each other.
When the receiving browsing context is terminated, any service workers associated with it and the browsing contexts in its list of descendant browsing contexts MUST be unregistered and terminated. Any browsing state associated with the receiving browsing context and the browsing contexts in its list of descendant browsing contexts, including session history, the cookie store, any HTTP authentication state, the application cache, any databases, the session storage areas, the local storage areas, the list of registered service worker registrations and the caches MUST be discarded and not used for any other browsing context.
Note
This algorithm is intended to create a well defined environment to allow interoperable behavior for 1-UA and 2-UA presentations, and to minimize the amount of state remaining on a presentation display used for a 2-UA presentation.
The receiving user agent SHOULD fetch resources in a receiving browsing context with an HTTP Accept-Language header that reflects the language preferences of the controlling user agent (i.e., with the same Accept-Language that the controlling user agent would have sent). This will help the receiving user agent render the presentation with fonts and locale-specific attributes that reflect the user's preferences.
Note
Given the operating context of the presentation display, some Web APIs will not work by design (for example, by requiring user input) or will be obsolete (for example, by attempting window management); the receiving user agent should be aware of this. Furthermore, any modal user interface will need to be handled carefully. The sandboxed modals flag is set on the receiving browsing context to prevent most of these operations.
6.7 Interface PresentationConnectionList
The connections attribute
MUST return the non-terminated set of presentation connections in the set of presentation controllers.
6.7.1 Monitoring incoming presentation connections
When the receiving user agent is to start monitoring incoming presentation connections in a receiving browsing context from controlling browsing contexts, it MUST listen to and accept incoming connection requests from a controlling browsing context using an implementation specific mechanism. When a new connection request is received from a controlling browsing context, the receiving user agent MUST run the following steps:
- Input
- I, the presentation identifier passed by the controlling browsing context with the incoming connection request
- presentationId, the presentation identifier used to create the receiving browsing context
- presentationUrl, the presentation request URL used to create the receiving browsing context
- If presentationId and I are not equal, refuse the connection and abort all remaining steps.
- Create a new
PresentationConnectionS. - Set the presentation identifier of S to I.
- Set the presentation URL of S to presentationUrl.
- Establish the connection between the controlling and receiving browsing contexts using an implementation specific mechanism.
- If connection establishment completes successfully, set the
presentation connection state of S to
connected. Otherwise, set the presentation connection state of S toclosedand abort all remaining steps. - Add S to the set of presentation controllers.
- If the presentation controllers monitor is
null, run the following steps in parallel.- Let the presentation controllers monitor be a new
PresentationConnectionListconstructed in the JavaScript realm of thePresentationReceiverobject of the receiving browsing context. - Populate the presentation controllers monitor with the set of presentation controllers.
- If the presentation controllers promise is not
null, resolve the presentation controllers promise with the presentation controllers monitor. - Abort all remaining steps.
- Let the presentation controllers monitor be a new
- Otherwise, run the following steps in parallel.
- Populate the presentation controllers monitor with the set of presentation controllers.
-
Queue a task to fire a trusted event with the name
connectionavailable, that uses thePresentationConnectionAvailableEventinterface, with theconnectionattribute initialized to S, at the presentation controllers monitor. The event must not bubble, must not be cancelable, and has no default action.
6.7.2 Event Handlers
The following are the event handlers (and their corresponding event handler event types) that must be supported, as event handler IDL attributes, by objects implementing the
PresentationConnectionList interface:
| Event handler | Event handler event type |
|---|---|
onconnectionavailable
|
connectionavailable
|
7. Security and privacy considerations
This section is non-normative.
7.1 Personally identifiable information
The change event fired on the PresentationAvailability object reveals one bit of information about the presence or absence of a presentation display, often discovered through the browser's local area network. This could be used in conjunction with other information for fingerprinting the user. However, this information is also dependent on the user's local network context, so the risk is minimized.
The API enables monitoring the list of available presentation displays. How the user agent determines the compatibility and availability of a presentation display with a given URL is an implementation detail. If a controlling user agent matches a presentation request URL to a DIAL application to determine its availability, this feature can be used to probe information about which DIAL applications the user has installed on the presentation display without user consent.
7.2 Cross-origin access
A presentation is allowed to be accessed across origins; the presentation URL and presentation identifier used to create the presentation are the only information needed to reconnect to a presentation from any origin in the controlling user agent. In other words, a presentation is not tied to a particular opening origin.
This design allows controlling contexts from different origins to connect to a shared presentation resource. The security of the presentation identifier prevents arbitrary origins from connecting to an existing presentation.
This specification also allows a receiving user agent to publish information about its set of controlled presentations, and a controlling user agent to reconnect to presentations started from other devices. This is possible when the controlling
browsing context obtains the presentation URL and
presentation identifier of a running presentation from the user, local storage, or a server, and then connects to the presentation via reconnect.
This specification makes no guarantee as to the identity of any party connecting to a presentation. Once connected, the presentation may wish to further verify the identity of the connecting party through application-specific means. For example, the presentation could challenge the controller to provide a token via send that the presentation uses to verify identity and authorization.
7.3 User interface guidelines
- Origin display
-
When the user is asked permission to use a presentation display during the steps to select a presentation display, the controlling user agent should make it clear what origin is requesting presentation and what origin will be presented.
Display of the origin requesting presentation will help the user understand what content is making the request, especially when the request is initiated from a nested browsing context. For example, embedded content may try to convince the user to click to trigger a request to start an unwanted presentation.
The sandboxed top-level navigation browsing context flag is set on the receiving browsing context to enforce that the top-level origin of the presentation remains the same during the lifetime of the presentation.
- Cross-device access
-
When a user starts a presentation, the user will begin with exclusive control of the presentation. However, the Presentation API allows additional devices (likely belonging to distinct users) to connect and thereby control the presentation as well. When a second device connects to a presentation, it is recommended that all connected controlling user agents notify their users via the browser chrome that the original user has lost exclusive access, and there are now multiple controllers for the presentation.
In addition, it may be the case that the receiving user agent is capable of receiving user input, as well as acting as a presentation display. In this case, the receiving user agent should notify its user via browser chrome when a receiving browsing context is under the control of a remote party (i.e., it has one or more connected controllers).
7.4 Device Access
The presentation API abstracts away what "local" means for displays, meaning that it exposes network-accessible displays as though they were directly attached to the user's device. The Presentation API requires user permission for a page to access any display to mitigate issues that could arise, such as showing unwanted content on a display viewable by others.
7.5 Temporary identifiers and browser state
The presentation URL and presentation identifier can be used to connect to a presentation from another browsing context. They can be intercepted if an attacker can inject content into the controlling page.
7.6 Private browsing mode and clearing of browsing data
The content displayed on the presentation is different from the controller. In particular, if the user is logged in in both contexts, then logs out of the controlling browsing context, she will not be automatically logged out from the receiving browsing context. Applications that use authentication should pay extra care when communicating between devices.
The set of presentations known to the user agent should be cleared when the user requests to "clear browsing data."
When in private browsing mode ("incognito"), the initial set of controlled presentations in that browsing session must be empty. Any presentation connections added to it must be discarded when the session terminates.
7.7 Messaging between presentation connections
This spec will not mandate communication protocols between the controlling browsing context and the receiving browsing context, but it should set some guarantees of message confidentiality and authenticity between corresponding presentation connections.
A. Acknowledgments
Thanks to Addison Phillips, Anne Van Kesteren, Anssi Kostiainen, Anton Vayvod, Chris Needham, Christine Runnegar, Daniel Davis, Domenic Denicola, Erik Wilde, François Daoust, 闵洪波 (Hongbo Min), Hongki CHA, Hubert Sablonnière, Hyojin Song, Hyun June Kim, Jean-Claude Dufourd, Joanmarie Diggs, Jonas Sicking, Louay Bassbouss, Mark Watson, Martin Dürst, Matt Hammond, Mike West, Mounir Lamouri, Nick Doty, Oleg Beletski, Philip Jägenstedt, Richard Ishida, Shih-Chiang Chien, Takeshi Kanai, Tobie Langel, Tomoyuki Shimizu, Travis Leithead, and Wayne Carr for help with editing, reviews and feedback to this draft.
AirPlay, HDMI, Chromecast, DLNA and Miracast are registered trademarks of Apple Inc., HDMI Licensing LLC., Google Inc., the Digital Living Network Alliance, and the Wi-Fi Alliance, respectively. They are only cited as background information and their use is not required to implement the specification.
B. Candidate Recommendation exit criteria
For this specification to be advanced to Proposed Recommendation, there must be, for each of the conformance classes it defines (controlling user agent and receiving user agent), at least two independent, interoperable implementations of each feature. Each feature may be implemented by a different set of products, there is no requirement that all features be implemented by a single product. Additionally, implementations of the controlling user agent conformance class must include at least one implementation of the 1-UA mode, and one implementation of the 2-UA mode. 2-UA mode implementations may only support non http/https presentation URLs. Implementations of the receiving user agent conformance class may not include implementations of the 2-UA mode.
The API was recently restricted to secure contexts. Deprecation of the API in non secure contexts in early implementations takes time. The group may request transition to Proposed Recommendation with implementations that still expose the API in non secure contexts, provided there exists a timeline to restrict these implementations in the future.
For the purposes of these criteria, we define the following terms:
- Independent
- Each implementation must be developed by a different party, and cannot share, reuse, or derive from code used by another qualifying implementation. Sections of code that have no bearing on the implementation of this specification are exempt from this requirement.
- Interoperable
- Passing the respective test case(s) in the official test suite.
- Implementation
-
A user agent which:
- implements one of the conformance classes of the specification.
- is available to the general public. The implementation may be a shipping product or other publicly available version (i.e., beta version, preview release, or "nightly build"). Non-shipping product releases must have implemented the feature(s) for a period of at least one month in order to demonstrate stability.
- is not experimental (i.e. a version specifically designed to pass the test suite and not intended for normal usage going forward).
C. Change log
This section is non-normative.
This section lists changes made to the spec since it was first published as Candidate Recommendation in July 2016, with links to related issues on the group's issue tracker.
C.1 Changes since 14 July 2016
- Fixed document license (#428)
- Updated termination algorithm to also discard the receiving browsing context and allow termination in a connecting state (#421, #423)
- Dropped sandboxing section, now integrated in HTML (#437 in the Web Platform Working Group issue tracker)
- Relaxed exit criteria to match known implementations plans (#406)
- The sandboxed top-level navigation browsing context flag and the sandboxed modals flag are now set on the receiving browsing context to prevent top-level navigation and the ability to spawn new browsing contexts (#414)
- Moved sandboxing flag checks to PresentationRequest constructor (#379, #398)
- Updated normative references to target stable specifications (#295, #396)
- Made display selection algorithm reject in ancestor and descendant browsing context (#394)
- Renamed PresentationConnectionClosedReason to PresentationConnectionCloseReason (#393)
- Fixed getAvailability and monitoring algorithms (#335, #381, #382, #383, #387, #388, #392)
- Assigned correct JavaScript realm to re-used objects (#391)
- API now restricted to secure contexts (#380)
- Set the state of receiving presentation connections to terminated before unload (#374)
- Defined environment for nested contexts of the receiving browsing context (#367)
- Removed [SameObject] from Presentation.receiver and PresentationReceiver.connectionList (#365, #407)
- Replaced DOMString with USVString for PresentationRequest URLs (#361)
- Added a presentation task source for events (#360)
- Changed normative language around UUID generation (#346)
- Added failure reason to close message (#344)
- Added error handling to establish a presentation connection algorithm (#343)
- Made navigator.presentation mandatory (#341)
- Used current settings object in steps that require a settings object (#336)
- Updated security check step to handle multiple URLs case (#329)
- Made PresentationConnection.id mandatory (#325)
- Renamed PresentationConnectionClosedEvent to PresentationConnectionCloseEvent (#324)
- Added an implementation note for advertising and rendering a user friendly display name (#315)
- Added note for presentation detection (#303)
- Various editorial updates (#334, #337, #339, #340, #342, #345, #359, #363, #366, #397)
D. References
D.1 Normative references
- [COOKIES]
- HTTP State Management Mechanism. A. Barth. IETF. April 2011. Proposed Standard. URL: https://tools.ietf.org/html/rfc6265
- [DOM]
- DOM Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
- [ECMASCRIPT]
- ECMAScript Language Specification. Ecma International. URL: https://tc39.github.io/ecma262/
- [FILEAPI]
- File API. Arun Ranganathan; Jonas Sicking. W3C. 21 April 2015. W3C Working Draft. URL: https://www.w3.org/TR/FileAPI/
- [HTML51]
- HTML 5.1. Steve Faulkner; Arron Eicholz; Travis Leithead; Alex Danilo. W3C. 1 November 2016. W3C Recommendation. URL: https://www.w3.org/TR/html51/
- [HTML52]
- HTML 5.2. Steve Faulkner; Arron Eicholz; Travis Leithead; Alex Danilo; Sangwhan Moon. W3C. 6 April 2017. W3C Working Draft. URL: https://www.w3.org/TR/html52/
- [INDEXEDDB]
- Indexed Database API. Nikunj Mehta; Jonas Sicking; Eliot Graff; Andrei Popescu; Jeremy Orlow; Joshua Bell. W3C. 8 January 2015. W3C Recommendation. URL: https://www.w3.org/TR/IndexedDB/
- [MIXED-CONTENT]
- Mixed Content. Mike West. W3C. 2 August 2016. W3C Candidate Recommendation. URL: https://www.w3.org/TR/mixed-content/
- [PERMISSIONS]
- The Permissions API. Mounir Lamouri; Marcos Caceres. W3C. 7 April 2015. W3C Working Draft. URL: https://www.w3.org/TR/permissions/
- [PROMGUIDE]
- Writing Promise-Using Specifications. Domenic Denicola. W3C. finding. URL: http://www.w3.org/2001/tag/doc/promises-guide
- [RFC2119]
- Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
- [SERVICE-WORKERS]
- Service Workers 1. Alex Russell; Jungkee Song; Jake Archibald; Marijn Kruisselbrink. W3C. 11 October 2016. W3C Working Draft. URL: https://www.w3.org/TR/service-workers-1/
- [URL]
- URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
- [WEBIDL-2]
- Web IDL. Cameron McCormack; Boris Zbarsky; Tobie Langel. W3C. 15 December 2016. W3C Editor's Draft. URL: https://heycam.github.io/webidl/
- [WEBMESSAGING]
- HTML5 Web Messaging. Ian Hickson. W3C. 19 May 2015. W3C Recommendation. URL: https://www.w3.org/TR/webmessaging/
- [WEBSTORAGE]
- Web Storage (Second Edition). Ian Hickson. W3C. 19 April 2016. W3C Recommendation. URL: https://www.w3.org/TR/webstorage/
- [rfc4122]
- A Universally Unique IDentifier (UUID) URN Namespace. P. Leach; M. Mealling; R. Salz. IETF. July 2005. Proposed Standard. URL: https://tools.ietf.org/html/rfc4122
- [rfc7231]
- Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. R. Fielding, Ed.; J. Reschke, Ed.. IETF. June 2014. Proposed Standard. URL: https://tools.ietf.org/html/rfc7231
- [rfc7235]
- Hypertext Transfer Protocol (HTTP/1.1): Authentication. R. Fielding, Ed.; J. Reschke, Ed.. IETF. June 2014. Proposed Standard. URL: https://tools.ietf.org/html/rfc7235
D.2 Informative references
- [DIAL]
- DIscovery And Launch Protocol Specification. Netflix; YouTube. Netflix. URL: http://www.dial-multiscreen.org/dial-protocol-specification
- [HTML]
- HTML Standard. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
- [WEBIDL]
- Web IDL. Cameron McCormack; Boris Zbarsky; Tobie Langel. W3C. 15 December 2016. W3C Editor's Draft. URL: https://heycam.github.io/webidl/
- [WEBIDL-LS]
- Web IDL. Cameron McCormack; Boris Zbarsky; Tobie Langel. W3C. 15 December 2016. W3C Editor's Draft. URL: https://heycam.github.io/webidl/
- [WEBRTC]
- WebRTC 1.0: Real-time Communication Between Browsers. Adam Bergkvist; Daniel Burnett; Cullen Jennings; Anant Narayanan; Bernard Aboba. W3C. 13 March 2017. W3C Working Draft. URL: https://www.w3.org/TR/webrtc/