* 仕様書

[REFS[
- [32] '''[CITE@en[Service Workers Nightly]] ([TIME[2017-02-16 20:10:49 +09:00]]) <https://w3c.github.io/ServiceWorker/>'''
-- [33] [CITE@en[Service Workers Nightly]] ([TIME[2017-02-16 20:10:49 +09:00]]) <https://w3c.github.io/ServiceWorker/#service-worker-concept>
-- [37] [CITE@en[Service Workers Nightly]] ([TIME[2017-02-16 20:10:49 +09:00]]) <https://w3c.github.io/ServiceWorker/#dfn-service-worker-registration>
-- [44] [CITE@en[Service Workers Nightly]] ([TIME[2017-03-02 15:00:14 +09:00]]) <https://w3c.github.io/ServiceWorker/#run-service-worker-algorithm>
- [31] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2017-02-17 21:49:07 +09:00]]) <https://html.spec.whatwg.org/#link-type-serviceworker>
- [72] [CITE@en[Service Workers Nightly]] ([TIME[2017-03-02 15:00:14 +09:00]]) <https://w3c.github.io/ServiceWorker/#dfn-job-script-url>
- [77] [CITE@en[Service Workers Nightly]] ([TIME[2017-03-02 15:00:14 +09:00]]) <https://w3c.github.io/ServiceWorker/#update-algorithm>
- [104] [CITE@en-US-x-hixie[HTML Standard]], [TIME[2021-04-12T15:12:42.000Z]], [TIME[2021-04-13T08:05:19.833Z]] <https://html.spec.whatwg.org/#service-worker-agent>
]REFS]

* 意味

[34] [RUBYB[サービスワーカー]@en[service worker]]は、
[[ワーカー]]の一種です。[[サービスワーカー]]は、登録した[[サービスワーカークライアント]]の[F[起源]]において実行されます。
[SRC[>>33]]

* 状態

[35] [[サービスワーカー]]は次の状態を持ちます。

[FIG(list members)[
: [F[状態][サービスワーカー]] : [[サービスワーカー]]の状態。
: [F[スクリプトURL][サービスワーカー]] : [[URL]]。
: [F[型][スクリプト型]] : [CODE[classic][古典スクリプト]] または
[CODE[module][モジュールスクリプト]]。初期値は [CODE[classic][古典スクリプト]]。
: [F[containing service worker registration]] :
: [DFN[[F[[RUBYB[[[ID][サービスワーカー]]][id]]]]]] :
[[不透明]]な[[文字列]]。[F[containing service worker registration]]の[[寿命]]内において固有に当[[サービスワーカー]]を識別するものです。
[SRC[>>33]]
: [DFN[[F[大域オブジェクト][ServiceWorkerGlobalScope]]]] :
[CODE(DOMi)@en[ServiceWorkerGlobalScope]] または [CODE[null]]。
: [DFN[[F[スクリプト資源]]]] : [[スクリプト]]または [CODE[null]]。
: [F[スクリプト資源写像]] :
: [F[skip waiting flag]] :
: [F[imported scripts updated flag]] :
: [F[set of event types to handle]] :
: [F[set of extended events]] :
: [F[list of foreign fetch scopes]] :
: [F[list of foreign fetch origins]] :
]FIG]

-*-*-

[38] [[サービスワーカー]]は、[DFN[[F[[RUBYB[[[状態][サービスワーカー]]]@en[state]]]]]]を持ち、
その値は[DFN[[RUBYB[構文解析済み]@en[parsed]]]],
[DFN[[RUBYB[インストール中]@en[installing]]]],
[DFN[[RUBYB[インストール済み]@en[installed]]]],
[DFN[[RUBYB[活性化中]@en[activating]]]],
[DFN[[RUBYB[活性化済み]@en[activated]]]],
[DFN[[RUBYB[冗長]@en[redundant]]]]のいずれかです。
初期状態は構文解析済みです。 [SRC[>>33]]

;; [[handle fetch]] は、[F[状態][サービスワーカー]]が[[活性化中]]から[[活性化済み]]になった時に次の動作を実行します。

[68] [[サービスワーカー]]は、[DFN[[F[[RUBYB[[[走っている]]]@en[running]]]]]]か[RUBYB[否か]@en[not]]のいずれかです。

;; 「走っている」の意味はなぜか定義されていません。
[[サービスワーカーを走らせる]]処理や[[サービスワーカーの終端]]の処理で参照されます。

[39] [[サービスワーカー]]は、[[サービスワーカー登録]]に関連付けられています。

[40] [[サービスワーカー登録]]は[DFN[[F[[RUBYB[[[インストール中ワーカー]]]@en[installing worker]]]]]]を持ち、
値は[[インストール中]]の[[サービスワーカー]]または [CODE[null]] です。
初期値は [CODE[null]] です。 [SRC[>>37]]

[41] [[サービスワーカー登録]]は[DFN[[F[[RUBYB[[[待機中ワーカー]]]@en[waiting worker]]]]]]を持ち、
値は[[インストール済み]]の[[サービスワーカー]]または [CODE[null]] です。
初期値は [CODE[null]] です。 [SRC[>>37]]

[42] [[サービスワーカー登録]]は[DFN[[F[[RUBYB[[[活性ワーカー]]]@en[active worker]]]]]]を持ち、
値は[[活性化中]]または[[活性化済み]]の[[サービスワーカー]]または [CODE[null]] です。 
初期値は [CODE[null]] です。 [SRC[>>37]]

@@ [70] [F[活性ワーカー]]の変化時、[CODE[ready]]

-*-*-

[73] [[サービスワーカー]]は、
[DFN[[F[[RUBYB[[[スクリプトURL][サービスワーカー]]]@en[script url]]]]]]を持ちます
[SRC[>>33]]。値は [[URL]] です。[[サービスワーカー]]の作成に使った [[JavaScript]]
ファイルの [[URL]] を表しています。

[74] [[ジョブ][サービスワーカージョブ]]は、
[DFN[[F[[RUBYB[[[スクリプトURL]]]@en[script url]]]]]]を持ちます [SRC[>>72]]。
値は [[URL]] です。



* サービスワーカーエージェント

[103] 
[DFN[[RUBYB[サービスワーカーエージェント][service worker agent]]]]は、
[CODE[ServiceWorkerGlobalScope]] を1つ含む[[エージェント]]です。
[SRC[>>104]]


* 提供される場面

[23] [[Service Workers]] は、[[保安文脈]]でしか提供されません。つまり、
[[HTTPS]] でない [[HTTP]] の[[文書]]では原則として使えません。

[27] [[アプリ内ブラウザー]]では提供されないことがあります。
(提供されない可能性が高いかもしれません。)

[102] 
しばしば [[Cloudflare Workers]] が[[サービスワーカー]]である、
[[Service Worker]] API を提供する、と紹介されることがあります。
実際には [[Cloudflare Workers]] は[[サービスワーカー]]風 [[API]]
のうちの一部を、独自に拡張したものを提供しているのですが、
[[Cloudflare Workers]] は [[Web]] でいう[[サービスワーカー]]ではありませんし、
[[サービスワーカー]]の動作モデルとは違うものです。

;; [105] なのでそのような解説は [[Cloudflare]] 寄りのマーケティング記事か、
無知な著者の記事だと思って構いません。

* API

** サービスワーカーを扱う API

[FIG(short list)[ [71] 
- [CODE(DOMi)@en[ServiceWorkerContainer]]
- [CODE(DOMi)@en[ServiceWorkerRegistration]]
]FIG]

** サービスワーカーに晒されている API

[22] [[Sercice Workers]] の[[スクリプト]] ([[サービスワーカー環境]])
に[[晒され]]ている [[API]] は、[[文書環境]]とは若干異なります。
[FIG(list)[
- [[文書木]]関係の [[API]] は提供されません。
-- [CODE(DOMi)@en[[[Node]]]] を[[継承]]する [CODE(DOMi)@en[[[Document]]]],
[CODE(DOMi)@en[[[Element]]]] などはありません。
- [[XHR]] は提供されません。
]FIG]

* 処理

** 実行

[43] [DFN[[RUBYB[サービスワーカーを走らせる]@en[Run Service Worker]]]]処理は、
[[サービスワーカー]][VAR[ワーカー]]と
[VAR[force bypass cache for importscripts flag]] について、
次にようにします [SRC[>>44]]。

[FIG(steps)[
= [46] [VAR[ワーカー]]が[F[走っている]]なら、
== [47] 成功を返し、ここで停止します。
= [45] [VAR[スクリプト]]を、[VAR[ワーカー]]の[F[スクリプト資源]]に設定します。
= [48] 独立した[[並列]]に動作する[[実行環境]]を作成し、以後この環境で実行します。
= [50] [VAR[ワーカー大域オブジェクト]]を、新しい [CODE[ServiceWorkerGlobalScope]]
に設定します。
= [49] [VAR[Realm実行文脈]]を、 [CODE[InitializeHostDefinedRealm]] を実行した結果に設定します。
[FIG(list members)[
: [VAR[[[大域オブジェクト]]]] : [VAR[ワーカー大域オブジェクト]]
]FIG]
= [51] [VAR[ワーカー]]の[F[大域オブジェクト]]を、[VAR[ワーカー大域オブジェクト]]に設定します。
= [52] [VAR[設定群]]を、新しい[[環境設定群オブジェクト]]を作成した結果に設定します。
[FIG(list members)[
: [VAR[Realm実行文脈]] : [VAR[Realm実行文脈]]
: [VAR[大域文脈]] : [VAR[ワーカー大域オブジェクト]]
: [VAR[ワーカー]] : [VAR[ワーカー]]
: [VAR[クライアント]] : 
@@ registering [[service worker client]]
]FIG]
= [53] [VAR[ワーカー大域オブジェクト]]を、次の通り設定します。
[FIG(list members)[
: [F[URL][ワーカーのURL]] : [VAR[ワーカー]]の[F[スクリプトURL][サービスワーカー]]
: [F[HTTPS状態]] : [VAR[ワーカー]]の[F[スクリプト資源]]の[F[HTTPS状態]]
: [F[参照元ポリシー]] : [VAR[ワーカー]]の[F[スクリプト資源]]の[F[参照元ポリシー]]
: [F[型][スクリプト型]] : [VAR[ワーカー]]の[F[型][スクリプト型]]
: [F[force bypass cache for importscripts flag]] : [VAR[force bypass cache for importscripts flag]]
]FIG]
= [54] 新しい [CODE(DOMi)@en[WorkerLocation]] を作成します。
[FIG(list members)[ [55] [CODE(DOMi)@en[WorkerLocation]]
: [F[大域オブジェクト]] : [VAR[ワーカー大域オブジェクト]]
]FIG]
= [56] [VAR[ワーカー]]が[[活性ワーカー]]で、
[VAR[ワーカー]]の [F[containing service worker registration]] の[F[タスクキュー群]]の各[VAR[キュー]]について、
== [57] [VAR[キュー]]の各[VAR[タスク]]について順に、
=== [58] [[タスクをキューに追加]]します。
[FIG(list members)[
: [VAR[[[タスクキュー]]]] : [VAR[ワーカー]]の[F[イベントループ]]の[F[タスクキュー群]]の[VAR[キュー]]に相当する[[タスクキュー]]
: [VAR[処理]] : [VAR[タスク]]の[F[処理]]
: [VAR[[[タスク源]]]] : [VAR[タスク]]の[F[タスク源]]
]FIG]
= [59] [VAR[スクリプト]]の種別により、
[FIG(switch)[
: [[古典スクリプト]] : [VAR[スクリプト]]について[[古典スクリプトの実行]]をします。
: [[モジュールスクリプト]] : [VAR[スクリプト]]について[[モジュールスクリプトの実行]]をします。
]FIG]
= [60] [VAR[スクリプト]]の [F[has ever been evaluated flag]] が[[偽]]の場合、
== [61] [VAR[設定群]]の[F[大域オブジェクト]]の[F[イベントリスナー群]]の各[VAR[リスナー]]について、
=== [62] [VAR[リスナー]]の[F[イベント型]]を、[VAR[ワーカー]]の 
[F[set of event types to handle]] の[[末尾に追加]]します。
== [63] [VAR[ワーカー]]の [F[set of event types to handle]] が[[空][空集合]]なら、
=== [64] [[開発者コンソール]]に警告を出す[RUBYB[べき][[[encouraged]]]]です。
== [65] [VAR[スクリプト]]の [F[has ever been evaluated flag]] を、[[真]]に設定します。
= [66] [VAR[設定群]]の[F[有責イベントループ]]を実行します。
= [67] [VAR[ワーカー大域オブジェクト]]の[F[活性タイマー群のリスト]]を、[[空]]にします。
=
@@ [76] 以上で実行時スクリプトエラーが捕獲されていなければ[[失敗]]を、
そうでなければ[[成功]]を返します。 [SRC[>>77]]
]FIG]

[75] 次の場面で呼び出されます。

[FIG(list short)[
- [CODE(DOMm)@en[postMessage]]
- [[更新][更新ジョブ]]
- [[インストール][インストール (サービスワーカー)]]
- [[活性化][活性化 (サービスワーカー)]]
- [[handle fetch]]
- [[handle foreign fetch]]
- [[handle functional event]]
]FIG]

[78] 結果が[[失敗]]かどうかは、[[更新][更新ジョブ]]で参照されます。

** 終了

[36] [[サービスワーカーを終端させる]]手順参照。

** イベントの処理

[FIG(list)[ [69] 
- [[handle fetch]] - [CODE(DOMe)@en[fetch]] [[イベント]]
]FIG]

* 歴史

;; [21] [[AppCache]] も参照。

[1] [CITE[slightlyoff/NavigationController · GitHub]]
( ([TIME[2013-03-30 12:46:40 +09:00]] 版))
<https://github.com/slightlyoff/NavigationController/>

[2] [CITE[IRC logs: freenode / #whatwg / 20130422]]
( ([TIME[2013-05-03 23:39:29 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130422>

[3] [CITE@en[ServiceWorker Design]] <https://github.com/slightlyoff/ServiceWorker/>

[4] [CITE[IRC logs: freenode / #whatwg / 20131029]]
( ([TIME[2013-10-30 20:25:08 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20131029#l-632>

[5] [CITE[Service Workers]]
( ([TIME[2013-11-06 07:17:11 +09:00]] 版))
<https://gist.github.com/slightlyoff/7fae65a908ac318f69a3>

[6] [CITE@en[Service Workers]]
( ([TIME[2014-05-08 01:04:51 +09:00]] 版))
<http://www.w3.org/TR/2014/WD-service-workers-20140508/>

[7] [CITE[Add serviceworker context · f4ffe55 · whatwg/fetch]]
( ([TIME[2014-05-20 09:04:08 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/f4ffe55d27c6ce48838adaa7833f7de247e79921>

[8] [CITE@en[Service Workers]]
( ([TIME[2014-11-18 20:30:05 +09:00]] 版))
<http://www.w3.org/TR/2014/WD-service-workers-20141118/>

[9] [CITE@en[Service Workers]]
( ([TIME[2015-02-04 01:03:52 +09:00]] 版))
<http://www.w3.org/TR/2015/WD-service-workers-20150205/>

[10] [CITE@en-US[Service worker API reference - Mozilla | MDN]]
( ([TIME[2014-04-15 13:16:31 +09:00]] 版))
<https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Social_API/Service_worker_API_reference>

[11] [CITE@en[navigator.connect API]]
([TIME[2014-12-19 07:57:17 +09:00]] 版)
<http://mkruisselbrink.github.io/navigator-connect/>

[12] [CITE[Service Worker Testing - The Chromium Projects]]
([TIME[2015-02-26 09:19:38 +09:00]] 版)
<http://www.chromium.org/blink/serviceworker/testing>

[13] [CITE@en[Service Workers in Firefox Nightly - wanderview]]
([[Ben Kelly]] 著, [TIME[2015-03-25 00:12:01 +09:00]] 版)
<https://blog.wanderview.com/blog/2015/03/24/service-workers-in-firefox-nightly/>

[14] [CITE@en[Service Workers]]
( ([TIME[2015-06-23 20:12:31 +09:00]] 版))
<http://www.w3.org/TR/2015/WD-service-workers-20150625/>

[15] [CITE@en[MIX: Further explain the SW implications. · w3c/webappsec@4ead56c]]
([TIME[2015-07-21 11:23:38 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/4ead56ce75e24e29bff67e905ce2335026c6a00d>

[16] [CITE@en[RfC: Service Workers]]
([[Arthur Barstow]] 著, [TIME[2015-09-21 20:27:49 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webapps/2015JulSep/0374.html>

[17] [CITE@ja[R. NiwaさんはTwitterを使っています: "@slightlylate @hober @kennethrohde @anssik @firt @oriharel and now that the spec is near CR, we're reviewing the spec"]]
([TIME[2015-09-29 10:44:58 +09:00]] 版)
<https://twitter.com/ryosukeniwa/status/648201610800185344>

[FIG(quote)[
[FIGCAPTION[
[18] [CITE@ja[スマートフォン向けサイトに「Service Worker」を日本初導入 「Add to Homescreen」「Offline Cache」の2機能で、よりリッチなオフライン体験が可能に|プレスリリース|リクルート住まいカンパニー]]
([TIME[2015-10-07 15:35:02 +09:00]] 版)
<http://www.recruit-sumai.co.jp/press/2015/10/service-workeradd-to-homescreenoffline-cache2.html>
]FIGCAPTION]

> 不動産・住宅サイト『SUUMO(スーモ)』のスマートフォン用サイトのリニューアル版を本日10/7(水)公開し、 Webブラウザの最新技術 「Service Worker」 を日本で初導入、「Add to Homescreen」「Offline Cache」の2機能が使用可能となりました。

]FIG]


[19] [CITE@en-US[Using Service Workers - Web APIs | MDN]]
([TIME[2015-11-11 22:20:54 +09:00]] 版)
<https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers>

[20] [CITE[Service Worker の update()]]
([TIME[2015-09-25 09:50:11 +09:00]] 版)
<http://blog.nhiroki.jp/2015/06/22/service-worker-update/>

[25] [CITE@en[Service Workers - MozillaWiki]]
([TIME[2016-04-15 17:30:21 +09:00]] 版)
<https://wiki.mozilla.org/Service_Workers>

[26] [CITE[Service worker meeting notes - JakeArchibald.com]]
([TIME[2016-08-12 17:46:03 +09:00]])
<https://jakearchibald.com/2016/service-worker-meeting-notes/>

- [24] [CITE@en[Service Workers Nightly]] ([TIME[2016-03-02 17:37:28 +09:00]] 版) <https://slightlyoff.github.io/ServiceWorker/spec/service_worker/>

[28] [CITE@en[Service Workers Nightly]]
([TIME[2016-10-25 17:02:58 +09:00]])
<https://w3c.github.io/ServiceWorker/>

[29] [CITE@en[Replace skip-service-worker flag with service-workers mode]]
([[jakearchibald]]著, [TIME[2017-02-14 22:07:54 +09:00]])
<https://github.com/whatwg/fetch/commit/d41c2380dc828e7a23c6196a344b42b2d0e9beec>

[30] [CITE@en[Add <link rel=serviceworker>+associated attributes]]
([[sideshowbarker]]著, [TIME[2017-02-16 04:52:40 +09:00]])
<https://github.com/whatwg/html/commit/c5d4f5cbee270e81fd7ed49fd62ca2cd26741240>

[79] [CITE@en[Define agents and agent clusters]]
([[annevk]]著, [TIME[2017-04-26 18:46:01 +09:00]])
<https://github.com/whatwg/html/commit/4db86547f1184e7ceb4f1009cb3bef28101eda4f>

[80] [CITE@en[Work in progress on Web Platform re-charter; Service Workers WG  charter (Advance Notice)]]
([[Wendy Seltzer]]著, [TIME[2017-05-13 04:44:55 +09:00]])
<https://lists.w3.org/Archives/Public/public-new-work/2017May/0006.html>

[81] [CITE@en-US[Service Workers Working Group Charter]]
([TIME[2017-05-13 05:40:52 +09:00]])
<http://w3c.github.io/charter-drafts/sw-charter.html>

[82] [CITE@en[Service Workers Working Group Charter Approved; Call for  Participation]]
([[Xueyuan]]著, [TIME[2017-08-03 12:08:51 +09:00]])
<https://lists.w3.org/Archives/Public/public-webapps/2017JulSep/0018.html>

[83] [CITE@en-US[Service Workers Working Group Charter]]
([TIME[2017-08-03 12:40:23 +09:00]])
<https://www.w3.org/2017/08/sw-charter.html>

[84] [CITE@en[W3C Service Workers Working Group]]
([TIME[2017-08-03 18:37:19 +09:00]])
<https://www.w3.org/sw/>

[85] [CITE[Release Notes for Safari Technology Preview 46 | WebKit]]
([TIME[2017-12-21 10:51:56 +09:00]])
<https://webkit.org/blog/8042/release-notes-for-safari-technology-preview-46/>

[86] [CITE@en[Remove <link rel=serviceworker> for now]]
([[jakearchibald]]著, [TIME[2017-11-22 23:42:53 +09:00]])
<https://github.com/whatwg/html/commit/52d09c920e75eec84c037958b7f9aaad84f860d0>

[87] [CITE@en[Remove foreign fetch by jakearchibald · Pull Request #1207 · w3c/ServiceWorker]]
([TIME[2018-03-20 14:55:19 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1207>

[88] [CITE@en[Removing link rel=serviceworker for now. by jakearchibald · Pull Request #3233 · whatwg/html]]
([TIME[2018-03-20 14:55:49 +09:00]])
<https://github.com/whatwg/html/pull/3233>

[89] [CITE@en[Deprecations and removals in Chrome 66  |  Web  |  Google Developers]]
([TIME[2018-03-30 01:37:56 +09:00]])
<https://developers.google.com/web/updates/2018/03/chrome-66-deprecations>

[90] [CITE[New WebKit Features in Safari 11.1 | WebKit]]
([TIME[2018-04-13 13:40:37 +09:00]])
<https://webkit.org/blog/8216/new-webkit-features-in-safari-11-1/>

[91] [CITE[New WebKit Features in Safari 11.1 | WebKit]]
([TIME[2018-04-24 13:05:45 +09:00]])
<https://webkit.org/blog/8216/new-webkit-features-in-safari-11-1/>

[92] [CITE@en[One ServiceWorker object per service worker per realm (#1428)]]
([[jakearchibald]]著, [TIME[2019-06-08 02:18:07 +09:00]])
<https://github.com/w3c/ServiceWorker/commit/d65ed67c0a20078c5503cae6a78b4ab49cfe3038>

[93] [CITE@en[One ServiceWorker object per service worker per realm by jakearchibald · Pull Request #1428 · w3c/ServiceWorker]]
([TIME[2020-01-12 14:19:25 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1428>

[94] [CITE@en[Adding self.serviceWorker to service workers. (#1426)]]
([[jakearchibald]]著, [TIME[2019-06-21 16:42:12 +09:00]])
<https://github.com/w3c/ServiceWorker/commit/5580c1d73caa34ea8b9f51346e66a2debda75e27>

[95] [CITE@en[Adding self.serviceWorker to service workers. by jakearchibald · Pull Request #1426 · w3c/ServiceWorker]]
([TIME[2020-01-12 14:50:08 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1426>

[96] [CITE@en[Find a way for service workers to get their current state · Issue #1077 · w3c/ServiceWorker]]
([TIME[2020-01-12 14:50:26 +09:00]])
<https://github.com/w3c/ServiceWorker/issues/1077>

[97] [CITE@en[Define service worker events (#1452)]]
([[jungkees]]著, [TIME[2019-08-09 20:18:47 +09:00]])
<https://github.com/w3c/ServiceWorker/commit/b4add25149559ca48245633c0dc045e88ec23d9b>

[98] [CITE@en[Define service worker events by jungkees · Pull Request #1452 · w3c/ServiceWorker]]
([TIME[2020-01-12 16:46:07 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1452>

[99] [CITE@en[Add a note about termination during activation. (#1451)]]
([[josephliccini]]著, [TIME[2019-09-15 18:03:17 +09:00]])
<https://github.com/w3c/ServiceWorker/commit/70bf836a49ffa56f953f6c72bcdbb8aa22d170cc>

[100] [CITE@en[Add a note about termination during activation. by josephliccini · Pull Request #1451 · w3c/ServiceWorker · GitHub]]
([TIME[2020-05-14 11:41:46 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1451>

[101] [CITE@en[Clarification on what happens during a terminated activation · Issue #1372 · w3c/ServiceWorker · GitHub]]
([TIME[2020-05-14 11:42:26 +09:00]])
<https://github.com/w3c/ServiceWorker/issues/1372>