| WakeLock provides the ability to block the device / display from sleeping. |
| |
| On Android, the implementation is inherently coupled to the NativeView |
| associated with the context of the requestor due to system APIs. To handle |
| this coupling, the Wake Lock usage model on Android is as follows: |
| |
| (1) The embedder passes in a callback at Device Service construction that |
| enables the Wake Lock implementation to map (embedder-specific) context IDs to |
| NativeViews. |
| (2) For a given embedder-specific context, a trusted client |
| connects to the WakeLockProvider interface and gets a |
| WakeLockContext instance that is associated with that context. |
| (3) That trusted client then forwards requests to bind wake locks from |
| untrusted clients that are made within that context, with the Wake Lock |
| implementation using the callback from (1) as necessary to obtain the |
| NativeView associated with that context. |
| |
| On other platforms, the usage model is similar but the callback is not |
| necessary/employed. |
| |
| If the client does not have any context available (e.g., is not within the |
| context of a WebContents), it can get a WakeLock that doesn't associate to any |
| context (by GetWakeLockWithoutContext() in WakeLockProvider). However, note that |
| the resulting Wake Lock will not have any effect on Android. |