-
Notifications
You must be signed in to change notification settings - Fork 4
/
163.txt
520 lines (403 loc) · 20.3 KB
/
163.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
[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>