- From: Mark Foltz via GitHub <sysbot+gh@w3.org>
- Date: Tue, 01 Sep 2015 03:23:56 +0000
- To: public-secondscreen@w3.org
I actually think we can come to a good solution here by adjusting the semantics I proposed earlier, and without any API facing changes. Let's assume we redefine `close()` to mean `disconnect()` as discussed above. Below "controlling session" means a PresentationSession in the controlling page and "presentation session" means one in the presented page. 1. Controlling page calls `session.close()`: - Controlling session transitions to `terminated` - Corresponding presentation session also transitions to `terminated` 2. Presentation is closed (by itself, by user agent, by user) - All controlling sessions transition to `terminated` 3. Controlling session is disconnected from presentation without any call to `close()` (e.g. user changes WiFi networks away from TV, navigates away, etc.) - Controlling session (if it exists) transitions to `closed` - Corresponding presentation session on the presentation also transitions to `closed` - Presentation continues to run - Controlling page may want to offer "reconnect" as an option to the user to resume connection via join(). 4. Presentation wishes to "kick out" a controller (idle timeout, etc.) - Calls `session.close()` which causes the corresponding controlling session to transition to `terminated`. 5. Last connected session to the presentation transitions to `closed` or `terminated` . - Presentation will see that all sessions are in the non-connected state. It can close itself with `window.close()` it if wants to, or wait for new connections. To simplify case 5, we can add a boolean `connected` property to the `change` event fired at a session's `onstatechange`. The property would be true if there are any sessions held by that browsing context that remain connected to the presentation, false otherwise. Here is a bit of sample code for the presenting page under this proposal: ``` // Assume that the page already is adding the following handler to // incoming connected sessions. session.onstatechange = function(e) { if (e.state == 'closed' || e.state == 'terminated') { // Show a message that a player/controller left the presentation. } if (!e.connected) { // The last controller disconnected. Close ourselves. We could also // set a timer to await new connections. window.close(); } ``` This proposal does not give a single controlling session the ability to terminate the entire presentation. This may actually be desirable; a single player should not be able to kill the whole game, and as @sicking argues above the presentation may be in a better position to know when to quit. I still prefer using `window.close()` as an explicit mechanism for terminating the presentation page, rather than relying on a new event's default behavior. If there is a good reason to create the default-close behavior, is there a way to do it without adding a new event? -- GitHub Notif of comment by mfoltzgoogle See https://github.com/w3c/presentation-api/issues/35#issuecomment-136564607
Received on Tuesday, 1 September 2015 03:23:58 UTC