1. 序論
◎非規範的現代の~OSは、 より長い~battery寿命を達成するために, 積極的な電力~管理を実装する — それは、 次により,電力~利用度をアリな限り制限することを意味する ⇒ ~host機器は、 利用者-活動が一定時間無いときは,次のいずれかを行ってヨイとする ⇒# ~screenの明るさを下げる/ ~screenを~offにする/ ~CPUを休眠~状態になれるようにする ◎ Modern operating systems achieve longer battery life by implementing aggressive power management, meaning that shortly after the lack of user activity, a host device may lower the screen brightness, turn the screen off and even let the CPU go into a deep power state, limiting power usage as much as possible.
これは,~battery寿命を引延ばすことに関しては申し分ないが、 一部の利用事例を邪魔するときもある — 例: ~barcodeを走査している, 電子本を読んでいる, ~recipeを目で追っている, 視聴者に呈示している, 等々。 `~wake~lock:利用事例@~TR/wake-lock-use-cases/$cite も見よ。 ◎ Though this is great for prolonged battery life, it can sometime hinder some use cases such as scanning a barcode, reading an ebook, following a recipe, presenting to an audience, and so on. See also Wake Lock: Use cases.
~wake~lockは,一般に何かが起こることを防止するが、 ~UA(および下層の~OS)は, 所与の~battery状態s (例:[ コンセントに接続されている/ 放電-中にある/ ~battery残量が少ない ]かどうか) の下で~wake~lockを時間~制限してもヨイ — 電力~節約~modeが作動化された事例では、 ~wake~lockを許容しないことにしてもヨイ。 ◎ A wake lock will generally prevent something from happening, but UAs (and the underlying OS) may time limit a wake lock given the battery status (wall power connected, discharging, low battery level), or even disallow wake locks in the case a power saving mode is activated.
2. ~wake~lock
この仕様は、 次に挙げる `~wake~lock種別@ を定義する: ◎ This specification defines the following wake lock type:
-
`~screen~wake~lock@i ⇒ ~screenが~offにすることを防止する。 ~screen~wake~lockを獲得し得るのは、 可視な文書に限られる。
【 これは、 ~dataとしては,それを表現する文字列 `screen$l と同一視される。 】
◎ A screen wake lock prevents the screen from turning off. Only visible documents can acquire the screen wake lock.
この~APIにおいては、 `~wake~lock種別$は,`WakeLockType$I 列挙~値により表現される。 ◎ In the API, the wake lock types are represented by the WakeLockType enum values.
注記: 他の仕様は、 異なる~wake~lock種別を定義し得る。 ◎ Note Other specifications might define different wake lock types.
3. 施策~制御
`~screen~wake~lock~API^cite は、 文字列 `screen-wake-lock^l により識別される`施策により制御される特能$を定義する。 その`既定の許容list$は `'self'^l とする。 ◎ The Screen Wake Lock API defines a policy-controlled feature identified by the string "screen-wake-lock". Its default allowlist is 'self'.
~test
- `wakelock-supported-by-permissions-policy$wpt
- `wakelock-enabled-on-self-origin-by-permissions-policy.https.sub$wpt
- `wakelock-enabled-by-permissions-policy-attribute-redirect-on-load.https.sub$wpt
- `wakelock-enabled-by-permissions-policy-attribute.https.sub$wpt
- `wakelock-enabled-by-permissions-policy.https.sub$wpt
注記: `既定の許容list$ `'self'^l は、 入子にされた同一-生成元に属する~frameにおける~wake~lock用法を許容する一方で, 第三者-主体に属する内容が~wake~lockを利用するのは防止する。 ◎ Note The default allowlist of 'self' allows wake lock usage in same-origin nested frames but prevents third-party content from using wake locks.
第三者-主体~用法は 当の`~frame容器~要素@~HTMLds#nav-container$の `allow$a 属性に `screen-wake-lock^v を指定することにより,選択的に可能化できる: ◎ Third-party usage can be selectively enabled by adding allow="screen-wake-lock" attribute to the frame container element:
~remote内容に対し~screen~wake~lockを可能化する例: ◎ Example: Enabling screen wake lock on remote content
<iframe src="https://third-party.com" allow="screen-wake-lock"></iframe>
また、 ~HTTP応答~header内に許可~施策を指定することにより, `~screen~wake~lock~API^cite を完全に不能化できる: ◎ Alternatively, the Screen Wake Lock API can be disabled completely by specifying the permissions policy in a HTTP response header:
許可~施策~headerの例: ◎ Example: Permissions Policy header
Permissions-Policy: screen-wake-lock=()
より詳細は、 `許可~施策^cite `PERMISSIONS-POLICY$r を見よ。 ◎ See Permissions Policy for more details.
4. 許可と利用者~prompt
`許可~API^cite `PERMISSIONS$r は、 ~web~site用に[ 利用者からの許可を要請する ]ため, および[ 当の~web~siteが どの許可を有するか~queryする ]ための一様な仕方を供する。 ◎ The [PERMISSIONS] API provides a uniform way for websites to request permissions from users and query which permissions they have.
`~UA$は、 実装に特有な理由 — ~platform設定や利用者~選好など — により, 特定0の `Document$I 用に特定0の`~wake~lock種別$の `~wake~lockを否認-@ できる。 ◎ A user agent can deny a wake lock of a particular wake lock type for a particular Document by any implementation-specific reason, such as platform setting or user preference.
~UAには、 次を行うことが推奨される: ◎ It is RECOMMENDED that a user agent\
- 何らかの形を成す控えめな通知 — ~wake~lockが作動中になったとき,そのことを利用者に伝える通知 — を示す。 ◎ show some form of unobtrusive notification that informs the user when a wake lock is active,\
- 次を行う手段を利用者に供する ⇒ 進行中な演算を`阻む@#dfn-screen-wake-lock-permission-revocation-algorithm$か, 単純に当の通知を退ける ◎ as well as provides the user with the means to block the ongoing operation, or simply dismiss the notification.
4.1. 強力な特能 `screen-wake-lock^l
文字列 `screen-wake-lock^l により識別される`強力な特能$が、 この仕様により定義される能力を可能化する。 ◎ The "screen-wake-lock" powerful feature enables the capability defined by this specification.
~test
- `wakelockpermissiondescriptor.https$wpt
4.2. 許可~algo
`強力な特能$ `screen-wake-lock^l は、 `許可~revocation~algo$として, `~screen~wake~lock許可~revocation~algo@ を定義する — それは、 次の手続きを走らす: ◎ The "screen-wake-lock" powerful feature defines a permission revocation algorithm. To invoke the Screen Wake Lock permission revocation algorithm, run these steps:
- %文書 ~LET `現在の大域~obj$に`結付けられた文書$ ◎ Let document be the current global object's associated Document.
- %文書 . `ActiveLocks$sl[ `screen^l ] を成す ~EACH( %~lock ) に対し ⇒ `~wake~lockを解放する$( %文書, %~lock, `screen$l ) ◎ Let lockList be document.[[ActiveLocks]]["screen"]. ◎ For each lock in lockList: • Run release a wake lock with document, lock, and "screen".
5. 各種~概念
この仕様~内で言及される`~task$用の`~task~source$は、 `~screen~wake~lock~task~source@ である。 ◎ The task source for the tasks mentioned in this specification is the screen wake lock task source.
用語 `~platform~wake~lock@ は、 ~UAが,ある~wake~lock[ の状態を~queryする/を獲得する/を解放する ]ためにヤリトリする~platform~interfaceを指す。 ◎ The term platform wake lock refers to platform interfaces with which the user agent interacts to query state and acquire and release a wake lock.
`~platform~wake~lock$は、 下層の~platformにより定義されることもあれば (例:~native~wake~lock~frameworkにおいて), ~UAにより定義されることも — ~UAが直な~hardware制御を有する場合には — ある。 ◎ A platform wake lock can be defined by the underlying platform (e.g. in a native wake lock framework) or by the user agent, if it has direct hardware control.
6. `Document^I ~interfaceに対する拡張
各 `Document$I ~instanceは、 次に挙げる`内部~slot$を伴って作成される: ◎ 6.1. Internal slots
- `ActiveLocks@sl
-
`有順序~map$ — 各~entryの:
- ~keyは、 ある`~wake~lock種別$【を表現する文字列】を与える。
- 値は、[ この `Document$I に結付けられた `WakeLockSentinel$I ~objたちが成す`~list$ ]を与える — 初期~時は`空$とする。
【 この仕様を実装する~UAには、 この~mapは,~keyとして[ `~screen~wake~lock$i を表現する文字列 `screen^l ]を伴う~entryを有することが要求される。 】
◎ Internal slot|Initial value|Description [[ActiveLocks]]|An ordered map mapping wake lock types to empty lists.|An ordered map of wake lock types to a list of WakeLockSentinel objects associated with this Document.8. `WakeLock^I ~interface
`WakeLock$I ~interfaceは、[ 文書が `~screen~wake~lock$i を獲得する ]ことを許容する。 ◎ The WakeLock interface allows a document to acquire a screen wake lock.
~test
- `wakelock-insecure-context.any$wpt
[`SecureContext$, `Exposed$=(Window)] interface `WakeLock@I { `Promise$<`WakeLockSentinel$I> `request$m(optional `WakeLockType$I %type = "screen"); };
`request(type)@m ~method手続きは: ◎ 8.1. The request() method ◎ The request(type) method steps are:
~test
- `wakelock-type.https.any$wpt
- %文書 ~LET コレに`関連な大域~obj$に`結付けられた文書$ ◎ Let document be this's relevant global object's associated Document.
-
~IF[ %文書 は`全部的に作動中$でない ] ⇒ ~RET `却下される~promise$( `NotAllowedError$E 例外 ) ◎ If document is not fully active, return a promise rejected with with a "NotAllowedError" DOMException.
~test
- `wakelock-active-document.https.window$wpt
-
~IF[ %文書 には[ `screen-wake-lock^l で識別される`施策により制御される特能$ ]の`利用は許容されて$いない ] ⇒ ~RET `却下される~promise$( `NotAllowedError$E 例外 ) ◎ If document is not allowed to use the policy-controlled feature named "screen-wake-lock", return a promise rejected with a "NotAllowedError" DOMException.
~test
- `wakelock-disabled-by-permissions-policy.https.sub$wpt
-
~IF[ `~UA$は %文書 用には,`~wake~lock種別$ %type の`~wake~lockを否認-$する ] ⇒ ~RET `却下される~promise$( `NotAllowedError$E 例外 ) ◎ If the user agent denies the wake lock of this type for document, return a promise rejected with a "NotAllowedError" DOMException.
~test
- `wakelock-screen-type-on-worker.https.worker$wpt
-
~IF[ %文書 の`可視性~状態$doc ~EQ `hidden^l ] ⇒ ~RET `却下される~promise$( `NotAllowedError$E 例外 ) ◎ If document's visibility state is "hidden", return a promise rejected with "NotAllowedError" DOMException.
~test
- `wakelock-document-hidden-manual.https$wpt
- %~promise ~LET `新たな~promise$ ◎ Let promise be a new promise.
-
この段は`並列的$に走らす: ◎ Run the following steps in parallel:
- %状態 ~LET `利用する許可を要請する$( `screen-wake-lock^l ) ◎ Let state be the result of requesting permission to use "screen-wake-lock".
-
~IF[ %状態 ~EQ `denied$l ]: ◎ If state is "denied", then:
-
`大域~taskを~queueする$( `~screen~wake~lock~task~source$, %文書 に`関連な大域~obj$, 次の手続き )
手続きは ⇒ `~promiseを却下する$( %~promise, `NotAllowedError$E 例外 )◎ Queue a global task on the screen wake lock task source given document's relevant global object to reject promise with a "NotAllowedError" DOMException. - ~RET ◎ Abort these steps.
~test
- `wakelock-request-denied.https$wpt
-
-
`大域~taskを~queueする$( `~screen~wake~lock~task~source$, %文書 に`関連な大域~obj$, 次の手続き ) ◎ Queue a global task on the screen wake lock task source given document's relevant global object to\
手続きは: ◎ run these steps:
-
~IF[ %文書 は`全部的に作動中$でない ]~OR[ %文書 の`可視性~状態$doc ~EQ `hidden^l ]: ◎ If document is not fully active, then: • Reject promise with a "NotAllowedError" DOMException. • Abort these steps. ◎ If document's visibility state is "hidden", then:
- `~promiseを却下する$( %~promise, `NotAllowedError$E 例外 ) ◎ Reject promise with a "NotAllowedError" DOMException.
- ~RET ◎ Abort these steps.
-
~IF[ %文書 . `ActiveLocks$sl[ `screen^l ] は`空$である ]: ◎ If document.[[ActiveLocks]]["screen"] is empty,\
-
この段は`並列的$に走らす ⇒ `~wake~lockを獲得する$( `screen$l ) ◎ then invoke the following steps in parallel: • Invoke acquire a wake lock with "screen".
注記: ~wake~lockを獲得する~algoは,最終的には~OSから~lockを獲得-可能でないこともあるが、 利用者に対する指紋収集を避けるため (例えば、 ~lockを獲得することの失敗は,~battery残量が少ないことを指示し得る), ~lockの成功裡な獲得と判別-不能になる。 ◎ Note The acquire a wake lock algorithm may ultimately be unable to acquire a lock from the operating system, but this is indistinguishable from a successful lock acquisition to avoid user fingerprinting (failure to acquire a lock can indicate low battery levels, for example).
-
- %~lock ~LET 新たな `WakeLockSentinel$I ~obj — その ⇒# `type$m 属性 ~SET %type ◎ Let lock be a new WakeLockSentinel object with its type attribute set to type.
- %文書 . `ActiveLocks$sl[ `screen^l ] に %~lock を`付加する$ ◎ Append lock to document.[[ActiveLocks]]["screen"].
- `~promiseを解決する$( %~promise, %~lock ) ◎ Resolve promise with lock.
-
- ~RET %~promise ◎ Return promise.
9. `WakeLockSentinel^I ~interface
[`SecureContext$, `Exposed$=(Window)] interface `WakeLockSentinel@I : `EventTarget$I { readonly attribute `boolean$ `released$m; readonly attribute `WakeLockType$I `type$m; `Promise$<`undefined$> `release$m(); attribute `EventHandler$I `onrelease$m; };
`WakeLockSentinel$I ~obj %~obj は、 その `type$m 属性が指示する`~wake~lock種別$ %種別 用の下層の`~platform~wake~lock$ %~lock への~handle %~handle を供する: ◎ A WakeLockSentinel object provides a handle to a platform wake lock,\
- %~handle は、[ %~obj が `release()$m により手動で解放されるか %~lock が解放される ]まで %~obj に保持される。 ◎ and it holds on to it until it is either manually released or until the underlying platform wake lock is released.\
- %~lock は、 %~handle が存在し続ける限り,作動中に保たれる。 ◎ Its existence keeps a platform wake lock for a given wake lock type active,\
- %種別 用の `WakeLockSentinel$I ~instanceすべてを解放すると、 %~lock は,解放されるようになる。 ◎ and releasing all WakeLockSentinel instances of a given wake lock type will cause the underlying platform wake lock to be released.
注記: 所与の~wake~lockを`~UA$が どの状況下で解放し得るかについては、 次に挙げる各節を見よ ⇒# `§ ~wake~lockの自動的な解放-法@#auto-releasing-wake-locks$, `§ 全部的に作動中でなくなった文書の取扱い@#handling-document-loss-of-full-activity$, `§ 可視でなくなった文書の取扱い@#handling-document-loss-of-visibility$ ◎ Note See auto-releasing wake locks, handling document loss of full activity and handling document loss of visibility for circumstances under which a given wake lock may be released by the user agent.
各 `WakeLockSentinel$I ~instanceは、 次に挙げる`内部~slot$を伴って作成される: ◎ 9.1. Internal slots ◎ WakeLockSentinel instances are created with the following internal slots:
- `Released@sl
- 真偽値 — 初期~時は ~F とする。
- 注記: この `WakeLockSentinel$I が解放されたかどうかを指示する。
`released@m 取得子~手続きは ⇒ ~RET コレ . `Released$sl ◎ 9.2. The released attribute ◎ The released getter steps are to return this.[[Released]].
~test
- `wakelock-released.https$wpt
注記: `WakeLockSentinel$I が解放されたなら、 `released$m は ~T になり,それ以降は決して変化しない。 ◎ Note Once a WakeLockSentinel is released, released becomes true, and the value never changes again.
`type@m 取得子~手続きは ⇒ ~RET コレの`~wake~lock種別$ ◎ 9.3. The type attribute ◎ The type getter steps are to return this's wake lock type.
`release()@m ~method手続きは: ◎ 9.4. The release() method ◎ The release() method steps are:
~test
- `wakelock-onrelease.https$wpt
- ~IF[ コレ . `Released$sl ~EQ ~F ] ⇒ `~wake~lockを解放する$( 【コレに`関連な大域~obj$に`結付けられた文書$】, コレ, コレの`~wake~lock種別$【!`type$m 属性 の値】 ) ◎ If this's [[Released]] is false, then run release a wake lock with lock set to this and type set to the value of this's type attribute.
- ~RET `解決される~promise$( `undefined^jv ) ◎ Return a promise resolved with undefined.
`onrelease@m 属性は、 名前 `onrelease^l を伴う`~event~handler$用の`~event~handler~IDL属性$である — 対応する`~event~handler~event型$は、 `release@et である。 ◎ 9.5. The onrelease attribute ◎ The onrelease attribute is an event handler IDL attribute for the "onrelease" event handler, whose event handler event type is "release".
~test
- `wakelock-onrelease.https$wpt
`onrelease$m は、 次を~scriptに通知するために利用される ⇒ この `WakeLockSentinel$I ~objの~handleが[ `release()$m ~methodが~callされた/ 当の~wake~lockが`~UA$により解放された ]ことに因り解放された。 ◎ It is used to notify scripts that a given WakeLockSentinel object's handle has been released, either due to the release() method being called or because the wake lock was released by the user agent.
注記: `WakeLockSentinel$I ~objの~handleが解放されたとしても、 所与の`~wake~lock種別$用の`~platform~wake~lock$が解放されたことを意味するとは限らない 【まだ解放されてない `WakeLockSentinel^I ~objが他にもあり得るので】。 それは、 `~platform~wake~lock$の `ActiveLocks$sl 内部~slotに依存する。 `~wake~lockを解放する$を見よ。 ◎ Note A WakeLockSentinel object's handle being released does not necessarily mean the platform wake lock for a given wake lock type was released. That depends on the platform wake lock's [[ActiveLocks]] internal slot. See release a wake lock.
注記: `onrelease$m ~event~handlerを`利用する方法の例@#onrelease-example$も見よ。 ◎ Note Example 2 contains an example of how to use the onrelease event handler.
9.6. ~garbage収集
`WakeLockSentinel$I ~obj %~obj に対しては、 ~OR↓ が満たされる間は, %~obj に`関連な大域~obj$( `Window$I ~obj)【!the Window object that the WakeLockSentinel object's constructor was invoked from】から %~obj への強い参照が在るモノトスル: ◎ ↓
- [ `release$et 用に 1 個以上の~event~listenerが登録されている ]~AND[ %~obj はまだ解放されてない ] ◎ While a WakeLockSentinel object has one or more event listeners registered for "release", and the WakeLockSentinel object hasn't already been released, there MUST be a strong reference from the Window object that the WakeLockSentinel object's constructor was invoked from to the WakeLockSentinel object itself.
- `~screen~wake~lock~task~source$に対し %~obj により~queueされた~taskが在る ◎ While there is a task queued by an WakeLockSentinel object on the screen wake lock task source, there MUST be a strong reference from the Window object that the WakeLockSentinel object's constructor was invoked from to that WakeLockSentinel object.
10. `WakeLockType^I 列挙
この仕様は、 各`~wake~lock種別$を述べる目的で, それらを表現する次の列挙を定義する: ◎ For the purpose of wake lock type description, this specification defines the following enumeration to represent wake lock types:
enum `WakeLockType@I { `screen$l };
`screen@l は、 種別 `~screen~wake~lock$i を表現する。 ◎ screen • Screen wake lock type.
11. ~wake~lockの管理-法
この節は、 各`~wake~lock種別$に等しくかつ独立に適用される — 特定0の`~wake~lock種別$が明示的に言及されない限り。 ◎ This section applies to each wake lock type equally and independently, unless a particular wake lock type is explicitly mentioned.
`~UA$は、 所与の`~wake~lock種別$用の `~wake~lockを適用するよう下層の~OSに要請する@ ことにより,当の~wake~lockを獲得する。 `~UA$は、 そのような要請の返り値を検査しない — 言い換えれば、 `~UA$は,~wake~lockの獲得を助言的に限られるものとして扱うモノトスル。 ◎ The user agent acquires the wake lock by requesting the underlying operating system to apply the lock. A possible return value of the request to the underlying operating system is not checked. In other words, user agents MUST treat wake lock acquisition as advisory-only.
逆に,`~UA$は、 所与の`~wake~lock種別$用の `~wake~lockをもはや適用しないよう下層の~OSに要請する@ ことにより,当の~wake~lockを解放する。 当の~lockは、 そのような要請が成功したときに限り,解放されたものと見なされる。 ◎ Conversely, the user agent releases the wake lock by requesting the underlying operating system to no longer apply the wake lock. The lock is considered released only when the request to the operating system succeeds.
~wake~lockが `適用-可能@ であるとは、 次が満たされることをいう ⇒ ~OSは、 当の~lockの適用を許可する状態にある (例:~batteryは不足なく充電されている)。 ◎ The wake lock is applicable if the state of the operating system permits application of the lock (e.g. there is sufficient battery charge).
`~screen~wake~lock$i は、 ~screenが利用者により手動で~offに切替えられた場合には, 再び~onに切替えられるまで,`適用-可能$でないモノトスル。 ◎ The screen wake lock MUST NOT be applicable after the screen is manually switched off by the user until it is switched on again.
注記: ~wake~lockが適用-可能かどうかは、 一過な条件である — 例:~battery残量が少なく,充電し直されたとき。 可視性~要件と同様に,これは、 自動的な~wake~lock管理の一部を成すものであり, ~wake~lockを許容するか否認するか裁定する処理nの一部を成すものではない。 ◎ Note Whether the wake lock is applicable is a transient condition, e.g. when the battery charge is low but then the battery is recharged. So like the visibility requirement, this is part of automatic wake lock management and not part of the decision process whether to allow or deny the wake lock.
11.1. ~wake~lockの自動的な解放-法
~UAは、 いつでも`~wake~lockを解放-@#dfn-release-a-wake-lock$してヨイ。 例えば、 次に挙げるとき: ◎ A user agent may release a wake lock at any time. For example, when:
- 正常でない演算を検出したとき — 例:無限~loopになった/課された時間~制限sを超過した~taskが在る。 ◎ It detects abnormal operation: such as infinite loops and tasks exceeding imposed time limits (if any).
- ~batteryの残量が少なく放電-中と見なされるとき。 ◎ Battery is considered low and discharging.
- 利用者は、 何らかの種類の機器~電力~温存~modeを~onにした。 ◎ The user turns on some kind of device power conservation mode.
- ~OSは、 利用者が居るかどうかに基づいて,~screenを[ 暗くする/~offにする ]よう環境設定されている。 ◎ The operating system is configured to dim or turn off the screen based on the user presence state.
11.2. 全部的に作動中でなくなった文書の取扱い
所与の `Document$I %文書 がもはや`全部的に作動中$でなくなったときは、 ~UAは,次の手続きを走らすモノトスル: ◎ When a Document document becomes no longer fully active, the user agent must run these steps:
~test
- `wakelock-active-document.https.window$wpt
- %文書 . `ActiveLocks$sl[ `screen^l ] を成す ~EACH( %~lock ) に対し ⇒ `~wake~lockを解放する$( %文書, %~lock, `screen$l ) ◎ For each lock in document.[[ActiveLocks]]["screen"]: • Run release a wake lock with document, lock, and "screen".
11.3. 可視でなくなった文書の取扱い
この仕様は、 `~page可視性~変化-時の手続き$として 次を定義する — それは、 所与の ( `可視性~状態$doc %状態, %文書 ) に対し: ◎ This specification defines the following page visibility change steps with visibility state state and document:
~test
- `wakelock-document-hidden-manual.https$wpt
- ~IF[ %状態 ~NEQ `hidden^l ] ⇒ ~RET ◎ If state is not "hidden", abort these steps.
- %文書 . `ActiveLocks$sl[ `screen^l ] を成す ~EACH( %~lock ) に対し ⇒ `~wake~lockを解放する$( %文書, %~lock, `screen$l ) ◎ For each lock in document.[[ActiveLocks]]["screen"]: • Run release a wake lock with document, lock, and "screen".
11.4. ~wake~lockを獲得する~algo
`~wake~lockを獲得する@ ときは、 所与の ( `~wake~lock種別$【!種別】 %種別 ) に対し,次の手続きを走らす: ◎ To acquire a wake lock for a given type, run these steps:
- ~IF[ %種別 用の~wake~lockは`適用-可能$でない ] ⇒ ~RET ◎ If the wake lock for type type is not applicable, abort these steps.
- %種別 用の`~wake~lockを適用するよう下層の~OSに要請する$ ◎ Ask the underlying operating system to acquire the wake lock of type type.
11.5. ~wake~lockを解放する~algo
`~wake~lockを解放する@ ときは、 所与の ( %文書, %~lock, `~wake~lock種別$ %種別 ) に対し,次の手続きを走らす: ◎ To release a wake lock for a given document, lock, and type, run these steps:
- ~IF[ %~lock ~NIN %文書 . `ActiveLocks$sl[ %種別 ] ] ⇒ ~RET ◎ If document.[[ActiveLocks]][type] does not contain lock, abort these steps.
- %文書 . `ActiveLocks$sl[ %種別 ] から %~lock を`除去する$ ◎ Remove lock from document.[[ActiveLocks]][type].
-
~IF[ %文書 . `ActiveLocks$sl[ %種別 ] は`空$である ] ⇒ 次の手続きを`並列的$に走らす ◎ If document.[[ActiveLocks]][type] is empty, then run the following steps in parallel:
手続きは:
- %種別 用の`~wake~lockをもはや適用しないよう下層の~OSに要請する$ ◎ Ask the underlying operating system to release the wake lock of type type\
-
~IF[ 前~段は成功した ]~AND[ %種別 ~EQ `screen^l ] ⇒ ~platformに特有な無活動~timerを設定し直す — ~screenが実際に~offにされるのは、 その後になるよう ◎ and let success be true if the operation succeeded, or else false. ◎ If success is true and type is "screen" run the following: • Reset the platform-specific inactivity timer after which the screen is actually turned off.
注記: 無活動~timerを設定し直すのは、 ~wake~lockが解放された直後に~screenが~off【!blank】になるのを防止するためである。 ◎ Note Resetting the inactivity timer prevents the screen from going blank immediately after the wake lock is released.
- %~lock の `Released$sl ~SET ~T ◎ Set lock's [[Released]] to true.
- `~eventを発火する$( %~lock, `release$et ) ◎ Fire an event named "release" at lock.
12. ~security/~privacy の考慮点
~screen~wake~lockは、 様々な機器~component — 特に~display — を,~lockされない場合より高い電力で運用させ得る。 これは、 望ましくない効果へ至らせ得る — 機器が自身を自動的に~lockすることを防止して,~batteryの消耗が速くなるなど。 それは、 近くに可用な電源が無いことが多い~mobile機器において特に懸念される。 予期されない時点に~batteryが完全に消耗すると、 利用者は,通話や~network~service(緊急~call~serviceも含む)を利用-不能になる。 ◎ Screen wake locks can cause various device components - particularly the display - to operate at higher power levels than they otherwise would. This can lead to undesirable effects, such as preventing the device from automatically locking itself and faster battery depletion. Faster battery depletion is of particular concern for mobile devices, which often don't have a stationary power source readily available. Complete battery depletion at an unexpected time can lead to inability of the user to make or receive calls and use network services, including the emergency call service.
実装は、 例えば[ ~battery容量が少ない場合/ 利用者が自身の機器を電力~節約~modeに置いた場合 ]には,~screen~wake~lock用の要請を無視してもヨイ。 ◎ Implementations MAY ignore requests for screen wake lock if, for example, the battery capacity is low, or the user has put their device in a power-saving mode.
~UAには、[ ~screen~wake~lockがいつ作動中になったか,利用者が知ることを許容する ]よう,何らかの~UIや指示子を供することが推奨される。 そのような~UIを供することは、 末端-利用者が[ 特定0の~web~appが,機器の消費電力に負な影響iがある ]ことを識別する助けにもなり、 それでも欲される場合には,そのための動作をとることも彼らに許容する。 ◎ It is RECOMMENDED that a user agent provide some UI or indicator that allows the user to know when a screen wake lock is active. Providing such a UI could help end users to identify if a particular web application is having a negative energy impact on the device, and allow them to take action if so desired.
13. 例
◎非規範的~screen~wake~lockを獲得して,【一定時間後に】解放する例: ◎ Example 1: Acquires and releases a screen wake lock
function tryKeepScreenAlive(%minutes) { navigator.wakeLock.request("screen").then(%lock => { setTimeout(() => %lock.release(), %minutes * 60 * 1000); }); } tryKeepScreenAlive(10);
この例は、[ ある~checkboxを~clickすることにより,~screen~wake~lockを要請する ]ことを利用者に許容することに加え、 ~wake~lock状態が変化した事例では, 当の~checkboxを~checkされた状態に更新する: ◎ This example allows the user to request a screen wake lock by clicking on a checkbox, but updates the checkbox checked state in case the wake lock state changes: ◎ Example 2
const %checkbox = document.createElement("input"); %checkbox.setAttribute("type", "checkbox"); document.body.appendChild(%checkbox); const %sentinel = await navigator.wakeLock.request("screen"); %checkbox.checked = !%sentinel.released; %sentinel.onrelease = () => %checkbox.checked = !%sentinel.released;
2 個の異なる~wake~lock要請を独立に作成して解放する例: ◎ In this example, two different wake lock requests are created and released independently: ◎ Example 3
let %lock1 = await navigator.wakeLock.request("screen"); let %lock2 = await navigator.wakeLock.request("screen"); %lock1.release(); %lock2.release();
謝辞
◎非規範的次に挙げる方々による,この作業に対する貢献に感謝したい ⇒ `Mounir Lamouri, Sergey Konstantinov, Matvey Larionov, Dominique Hazael-Massieux, Domenic Denicola, Thomas Steiner, Anne van Kesteren^en ◎ We would like to offer our sincere thanks to Mounir Lamouri, Sergey Konstantinov, Matvey Larionov, Dominique Hazael-Massieux, Domenic Denicola, Thomas Steiner, Anne van Kesteren for their contributions to this work.
変更点
◎非規範的この節は、 以前の公表からの変更点を文書化する。 ◎ This section documents the changes since previous publications.
- 2017年 12月 14日 勧告候補からの変更点 ◎ B.1. Changes since the 14 December 2017 CR
- この文書【における~screen~wake種別】を~screen~wake~lockだけに絞って, ~system~lockを新たな仕様へ移動した。 ◎ Convert the document to purely screen wake lock, and move system lock to a new specification.
- 利用者~可視~APIを書き直した。 ◎ Rewrite user-visible API.
- 可視でなくなった文書を処するため、 `WakeLock.request()^c に `中止されたとき@~INFRA#if-aborted$の段を追加した。 【この変更に該当する箇所は、この仕様には無い(他の仕様に移動されたと思われる)】 ◎ Add an if aborted step to WakeLock.request() to deal with hidden documents.
- ~IDL索引を追加した。 ◎ Add an IDL Index.
- 重複な規範的な言明を除去した。 ◎ Remove duplicate normative statements.
- 各~例を現代化した。 ◎ Modernize the examples.
- 注釈文に代えて内部~slotを利用するようにした。 ◎ Use internal slots instead of prose.
- ~UAが いつ`~wake~lockを解放-@#dfn-release-a-wake-lock$してもヨイとされるかに関する情報を追加した。 ◎ Add info on when the user agent may release a wake lock.
- 文書の可視性を取扱うようにした。 ◎ Handle document visibility.
- `ScreenWakeLock^I を構築-可能にした。 ◎ Make ScreenWakeLock constructable.
- 任意選択な許可~prompt法を統合した。 ◎ Integrate optional permission prompting.
- [ 全部的に作動中でなくなった文書, ~worker内で走っている場合 ]を取扱うようにした。 【が、~workerに関する記述は,この仕様~内には無い】 ◎ Handle loss of full activity, as well as running in workers.
- § 序論を書き直した。 ◎ Rewrite the introduction section.
- `Feature Policy^en(特能~施策)を `Permissions Policy^en(許可~施策)に改称した。 ◎ Rename Feature Policy to Permissions Policy.
- `WakeLockSentinel.released^c を追加した。 ◎ Add WakeLockSentinel.released.
- この仕様における~task用の~task~sourceを定義した。 ◎ Define a task source for tasks in this specification.