- From: Marcos Cáceres via GitHub <sysbot+gh@w3.org>
- Date: Mon, 23 Sep 2019 02:59:35 +0000
- To: public-device-apis-log@w3.org
> AbortSignal wasn’t the right thing to use here. Now that I'm back on firm soil, let me clarify... the `AbortController` usage was ambiguous because it was not clear if it applied to: 1. the asynchronous acquisition of the lock - requires IPC, but presumedly fairly quick. 1. the actual lock itself - ongoing operation after. 1. both... which is complicated to implement IMO. > I don’t mind returning an object as the sentinel. If we go down the object route again, which I think more clear, we can have a `WakeLockSentinel` returned that just has `release()` method, a `type` attribute, and an event handler attribute to monitor state change, and a way to check current `state`. ```JS partial interface Navigator { [SameObject] readonly attribute WakeLock wakeLock; }; partial interface WorkerNavigator { [SameObject] readonly attribute WakeLock wakeLock; }; [Exposed=(Window,DedicatedWorker)] interface WakeLock { Promise<WakeLockSentinel> request(WakeLockType type); }; dictionary WakeLockEventInit { required unsigned WakeLockSentinel lock; }; [Exposed=(Window,DedicatedWorker)] interface WakeLockEvent : Event { constructor(DOMString type, WakeLockEventInit init); readonly attribute WakeLockSentinel lock; }; enum WakeLockState { "active", "released", } interface WakeLockSentinel : EventTarget { // can only be called once Promise<void> release(); readonly attribute WakeLockType type; attribute EventHandler onstatechange; readonly attribute WakeLockState state; } ``` So roughly: ```JS let lock = await navigator.wakeLock.request("screen"); lock.onstatechange = async ev => { // request a new lock, maybe... lock = await navigator.wakeLock.request(ev.lock.type); } // ... stuff happens.... then... if (lock.state === "released") return; try { await lock.release(); } catch (err) { // any unexpected errors } // Lock was released, so it's consumed/dead; this would reject: await lock.release(); // InvalidStateError ``` I'd be happy with the above API. -- GitHub Notification of comment by marcoscaceres Please view or discuss this issue at https://github.com/w3c/wake-lock/issues/226#issuecomment-533946734 using your GitHub account
Received on Monday, 23 September 2019 02:59:37 UTC