/
236.txt
78 lines (59 loc) · 4.98 KB
/
236.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
* 仕様書
[REFS[
- [1] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#discard-a-document>'''
- [3] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#unloading-document-cleanup-steps>
- [2] [CITE[File API]] ([TIME[2015-04-17 16:25:21 +09:00]] 版) <https://w3c.github.io/FileAPI/#BlobURLStore>
- [11] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#the-worker's-lifetime:discard-a-document>
]REFS]
* 文書を捨てる
[7] [[閲覧文脈]]が[DFN[[RUBYB[[[文書]]を捨てる]@en[discard a [CODE(DOMi)@en[Document]]]]]]際は、次のようにしなければ[['''なりません''']]。
[FIG(steps)[
= [[文書]]の [[''salvageable'']] を[[偽]]に設定します [SRC[>>1]]。
= [[unloading document cleanup steps]] を実行します [SRC[>>1]]。
= [[文書のabort]]を実行します [SRC[>>1]]。
= [[文書]]に関連付けられた[[タスク]]をすべて実行せずに削除します [SRC[>>1]]。
= [[文書]]の[[子供閲覧文脈]]すべてを、[[閲覧文脈を捨てる]]こととします [SRC[>>1]]。
= [[文書]]の[[閲覧文脈から文書への強い参照を破棄]]します [SRC[>>1]]。
= いずれかの[[ワーカー]]の[[ワーカーの[CODE(DOMi)@en[Document]]群]]のリストに[[文書]]が含まれていれば、削除します [SRC[>>11]]。
=- これにより[[ワーカー]]が [[permissible worker]], [[active needed worker]],
[[protected worker]], [[suspendable worker]] かどうかが変化するかもしれません。
]FIG]
;; [12] [[ワーカー]]はメインの処理とは[[並列]]に動作していますから、
[[ワーカーの文書]]からの削除も[[文書を捨てる]]処理の他の手順とは[[非同期的]]に実行されるかもしれません。
(仕様書上で[[文書を捨てる]]処理の一部ではなく、[[ワーカー]]の章で別途規定されているのもそのためと考えられます。)
どのみち[[ワーカー]]の処理は[[並列]]に実行されていますから、
[[ワーカーの文書]]からの削除が同期的か非同期的かを[[著者]]が観測するのは困難 (不可能?)
と思われます。
[9] [[文書を捨てる]]処理は、[[閲覧文脈を捨てる]]処理から呼び出されることがあります。
[13] [[文書を捨てる]]処理は、[[unload a document]] から呼び出されることがあります。
[10] [[文書を捨てる]]処理は、[[セッション履歴]]の[[現在エントリー]]ではなく、
[[スクリプト]]からも参照されていない[[文書]]について、いつでも呼び出すことができます。
;; [[bfcache]] 参照。
;; [14] [[文書を捨てる]]処理が [[unload a document]] から呼び出される場合は、
[[文書]]は[[レンダリング]]中かもしれません。それ以外の場合は[[レンダリング]]中ではありません。
* unloading document cleanup steps
[4] [DFN[[[unloading document cleanup steps]]]] とは、次のものです。
[FIG(steps)[
= [[文書]]の [CODE(DOMi)@en[[[Window]]]] の [CODE(DOMi)@en[[[WebSocket]]]] [[コンストラクター]]から作られた [CODE(DOMi)@en[[[WebSocket]]]] があれば、
== そのすべての [[make disappear]] を実行します [SRC[>>3]]。
== [[文書]]の [[''salvageable'']] を[[偽]]に設定します [SRC[>>3]]。
= [[文書]]の [[''salvageable'']] が[[偽]]なら、
== [[文書]]の [CODE(DOMi)@en[[[Window]]]] の [CODE(DOMi)@en[[[EventSource]]]] [[コンストラクター]]から作られた [CODE(DOMi)@en[[[EventSource]]]] があれば、そのすべての [[forcibly close]] を実行します [SRC[>>3]]。
== [[文書]]の [CODE(DOMi)@en[[[Window]]]] の[[活性タイマーのリスト]]を空にします [SRC[>>3]]。
= [[文書]]の [[Blob URL Store]] の [[Blob URL]] をすべて削除します [SRC[>>2]]。
]FIG]
;; [6] [[WebRTC]] でも同様の処理が必要でしょうか?
[5] 本手順群は、 [[unload a document]] と[[文書を捨てる]]から呼び出されます。
[[unload a document]] は[[文書を捨てる]]を通して計2回本手順群を呼び出すことがあります。
;; 2回呼び出す場合には、その間で再帰的な [[unload a document]] の呼び出しがあるので、
そこで何かを破棄する必要が新たに生じているかもしれません。
* 歴史
[33] [CITE@en[Bug 12837 – Define unloading document cleanup steps]]
([TIME[2015-05-05 19:49:05 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=12837>
[8] [CITE@en[12837 – Define unloading document cleanup steps]]
([TIME[2016-08-13 11:48:00 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=12837>
[15] [CITE@en[Clarify the unloading document cleanup steps]]
([[yuyokk]]著, [TIME[2016-12-29 05:13:30 +09:00]])
<https://github.com/whatwg/html/commit/ef139a459c3c84458ff232f099128b583157d220>