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.
