/
880.txt
160 lines (139 loc) · 8.52 KB
/
880.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
* 仕様書
[REFS[
- [2] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#sharedworker>'''
- [23] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-11-04 19:30:07 +09:00]] 版) <https://html.spec.whatwg.org/#concept-sharedworkerglobalscope-name>
- [35] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-11-04 19:30:07 +09:00]] 版) <https://html.spec.whatwg.org/#dom-sharedworkerglobalscope-name>
]REFS]
* 状態
[1] [CODE(DOMi)@en[[[SharedWorker]]]] には、
[CODE(DOMi)@en[[[EventTarget]]]] の状態に加えて、次の状態があります。
[FIG(list members)[
:関連付けられた[[ワーカー]]:
:[CODE(DOMa)@en[[[port]]]]:
]FIG]
[18] [CODE(DOMi)@en[[[SharedWorkerGlobalScope]]]] の状態は、
[CODE(DOMi)@en[[[WorkerGlobalScope]]]] 参照。
* 名前
[25] [CODE(DOMi)@en[[[SharedWorkerGlobalScope]]]] は、
[DFN[[F[[RUBYB[[[名前]]]@en[name]]]]]]を持ちます [SRC[>>23]]。
これは [CODE(DOMi)@en[[[SharedWorker]]]] [[構築子]]で[[共有ワーカー]]を作成した時に指定された名前を表します
[SRC[>>35]]。
[59] [CODE(DOMi)@en[[[SharedWorkerGlobalScope]]]] [[オブジェクト]]の
[DFN[[CODE(DOMa)@en[[[name]]]]]] [[IDL属性]]は、
[F[[[名前]]]]を返さなければ[['''なりません''']] [SRC[>>35]]。
* 構築子
[3] [[構築子]]は、次のようにしなければ[['''なりません''']] [SRC[>>2]]。
[FIG(steps)[
= [4] [[引数]]として次のものが指定されたと解釈します。
[FIG(list)[
: [VAR[番地]] : [CODE(DOMi)@en[[[DOMString]]]] (必須)
: [VAR[名前]] : [CODE(DOMi)@en[[[DOMString]]]] (既定値は[[空文字列]])
: [VAR[オプション群]] : [CODE(DOMi)@en[[[WorkerOptions]]]] (省略可能)
]FIG]
= [5] [[利用者エージェント]]の方針次第で [CODE(DOMe)@en[[[SecurityError]]]]
[[例外]]を[[投げ]]て停止して構いません。
= [6] [VAR[URL]]を、[VAR[番地]]に[[URLの構文解析]]を適用した結果に設定します [SRC[>>2]]。
([[入口設定群オブジェクト]]の[[API基底URL]]を使うと思われますが、明記されていません。)
= [7] [VAR[URL]]が失敗なら、
== [21] [CODE(DOMe)@en[[[SyntaxError]]]] [[例外]]を[[投げ]]て停止します。
= [10] [VAR[文書群]]を、[[現職設定群オブジェクト]]の
[[list of relevant [CODE(DOMi)@en[Document]] objects to add]] に設定します。
= [12] [VAR[ワーカー]]を、新しい [CODE(DOMi)@en[[[SharedWorker]]]] に設定します。
= [13] [VAR[外側ポート]]を、[[新しい[CODE(DOMi)@en[MessagePort]]を作成]]した結果に設定します。
[F[[[所有者]]]]は[[現職設定群オブジェクト]]とします。
= [14] [VAR[ワーカー]]の [F[[CODE(DOMa)@en[[[port]]]]]] を、[VAR[外側ポート]]に設定します。
= [11] [[原子的]]に:
== [16]
[FIG(list)[
- [17] 次のような [CODE(DOMi)@en[[[SharedWorkerGlobalScope]]]] があり、
-- [19] [F[[[closing flag]]]] が[[偽]]で、
-- [20] [F[[[ワーカーの名前]]]]が[VAR[名前]]と等しく、
-- [28] [F[[[構築子URL]]]]が[VAR[URL]]と完全に等しい
- [30] [[利用者エージェント]]がその [CODE(DOMi)@en[[[SharedWorkerGlobalScope]]]]
を[[現職設定群オブジェクト]]の[[スクリプト]]がアクセスしないよう設定されている
(例えば開発モード) 場合で''ない''なら、
]FIG]
=== [22] [VAR[ワーカー大域適用範囲]]を、見つかった [CODE(DOMi)@en[[[SharedWorkerGlobalScope]]]] に設定します。
=== [36] [VAR[ワーカー]]と[VAR[ワーカー大域適用範囲]]を関連付けます。
=== [37] [VAR[内側ポート]]を、新しい [CODE(DOMi)@en[[[MessagePort]]]] に設定します。
[F[[[所有者]]]]は、[VAR[ワーカー大域適用範囲]]が[F[[[大域オブジェクト]]]]である[[環境設定群オブジェクト]]とします。
=== [38] [VAR[外側ポート]]と[VAR[内側ポート]]を [[entangle]] します。
=== [40] [[タスクをキューに追加]]します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:[[DOM操作タスク源]]
:操作:
[FIG(steps)[
= [57] [[イベント]]を[[発火]]します。
[FIG(list members middle)[
[FIGCAPTION[
[[イベント]]
]FIGCAPTION]
:[[インターフェイス]]:[CODE(DOMi)@en[[[MessageEvent]]]]
:[F[[[イベント型]]]]:[CODE(DOMe)@en[[[connect]]]]
:[F[[[対象]]]]: [VAR[大域オブジェクト]]
:[F[[[trusted]]]]:[[真]]
:[F[[[bubbles]]]]:[[偽]]
:[F[[[取消可能]]]]:[[偽]]
:[F[[CODE(DOMa)@en[[[data]]]]]]:[[空文字列]]
:[F[[CODE(DOMa)@en[[[ports]]]]]]: [VAR[内側ポート]]のみの[[凍結配列]]
:[F[[CODE(DOMa)@en[[[source]]]]]]: [VAR[内側ポート]]
:[F[[[既定動作]]]]:なし
]FIG]
]FIG]
]FIG]
=== [41] [VAR[文書群]]の[[文書]]を、
[VAR[ワーカー大域適用範囲]]の[F[[[ワーカーの[CODE(DOMi)@en[Document]]群]]]]に追加します。
=== [42] [[現職設定群オブジェクト]]の[F[[[大域オブジェクト]]]]が
[CODE(DOMi)@en[[[WorkerGlobalScope]]]] なら、
==== [43] [[現職設定群オブジェクト]]の[F[[[大域オブジェクト]]]]の[F[[[ワーカーのワーカー群]]]]に[VAR[ワーカー大域適用範囲]]を追加します。
=== [44] [VAR[ワーカー]]を返し、ここで停止します。
== [32] それ以外なら、
=== [45] [VAR[親ワーカー大域適用範囲]]を、
[[現職設定群オブジェクト]]の[F[[[大域オブジェクト]]]]が
[CODE(DOMi)@en[[[WorkerGlobalScope]]]] ならそれ、
それ以外なら null に設定します。
===
@@ [15] [VAR[ワーカー大域適用範囲]]の[F[[[構築子URL]]]]を、[VAR[[[URL]]]] に設定します。
===
@@ [48] [VAR[ワーカー大域適用範囲]]の[F[[[ワーカーの名前]]]]を、[VAR[名前]]に設定します。
= [51] [VAR[ワーカー]]を返します。
= [54] [[並列に]]、[[run a worker]] を実行します。
[FIG(list members)[
: [VAR[ワーカー]] : [VAR[ワーカー]]
: [VAR[URL]] : [VAR[URL]]
: [VAR[リファラー]] : [[現職設定群オブジェクト]]の[F[[[作成URL]]]]
: [VAR[外側ポート]] : [VAR[外側ポート]]
: [VAR[文書群]] : [VAR[文書群]]
: [VAR[親ワーカー大域適用範囲]] : [VAR[親ワーカー大域適用範囲]]
: [VAR[オプション群]] : [VAR[オプション群]]
]FIG]
]FIG]
[29] [CODE(DOMi)@en[[[SharedWorkerGlobalScope]]]] は、
[DFN[[F[[RUBYB[[[構築子URL]]]@en[constructor url]]]]]]を持ちます [SRC[>>23]]。
これは以後の[[構築子]]呼び出し時の比較のために用いられます。
;; 通常は[[ワーカーのURL]]と一致しますが、[[リダイレクト]]等により異なる値となるかしれません。
* 歴史
[31] [CITE@en[Give workers a base URL and clean up shared workers · whatwg/html@b620471]] ([TIME[2015-11-06 20:41:00 +09:00]] 版) <https://github.com/whatwg/html/commit/b620471ff823e8e6507b077cf0785a530762f5e3>
[60] [CITE@en[Make shared workers always key on constructor url and name · whatwg/html@b261d16]] ([TIME[2015-11-06 22:29:32 +09:00]] 版) <https://github.com/whatwg/html/commit/b261d162b451a646d5597689f0b831a722a19182>
[8] [CITE@en[Fix #337: perform origin checks for workers in Fetch · whatwg/html@e86b2e4]] ([TIME[2015-11-19 16:22:56 +09:00]] 版) <https://github.com/whatwg/html/commit/e86b2e4b8fdef45404c61c1a85c40da7edf8b561>
[9] [CITE@en[Remove shared workers? · Issue #315 · whatwg/html]]
([TIME[2015-12-01 11:43:55 +09:00]] 版)
<https://github.com/whatwg/html/issues/315>
[24] [CITE@en[Rewrite global object initialization to delegate to ES · whatwg/html@cf0355d]]
([TIME[2015-12-16 20:12:48 +09:00]] 版)
<https://github.com/whatwg/html/commit/cf0355d7e0e229b98f7fbd51b8c7608010c787f5>
[26] [CITE@en[URLs are parsed and produce records · whatwg/html@30bc255]]
([TIME[2016-02-14 23:05:51 +09:00]] 版)
<https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44>
[27] [CITE@en[Add module workers · whatwg/html@e3a5bb7]]
([TIME[2016-02-15 23:07:44 +09:00]] 版)
<https://github.com/whatwg/html/commit/e3a5bb757f64374c37d8c4528c01298463ef0b2a>
[33] [CITE@en[Make script fetching more correct with regard to request destinations · whatwg/html@6dc9c9e]]
([TIME[2016-02-29 18:11:48 +09:00]] 版)
<https://github.com/whatwg/html/commit/6dc9c9e1efcc3122294fb015e4a4eea66456a611>
[34] [CITE@en[Use FrozenArray for Navigator#languages and MessageEvent#ports · whatwg/html@e4df68a]]
([TIME[2016-03-25 13:58:03 +09:00]] 版)
<https://github.com/whatwg/html/commit/e4df68a41b86753c7fcdd0d8ea4615f63ffc87e9>