[81] 
[[DOM API]] 
の中には[DFN[[RUBYB[[RUBY[利][り]][RUBY[用][よう]][RUBY[者][しゃ]][RUBY[活][かっ]][RUBY[性][せい]][RUBY[化][か]]][user activation]]]]が必要なものがいくつかあります。
[[利用者活性化]]とは、
[[利用者]]が [[viewport]] 内の[[要素]]を[[クリック]]するなど、
当該[[閲覧文脈]]に対して明確に操作する意思を示したことをいいます。

[82] 
[[利用者活性化]]の制約は、ある種の[[ブラクラ]]のような[[利用者]]の操作を妨害する動作を[[スクリプト]] (の[[著者]]) が勝手に実行させることを防ぐものであります。
[[Webプラットフォーム]]の草創期 ([[平成時代]]初期)
にその危険性が知られるようになり、[[発見的]]な制約から徐々に整備が進んできました。
現在では
[CITE[HTML Standard]]
によって挙動が詳細に定められています。




* 仕様書

[REFS[
-
[39] 
[CITE@en-US-x-hixie[HTML Standard]], [TIME[2022-01-17T18:04:20.000Z]], [TIME[2022-01-19T10:08:18.943Z]] <https://html.spec.whatwg.org/#tracking-user-activation>
- [65] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#location>
- [68] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#allowed-to-show-a-popup>
- [4] [CITE@en-US[Fullscreen API Standard]] ([TIME[2016-07-22 02:49:58 +09:00]]) <https://fullscreen.spec.whatwg.org/#allowed-to-request-fullscreen>
- [9] [CITE@en[The Screen Orientation API]] ([TIME[2016-07-22 04:15:20 +09:00]]) <https://w3c.github.io/screen-orientation/#dfn-triggered-by-a-user-generated-orientation-change>
]REFS]

* 文脈

[83] 
[[利用者活性化]]の制約は、
[[viewport]] の枠を超えて画面表示に干渉するような操作や、
[[装置]] ([[ハードウェア]]) の状態を変化させるような操作などに課されています。

[77] 
[[利用者活性化]]は、
[[粘着性活性化]]と[[過渡活性化]]の2つに大別されます。
両者の使い方によって、
[[利用者活性化]]に依存した [[API]] は3種類に分類されます。

-
[78] 
[DFN[sticky activation-gated API]]
は、
最初に [[user activation]] を得るまでブロックされる [[API]]
です。
[[粘着性活性化]]状態が[[真]]である必要があるものです。
[SRC[>>39]]
-
[79] 
[DFN[transient activation-gated API]]
は、
[[user activation]]
ごとに、その[[過渡活性化]]状態が[[満期]]するまで、
何度でも呼び出せる [[API]]
です。
[[過渡活性化]]状態が[[真]]である必要があるものです。
[SRC[>>39]]
-
[80] 
[DFN[transient activation-consuming API]]
は、
[[user activation]]
ごとに高々1回だけ呼び出せる 
[[API]]
です。
[[過渡活性化]]状態が[[真]]である必要があって、
[[利用者活性化を消費]]するものです。
[SRC[>>39]]





* 活性化通知

[84] 
[[利用者活性化]]は、
[[窓]] ([CODE[Window]])
ごとに管理されます。
つまり[[利用者]]が [[Webブラウザー]]のある[[窓]]を操作しても、
他の[[窓]]には影響しません。
また、
[[利用者]]がある[[フレーム]]を操作しても、
他の[[フレーム]]に影響するとは限りません。

[85] 
[[利用者]]による[[クリック]]などの操作は、
[[活性化通知]]につながります。


[40] 
[CODE[Window]]
は、
[DFN[[F[[RUBYB[[RUBY[最][さい]][RUBY[終][しゅう]][RUBY[活][かっ]][RUBY[性][せい]][RUBY[化][か]][RUBY[時][じ]][RUBY[刻][こく]][RUBY[印][いん]]][last activation timestamp]]][最終活性化時刻印]]]]を持ちます。
これは、
最後の[[活性化通知]]を得た[[時刻]]を表しています。
[CODE[DOMHighResTimeStamp]]
値の他に、
[[+∞]] や 
[[-∞]]
となることがあります。
初期値は
[[+∞]]
です。
[SRC[>>39]]



[49] 
[[閲覧文脈]][VAR[閲覧文脈]]における[DFN[[RUBYB[[RUBYB[[RUBY[活][かっ]][RUBY[性][せい]][RUBY[化][か]][RUBY[通][つう]][RUBY[知][ち]]][activation notification]]]]]]は、
次のようにします。
[SRC[>>39]]

[FIG(steps)[
= [51] 
[VAR[文書]]を、
[VAR[閲覧文脈]]の[F[活性文書]]に設定します。
=
[52] 
[VAR[閲覧文脈群]]を、
[VAR[閲覧文脈]]、
[VAR[閲覧文脈]]の[[祖先閲覧文脈]]すべて、
[VAR[文書]]の [F[list of descendant browsing contexts]] 中の[[閲覧文脈]]のうち、
その[F[活性文書]]が[VAR[文書]]と[[同じ起源]]であるものすべて、
を含む[[リスト]]に設定します。
=
[53] 
[VAR[窓群]]を、
[VAR[閲覧文脈群]]中の各[VAR[閲覧文脈]]の[F[[CODE[WindowProxy]]]]の[F(ss)[Window]]から[[構築]]した[CODE[Window]]の[[リスト]]に設定します。
=
[54] 
[VAR[窓群]]の各[VAR[窓]]について、[[順に][list iterate]]、
==
[55] 
[VAR[窓]]の[F[最終活性化時刻印]]を、
[[現在高解像度時刻]]に設定します。

]FIG]





[50] 
[[利用者エージェント]]は、
[[閲覧文脈]][VAR[閲覧文脈]]における
[[user interaction]]
に関する
[[activation triggering input event]]
の
[[dispatch]]
の前に、
[VAR[閲覧文脈]]について[[活性化通知]]しなければ[MUST[なりません]]。
[SRC[>>39]]

[56] 
[DFN[activation triggering input event]]
は、
次のすべてを満たす[[イベント]][VAR[イベント]]です。
[SRC[>>39]]

- [57] 
[VAR[イベント]]の[F[[CODE[isTrusted]]]]が[[真]]、かつ、
- [58] 
[VAR[イベント]]の[F[型][イベント型]]が次のいずれか:
--
[CODE[change][onchange]]
-- [CODE[click][onclick]]
-- [CODE[contextmenu][oncontextmenu]]
-- [CODE[dblclick]]
-- [CODE[mouseup]]
-- [CODE[pointerup]]
-- [CODE[reset][onreset]]
-- [CODE[submit][onsubmit]]
-- [CODE[touchend]]

;; [87] 
[[装置]]からの[[入力]]を表す[[イベント]]でも、
[CODE[mousemove]]
や
[CODE[orientationchange]]
のように[[利用者]]の明示的な操作を表すとはいえないものは含まれていません。

;;
[88] 
[[利用者エージェント]]が発生させる[[イベント]]が対象です。
[[スクリプト]]が [CODE[dispacthEvent]] を使っても効果はありません。



* 粘着性活性化

[43] 
[CODE[Window]]
[VAR[窓]]が[DFN[[F[[RUBYB[[RUBY[粘][ねん]][RUBY[着][ちゃく]][RUBY[性][せい]][RUBY[活][かっ]][RUBY[性][せい]][RUBY[化][か]]][sticky activation]]][粘着性活性化]]]]状態であるか否かは、

[FIG(math)[
[VAR[窓]]の[F[最終活性化時刻印]] ≦ [[現在高解像度時刻]]
]FIG]

... であるか否かです。
[SRC[>>39]]

[44] 
[VAR[窓]]の[F[粘着性活性化]]は、
[[利用者]]が[VAR[窓]]と interaction したことがあるかどうかを表しています。
初期状態では[[偽]]になります ([F[現在高解像度時刻]]が [[+∞]])。
[VAR[窓]]が初めて[[活性化通知]]を得たとき[[真]]となり、
再び[[偽]]となることはありません。
[SRC[>>39]]

[45] 
[[Web頁]]を開いたとき (または勝手に開かれたとき)、 
[[利用者]]が何も操作していないのに、
勝手に意図せぬ動作をして[[利用者]]が困るのを防ぐため、
使われています。

* 過渡活性化

[46] 
[CODE[Window]]
[VAR[窓]]が[DFN[[F[[RUBYB[[RUBY[過][か]][RUBY[渡][と]][RUBY[活][かっ]][RUBY[性][せい]][RUBY[化][か]]][transient activation]]][過渡活性化]]]]状態であるか否かは、

[FIG(math)[
[VAR[窓]]の[F[最終活性化時刻印]] ≦ [[現在高解像度時刻]] < 
[VAR[窓]]の[F[最終活性化時刻印]] + [[過渡活性化時間長]]
]FIG]

... であるか否かです。
[SRC[>>39]]

[47] 
[VAR[窓]]の[F[過渡活性化]]は、
[[利用者]]が最近[VAR[窓]]と interaction したかどうかを表しています。
初期状態では[[偽]]になります。
[VAR[窓]]が[[活性化通知]]を得たとき[[真]]となり、
しばらくして[[偽]]に戻ります。
[SRC[>>39]]

[86] 
[[過渡活性化]]が[[真]]から[[偽]]に変化するのは、
一定時間が経過した場合 ([[満期]])
と、
特定の [[API]] が呼び出された場合 ([[利用者活性化消費]])
の2通りがあります。

-*-*-

[41] 
[DFN[[RUBYB[[RUBY[過][か]][RUBY[渡][と]][RUBY[活][かっ]][RUBY[性][せい]][RUBY[化][か]][RUBY[時][じ]][RUBY[間][かん]][RUBY[長][ちょう]]][transient activation duration]]]]は、
[[利用者エージェント]]の定義する値です。
対象の [[API]] において[[利用者]]による[[活性化]]が利用可能な長さを表す定数です。
[SRC[>>39]]

[42] 
この値は、高々数秒程度で、
[[利用者]]による[[頁]]との [[interaction]] と、
[[頁]]が当該 [[API]] を呼び出したこととの関係を知覚できる長さであることが期待されています。
[SRC[>>39]]


[48] 
[VAR[窓]]の[F[過渡活性化]]状態が[[過渡活性化時間長]]の経過を以て[[偽]]となることを、
[DFN[[RUBYB[[RUBY[満][まん]][RUBY[期][き]][RUBY[済][ずみ]]][expired]]]]といいます。
[SRC[>>39]]

-*-*-

[59] 
[CODE[Window]]
[VAR[窓]]について[DFN[[RUBYB[[RUBY[利][り]][RUBY[用][よう]][RUBY[者][しゃ]][RUBY[活][かっ]][RUBY[性][せい]][RUBY[化][か]][RUBY[消][しょう]][RUBY[費][ひ]]][consume user activation]]]]は、
次のようにします。
[SRC[>>39]]

[FIG(steps)[
= 
[61] 
[VAR[窓]]の[F[閲覧文脈]]が [CODE[null]]
の場合、
==
[62] ここで停止します。
=
[63] 
[VAR[頂]]を、
[VAR[窓]]の[F[閲覧文脈]]の[F[最上位閲覧文脈]]に設定します。
=
[70] 
[VAR[閲覧文脈群]]を、
[VAR[頂]]の[F[活性文書]]の[F[list of the descendant browsing contexts]]に設定します。
=
[71] 
[VAR[頂]]を、
[VAR[閲覧文脈群]]の[[末尾に追加]]します。
=
[72] 
[VAR[窓群]]を、
[VAR[閲覧文脈群]]中の各[VAR[閲覧文脈]]の[F[[CODE[WindowProxy]]]]の[F(ss)[Window]]から[[構築]]した[CODE[Window]]の[[リスト]]に設定します。
=
[73] 
[VAR[窓群]]の各[VAR[窓]]について、[[順に][list iterate]]、
==
[74] 
[VAR[窓]]の[F[最終活性化時刻印]]が [[+∞]] で''ない''場合、
===
[75] 
[VAR[窓]]の[F[最終活性化時刻印]]を、 [[-∞]] に設定します。



]FIG]

;; [76] 
[[仕様書]]の[[アルゴリズム]]中の
[[list of the descendant browsing contexts]]
は毎回新しい複製が得られるようです。

[60] 
[[活性化消費するAPI]]から呼び出されます。
[SRC[>>39]]

-*-*-

[89] 
[[過渡活性化]]は、
次の場面で参照されます。

[FIG(short list)[ [90] 過渡活性化状態用API
- [[allowed to navigate]]
- [[閲覧文脈名から閲覧文脈を選択する規則]]
- [[navigate]]
]FIG]



* 歴史

** 初期モデル

[1] [CITE@en[Editorial: "allowed to show a popup" → "triggered by user activation"]]
( ([[domenic]]著, [TIME[2016-06-01 17:23:12 +09:00]]))
<https://github.com/whatwg/html/commit/797f412eb78fd88bd5d0a1c098d17fbf1736c188>

[2] [CITE@en[Existing intervention: user gesture required for sensitive operations · Issue #12 · WICG/interventions]]
( ([TIME[2016-06-02 18:08:21 +09:00]]))
<https://github.com/WICG/interventions/issues/12>

[3] [CITE@en[Allow requestFullscreen() to be called from an orientation change event]]
([[mounirlamouri]]著, [TIME[2016-07-22 02:49:53 +09:00]])
<https://github.com/whatwg/fullscreen/commit/e5e96a9da944babf0e246980559cd80a46a300ca>

[11] [CITE@en[17041 – Setting location before the page is done loading shouldn't always be a replace load]]
( ([TIME[2016-08-26 14:04:08 +09:00]]))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=17041>

[12] [CITE@en[Consider pointerup and touchend for "triggered by user activation"]]
([[NavidZ]]著, [TIME[2016-10-13 05:29:42 +09:00]])
<https://github.com/whatwg/html/commit/adafe995c6d4f5f6df0497a534d31e51043b6750>

[30] [CITE@en[Add allow-top-navigation-by-user-activation sandbox token]]
([[domenic]]著, [TIME[2017-02-24 04:51:48 +09:00]])
<https://github.com/whatwg/html/commit/8abd73ec3a56541e3f6486d3a593a8bcfd67295d>

[33] [CITE@en[Require user gesture to request notification permissions · Issue #49 · WICG/interventions]]
([TIME[2017-07-16 00:39:12 +09:00]])
<https://github.com/WICG/interventions/issues/49>

[34] [CITE@en[Need concept of "consuming" user activation · Issue #3122 · whatwg/html]]
([TIME[2017-10-14 21:02:25 +09:00]])
<https://github.com/whatwg/html/issues/3122>

[35] [CITE@en[Treat trusted contextmenu events as user activation]]
([[mustaqahmed]]著, [TIME[2018-05-03 01:07:47 +09:00]])
<https://github.com/whatwg/html/commit/51bd770cf58cdd761674df0f47c9f9dfc58c5310>

[36] [CITE@en[Treat trusted `contextmenu` events as user activation. by mustaqahmed · Pull Request #3659 · whatwg/html]]
([TIME[2018-05-03 10:55:44 +09:00]])
<https://github.com/whatwg/html/pull/3659>

[37] [CITE@en[Deprecations and removals in Chrome 69  |  Web  |  Google Developers]]
([TIME[2018-09-15 02:56:15 +09:00]])
<https://developers.google.com/web/updates/2018/09/chrome-70-deps-rems>


*** user activation

[69] [DFN[triggered by user activation]] (旧 [DFN[[[allowed to show a popup]]]])
とは、次のいずれかの条件を満たすことをいいます
[SRC[>>68]]。

[FIG(list)[
- [14] [[タスク]]が[[信頼済み]] [CODE(DOMe)@en[[[click]]]] [[イベント]]の[[活性化動作]]の処理中である
- [15] [[タスク]]が[[信頼済み]] [CODE(DOMe)@en[[[click]]]], [CODE(DOMe)@en[[[change]]]],
[CODE(DOMe)@en[contextmenu]],
[CODE(DOMe)@en[[[dblclick]]]], [CODE(DOMe)@en[[[mouseup]]]], [CODE(DOMe)@en[[[reset]]]],
[CODE(DOMe)@en[[[submit]]]],
[CODE(DOMe)@en[pointerup]],
[CODE(DOMe)@en[touchend]] [[イベント]]の[[イベントリスナー]]の処理中である
- [16] [[タスク]]が [[triggered by user activation]] な[[タスク]]から[[タスクキューに追加]]されたものである、
ただし最初の[[タスク]]から[[利用者エージェント]]定義の[[時間]]が経過していない
]FIG]

;; [17] 時間制限は、例えば[[クリック]]から数秒後ならともかく、数時間後は相応しくない
[SRC[>>68]] ことによります。

[EG[
[29] [CODE(HTMLe)@en[button]] の[[クリック]]時の[[ポップアップ]]は認められますが、
[CODE(HTMLe)@en[input]] の入力や [CODE(HTMLe)@en[select]] の変更では認められません。
]EG]

[31] 
他に、[[閲覧文脈]]外部で[[利用者]]の明示的な指示があった場合も含めるべきと思われます。

[EG[
[32] 例えば[[利用者]]が[[ブックマーク]]から選択した[[ブックマークレット]]が
[CODE(JS)@en[window.open]] を実行した場合、[[ポップアップ窓]]が開かれるのが普通です。
]EG]

-*-*-

[64] [CODE(DOMi)@en[[[Location]]]] では、次のいずれかの条件を満たすと分岐します [SRC[>>65]]。 ([[タスク]]以外の判定条件もあります。 [CODE(DOMi)@en[[[Location]]]] 参照。)
[FIG(list)[
- [66] [[タスク]]が[[信頼済み]] [CODE(DOMe)@en[[[click]]]] [[イベント]]の[[活性化動作]]の処理中である
- [67] [[タスク]]が[[信頼済み]] [CODE(DOMe)@en[[[click]]]] [[イベント]]の[[イベントリスナー]]の処理中である
]FIG]

[18] [[タスク]]は、自身がこの条件を満たしているかどうかの情報を保持しておく必要があります。
また[[イベントオブジェクト]] (の持つ情報の一部または全部) も必要かもしれません。
例えば [CODE(JS)@en[[[window.open]]]] は、[[プラットフォームの慣習]]により、 [KBD[[[Ctrl]]]] 
押下時に新しい[[閲覧文脈]]を常に開く、といったような動作にできます。

[25] 実際には [[triggered by user activation]] の実装 (またはその呼び出し元の実装)
は更に厳しく制限しているかもしれません。

[EG[
[27] 例えば同じ[[タスク]]内で多数の新しい[[最上位閲覧文脈]]を作成するのは[[ブラクラ]]であり、
拒否するべきと考えられます。
]EG]

[26] 更に、[[タスク]]を超えた制約もあるかもしれません。

[EG[
[28] 例えば [CODE(JS)@en[[[setTimeout]]]] を使って短時間に別の[[タスク]]で多くの新しい[[最上位閲覧文脈]]を作成するのは[[ブラクラ]]であり、
拒否するべきと考えられます。
]EG]


[19] [[triggered by user activation]] は、次の場面で使われます。
[FIG(list)[
- [[allowed to navigate]]
- [20] 新しい[[最上位閲覧文脈]]を開くかどうかの判断 ([[閲覧文脈名から閲覧文脈を選ぶ規則]]など)
- [21] [CODE(HTMLa)@en[[[download]]]] や [[navigate]] で[[ダウンロード]]するべきかの判断
- [24] [[navigate]] で[[ヘルパーアプリケーション]]を起動するべきかの判断
- [22] [CODE(DOMm)@en[[[requestAutocomplete]]]] 時
- [23] [CODE(HTML)@en[[[<input type=file>]]]] [[ダイアログ]]を開くかどうかの判断
- [[allowed to play]] の条件に使うことがあります。
]FIG]

[13] [[engagement gesture]] でも[[イベント]]のリストが参照されています。

*** user orientation change

[10] [DFN[triggered by a user generated orientation change]] とは、
[[現在走っているタスク]]の [F[process user orientation change]] が[[真]]であることをいいます
[SRC[>>9]]。

*** 全画面の要求

[5] [DFN[allowed to request fullscreen]] とは、
[FIG(list)[
- [6] [[triggered by user activation]]
- [7] [[triggered by a user generated orientation change]]
]FIG]
... の''いずれか''が[[真]]であることをいいます [SRC[>>4]]。

[8] これは、 [CODE(DOMm)@en[requestFullscreen]] で参照されます。




** 令和元(2019)年改定モデル

[95] [CITE@ja[User Activation v2 in Chrome - Google ドキュメント]], [TIME[2022-01-25T08:05:22.000Z]] <https://docs.google.com/document/d/1erpl1yqJlc1pH0QvVVmi1s3WzqQLsEXTLLh6VuYp228/edit>

[99] [CITE@en-US[User Activation v2 (UAv2) | user-activation-v2]], [TIME[2021-04-09T19:49:58.000Z]], [TIME[2022-01-25T08:08:47.375Z]] <https://mustaqahmed.github.io/user-activation-v2/>

[100] [CITE@ja[User Activation v2 browser-side - Google ドキュメント]], [TIME[2022-01-25T08:09:08.000Z]] <https://docs.google.com/document/d/1XL3vCedkqL65ueaGVD-kfB5RnnrnTaxLc7kmU91oerg/edit>

[38] [CITE@en[Revamp the user activation model]]
([[mustaqahmed]], [TIME[2019-12-05 04:09:23 +09:00]], [TIME[2022-01-19T09:21:45.000Z]])
<https://github.com/whatwg/html/commit/8f8c1f50158736b3cf16188377a0974a20367c8b>

[91] [CITE@en[Make "triggered by user activation" match browser behavior · Issue #1903 · whatwg/html]]
([TIME[2022-01-25T07:58:21.000Z]])
<https://github.com/whatwg/html/issues/1903>

[92] [CITE@en[Events list that trigger "allowed to show a popup" seems too small · Issue #1358 · whatwg/html]]
([TIME[2022-01-25T08:02:47.000Z]])
<https://github.com/whatwg/html/issues/1358>

[93] [CITE@en[pop-up blocker algorithm doesn't define behavior for touch · Issue #599 · whatwg/html]]
([TIME[2022-01-25T08:04:40.000Z]])
<https://github.com/whatwg/html/issues/599>

[94] [CITE@en[Need concept of "consuming" user activation · Issue #3122 · whatwg/html]]
([TIME[2022-01-25T08:05:08.000Z]])
<https://github.com/whatwg/html/issues/3122>

[96] [CITE@ja[Existing Chrome APIs using user gestures - Google ドキュメント]], [TIME[2022-01-25T08:06:14.000Z]] <https://docs.google.com/document/d/1mcxB5J_u370juJhSsmK0XQONG2CIE3mvu827O-Knw_Y/edit>

[97] [CITE@en[Some means to signal that a method requires user action to be called · Issue #479 · whatwg/webidl]]
([TIME[2022-01-25T08:06:33.000Z]])
<https://github.com/whatwg/webidl/issues/479>

[98] [CITE@ja[Activation-triggering events across browsers - Google スプレッドシート]], [TIME[2022-01-25T08:07:58.000Z]] <https://docs.google.com/spreadsheets/d/1DGXjhQ6D3yZXIePOMo0dsd2agz0t5W7rYH1NwJ-QGJo/edit#gid=0>

[101] [CITE@en[Added a new section on User Activation v2. by mustaqahmed · Pull Request #3851 · whatwg/html · GitHub]], [TIME[2022-01-25T08:09:42.000Z]] <https://github.com/whatwg/html/pull/3851>

[108] [CITE@ja[User activation TPAC session summary - Google ドキュメント]], [TIME[2022-01-25T08:21:23.000Z]] <https://docs.google.com/document/d/1gHxQMdXGX4UjjoPXi0c1vhwYregQzWNEHqgbydopCoo/edit#>

[102] [CITE@ja[User Activation @BlinkOn10 - Google スライド]], [TIME[2022-01-25T08:13:40.000Z]] <https://docs.google.com/presentation/d/120NtvswBSEvwd2Gjmj2v9r_BDQ6n2PYEYY0dI3EB56w/edit#slide=id.g56099e1461_1_0>

[103] [CITE@en[User activation: different concepts for different usages · Issue #3859 · whatwg/html · GitHub]], [TIME[2022-01-25T08:14:40.000Z]] <https://github.com/whatwg/html/issues/3859>

[104] [CITE@en[GitHub - WICG/gesture-delegation: Gesture Delegation API proposal]], [TIME[2022-01-25T08:18:24.000Z]] <https://github.com/WICG/gesture-delegation>

[105] [CITE@en[User Activation: ability to transfer activation to another frame · Issue #4364 · whatwg/html · GitHub]], [TIME[2022-01-25T08:18:57.000Z]] <https://github.com/whatwg/html/issues/4364>

[106] [CITE@ja[Activation Delegation through Transfer - Google ドキュメント]], [TIME[2022-01-25T08:19:33.000Z]] <https://docs.google.com/document/d/1NKLJ2MBa9lA_FKRgD2ZIO7vIftOJ_YiXXMYfRMdlV-s/edit>

[107] [CITE@en[GitHub - dtapuska/useractivation]], [TIME[2022-01-25T08:20:00.000Z]] <https://github.com/dtapuska/useractivation>