- From: Oleg Beletski via GitHub <sysbot+gh@w3.org>
- Date: Thu, 28 May 2015 12:09:29 +0000
- To: public-secondscreen@w3.org
During F2F meeting we agreed to have an `AvailabilityListener` for explicit monitoring of screen availability. We also agreed that cancel method is not required and UA start/stop discovery when needed. Actually there were two proposals and we did not look in the details at second modification of the original interface. Let’s take a second look and compare both. The main difference is that in the first proposal access to the `AvailabilityListener` is behind the promise and in the second proposal access to one method of the interface returns the promise for the user - `getAvailability()`. In both cases there is only one promise that user code has to wait to resolve. **First proposal:** ``` partial interface NavigatorPresentation { Promise<AvailabilityListener> listenForAvailability(…); } interface AvailabilityListener : EventTarget { readonly attribute boolean available; attribute EventHandler onavailablechange; } ``` Access to the interface is behind the promise. Discovery starts when interface is instantiated even if there is no event listener attached. **Pros** * Continuous discovery with always up to date value of available property. **Cons** * Difficult to stop discovery. If we want to stop it, then we have to remove all event listeners and then drop all the references to the instance of the `AvailabilityListener` interface. After that discovery can be stopped at the next pass of garbage collector (UA can optimize that though). * If presentation screen discovered while promise to get listener is being resolved, the available will be set to true right after construction and `availablechange` event will never be fired. For API users that means that they will have to use both available property in addition to event listeners. **Second proposal:** ``` partial interface NavigatorPresentation { AvailabilityListener listenForAvailability(…); } interface AvailabilityListener : EventTarget { Promise<boolean> getAvailability(); attribute EventHandler onavailablechange; } ``` Access to the interface is not behind the promise, but access to the `getAvailability()` is. Discovery runs when there is least one event handler on `onavailablechange` or request to `getAvailability()` is made and promise still unsolved. **Pros** * Continuous discovery happens only when event listener is attached. * Single run discovery started when `getAvailability()` is called and stopped immediately after promise resolved. * API user can use only one out of two API methods for different usage models; there is no need to use both (property and even listener) for continuous case. For continuous monitoring event will be always delivered at least once. * Clear indication to the UA when discovery should be stopped (no event listeners attached), so better optimization can be applied. **Cons** * Boolean property value available is under promise, so access to it will take time (unless there is an event listener attached, then it resolved without waiting). -- GitHub Notif of comment by obeletski See https://github.com/w3c/presentation-api/issues/81#issuecomment-106292149
Received on Thursday, 28 May 2015 12:09:34 UTC