shared worker environment

共有ワーカー (DOM)

[53] 共有ワーカー (shared worker) は、起源単位で実行されるワーカーです。 ページ (閲覧文脈) を超えて共有されることからこの名前があります。

仕様書

状態

[1] SharedWorker には、 EventTarget の状態に加えて、次の状態があります。

関連付けられたワーカー
port

[18] SharedWorkerGlobalScope の状態は、 WorkerGlobalScope 参照。


[90] 利用者エージェントは、 共有ワーカー管理器 (shared worker manager) を持ちます。 その値は、新しい並列キューの開始の結果です。 HTML Standard

[91] 仕様書上は、 利用者エージェントの開始時に作成され、以後終了まで動作し続ける唯一の並列キューとして規定されています。 実際上は起源ごとに存在する形にすることができます (違いは著者に直接観察されません)。

メンバー

[79] SharedWorkerGlobalScopeメンバー

WorkerGlobalScopeメンバーに加えて:

コンストラクター

[84] コンストラクターは、次の引数を受け取ります。

番地
共有ワーカースクリプトURL。必須。 相対URLは、基底URLに対するものとして解決されます。
オプション群
WorkerOptions辞書。 または、古い構文で、ワーカー名を表す文字列。 省略可能。

[3] コンストラクターは、次のようにしなければなりません >>2

  1. [4] 引数として次のものが指定されたと解釈します。
    番地
    USVString (必須)
    オプション群
    DOMString または WorkerOptions (省略可能)
  2. [5] 利用者エージェントの方針次第で、
    1. [25] SecurityError 例外投げ、ここで停止します。
  3. [35] オプション群DOMString の場合、
    1. [59] オプション群を、新しい WorkerOptions に設定します。
      [83] WorkerOptions
      name
      オプション群
  4. [10] 外側設定群を、現職設定群オブジェクトに設定します。
  5. [6] URLを、番地外側設定群に対して構文解析した結果に設定します >>2
  6. [7] URL失敗なら、
    1. [21] SyntaxError 例外投げ、ここで停止します。
  7. [12] ワーカーを、新しい SharedWorker に設定します。
  8. [13] 外側ポートを、新しいMessagePortを作成した結果に設定します。
    所有子
    外側設定群
  9. [14] ワーカーport を、外側ポートに設定します。
  10. [76] 外側ポート出荷します。 仕様書になし
  11. [68] 外側保安文脈かを、 外側設定群について Is environment settings object a secure context? を適用した結果に設定します。
  12. [89] 利用者エージェント共有ワーカー管理器に、 続きの処理 (>>44) の手順群をキューに追加します。
  13. [51] ワーカーを返します。

[44] 続きの処理とは、次のようなものです >>2

  1. [16] ワーカー大域適用範囲を、次の条件をすべて満たすオブジェクトに設定します。
  2. [22] ワーカー大域適用範囲null でなければ、
    1. [64] 内側設定群を、ワーカー大域適用範囲設定群オブジェクトに設定します。
    2. [63] 外側保安文脈か内側設定群について Is environment settings object a secure context? を適用した結果が等しくなければ、
      1. [70] タスクをキューに追加します。
        [71] タスク
        タスク源
        DOM操作タスク源
        操作
        1. [72] 単純イベントを発火します。
          [73] 単純イベント
          イベント型
          error
          対象
          XXX
      2. [65] ここで停止します。
    3. [36] ワーカーワーカー大域適用範囲を関連付けます。
    4. [37] 内側ポートを、 所有者内側設定群として新しいMessagePortオブジェクトを作成した結果に設定します。
    5. [38] 外側ポート内側ポートentangle します。
    6. [77] 内側ポート出荷します。 仕様書になし
    7. [40] タスクをキューに追加します。
      [69] タスク
      タスク源
      DOM操作タスク源
      操作
      1. [57] イベント発火します。
        [11] イベント
        インターフェイス
        MessageEvent
        イベント型
        connect
        対象
        大域オブジェクト
        trusted
        bubbles
        取消可能
        data
        空文字列
        ports
        内側ポートのみの凍結配列
        source
        内側ポート
    8. [47] 所有子を、外側設定群追加する関連所有子に設定します。
    9. [41] 所有子ワーカー大域適用範囲所有子集合追加します。
    10. [42] 所有子WorkerGlobalScope の場合、
      1. [43] ワーカー大域適用範囲所有子ワーカー集合追加します。
  3. [32] それ以外なら、
    1. [54] ワーカーを走らせます
      ワーカー
      ワーカー
      URL
      URL
      外側設定群
      外側設定群
      外側ポート
      外側ポート
      オプション群
      オプション群

[55] 利用者エージェントの方針とは、このページではワーカーを実行させない、 といった指定が想定されている >>2 ようです。

[81] Chromeシークレットウィンドウでは、 SharedWorker オブジェクトが返されて成功したように見えますが、 指定されたスクリプトのfetch は行われていないようです。

[100] 最近の Chrome の通常 (非 incognito) insecure context では、 SharedWorker オブジェクトが返されて成功したように見えますが、 指定されたスクリプトのfetchDevTools によると (pending) のまま実行されず (エラーにもならず) 何も実行されません。 insecure context であることが理由なのかどうかは定かではないのですが、 同じドメインでも https: なら普通に fetch, 実行できます。

[101] Chromeタスク マネージャには共有ワーカータスクが出てくるので何らかの何かはしようとしているらしい、でも実際には何もなされない謎。

[29] SharedWorkerGlobalScope は、 構築器URL (constructor url) 構築器起源 (constructor origin) を持ちます >>23。 これは以後の構築器呼び出し時の比較のために用いられます。

通常はワーカーのURLと一致しますが、リダイレクト等により異なる値となるかしれません。

共有の範囲

[56] 共有ワーカーは、起源単位で共有されます。

[58] private browsing と通常モードは、異なる利用者エージェントとして扱われ、 共有ワーカーもそれぞれ別途に実行されます。

[61] 開発者向けなどの理由で他のページ共有ワーカーを共有しない動作モードも想定されています (>>30)。

共有ワーカーエージェント

[97] 共有 (きょうゆう) ワーカーエージェント (shared worker agent) は、 SharedWorkerGlobalScope を1つ含むエージェントです。 >>98

歴史

[31] Give workers a base URL and clean up shared workers · whatwg/html@b620471 ( 版) https://github.com/whatwg/html/commit/b620471ff823e8e6507b077cf0785a530762f5e3

[60] Make shared workers always key on constructor url and name · whatwg/html@b261d16 ( 版) https://github.com/whatwg/html/commit/b261d162b451a646d5597689f0b831a722a19182

[8] Fix #337: perform origin checks for workers in Fetch · whatwg/html@e86b2e4 ( 版) https://github.com/whatwg/html/commit/e86b2e4b8fdef45404c61c1a85c40da7edf8b561

[9] Remove shared workers? · Issue #315 · whatwg/html ( 版) https://github.com/whatwg/html/issues/315

[24] Rewrite global object initialization to delegate to ES · whatwg/html@cf0355d ( 版) https://github.com/whatwg/html/commit/cf0355d7e0e229b98f7fbd51b8c7608010c787f5

[26] URLs are parsed and produce records · whatwg/html@30bc255 ( 版) https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44

[27] Add module workers · whatwg/html@e3a5bb7 ( 版) https://github.com/whatwg/html/commit/e3a5bb757f64374c37d8c4528c01298463ef0b2a

[33] Make script fetching more correct with regard to request destinations · whatwg/html@6dc9c9e ( 版) https://github.com/whatwg/html/commit/6dc9c9e1efcc3122294fb015e4a4eea66456a611

[34] Use FrozenArray for Navigator#languages and MessageEvent#ports · whatwg/html@e4df68a ( 版) https://github.com/whatwg/html/commit/e4df68a41b86753c7fcdd0d8ea4615f63ffc87e9

[39] Clarify settings object, realm, and global relationships · whatwg/html@0866f1b ( 版) https://github.com/whatwg/html/commit/0866f1b3f4b4ea5a99a30909e9bbe557dea0b460

[46] Use outside settings object to fetch workers ( (domenic著, )) https://github.com/whatwg/html/commit/4e2b0066cb88fdc7ac65cc6e6a7eb40ac39418bd

[45] Use USVString for all URLs ( (domenic著, )) https://github.com/whatwg/html/commit/018b983b77b2cd908f6d00100e7e0abe893dd2c3

[49] Regression fix: add back origin check for shared workers ( (annevk著, )) https://github.com/whatwg/html/commit/18c891f1a300a336d3df5b76fdae3b1d77b0b468

[52] Use current instead of incumbent + entry in worker constructors (domenic著, ) https://github.com/whatwg/html/commit/485c76a84611d094839b3b60d13e6e997594800b

[62] Upstream SharedWorker constructor changes from Secure Contexts (mikewest著, ) https://github.com/whatwg/html/commit/45e2322598e041bd7d0d57b71f04f68c409854ac

[66] SharedWorker is upstreamed. (mikewest著, ) https://github.com/w3c/webappsec-secure-contexts/commit/08a3c187153f3cbf9aedbabe40df94b6b632d8c1

[67] Run more of the SharedWorker constructor in parallel (annevk著, ) https://github.com/whatwg/html/commit/ca9b26bd84fda9c5ddcc8c736326fc3b43715e9e

[74] Do not throw from cross-process code in the SharedWorker constructor (annevk著, ) https://github.com/whatwg/html/commit/2bcde4279b32e7412e014628eaa0c96807345137

[75] Fix regression in setting up SharedWorkerGlobalScope (domenic著, ) https://github.com/whatwg/html/commit/17525591619f64962b181a4d4b3de7735c16c4c9

[15] Define how data URLs affect workers (annevk著, ) https://github.com/whatwg/html/commit/c592f62985ab9aa0e26c111a9823de5101d58c96

[48] Define how data URLs affect workers (annevk著, ) https://github.com/whatwg/html/commit/c592f62985ab9aa0e26c111a9823de5101d58c96

[78] Remove appcache from shared workers (domenic著, ) https://github.com/whatwg/html/commit/3f1c84d682da30be5c323a43dfcc8995aae2f731

[80] 140344 – Remove support for SharedWorkers () https://bugs.webkit.org/show_bug.cgi?id=140344

[82] Define agents and agent clusters (annevk著, ) https://github.com/whatwg/html/commit/4db86547f1184e7ceb4f1009cb3bef28101eda4f

[23] Add a name to dedicated workers, for debugging (domenic著, ) https://github.com/whatwg/html/commit/3bb652169741d5dd94d7f1b390f6491e38d640cb

[85] 28504 – Should SharedWorker have only Exposed=(Window) ? () https://www.w3.org/Bugs/Public/show_bug.cgi?id=28504

[86] State of SharedWorker? · Issue #2887 · whatwg/html () https://github.com/whatwg/html/issues/2887

[87] Remove shared workers? · Issue #315 · whatwg/html () https://github.com/whatwg/html/issues/315

[88] Make shared worker creation deterministic (jakearchibald著, ) https://github.com/whatwg/html/commit/9fda90f44c7c9223de6e3755a043f67ea7c92bf5

[92] Introduce a concept named threads to better describe concurrency · Issue #1843 · whatwg/html () https://github.com/whatwg/html/issues/1843

[93] Cleaning up algorithms and issues. (mikewest著, ) https://github.com/w3c/webappsec-secure-contexts/commit/2cc0b2f634b5062f82d540349233d30cab84e0c3

[94] Editorial: Clarifying secure context integration with Shared Workers (mikewest著, ) https://github.com/whatwg/html/commit/6f9d81839133072355c15efa4b934beaf85ea259

[95] Editorial: Clarifying secure context integration with Shared Workers (mikewest著, ) https://github.com/whatwg/html/commit/6f9d81839133072355c15efa4b934beaf85ea259

[96] Editorial: Clarifying secure context integration with Shared Workers. by mikewest · Pull Request #3243 · whatwg/html () https://github.com/whatwg/html/pull/3243

[99] 154571 - Enable shared workers on Chrome on Android - chromium () https://monorail-prod.appspot.com/p/chromium/issues/detail?id=154571