選択

選択

[3] サービスワーカー登録 (service worker registration)

仕様書

メンバー

[205] ServiceWorkerRegistration

状態

[8] サービスワーカー登録は、次の状態を持ちます。

適用範囲URL
サービスワーカー登録は適用範囲URLごとに1つ存在します。
インストール中ワーカー
待機中ワーカー
活性ワーカー
last update check time
初期値は null >>2。
キャッシュ利用
ブール型。初期値は偽。
uninstalling flag
初期値は未設定。 >>2
タスクキュー群
NavigationPreloadManager
navigation preload enabled flag
navigation preload header value
ジョブキュー
プッシュ購読
PushManager

ServiceWorkerContainer インターフェイス register メソッド

[22] ServiceWorkerContainer インターフェイスの register メソッドは、 次の引数を持ちます。

スクリプトURL
USVString >>25。
オプション群
辞書 RegistrationOptions (省略可能) >>25。

[24] 辞書 RegistrationOptions は、次のメンバーを持ちます >>25。

[23] このメソッドは、 NewObject です >>25。

[26] 次のようにしなければなりません >>21。

  1. [28] 約束を、約束に設定します。
  2. [29] クライアントを、文脈オブジェクトのサービスワーカークライアントに設定します。
  3. [30] URLを、スクリプトURLを文脈オブジェクトの関連設定群オブジェクトのAPI基底URLに対して構文解析した結果に設定します。
  4. [31] オプション群の scope が存在するなら、
    1. [32] 適用範囲URLを、オプション群の scope を文脈オブジェクトの関連設定群オブジェクトのAPI基底URLに対して構文解析した結果に設定します。
  5. [33] それ以外の場合、
    1. [27] 適用範囲URLを、 null に設定します。
  6. [34] 登録開始します。
    適用範囲URL
    適用範囲URL
    スクリプトURL
    URL
    約束
    約束
    クライアント
    クライアント
    参照元
    クライアントの作成URL
    ワーカー型
    オプション群の type
    キャッシュ利用
    オプション群の useCache
  7. [35] 約束を返します。

ServiceWorkerContainer インターフェイス getRegistration メソッド

[36] ServiceWorkerContainer インターフェイスの getRegistration メソッドは、 次のようにしなければなりません >>37。

  1. [38] クライアントURLを、省略可能な第1引数を USVString と解釈した結果に設定します。 既定値は空文字列とします。 >>25
  2. [39] クライアントを、文脈オブジェクトのサービスワーカークライアントに設定します。
  3. [40] URLを、クライアントURLを文脈オブジェクトの関連設定群オブジェクトのAPI基底URLに対して構文解析した結果に設定します。
  4. [41] URL が失敗の場合、
    1. [42] TypeError で拒絶した約束を返し、ここで停止します。
  5. [43] URLの起源がクライアントの起源と同じ起源でない場合、
    1. [44] SecurityError 例外で拒絶した約束を返し、ここで停止します。
  6. [45] 約束を、新しい約束に設定します。
  7. [46] 並列の処理を開始します。
  8. [47] 約束を返します。

[48] 並列の処理は、次のようにします >>37。

  1. [49] 登録を、URL についてのサービスワーカー登録の一致の結果に設定します。
  2. [50] 登録が null 以外の場合、
    1. [51] 約束を、登録を表す ServiceWorkerRegistration で解決します。
  3. [52] それ以外の場合、
    1. [53] 約束を、未定義で解決します。

ServiceWorkerContainer インターフェイス getRegistrations メソッド

[55] ServiceWorkerContainer インターフェイスの getRegistrations メソッドは、 次のようにしなければなりません >>54。

  1. [56] クライアントを、文脈オブジェクトのサービスワーカークライアントに設定します。
  2. [57] 約束を、新しい約束に設定します。
  3. [58] 並列の処理を開始します。
  4. [59] 約束を返します

[60] 並列の処理は、次のようにします >>54。

  1. [61] 配列を、新しい配列に設定します。
  2. [62] scope to registration map の各 (キー, 値) について、
    1. [63] キーを構文解析した結果の起源がクライアントの起源と同じ起源で、 値の uninstalling flag が偽なら、
      1. [64] 配列に、
        値と関連付けられた ServiceWorkerRegistration を追加します。
  3. [65] 約束を、配列で解決します。

処理

作成

[85] ジョブのジョブ型の登録 (register) と更新 (update) >>86 は、サービスワーカーの作成処理を表しています。

[67] 登録開始 (Start Register) は、 適用範囲URL、 スクリプトURL、 約束、 クライアント、 参照元、 ワーカー型、 キャッシュ利用について、 次のようにしなければなりません >>66。

  1. [70] 次のいずれかの場合:
    1. [68] 約束を、TypeError で拒絶します。
    2. [69] ここで停止します。
  2. [74] 適用範囲URLが null の場合、
    1. [75] 適用範囲URLを、スクリプトURLのディレクトリーURLに設定します。
  3. [76] 次のいずれかの場合:
    1. [83] 約束を、 TypeError で拒絶します。
    2. [77] ここで停止します。
  4. [82] ジョブを、ジョブ作成の結果に設定します。
    ジョブ型
    登録
    適用範囲URL
    適用範囲URL
    スクリプトURL
    スクリプトURL
    約束
    約束
    クライアント
    クライアント
  5. [87] ジョブを次の通り設定します。
    ワーカー型
    ワーカー型
    キャッシュ利用
    キャッシュ利用
    参照元
    参照元
  6. [78] Schedule Job を実行します。
    ジョブ
    ジョブ
    ジョブキュー
    利用者エージェントの適用範囲URLからジョブキューへの写像の適用範囲URLの値

[88] 登録開始により追加されたジョブは、 適当なタイミングで登録を呼び出します。

[125] ソフト更新 (Soft Update) は、 登録とforce bypass cache flagについて次のようにします >>124。

  1. [162] 最新ワーカーを、登録についての最新ワーカーの取得の結果に設定します。
  2. [157] 最新ワーカーが null の場合、
    1. [158] ここで停止します。
  3. [160] ジョブを、ジョブ作成の結果に設定します。
    ジョブ型
    更新
    適用範囲URL
    登録の適用範囲URL
    スクリプトURL
    最新ワーカーのスクリプトURL
    約束
    null
    クライアント
    null
  4. [159] ジョブのワーカー型を、最新ワーカーの型に設定します。
  5. [161] ジョブの force bypass cache flag を、 force bypass cache flag に設定します。
  6. [165] ジョブキューを、利用者エージェントの適用範囲URLからジョブキューへの写像のジョブの適用範囲URLの値に設定します。
  7. [163] ジョブとジョブキューについて Schedule Job を実行します。

[164] handle fetch と handle functional event から呼び出されます。

[155] 利用者エージェントは、更新を検査したい時にいつでもこの手順を呼び出すことができます >>124。 また、開発者ツールからの呼び出しなどデバッグを補助するために force bypass cache flag を使うことができます >>124。

[167] ソフト更新により追加されたジョブは、 適当なタイミングで更新を呼び出します。

スクリプトの取得と実行

[90] 登録 (Register) は、 ジョブジョブとジョブキュージョブキューを次のようにします >>89。

  1. [91] 次のいずれかの場合:
    1. [92] ジョブと SecurityError 例外についてジョブ約束の拒絶を呼び出します。
    2. [93] ジョブとジョブキューについてジョブ終了を呼び出します。
    3. [94] ここで停止します。
  2. [98] 登録を、ジョブの適用範囲URLについて登録を取得した結果に設定します。
  3. [99] 登録が null 以外の場合、
    1. [100] 登録の uninstalling flag が真の場合、
      1. [101] 登録の uninstalling flag を、偽に設定します。
    2. [102] 最新ワーカーを、登録について最新ワーカーを取得した結果に設定します。
    3. [103] 次のすべてを満たす場合:
      1. [107] ジョブと登録の ServiceWorkerRegistration についてジョブ約束の解決をします。
      2. [108] ジョブとジョブキューについてジョブ終了を呼び出します。
      3. [109] ここで停止します。
  4. [110] それ以外の場合、
    1. [111] ジョブの適用範囲URLとジョブのキャッシュ利用について登録の設定をします。
  5. [112] ジョブとジョブキューについて更新します。

[115] ジョブを走らせる処理から呼び出されます。


[114] 更新 (Update) は、 ジョブとジョブキューを次のようにします >>113。

  1. [116] 登録を、ジョブの適用範囲URLについて登録を取得した結果に設定します。
  2. [117] 登録が null か、 登録の uninstalling flag が真の場合、
    1. [118] ジョブと TypeError でジョブ約束を拒絶します。
    2. [119] ジョブとジョブキューについてジョブ終了します。
  3. [120] 最新ワーカーを、登録について最新ワーカーを取得した結果に設定します。
  4. [121] ジョブのジョブ型が更新で、 最新ワーカーのスクリプトURLがジョブのスクリプトURLと素片識別子除外フラグを設定して等価でない場合、
    1. [122] ジョブと TypeError でジョブ約束を拒絶します。
    2. [123] ジョブとジョブキューについてジョブ終了します。
  5. [126] ジョブのワーカー型により、
    classic
    古典ワーカースクリプトのfetchを実行します。
    URL
    ジョブのスクリプトURL
    fetchクライアント設定群
    ジョブのクライアント
    終点
    serviceworker
    スクリプト設定群オブジェクト
    このサービスワーカー用に作られる環境設定群オブジェクト
    fetchの実行
    サービスワーカー用の処理 (登録、ジョブ、最新ワーカーを参照します。 HTTPS状態、参照元ポリシーを設定することがあります。)
    続きの処理
    >>127
    module
    モジュールワーカースクリプトグラフのfetchを実行します。
    URL
    ジョブのスクリプトURL
    fetchクライアント設定群オブジェクト
    ジョブのクライアント
    終点
    serviceworker
    credentialsモード
    omit
    モジュール写像設定群オブジェクト
    このサービスワーカー用に作られる環境設定群オブジェクト
    fetchの実行
    サービスワーカー用の処理 (登録、ジョブ、最新ワーカーを参照します。 HTTPS状態、参照元ポリシーを設定することがあります。)
    続きの処理
    >>127

[127] スクリプトについての続きの処理は、次のようにします >>113。

  1. [129] スクリプトが null の場合、
    1. [128] ジョブと TypeError についてジョブ約束を拒絶します。
    2. [130] 最新ワーカーが null の場合、
      1. [131] 登録について登録を消去します。
      2. [132] ジョブとジョブキューについてジョブ終了します。
      3. [133] ここで停止します。
  2. [134] 次のすべてを満たす場合:
    1. [140] ジョブと登録の ServiceWorkerRegistration についてジョブ約束を解決します。
    2. [141] ジョブとジョブキューについてジョブ終了します。
    3. [142] ここで停止します。
  3. [143] ワーカーを、新しいサービスワーカーに設定します。
    [144] サービスワーカー
    識別子
    新しい固有の不透明文字列
    スクリプトURL
    ジョブのスクリプトURL
    スクリプト資源
    スクリプト
    型
    ジョブのワーカー型
  4. [145] ワーカーのスクリプト資源のHTTPS状態を、HTTPS状態に設定します。
  5. [146] ワーカーのスクリプト資源の参照元ポリシーを、参照元ポリシーに設定します。
  6. [147] 結果を、サービスワーカーを走らせる処理を実行した結果に設定します。
    ワーカー
    ワーカー
    force bypass cache for importscripts flag
    ジョブの force bypass cache for importscripts flag
  7. [148] 結果が失敗の場合、
    1. [149] ジョブと TypeError についてジョブ約束を拒絶します。
    2. [150] 最新ワーカーが null の場合、
      1. [151] 登録について登録を消去します。
    3. [152] ジョブとジョブキューについてジョブ終了します。
    4. [153] ここで停止します。
  8. [154] ジョブ、ワーカー、登録、ジョブキューについてインストールします。

[156] 更新は、ジョブを走らせる処理の他に、 登録からも呼び出されます。


[169] インストール (Install) は、 ジョブ、ワーカー、登録、ジョブキューを次のようにします >>168。

  1. [170] 失敗を、偽に設定します。
  2. [198] 完了時を、すべて終わったら実行に設定します。
  3. [171] 最新ワーカーを、登録の最新ワーカーの取得の結果に設定します。
  4. [172] 登録、installing、ワーカーについて登録状態更新します。
  5. [173] 登録のインストール中ワーカーとインストール中、 完了時についてワーカー状態の更新を実行します。
  6. [174] ジョブと登録の ServiceWorkerRegistration についてジョブ約束の解決をします。
  7. [175] タスクをキューに追加します。
    処理
    タスク源
    ?
  8. [178] インストール中ワーカーを、登録のインストール中ワーカーに設定します。
  9. [179] インストール中ワーカーとジョブの force bypass cache flag について、サービスワーカーを走らせる処理を実行します。
  10. [180] タスクをキューに追加します。
    処理
    >>197
    捨てる処理
    失敗の時の処理 (>>182)
    タスク源
    ?

[197] タスクは、次のようにします >>168。

  1. [181] イベントを発火します。
    インターフェイス
    InstallEvent
    イベント型
    install
    対象
    インストール中ワーカーの大域オブジェクト
    pending promises count が 0 になった時の処理
    失敗の時の処理 (>>182)
    サービスワーカーの終端で中断された場合、 並列に、失敗の時の処理 (>>182) をします。
  2. [189] 登録のインストール中ワーカーのimported scripts updated flag を、真に設定します。
  3. [190] 登録の待機中ワーカーが null でない場合、
    1. [191] 登録の待機中ワーカーについて、サービスワーカーの終端を実行します。
    2. [192] 登録の待機中ワーカー、「冗長」、完了時について、 ワーカー状態の更新を実行します。
  4. [193] 登録とwaitingと登録のインストール中ワーカーについて、 登録状態の更新を実行します。
  5. [194] 登録とinstallingとnullについて、 登録状態の更新を実行します。
  6. [195] 登録の待機中ワーカー、「インストール済み」、完了時について、 ワーカー状態の更新を実行します。
  7. [196] ジョブとジョブキューについてジョブ終了を実行します。
  8. [199] 完了時について完了時に登録について活性化挑戦します。

[182] 失敗の時の処理は、次のようにします >>168。

  1. [183] 失敗を、真に設定します。
  2. [184] 登録のインストール中ワーカーと「冗長」について、 ワーカー状態の更新を実行します。
  3. [185] installing と null について登録状態の更新を実行します。
  4. [186] 最新ワーカーが null の場合、
    1. [187] 登録について登録消去を実行します。
  5. [188] ジョブとジョブキューについてジョブ終了を実行します。

登録解除

[166] ジョブのジョブ型の登録解除 (unregister) >>86。

[202] プッシュ購読の非活性化

管理

[9] 利用者エージェントは、scope to registration map を持ちます。 これは順序付き写像であって、 キーは適用範囲URLで、値はサービスワーカー登録です。 >>84, >>2

[5] 適用範囲URLが同じサービスワーカー登録が既にあれば、新しいもので置き換えられます。 >>2

[4] 利用者エージェントは、適用範囲URLが異なる限り、 同じ起源の複数のサービスワーカー登録を有効化して構いません。 >>2

[20] scope to registration map 追加時に ready の処理

選択

[11] サービスワーカークライアントクライアントは、 要求の処理に当たり、 サービスワーカー登録を次のように選択 (select) します >>12。

  1. [13] 要求のURLが局所でないなら、
    1. [14] クライアントが利用者エージェントの scope to registration map からサービスワーカー登録一致した結果を返します。
  2. [15] それ以外の場合、
    1. [16] クライアントの有責閲覧文脈が入れ子閲覧文脈の場合、
      1. [18] クライアントの親閲覧文脈の環境のサービスワーカー登録を (あれば) 返します。
    2. [19] クライアントがワーカークライアントなら、
      1. [17] クライアントのワーカーの文書群のいずれかの環境のサービスワーカー登録を (あれば) 返します。
サービスワーカー登録の一致

clear

[203] clear 時、プッシュ購読は削除されます。

文脈

[6] サービスワーカーは、containing service worker registration を持ちます。値はサービスワーカー登録です。 >>1

[7] サービスワーカーのcontaining service worker registrationは、 そのサービスワーカーを含むものです。 >>1

[200] How to create registration objects (#1445) (jakearchibald著, ) https://github.com/w3c/ServiceWorker/commit/7c07a47c06d9f1eb6de5c9580fa8a50382d37a14

[201] How to create registration objects by jakearchibald · Pull Request #1445 · w3c/ServiceWorker () https://github.com/w3c/ServiceWorker/pull/1445