From 8be327de6bd7ef36b6bfec5a7ff48d97d0795455 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dominik=20R=C3=B6ttsches?= 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
+key word ("must", "should", "may", etc.) used in introducing the
algorithm.
Conformance requirements phrased as algorithms or specific steps
@@ -376,13 +376,13 @@ Conformance
Display Selection and Availability
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
+ discovery can be performed 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.
Thanks to Wayne Carr and Anssi Kostiainen for input, thorough reviews and feedback to this draft.
diff --git a/index.html b/index.html index d5120bd..c6f6933 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,7 @@ } - + + href="http://www.w3.org/community/src/css/spec/cg-final.css" type="text/css"> - + - - - + + - - - -- Copyright © 2014 the Contributors to the - Presentation API Specification, published by the Second Screen - Presentation Community Group under the - W3C Community Final Specification Agreement (CLA). -
- -+ Copyright + © 2014 the Contributors to the Presentation API Specification, + published by the Second Screen Presentation + Community Group under the W3C Community + Final Specification Agreement (CLA). +
+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.
- -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
- -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
- -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
- -Requirements: R1, R3, R4, R5, R6, R7
- - -+ 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. +
++ 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 +
++ 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 +
++ 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 +
++ Requirements: R1, R3, R4, R5, R6, R7 +
+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 : -
+ 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 : +
+Running in a compliant user agent, code for presenting a page example.html
on the presentation display could look like the following:
+
+ Running in a compliant user agent, code for presenting a page
+ example.html
on the presentation display could look like the
+ following:
+
/* controller.html */ <button disabled>Show</button> @@ -298,48 +392,101 @@- -Example
} </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 disabled 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 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.
- -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 still need to pass an options parameter to the requestSession() call in order to specify continuous playback or would we leave this an implementation detail to the UA? Given that there is a close() function and disconnect notifications through the state property, this should be sufficient to implement the continuous playback use case.
-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".
- -session
object on the remote side.
-
-++ 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 disabled 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 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 still need to pass an options parameter to the requestSession() + call in order to specify continuous playback or would we leave this an + implementation detail to the UA? Given that there is a close() function + and disconnect notifications through the state property, this should be + sufficient to implement the continuous playback use case. +
++ 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(/*...*/); @@ -353,60 +500,83 @@- -Usage on Remote Screen
}; };When the content denoted by the url argument in the requestSession() example above is loaded, the page on the - presentation screen receives a present event, 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. - - -
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.
- -This document provides interface definitions using the WEBIDL standard.
- -Interfaces
- -- -
NavigatorPresentation
++ When the content denoted by the url argument in the requestSession() + example above is loaded, the page on the presentation screen receives a + present event, 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. +
++ 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. +
++ This document provides interface definitions using the + WEBIDL standard. +
++ Interfaces +
++
+NavigatorPresentation
+interface NavigatorPresentation : EventTarget { PresentationSession requestSession(DOMString url); attribute EventHandler onavailablechange; @@ -417,12 +587,14 @@- -readonly attribute NavigatorPresentation presentation; };
NavigatorPresentation
- -
AvailableChangeEvent
Fired at the primary screen's
- -NavigatorPresentation
object, when screen availability changes.++
+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; @@ -432,10 +604,11 @@- -boolean available; };
AvailableChangeEvent
-Fired at the secondary screen's
PresentEvent
NavigatorPresentation
object, when the presentation session is established. -++
Fired at the secondary screen'sPresentEvent
+NavigatorPresentation
+ object, when the presentation session is established. +[Constructor(DOMString type, optional PresentEventInit eventInitDict)] interface PresentEvent : Event { readonly attribute PresentationSession session; @@ -445,12 +618,13 @@- -PresentationSession session; };
PresentEvent
- -
PresentationSession
An object representing the established presentation session.
- -++
+PresentationSession
++ An object representing the established presentation session. +
+enum PresentationSessionState { "connected", "disconnected" /*, "resumed" */ }; interface PresentationSession : EventTarget { @@ -461,13 +635,16 @@- -attribute EventHandler onstatechange; };
PresentationSession
References
- - -Acknowledgements
- -Thanks to Wayne Carr, Louay Bassbous, Anssi Kostiainen, 闵洪波 (Hongbo Min), Anton Vayvod for help with editing, reviews and feedback to this draft.
- - ++ References +
+ ++ Acknowledgements +
++ Thanks to Wayne Carr, Louay Bassbous, Anssi Kostiainen, 闵洪波 (Hongbo Min), + Anton Vayvod for help with editing, reviews and feedback to this draft. +
+