diff --git a/20131112/index.html b/20131112/index.html index 05601ff..32726fb 100644 --- a/20131112/index.html +++ b/20131112/index.html @@ -98,7 +98,13 @@

Draft Report 12 November 2013

- +
@@ -106,13 +112,20 @@

Draft Report 12 November 2013

Abstract

-This document standardizes access to external presentation type -displays for web applications. +

This specification defines an API to enable web content to access external + presentation-type displays and use them for presenting web content.

+

Status of this Document

-This document is a draft to collect feedback on the general -approach and intended to be published by the Second Screen Presentation Community Group. +

This specification was published by +the Second Screen Presentation +Community Group. It is not a W3C Standard nor is it on the W3C Standards +Track. Please note that under the +W3C Community +Contributor License Agreement (CLA) there is a limited opt-out and other +conditions apply. Learn more about W3C +Community and Business Groups.

-

Presentation API

-

(Draft of) Final Report [DATE]

- -
-
This Version: -
http://webscreens.github.io/presentation-api/
- -
Latest Published Version
-
http://webscreens.github.io/presentation-api/
- -
Previous Version:
-
http://webscreens.github.io/presentation-api/20131112/
- -
Participate:
-
Send feedback to the community group's mailing - list public-webscreens@w3.org, - or create or browse open issues on GitHub. Also, - you may join on the CG's IRC channel. - -
Version History: -
https://github.com/webscreens/presentation-api/commits/
- -
Editors: -
Dominik Röttsches, Intel
-
闵洪波 (Hongbo Min), Intel
-
- - - - -
- - - - -

Abstract

-This document standardizes access to external presentation type -displays for web applications. - -

Status of this Document

- -This document is a draft to collect feedback on the general -approach and intended to be published by the Second Screen Presentation Community Group. - - - - - - - -

Table of Contents

- - -

Introduction

- -This section is non-normative. - -

This specification aims to make secondary displays such as a projector or a connected TV available to the web and -takes into account displays that are attached using wired (HDMI, DVI or similar) and wireless technologies (MiraCast, DLNA, -AirPlay or similar).

- -

Devices with limited screen size lack the ability to show content -to a larger audience, for example a group of colleagues in a -conference room, or friends and family at home. Showing content on an -external large display helps to improve the perceived quality and -impact of the presented content.

- -

It is the intention of this specification that the user agent prepares a rendering for the secondary display in a way - that is adapted to the secondary display's capabilities. The DOM state and the rendering shown on the primary and - secondary display are maintained and perfomend by the same user agent. There is no secondary user agent involved - that would run remotely on the secondary display.

- -

The user agent creates two browsing contexts, one on the primary display, one on the selected presentation - display. It is responsible for sending the rendered output to the secondary display. For wirelessly connected - displays this may mean that the user agent prepares a video stream from the rendering output that is sent over the - network to the wireless display.

- -

The trend in user agent implementations has been to avoid opening -multiple separate windows and containing window management to tabs, -which helps the user to organize multiple pages. However, the -following example use cases fall outside the regular -management of multiple windows for web pages.

- -

Use Cases

- -

Presentations

- -

A user is preparing a set of slides for a talk. Using a web based -service, she is editing her slides and speaker notes on the primary -screen, while the secondary larger screen shows a preview of the -current slide. When the slides are done, her mobile phone allows her -to access them from an online service while on the go. Coming -to the conference, using wireless display technology, she would like -to present her slides on the stage screen from her mobile phone. The -phone's touch screen helps her to navigate slides and presents a slide -preview, while the projector shows her slides to -the audience.

- -

Video and Image Sharing

- -

Using an online video or image sharing service, a user would like to show memorable moments to her friends. Using a -device with a small screen, it is impossible to show the content to a large group of people. Connecting an external TV -screen or projector to her device - with a cable or wirelessly - the online sharing service now makes use of the -connected display, allowing a wider audience to enjoy the content.

- -

Gaming

- -

Splitting the gaming experience into a near screen controller and a -large screen visual experience, new gaming experiences can be -created. Accessing the local display on the small screen device and an -external larger display allows for richer web-based gaming -experiences.

- -

Example

- -

Running in a compliant user agent, code for playing a video on the presentation display could look like the following:

+ + + +
+ +

+ Presentation API +

+

+ Final Report [DATE] +

+
+
+ This Version: +
+
+ http://webscreens.github.io/presentation-api/ + +
+
+ Latest Published Version +
+
+ http://webscreens.github.io/presentation-api/ + +
+
+ Previous Version: +
+
+ http://webscreens.github.io/presentation-api/20131112/ +
+
+ Participate: +
+
+ Send feedback to the community group's mailing list public-webscreens@w3.org, + or create or + browse open issues on GitHub. Also, you may join on the CG's IRC channel. +
+
+ Version History: +
+
+ https://github.com/webscreens/presentation-api/commits/ +
+
+ Editors: +
+
+ Dominik Röttsches, + Intel +
+
+ +
+
+

+ Abstract +

+

+ This specification defines an API to enable web content to access + external presentation-type displays and use them for presenting web + content. +

+

+ Status of this Document +

+

+ This specification was published by the Second Screen Presentation + Community Group. It is not a W3C Standard nor is it on the W3C + Standards Track. Please note that under the W3C Community Final + Specification Agreement (FSA) other conditions apply. Learn more + about W3C Community and Business + Groups. +

+

+ This report documents the use cases, requirements, examples and + interfaces needed to enable web pages to display web content on secondary + screens. It is an evolved version of the initial + Presentation API that represents the result of discussions within the + Second Screen Presentation Community Group so far. API semantics still + need to be specified. The report may serve as starting point for a + possible Working Group chartered to work on the same topic. +

+

+ Table of Contents +

+

+ Introduction +

This section is non-normative. +

+ This specification aims to make secondary displays such as a projector or + a connected TV available to the web and 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 content to a + larger audience, for example a group of colleagues in a conference room, + or friends and family at home. Showing content on an external large + display helps to improve the perceived quality and impact of the + presented content. +

+

+ Use Cases +

+

+ Presentations +

+

+ A user is preparing a set of slides for a talk. Using a web based + service, she is editing her slides and speaker notes on the primary + screen, while the secondary larger screen shows a preview of the current + slide. When the slides are done, her mobile phone allows her to access + them from an online service while on the go. Coming to the conference, + using wireless display technology, she would like to present her slides + on the stage screen from her mobile phone. The phone's touch screen helps + her to navigate slides and presents a slide preview, while the projector + shows her slides to the audience. +

+

+ Requirements: R1, R3, R4, R5, R7 +

+

+ Video and Image Sharing +

+

+ Using an online video or image sharing service, a user would like to show + memorable moments to her friends. Using a device with a small screen, it + is impossible to show the content to a large group of people. Connecting + an external TV screen or projector to her device - with a cable or + wirelessly - the online sharing service now makes use of the connected + display, allowing a wider audience to enjoy the content. +

+

+ The web page shows UI elements that allow the user to trigger displaying + content on the secondary display (e.g a "send to second screen" ) only if + there is at least one secondary screen available. +

+

+ Requirements: R1, R3, R4, R5, R7 +

+

+ Gaming +

+

+ Splitting the gaming experience into a near screen controller and a large + screen visual experience, new gaming experiences can be created. + Accessing the local display on the small screen device and an external + larger display allows for richer web-based gaming experiences. +

+

+ Requirements: R1, R3, R4, R5, R7 +

+

+ Media Flinging to Multiple Screens +

Alice enters a video sharing site using a browser on her tablet. Next, + Alice picks her favorite video from the site, and the video starts to play + on her tablet. While the video is playing Alice clicks a button "Share on + different screen". The browser provides a user interface that lists all the + screens Alice has around her home, asking her to select one. The screens + are identified by names that are familiar to Alice. Alice picks one screen + from the list, "Alice's big TV", and the video playback continues + seamlessly on the selected screen. Next she decides to switch the playback + to a different screen. She clicks the same button "Share on different + screen" provided by the site, and the browser presents the user interface + that lists all the screens. Alice picks another screen from the list, + "Alice's kitchen TV", and the playback resumes on that screen. Video site + also provides a feature to see the action (Alice is watching a soccer game) + from different angle. Alice clicks a button "Select screen for additional + angle", and the browser asks Alice similarly to select the screen to be + used for playback. Alice picks "Alice's Projector" and the soccer game is + shown on the projector from a different angle, in parallel to the content + being played back on "Alice's kitchen TV". +

+ Requirements: R1, R3, R4, R5, R6, R7 +

+

+ Requirements +

+

+ Functional Requirements +

+ +

+ Multi-Screen enumeration and named identification removed, after + discussion on the mailing list, cmp. + http://lists.w3.org/Archives/Public/public-webscreens/2014Feb/0021.html : +

+ + +

+ Non-Functional Requirements +

+ +

+ Conformance +

+

+ All diagrams, examples, and notes in this specification are + non-normative, as are all sections explicitly marked non-normative. + Everything else in this specification is normative. +

+

+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in RFC + 2119. For readability, these words do not appear in all uppercase letters + in this specification. 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 end result is equivalent. (In + particular, the algorithms defined in this specification are intended to + be easy to follow, and not intended to be performant.) +

+

+ Terminology +

+

+ The term presentation display + refers to an external screen connected to the device that the user agent + runs on. +

+

+ The terms event handlers and + event + handler event types are defined in HTML5. +

+

+ This document provides interface definitions using the + WEBIDL standard. +

+

+ Example +

+

+ Running in a compliant user agent, code for presenting a page + example.html on the presentation display looks as follows: +

+
+/* controller.html */
 
-
-/* player.html */
+<button disabled>Show</button>
 
-<video>
 <script>
-var v = document.querySelector('video');
-
-window.onmessage = function (event) {
-  v.src = event.data;
-  v.play();
+var presentation = navigator.presentation,
+    showButton = document.querySelector('button');
+ 
+presentation.onavailablechange = function(e) {
+  showButton.disabled = !e.available;
+  showButton.onclick = show;
 };
-</script>
-
- -
-/* controller.html */
-
-<script>
-function playVideo() {
-  if (!navigator.presentation.displayAvailable)
-    return;
-  var p = navigator.presentation.requestShow('player.html');
-  p.then(function (display) { display.postMessage('http://example.org/video.mp4', '/'); },
-         function (error) { console.log('Request to show failed: ' + error.msg); }
-  );
+ 
+function show() {
+  var session = presentation.requestSession('http://example.org/');
+ 
+  session.onstatechange = function() {
+    switch (session.state) {
+      case 'connected':
+        session.postMessage(/*...*/);
+        session.onmessage = function() { /*...*/ };
+        break;
+      case 'disconnected':
+        console.log('Disconnected.');
+        break;
+    }
+  };
 }
-
-playVideo();
-
 </script>
 
- -

In this example of a video player scenario similar to the video sharing use case - presented above, the opener browsing context loads a document into the presentation browsing context which has a - video element in it and communicates with it through postMessage. The document of the presentation - browsing context receives the commands and for example sets the src attribute of the video and starts - playing it.

- -

The example uses postMessage for communication between opener and auxiliary browsing context in order to -encourage the use of asynchronous, potentially cross-origin communication between the two contexts. Direct access to -properties of the document object in the auxiliary browsing context is an alternative option in case the -documents are loaded from the same origin.

- -
-<script>
-
-/* Monitoring availability */
-navigator.presentation.ondisplayavailablechange = function() {
-  /* For example: Enable/Disable UI to show content on presentation display here. */
-  var availability = navigator.presentation.displayAvailable ? "available" : "unavailable";
-  console.log("Presentation display is now " + availability + ".");
-}
-
-</script>
+    

+ The availability monitoring for secondary screens begins when the page + adds an event listener for the availablechange event on the + navigator.presentation object. If there are already + available screens when the page adds the first event listener for the + event, the UA synthesizes a single availablechange event to signal the + availability. +

+

+ Do we want to fire an event immediately after the page registers for it? + What's a best practice method for asynchronous notifications of ths kind? + See below in the Open Questions section. +

+

+ The "Show" button's state (initially disabled) informs the user of the + availability of secondary screen(s), and the button's state is updated if + the availability changes. (The rationale of putting the actual boolean + information into a property of the event e.available is to + allow the implementation to optimize power consumption for network + discovery of remote wireless screens. If this information was provided in + a globally accessible flag, the network discovery could never be + suspended for keeping the flag up to date.) +

+

+ Once the user clicks the "Show" button, the show() function + is called. +

+

+ By calling navigator.presentation.requestSession(url), the + script on the page tries to launch or resume a presentation on a + secondary screen. Based on the url argument, the UA looks + for existing sessions and available screens, and presents a screen picker + user interface to the user. Out of the list of existing sessions or + available screens the user selects one item. If an existing session was + selected, the session is resumed by establishing a communication channel. + If a new screen was selected, the UA connects to the selected screen, + brings up a new window on the selected screen, starts to show the content + denoted by the url argument, and the UA establishes a communication + channel with this window. +

+

+ When the navigator.presentation.requestSession(url) function + is called, the UA immediately returns a session object to + the script which represents a handle to the current presentation session, + used for communication and state handling. +

+

+ If the user has selected a screen, the content is shown and a + communication channel was established, the state of the session object + changes from "disconnected" to "connected", + which signals the presentation session is up and running, and the opener + page can communicate with the presentation page. For communication with + the presentation page, the session object's postMessage() is + used to send, and the onmessage event handler to receive + messages. +

+

+ If the user cancels the screen selection and never selects a screen, no + state transition happens and the session object remains in + the "disconnected" state. +

+

+ Open Questions +

+

+ Do we need to insert into the description an additional permission prompt + to grant the page access to the "one ore more screens are available" + Information? +

+

+ If there are already connected screens when the page subscribes to the + onavailablechange event, we can handle this in two ways: We + can synthesize one initial event to notify the page about available + screens as soon as the first event handler is installed (as described). + Or we can add another message like + navigator.presentation.getAvailable(function(available) { } + ); to notify the page about available screens using this one-time + asynchronous getter. Which way should we go? +

+

+ Do we need an additional state like resumed in order to identify resumed + session? It seems that this could be handled on the page level. The + opener page could ask the presentation page whether it is + "new" or "resumed". +

+

+ Usage on Remote Screen +

For addressing the requirement of communication between originating + page and presentation page/screen, we can now use the same + session object on the remote side. +
+navigator.presentation.onpresent = function(e) {
+  // Communicate with opener page.
+  e.session.postMessage(/*...*/);
+  e.session.onmessage = function() {/*...*/};
+
+  e.session.onstatechange = function() {
+    switch (this.state) {
+      case "disconnected":
+        // Handle disconnection from opener page.
+    }
+  };
+};
 
+

+ When the content denoted by the url argument in the + requestSession() example above is loaded, the page on the + presentation screen receives a PresentEvent, with a + session property representing the session. This session is a + similar object as in the first example. Here, its initial state is + "connected", which means we can use it to communicate with + the opener page using postMessage() and + onmessage. +

+

+ We can also monitor the connection state by listening for + statechange events. When the state changes to + "disconnected" the page is made aware of the fact that + communication with the opener page was lost, but it can continue to + display the current content. The communication can be re-established when + a new present event fires on the navigator.presentation + object. +

+

+ Interfaces +

+

+ The interfaces described herein address the requirements outlined in the + Use Cases section, and specifically, also + consider the Media Flinging + to Multiple Screens use case unaddressed by the previous version of the Presentation API. This + section describes the interfaces to the extend discussed in the Second + Screen Presentation Community Group. Readers are encouraged to consult + the Example section together with this section for + a more complete understanding of the technical parts of this + specification. +

+

+ NavigatorPresentation +

+
+interface NavigatorPresentation : EventTarget {
+  PresentationSession requestSession(DOMString url);
+  attribute EventHandler onavailablechange;
+  attribute EventHandler onpresent;
+};
 
-

This example demonstrates the auxiliary use case of monitoring for available secondary displays in order to keep the - UI consistent. The displayavailablechange event informs about displays appearing or disappearing and - allows the client of the API to update page content accordingly.

- -

Conformance

-

All diagrams, examples, and notes in this specification are -non-normative, as are all sections explicitly marked non-normative. -Everything else in this specification is normative. - -

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", -"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and -"OPTIONAL" in this document are to be interpreted as described in RFC 2119. -For readability, these words do not appear in all uppercase letters in this -specification. 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 end result is -equivalent. (In particular, the algorithms defined in this -specification are intended to be easy to follow, and not intended to -be performant.) - -

Terminology

- -

The term presentation display refers to an external screen connected to the device that the user agent runs on.

- -

The terms opener browsing context - and auxiliary browsing context are defined - in HTML5. - -

The terms event handlers - and event handler event types are - defined in HTML5.

- -

The Promises model and the concept of event firing are defined in - the DOM living standard.

- -

This document provides interface definitions using the WEBIDL standard. - -

The basic fetch algorithm is defined in - FETCH. - -

Presentation Extension to Navigator

-
 partial interface Navigator {
-  readonly attribute Presentation presentation;
-
+  readonly attribute NavigatorPresentation presentation;
 };
 
+

+ AvailableChangeEvent +

+

+ Fired at the primary screen's NavigatorPresentation object, + when screen availability changes. +

+
+[Constructor(DOMString type, optional AvailableChangeEventInit eventInitDict)]
+interface AvailableChangeEvent : Event {
+  readonly attribute boolean available;
+};
 
-

Presentation Interface

- -
-interface Presentation : EventTarget {
-  Promise requestShow(optional DOMString url = "about:blank");
-
-  readonly attribute boolean displayAvailable;
-  attribute EventHandler ondisplayavailablechange;
+dictionary AvailableChangeEventInit : EventInit {
+  boolean available;
 };
 
+

+ PresentEvent +

Fired at the secondary screen's NavigatorPresentation + object, when the presentation session is established. +
+[Constructor(DOMString type, optional PresentEventInit eventInitDict)]
+interface PresentEvent : Event {
+  readonly attribute PresentationSession session;
+};
 
-
-
requestShow
-

Method to request opening and showing a new browsing - context on the selected presentation display.

-

Parameters:

-
-
optional DOMString url
-
URL of the page that is to be loaded in the new browsing context.
-
-

Returns:

-
-
Promise
-

Promise that is fulfilled when the request was successful, - rejected if it failed.

-
-
-
displayAvailable
-

A boolean flag to indicate the secondary display availability in the UA. Updated when the display availability changes. - True if there is at least one available secondary display for the mentioned use - cases, false otherwise.

-
-
- -

Display Selection and Availability

- -

If at least one event listener is registered to -the ondisplayavailablechange event handler the user agent -should start monitoring for the availability of secondary displays suitable -for the for the mentioned use cases.

- -

When there are no more event listeners attached to - the ondisplayavailablechange event handler, the user - agent may stop such monitoring for the availability of secondary displays.

- -

This includes displays connected to the user agent's - system via wired connections (e.g. HDMI, DVI etc.) as well as via - wireless technologies (e.g. MiraCast, DLNA or similar) that use a - local or personal area network as a transport mechanism. The - discovery can be performend by using operating system APIs that - notifiy the user agent about display configuration changes or by - means of network discovery for remote display technologies that - are not handled by the operating system. In the latter case, the - user agent or the operating system that the user agent runs on may - prepare a video stream suitable for being decoded and displayed by - the wirelessly connected display.

- -

Monitoring for Availability Changes

- -

When a user agent is to monitor for the availability of secondary displays, - it must execute the following steps.

- -
    -
  1. Let currentDisplayFound be a boolean representing whether there are one more secondary displays - available right now and let currentDisplayFound be false if it was not previously set.
  2. -
  3. Query for available secondary displays that the user agent has access to.

    -

    An implementation - of this API may chose to use operating system screen & display information APIs or start an - implementation dependent network discovery process.

  4. -
  5. Set displayAvailable to true if at least one suitable display was found in step 2, set to false - otherwise.
  6. -
  7. If displayAvailable is different - from currentDisplayFound, fire a new event displayavailablechange at - the navigator.presentation object.
  8. -
  9. Set currentDisplayFound to displayAvailable.
  10. -
  11. Continue at step 1.
  12. -
- -

It is left to the implementation to determine a suitable polling/monitoring frequency or alternatively - using notification mechanisms of the host OS for display availability changes.

- -

Requesting a Presentation Display

- -

When requesting a presentation display, the user agent returns a Promise and asynchronously -goes through the steps needed to open access to that display. The UA needs to check for availability. If a display is -available, the user agent asks the user for permission to use and select one. Then it can open a new browsing context -on that display and fulfils the Promise with the WindowProxy object of the new auxiliary browsing context as the value -of the Promise, otherwise rejects the Promise with an error.

- -

A user agent shall only open and maintain a maximum of one presentation browsing context per - available secondary display. If requestShow is called a second time and the user selects an available - display that was previously in use by a previous call to requestShow, the user agent shall close the - previous browsing context.

- -

When the requestShow method is called, the user agent must execute the -following algorithm to request access to the presentation display:

- -
    -
  1. Let promise be a new Promise.
  2. -
  3. Return promise and run the following steps asynchronously.
  4. -
  5. Verify that the availability monitoring algorithm is running and - that the value of displayAvailable is true. If it is false or the algorithm - is not running, jump to the step labeled failure below.
  6. -
  7. Prompt the user's permission or check that the setting for allowing access to a presentation display enabled. If - no permission is given, jump to the step labeled failure below. If the user never - responds, this algorithm will never progress beyond this step.
  8. -
  9. If more than one available display is found, present a selection to the user for choosing one of the available - display.
  10. -
  11. If the user cancels the selection, go to the failure step.
  12. -
  13. Let the display that the user selected be called selected presentation - display.
  14. -
  15. If there is already a presentation browsing context opened on the selected presentation display, close the existing presentation browsing context.
  16. -
  17. Open a new auxiliary browsing context and present it - fullscreen on the selected presentation display. The newly - created auxiliary browsing context is - called presentation browsing context. -
  18. Resolve the url to an absolute URL - by relative to the entry - script's base - url. Let resolvedUrl be the result of this resolution. -
  19. If the url resolution failed, go to the failure step. -
  20. Navigate the presentation browsing context to resolvedUrl with the browsing context of the - incumbent script as the source browsing context. -
  21. Success: Fulfil promise with - the WindowProxy of the new presentation browsing context as its value.
  22. -
  23. Terminate these steps.
  24. -
  25. Failure: Let error be a - new DOMError. The user agent must determine the error type in the following order of priority:
  26. -
      -
    1. If the user has denied permission to open a presentation display, error - must be of type SecurityError.
    2. -
    3. error must be of type NotSupportedError.
    4. -
    -
  27. Reject promise with error as its value.
  28. -
- -

Lifecycle and Visibility of the Presentation Window

- -

User Closing the Presentation Window

- -

The user agent should provide a means for the user to close - the presentation browsing context.

- -

In a PC scenario, this could be by means of an overlay on the secondary display with a close icon. In a mobile scenario where the user has no means of using a mouse cursor or other interaction with the secondary display, it could be an icon on the primary display.

- -

If the user closes the presentation browsing context, the user - agent should follow the regular algorithm for closing a browsing context.

- -

This means, that the opener browsing context can register - an onunload EventHandler on - the presentation browsing context to detect when the window gets - closed.

- -

There are currently two open issues: A user of this API can subscribe to the onunload - event of the presentation browsing context's Window - object but this event only fires if the URL loaded in the presentation - browsing context's is from the same origin. Secondly, there is no such thing as an onerror event - if the presentation browsing context is closed unexpectedly.

- -

Programmatic Closing of the Presentation Window

- -

Similarly, when the close() method of the WindowProxy - is called, the user agent must behave as specified in the steps for the close() method of - the Window object. - -

Display Availability Changes

- -

If the display configuration of the user agent's host system changes so that the secondary display is not available - anymore, or if a display connected via the network becomes unreachable, and the user agent was showing an existing - presentation browsing context on the display which is now unavaible, the user agent should follow the regular - algorithm for closing a browsing - context.

- -

Close on Unload

- -

When the browsing context from which one or more presentation browsing - contexts were opened is getting closed, the user agent should close all presentation browsing contexts that it opened. - -

Security Considerations

- -

The widespread use of popup blockers shows that the window.open() functionality was often abused to interrupt the user's -workflow with unsolicited advertising. It is clear that repeating this story should be avoided. Hence, when implementing -this specification, user agents shall give clear indication to the user that a site is requesting to open a presentation -display. User agents may prompt the user to give consent to displaying content on the selected presentation display.

- -

User Agents may provide a setting which prevents pages from using -a presentation display -altogether.

- -

Opening the presentation browsing context follows the legacy - behavior of window.open() and thus - allows navigating to URLs that are not at the same origin as the browsing context of the incumbent - script. This does not introduce any new security issues in itself. However, it would be desirable to only - navigate to URLs in the presentation browsing context using the basic fetch algorithm with the CORS flag flag set to true, but - this would require changes to or a local redefinition of the - navigation algorithm. - -

References

-
- -

Acknowledgments

- -

Thanks to Wayne Carr and Anssi Kostiainen for input, thorough reviews and feedback to this draft.

- - +dictionary PresentEventInit : EventInit { + PresentationSession session; +}; +
+

+ PresentationSession +

+

+ An object representing the established presentation session. +

+
+enum PresentationSessionState { "connected", "disconnected" /*, "resumed" */ };
+
+interface PresentationSession : EventTarget {
+  readonly attribute PresentationSessionState state;
+  void postMessage(DOMString message);
+  void close();
+  attribute EventHandler onmessage;
+  attribute EventHandler onstatechange;
+};
+
+

+ References +

+
+

+ Acknowledgements +

+

+ Thanks to Wayne Carr, Louay Bassbous, Anssi Kostiainen, 闵洪波 (Hongbo Min), + Anton Vayvod for help with editing, reviews and feedback to this draft. +

+ diff --git a/build/tidyconfig.txt b/build/tidyconfig.txt new file mode 100644 index 0000000..98821cf --- /dev/null +++ b/build/tidyconfig.txt @@ -0,0 +1,5 @@ +char-encoding: utf8 +indent: yes +wrap: 80 +tidy-mark: no +quiet: yes diff --git a/index.html b/index.html index d5120bd..d16885e 100644 --- a/index.html +++ b/index.html @@ -1,15 +1,16 @@ - - Presentation API - - - - + + - - - -
- + + + +
+

W3C

-

Presentation API

-

(Draft of) Final Report 2 July 2014

- -
-
This Version: -
http://webscreens.github.io/presentation-api/
- -
Latest Published Version
-
http://webscreens.github.io/presentation-api/
- -
Previous Version:
-
http://webscreens.github.io/presentation-api/20131112/
- -
Participate:
-
Send feedback to the community group's mailing - list public-webscreens@w3.org, - or create or browse open issues on GitHub. Also, - you may join on the CG's IRC channel. - -
Version History: -
https://github.com/webscreens/presentation-api/commits/
- -
Editors: -
Dominik Röttsches, Intel
-
闵洪波 (Hongbo Min), Intel
-
- - - - -
- -
- - -

Abstract

-This document standardizes access to external presentation type -displays for web applications. - -

Status of this Document

- -This document is a draft to collect feedback on the general -approach and intended to be published by the Second Screen Presentation Community Group. - - - - - - - -

Table of Contents

- +

+ Presentation API +

+

+ Final Report 3 July 2014 +

+
+
+ This Version: +
+
+ http://webscreens.github.io/presentation-api/ + +
+
+ Latest Published Version +
+
+ http://webscreens.github.io/presentation-api/ + +
+
+ Previous Version: +
+
+ http://webscreens.github.io/presentation-api/20131112/ +
+
+ Participate: +
+
+ Send feedback to the community group's mailing list public-webscreens@w3.org, + or create or + browse open issues on GitHub. Also, you may join on the CG's IRC channel. +
+
+ Version History: +
+
+ https://github.com/webscreens/presentation-api/commits/ +
+
+ Editors: +
+
+ Dominik Röttsches, + Intel +
+
+ +
+
+

+ Abstract +

+

+ This specification defines an API to enable web content to access + external presentation-type displays and use them for presenting web + content. +

+

+ Status of this Document +

+

+ This specification was published by the Second Screen Presentation + Community Group. It is not a W3C Standard nor is it on the W3C + Standards Track. Please note that under the W3C Community Final + Specification Agreement (FSA) other conditions apply. Learn more + about W3C Community and Business + Groups. +

+

+ This report documents the use cases, requirements, examples and + interfaces needed to enable web pages to display web content on secondary + screens. It is an evolved version of the initial + Presentation API that represents the result of discussions within the + Second Screen Presentation Community Group so far. API semantics still + need to be specified. The report may serve as starting point for a + possible Working Group chartered to work on the same topic. +

+

+ Table of Contents +

    -
  1. 1 Introduction +
  2. 1 + Introduction +
      -
    1. 1.1 Use Cases +
    2. 1.1 + Use Cases +
        -
      1. 1.1.1 Presentations
      2. -
      3. 1.1.2 Video and Image Sharing
      4. -
      5. 1.1.3 Gaming
    3. -
    4. 1.2 Example
  3. -
  4. 2 Conformance
  5. -
  6. 3 Terminology
  7. -
  8. 4 Presentation Extension to Navigator
  9. -
  10. 5 Presentation Interface
  11. -
  12. 6 Display Selection and Availability +
  13. 1.1.1 + Presentations +
  14. +
  15. 1.1.2 + Video and Image Sharing +
  16. +
  17. 1.1.3 + Gaming +
  18. +
  19. 1.1.4 + Media Flinging to Multiple Screens +
+
  • 2 + Requirements +
      -
    1. 6.1 Monitoring for Availability Changes
  • -
  • 7 Requesting a Presentation Display
  • -
  • 8 Lifecycle and Visibility of the Presentation Window +
  • 2.1 + Functional Requirements +
  • +
  • 2.2 + Non-Functional Requirements +
  • +
  • 3 + Conformance +
  • +
  • 4 + Terminology +
  • +
  • 5 + Example +
      -
    1. 8.1 User Closing the Presentation Window
    2. -
    3. 8.2 Programmatic Closing of the Presentation Window
    4. -
    5. 8.3 Display Availability Changes
    6. -
    7. 8.4 Close on Unload
  • -
  • 9 Security Considerations
  • -
  • References
  • -
  • Acknowledgments +
  • 5.1 + Open Questions +
  • +
  • 5.2 + Usage on Remote Screen +
  • +
  • 6 + Interfaces + +
      +
    1. 6.1 + NavigatorPresentation +
    2. +
    3. 6.2 + AvailableChangeEvent +
    4. +
    5. 6.3 + PresentEvent +
    6. +
    7. 6.4 + PresentationSession +
  • +
  • + References +
  • +
  • + Acknowledgements + +

    1 + Introduction +

    This section is non-normative. +

    + This specification aims to make secondary displays such as a projector or + a connected TV available to the web and 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 content to a + larger audience, for example a group of colleagues in a conference room, + or friends and family at home. Showing content on an external large + display helps to improve the perceived quality and impact of the + presented content. +

    +

    1.1 + Use Cases +

    +

    1.1.1 + Presentations +

    +

    + A user is preparing a set of slides for a talk. Using a web based + service, she is editing her slides and speaker notes on the primary + screen, while the secondary larger screen shows a preview of the current + slide. When the slides are done, her mobile phone allows her to access + them from an online service while on the go. Coming to the conference, + using wireless display technology, she would like to present her slides + on the stage screen from her mobile phone. The phone's touch screen helps + her to navigate slides and presents a slide preview, while the projector + shows her slides to the audience. +

    +

    + Requirements: R1, R3, R4, R5, R7 +

    +

    1.1.2 + Video and Image Sharing +

    +

    + Using an online video or image sharing service, a user would like to show + memorable moments to her friends. Using a device with a small screen, it + is impossible to show the content to a large group of people. Connecting + an external TV screen or projector to her device - with a cable or + wirelessly - the online sharing service now makes use of the connected + display, allowing a wider audience to enjoy the content. +

    +

    + The web page shows UI elements that allow the user to trigger displaying + content on the secondary display (e.g a "send to second screen" ) only if + there is at least one secondary screen available. +

    +

    + Requirements: R1, R3, R4, R5, R7 +

    +

    1.1.3 + Gaming +

    +

    + Splitting the gaming experience into a near screen controller and a large + screen visual experience, new gaming experiences can be created. + Accessing the local display on the small screen device and an external + larger display allows for richer web-based gaming experiences. +

    +

    + Requirements: R1, R3, R4, R5, R7 +

    +

    1.1.4 + Media Flinging to Multiple Screens +

    Alice enters a video sharing site using a browser on her tablet. Next, + Alice picks her favorite video from the site, and the video starts to play + on her tablet. While the video is playing Alice clicks a button "Share on + different screen". The browser provides a user interface that lists all the + screens Alice has around her home, asking her to select one. The screens + are identified by names that are familiar to Alice. Alice picks one screen + from the list, "Alice's big TV", and the video playback continues + seamlessly on the selected screen. Next she decides to switch the playback + to a different screen. She clicks the same button "Share on different + screen" provided by the site, and the browser presents the user interface + that lists all the screens. Alice picks another screen from the list, + "Alice's kitchen TV", and the playback resumes on that screen. Video site + also provides a feature to see the action (Alice is watching a soccer game) + from different angle. Alice clicks a button "Select screen for additional + angle", and the browser asks Alice similarly to select the screen to be + used for playback. Alice picks "Alice's Projector" and the soccer game is + shown on the projector from a different angle, in parallel to the content + being played back on "Alice's kitchen TV". +

    + Requirements: R1, R3, R4, R5, R6, R7 +

    +

    2 + Requirements +

    +

    2.1 + Functional Requirements +

    +
      +
    • + Discovery / Availability +
        +
      • R1: The UA must provide a way to find out whether at least one + secondary screen is available. +
      • +
      +
    • +
    +

    + Multi-Screen enumeration and named identification removed, after + discussion on the mailing list, cmp. + http://lists.w3.org/Archives/Public/public-webscreens/2014Feb/0021.html : +

    +
      +
    • + Launching Presentation +
        +
      • R3: The UA must provide a means of start sending content to the + secondary screen. +
      • +
      +
    • +
    • + Resuming Presentation +
        +
      • R4: The UA must be able to resume an existing session with + content being displayed on the secondary screen. +
      • +
      +
    • +
    • + Communication +
        +
      • R5: The UA must enable exchanging data between the primary and + the secondary screen in order to have a control channel between the + primary and secondary page. +
      • +
      • R6: The UA must not make assumptions about the the execution + locality of the user agent of the remote page it communicates with + (i.e. the secondary page might run on a remote user agent and thus + the link between the two pages' UA must be loosely coupled). +
      • +
      +
    • +
    +
      +
    • + Signaling Disconnection +
        +
      • R7: The UA must signal disconnection from the presentation page + to the primary page and vice versa. +
      • +
      +
    • +
    +

    2.2 + Non-Functional Requirements +

    +
      +
    • + Power Saving Friendly +
        +
      • All API design decisions must be analyzed from a power efficiency + point of view. Especially when using wireless display technologies or + querying availability over a radio channel, care needs to be taken to + design the API in a way that does not pose obstacles to using radio + resources in an efficient way. For example, powering up the wireless + display detection only when needed. +
      • +
      +
    • +
    +

    3 + Conformance +

    +

    + All diagrams, examples, and notes in this specification are + non-normative, as are all sections explicitly marked non-normative. + Everything else in this specification is normative. +

    +

    + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in RFC + 2119. For readability, these words do not appear in all uppercase letters + in this specification. [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 end result is equivalent. (In + particular, the algorithms defined in this specification are intended to + be easy to follow, and not intended to be performant.) +

    +

    4 + Terminology +

    +

    + The term presentation display + refers to an external screen connected to the device that the user agent + runs on. +

    +

    + The terms event handlers and + event + handler event types are defined in [HTML5]. +

    +

    + This document provides interface definitions using the + [WEBIDL] standard. +

    +

    5 + Example +

    +

    + Running in a compliant user agent, code for presenting a page + example.html on the presentation display looks as follows: +

    +
    /* controller.html */
    +
    +<button disabled>Show</button>
     
    -

    1 Introduction

    - -This section is non-normative. - -

    This specification aims to make secondary displays such as a projector or a connected TV available to the web and -takes into account displays that are attached using wired (HDMI, DVI or similar) and wireless technologies (MiraCast, DLNA, -AirPlay or similar).

    - -

    Devices with limited screen size lack the ability to show content -to a larger audience, for example a group of colleagues in a -conference room, or friends and family at home. Showing content on an -external large display helps to improve the perceived quality and -impact of the presented content.

    - -

    It is the intention of this specification that the user agent prepares a rendering for the secondary display in a way - that is adapted to the secondary display's capabilities. The DOM state and the rendering shown on the primary and - secondary display are maintained and perfomend by the same user agent. There is no secondary user agent involved - that would run remotely on the secondary display.

    - -

    The user agent creates two browsing contexts, one on the primary display, one on the selected presentation - display. It is responsible for sending the rendered output to the secondary display. For wirelessly connected - displays this may mean that the user agent prepares a video stream from the rendering output that is sent over the - network to the wireless display.

    - -

    The trend in user agent implementations has been to avoid opening -multiple separate windows and containing window management to tabs, -which helps the user to organize multiple pages. However, the -following example use cases fall outside the regular -management of multiple windows for web pages.

    - -

    1.1 Use Cases

    - -

    1.1.1 Presentations

    - -

    A user is preparing a set of slides for a talk. Using a web based -service, she is editing her slides and speaker notes on the primary -screen, while the secondary larger screen shows a preview of the -current slide. When the slides are done, her mobile phone allows her -to access them from an online service while on the go. Coming -to the conference, using wireless display technology, she would like -to present her slides on the stage screen from her mobile phone. The -phone's touch screen helps her to navigate slides and presents a slide -preview, while the projector shows her slides to -the audience.

    - -

    1.1.2 Video and Image Sharing

    - -

    Using an online video or image sharing service, a user would like to show memorable moments to her friends. Using a -device with a small screen, it is impossible to show the content to a large group of people. Connecting an external TV -screen or projector to her device - with a cable or wirelessly - the online sharing service now makes use of the -connected display, allowing a wider audience to enjoy the content.

    - -

    1.1.3 Gaming

    - -

    Splitting the gaming experience into a near screen controller and a -large screen visual experience, new gaming experiences can be -created. Accessing the local display on the small screen device and an -external larger display allows for richer web-based gaming -experiences.

    - -

    1.2 Example

    - -

    Running in a compliant user agent, code for playing a video on the presentation display could look like the following:

    - -
    /* player.html */
    -
    -<video>
     <script>
    -var v = document.querySelector('video');
    -
    -window.onmessage = function (event) {
    -  v.src = event.data;
    -  v.play();
    +var presentation = navigator.presentation,
    +    showButton = document.querySelector('button');
    + 
    +presentation.onavailablechange = function(e) {
    +  showButton.disabled = !e.available;
    +  showButton.onclick = show;
     };
    -</script>
    -
    - -
    /* controller.html */
    -
    -<script>
    -function playVideo() {
    -  if (!navigator.presentation.displayAvailable)
    -    return;
    -  var p = navigator.presentation.requestShow('player.html');
    -  p.then(function (display) { display.postMessage('http://example.org/video.mp4', '/'); },
    -         function (error) { console.log('Request to show failed: ' + error.msg); }
    -  );
    + 
    +function show() {
    +  var session = presentation.requestSession('http://example.org/');
    + 
    +  session.onstatechange = function() {
    +    switch (session.state) {
    +      case 'connected':
    +        session.postMessage(/*...*/);
    +        session.onmessage = function() { /*...*/ };
    +        break;
    +      case 'disconnected':
    +        console.log('Disconnected.');
    +        break;
    +    }
    +  };
     }
    -
    -playVideo();
    -
     </script>
     
    - -

    In this example of a video player scenario similar to the video sharing use case - presented above, the opener browsing context loads a document into the presentation browsing context which has a - video element in it and communicates with it through postMessage. The document of the presentation - browsing context receives the commands and for example sets the src attribute of the video and starts - playing it.

    - -

    The example uses postMessage for communication between opener and auxiliary browsing context in order to -encourage the use of asynchronous, potentially cross-origin communication between the two contexts. Direct access to -properties of the document object in the auxiliary browsing context is an alternative option in case the -documents are loaded from the same origin.

    - -
    <script>
    -
    -/* Monitoring availability */
    -navigator.presentation.ondisplayavailablechange = function() {
    -  /* For example: Enable/Disable UI to show content on presentation display here. */
    -  var availability = navigator.presentation.displayAvailable ? "available" : "unavailable";
    -  console.log("Presentation display is now " + availability + ".");
    -}
    -
    -</script>
    +    

    + The availability monitoring for secondary screens begins when the page + adds an event listener for the availablechange event on the + navigator.presentation object. If there are already + available screens when the page adds the first event listener for the + event, the UA synthesizes a single availablechange event to signal the + availability. +

    +

    + Do we want to fire an event immediately after the page registers for it? + What's a best practice method for asynchronous notifications of ths kind? + See below in the Open Questions section. +

    +

    + The "Show" button's state (initially disabled) informs the user of the + availability of secondary screen(s), and the button's state is updated if + the availability changes. (The rationale of putting the actual boolean + information into a property of the event e.available is to + allow the implementation to optimize power consumption for network + discovery of remote wireless screens. If this information was provided in + a globally accessible flag, the network discovery could never be + suspended for keeping the flag up to date.) +

    +

    + Once the user clicks the "Show" button, the show() function + is called. +

    +

    + By calling navigator.presentation.requestSession(url), the + script on the page tries to launch or resume a presentation on a + secondary screen. Based on the url argument, the UA looks + for existing sessions and available screens, and presents a screen picker + user interface to the user. Out of the list of existing sessions or + available screens the user selects one item. If an existing session was + selected, the session is resumed by establishing a communication channel. + If a new screen was selected, the UA connects to the selected screen, + brings up a new window on the selected screen, starts to show the content + denoted by the url argument, and the UA establishes a communication + channel with this window. +

    +

    + When the navigator.presentation.requestSession(url) function + is called, the UA immediately returns a session object to + the script which represents a handle to the current presentation session, + used for communication and state handling. +

    +

    + If the user has selected a screen, the content is shown and a + communication channel was established, the state of the session object + changes from "disconnected" to "connected", + which signals the presentation session is up and running, and the opener + page can communicate with the presentation page. For communication with + the presentation page, the session object's postMessage() is + used to send, and the onmessage event handler to receive + messages. +

    +

    + If the user cancels the screen selection and never selects a screen, no + state transition happens and the session object remains in + the "disconnected" state. +

    +

    5.1 + Open Questions +

    +

    + Do we need to insert into the description an additional permission prompt + to grant the page access to the "one ore more screens are available" + Information? +

    +

    + If there are already connected screens when the page subscribes to the + onavailablechange event, we can handle this in two ways: We + can synthesize one initial event to notify the page about available + screens as soon as the first event handler is installed (as described). + Or we can add another message like + navigator.presentation.getAvailable(function(available) { } + ); to notify the page about available screens using this one-time + asynchronous getter. Which way should we go? +

    +

    + Do we need an additional state like resumed in order to identify resumed + session? It seems that this could be handled on the page level. The + opener page could ask the presentation page whether it is + "new" or "resumed". +

    +

    5.2 + Usage on Remote Screen +

    For addressing the requirement of communication between originating + page and presentation page/screen, we can now use the same + session object on the remote side. +
    navigator.presentation.onpresent = function(e) {
    +  // Communicate with opener page.
    +  e.session.postMessage(/*...*/);
    +  e.session.onmessage = function() {/*...*/};
    +
    +  e.session.onstatechange = function() {
    +    switch (this.state) {
    +      case "disconnected":
    +        // Handle disconnection from opener page.
    +    }
    +  };
    +};
     
    +

    + When the content denoted by the url argument in the + requestSession() example above is loaded, the page on the + presentation screen receives a PresentEvent, with a + session property representing the session. This session is a + similar object as in the first example. Here, its initial state is + "connected", which means we can use it to communicate with + the opener page using postMessage() and + onmessage. +

    +

    + We can also monitor the connection state by listening for + statechange events. When the state changes to + "disconnected" the page is made aware of the fact that + communication with the opener page was lost, but it can continue to + display the current content. The communication can be re-established when + a new present event fires on the navigator.presentation + object. +

    +

    6 + Interfaces +

    +

    + The interfaces described herein address the requirements outlined in the + Use Cases section, and specifically, also + consider the Media Flinging + to Multiple Screens use case unaddressed by the previous version of the Presentation API. This + section describes the interfaces to the extend discussed in the Second + Screen Presentation Community Group. Readers are encouraged to consult + the Example section together with this section for + a more complete understanding of the technical parts of this + specification. +

    + +
    interface NavigatorPresentation : EventTarget {
    +  PresentationSession requestSession(DOMString url);
    +  attribute EventHandler onavailablechange;
    +  attribute EventHandler onpresent;
    +};
     
    -

    This example demonstrates the auxiliary use case of monitoring for available secondary displays in order to keep the - UI consistent. The displayavailablechange event informs about displays appearing or disappearing and - allows the client of the API to update page content accordingly.

    - -

    2 Conformance

    -

    All diagrams, examples, and notes in this specification are -non-normative, as are all sections explicitly marked non-normative. -Everything else in this specification is normative. - -

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", -"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and -"OPTIONAL" in this document are to be interpreted as described in RFC 2119. -For readability, these words do not appear in all uppercase letters in this -specification. [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 end 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 Terminology

    - -

    The term presentation display refers to an external screen connected to the device that the user agent runs on.

    - -

    The terms opener browsing context - and auxiliary browsing context are defined - in [HTML5]. - -

    The terms event handlers - and event handler event types are - defined in [HTML5].

    - -

    The Promises model and the concept of event firing are defined in - the [DOM] living standard.

    - -

    This document provides interface definitions using the [WEBIDL] standard. - -

    The basic fetch algorithm is defined in - [FETCH]. - -

    4 Presentation Extension to Navigator

    -
    partial interface Navigator {
    -  readonly attribute Presentation presentation;
    -
    +partial interface Navigator {
    +  readonly attribute NavigatorPresentation presentation;
     };
     
    +

    6.2 + AvailableChangeEvent +

    +

    + Fired at the primary screen's NavigatorPresentation object, + when screen availability changes. +

    +
    [Constructor(DOMString type, optional AvailableChangeEventInit eventInitDict)]
    +interface AvailableChangeEvent : Event {
    +  readonly attribute boolean available;
    +};
     
    -

    5 Presentation Interface

    - -
    interface Presentation : EventTarget {
    -  Promise requestShow(optional DOMString url = "about:blank");
    -
    -  readonly attribute boolean displayAvailable;
    -  attribute EventHandler ondisplayavailablechange;
    +dictionary AvailableChangeEventInit : EventInit {
    +  boolean available;
     };
     
    +

    6.3 + PresentEvent +

    Fired at the secondary screen's NavigatorPresentation + object, when the presentation session is established. +
    [Constructor(DOMString type, optional PresentEventInit eventInitDict)]
    +interface PresentEvent : Event {
    +  readonly attribute PresentationSession session;
    +};
     
    -
    -
    requestShow
    -

    Method to request opening and showing a new browsing - context on the selected presentation display.

    -

    Parameters:

    -
    -
    optional DOMString url
    -
    URL of the page that is to be loaded in the new browsing context.
    -
    -

    Returns:

    -
    -
    Promise
    -

    Promise that is fulfilled when the request was successful, - rejected if it failed.

    -
    -
    -
    displayAvailable
    -

    A boolean flag to indicate the secondary display availability in the UA. Updated when the display availability changes. - True if there is at least one available secondary display for the mentioned use - cases, false otherwise.

    -
    -
    - -

    6 Display Selection and Availability

    - -

    If at least one event listener is registered to -the ondisplayavailablechange event handler the user agent -should start monitoring for the availability of secondary displays suitable -for the for the mentioned use cases.

    - -

    When there are no more event listeners attached to - the ondisplayavailablechange event handler, the user - agent may stop such monitoring for the availability of secondary displays.

    - -

    This includes displays connected to the user agent's - system via wired connections (e.g. HDMI, DVI etc.) as well as via - wireless technologies (e.g. MiraCast, DLNA or similar) that use a - local or personal area network as a transport mechanism. The - discovery can be performend by using operating system APIs that - notifiy the user agent about display configuration changes or by - means of network discovery for remote display technologies that - are not handled by the operating system. In the latter case, the - user agent or the operating system that the user agent runs on may - prepare a video stream suitable for being decoded and displayed by - the wirelessly connected display.

    - -

    6.1 Monitoring for Availability Changes

    - -

    When a user agent is to monitor for the availability of secondary displays, - it must execute the following steps.

    - -
      -
    1. Let currentDisplayFound be a boolean representing whether there are one more secondary displays - available right now and let currentDisplayFound be false if it was not previously set.
    2. -
    3. Query for available secondary displays that the user agent has access to.

      -

      An implementation - of this API may chose to use operating system screen & display information APIs or start an - implementation dependent network discovery process.

    4. -
    5. Set displayAvailable to true if at least one suitable display was found in step 2, set to false - otherwise.
    6. -
    7. If displayAvailable is different - from currentDisplayFound, fire a new event displayavailablechange at - the navigator.presentation object.
    8. -
    9. Set currentDisplayFound to displayAvailable.
    10. -
    11. Continue at step 1.
    12. -
    - -

    It is left to the implementation to determine a suitable polling/monitoring frequency or alternatively - using notification mechanisms of the host OS for display availability changes.

    - -

    7 Requesting a Presentation Display

    - -

    When requesting a presentation display, the user agent returns a Promise and asynchronously -goes through the steps needed to open access to that display. The UA needs to check for availability. If a display is -available, the user agent asks the user for permission to use and select one. Then it can open a new browsing context -on that display and fulfils the Promise with the WindowProxy object of the new auxiliary browsing context as the value -of the Promise, otherwise rejects the Promise with an error.

    - -

    A user agent shall only open and maintain a maximum of one presentation browsing context per - available secondary display. If requestShow is called a second time and the user selects an available - display that was previously in use by a previous call to requestShow, the user agent shall close the - previous browsing context.

    - -

    When the requestShow method is called, the user agent must execute the -following algorithm to request access to the presentation display:

    - -
      -
    1. Let promise be a new Promise.
    2. -
    3. Return promise and run the following steps asynchronously.
    4. -
    5. Verify that the availability monitoring algorithm is running and - that the value of displayAvailable is true. If it is false or the algorithm - is not running, jump to the step labeled failure below.
    6. -
    7. Prompt the user's permission or check that the setting for allowing access to a presentation display enabled. If - no permission is given, jump to the step labeled failure below. If the user never - responds, this algorithm will never progress beyond this step.
    8. -
    9. If more than one available display is found, present a selection to the user for choosing one of the available - display.
    10. -
    11. If the user cancels the selection, go to the failure step.
    12. -
    13. Let the display that the user selected be called selected presentation - display.
    14. -
    15. If there is already a presentation browsing context opened on the selected presentation display, close the existing presentation browsing context.
    16. -
    17. Open a new auxiliary browsing context and present it - fullscreen on the selected presentation display. The newly - created auxiliary browsing context is - called presentation browsing context. -
    18. Resolve the url to an absolute URL - by relative to the entry - script's base - url. Let resolvedUrl be the result of this resolution. -
    19. If the url resolution failed, go to the failure step. -
    20. Navigate the presentation browsing context to resolvedUrl with the browsing context of the - incumbent script as the source browsing context. -
    21. Success: Fulfil promise with - the WindowProxy of the new presentation browsing context as its value.
    22. -
    23. Terminate these steps.
    24. -
    25. Failure: Let error be a - new DOMError. The user agent must determine the error type in the following order of priority:
    26. -
        -
      1. If the user has denied permission to open a presentation display, error - must be of type SecurityError.
      2. -
      3. error must be of type NotSupportedError.
      4. -
      -
    27. Reject promise with error as its value.
    28. -
    - -

    8 Lifecycle and Visibility of the Presentation Window

    - -

    8.1 User Closing the Presentation Window

    - -

    The user agent should provide a means for the user to close - the presentation browsing context.

    - -

    In a PC scenario, this could be by means of an overlay on the secondary display with a close icon. In a mobile scenario where the user has no means of using a mouse cursor or other interaction with the secondary display, it could be an icon on the primary display.

    - -

    If the user closes the presentation browsing context, the user - agent should follow the regular algorithm for closing a browsing context.

    - -

    This means, that the opener browsing context can register - an onunload EventHandler on - the presentation browsing context to detect when the window gets - closed.

    - -

    There are currently two open issues: A user of this API can subscribe to the onunload - event of the presentation browsing context's Window - object but this event only fires if the URL loaded in the presentation - browsing context's is from the same origin. Secondly, there is no such thing as an onerror event - if the presentation browsing context is closed unexpectedly.

    - -

    8.2 Programmatic Closing of the Presentation Window

    - -

    Similarly, when the close() method of the WindowProxy - is called, the user agent must behave as specified in the steps for the close() method of - the Window object. - -

    8.3 Display Availability Changes

    - -

    If the display configuration of the user agent's host system changes so that the secondary display is not available - anymore, or if a display connected via the network becomes unreachable, and the user agent was showing an existing - presentation browsing context on the display which is now unavaible, the user agent should follow the regular - algorithm for closing a browsing - context.

    - -

    8.4 Close on Unload

    - -

    When the browsing context from which one or more presentation browsing - contexts were opened is getting closed, the user agent should close all presentation browsing contexts that it opened. - -

    9 Security Considerations

    - -

    The widespread use of popup blockers shows that the window.open() functionality was often abused to interrupt the user's -workflow with unsolicited advertising. It is clear that repeating this story should be avoided. Hence, when implementing -this specification, user agents shall give clear indication to the user that a site is requesting to open a presentation -display. User agents may prompt the user to give consent to displaying content on the selected presentation display.

    - -

    User Agents may provide a setting which prevents pages from using -a presentation display -altogether.

    - -

    Opening the presentation browsing context follows the legacy - behavior of window.open() and thus - allows navigating to URLs that are not at the same origin as the browsing context of the incumbent - script. This does not introduce any new security issues in itself. However, it would be desirable to only - navigate to URLs in the presentation browsing context using the basic fetch algorithm with the CORS flag flag set to true, but - this would require changes to or a local redefinition of the - navigation algorithm. - -

    References

    -
    [DOM] -
    DOM, Anne van Kesteren, Aryeh Gregor and Ms2ger. WHATWG. - -
    [FETCH] -
    Fetch, Anne van Kesteren. WHATWG. - -
    [HTML5] +dictionary PresentEventInit : EventInit { + PresentationSession session; +}; +
    +

    6.4 + PresentationSession +

    +

    + An object representing the established presentation session. +

    +
    enum PresentationSessionState { "connected", "disconnected" /*, "resumed" */ };
    +
    +interface PresentationSession : EventTarget {
    +  readonly attribute PresentationSessionState state;
    +  void postMessage(DOMString message);
    +  void close();
    +  attribute EventHandler onmessage;
    +  attribute EventHandler onstatechange;
    +};
    +
    +

    + References +

    +
    [HTML5]
    HTML5, Robin Berjon, Steve Faulkner, Travis Leithead et al.. W3C.
    [RFC2119] @@ -565,10 +697,12 @@

    References

    Web IDL, Cameron McCormack. W3C.
    - -

    Acknowledgments

    - -

    Thanks to Wayne Carr and Anssi Kostiainen for input, thorough reviews and feedback to this draft.

    - - +

    + Acknowledgements +

    +

    + Thanks to Wayne Carr, Louay Bassbous, Anssi Kostiainen, 闵洪波 (Hongbo Min), + Anton Vayvod for help with editing, reviews and feedback to this draft. +

    +