* 仕様書

[REFS[
- [17] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2016-12-05 14:51:53 +09:00]]) <https://html.spec.whatwg.org/#channel-messaging>
-- [2] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2016-12-05 14:51:53 +09:00]]) <https://html.spec.whatwg.org/#message-channels>'''
]REFS]

* 意味

[18] [CODE(DOMi)@en[MessageChannel]] は、2つの [CODE(DOMi)@en[MessagePort]]
の間の[RUBYB[[[通信路]]]@en[channel]]を表します。

;; [19] ただし、2つの [CODE(DOMi)@en[MessagePort]] の間の[[通信路]]があるとき、
必ず対応する [CODE(DOMi)@en[MessageChannel]] [[オブジェクト]]が存在するわけではありません。
例えば[[ワーカー]]とその作成元の間には [CODE(DOMi)@en[MessageChannel]]
はありません。

;; [20] 逆に、 [CODE(DOMi)@en[MessageChannel]] [[オブジェクト]]が破棄されても、
それに対応する[[通信路]]が無くなるわけではありません。両 [CODE(DOMi)@en[MessagePort]]
が有効である限りは、[[通信路]]は存続します。つまり [CODE(DOMi)@en[MessageChannel]]
は作成時以外はあまり意味を持たない[[オブジェクト]]です。

* 作成

[3] [CODE(DOMi)@en[MessageChannel]] [[インターフェイス]]は、[[コンストラクター]]を持ちます
[SRC[>>2]]。

[14] [[コンストラクター]]は、[[引数]]を持ちません。

[15] [[コンストラクター]]は、新しい [CODE(DOMi)@en[MessagePort]] [[オブジェクト]]を作成して返します。

-*-*-

[7] [[コンストラクター]]は、次のようにしなければ[MUST[なりません]] [SRC[>>2]]。
[FIG(steps)[
= [9] [VAR[設定群]]を、[[現職設定群オブジェクト]]に設定します。
= [8] [VAR[ポート1]]を、[VAR[所有者]]を[VAR[設定群]]として[[新しい[CODE(DOMi)@en[MessagePort]]オブジェクトを作成]]した結果に設定します。
= [10] [VAR[ポート2]]を、[VAR[所有者]]を[VAR[設定群]]として[[新しい[CODE(DOMi)@en[MessagePort]]オブジェクトを作成]]した結果に設定します。
= [11] [VAR[ポート1]]と[VAR[ポート2]]を [[entangle]] します。
= [12] 新しい [CODE(DOMi)@en[MessageChannel]] を返します。
[FIG(list members)[ [13] [CODE(DOMi)@en[MessageChannel]]
: [F[ポート1]] : [VAR[ポート1]]
: [F[ポート2]] : [VAR[ポート2]]
]FIG]
]FIG]

* 文脈

[4] [CODE(DOMi)@en[MessageChannel]] [[インターフェイス]]は、
[[文書環境]]と[[ワーカー環境]]に[[晒され]]ています [SRC[>>2]]。

* 状態

[16] [CODE(DOMi)@en[MessageChannel]] [[オブジェクト]]は、
通常の[[プラットフォームオブジェクト]]の状態に加えて、
次の状態を持ちます。
[FIG(short list)[
- [F[ポート1]]
- [F[ポート2]]
]FIG]

* メンバー

[6] [CODE(DOMi)@en[MessageChannel]] [[オブジェクト]]は、
次の[[メンバー][インターフェイスメンバー]]を持ちます。
[FIG(short list)[
- [CODE(DOMa)@en[port1]]
- [CODE(DOMa)@en[port2]]
]FIG]

* 歴史

[5] [[HTML5]] (現 [CITE[HTML Standard]]) で導入されました。

* メモ

[1] [CODE[MessageChannel]] 便利過ぎるwww

[21] [CITE[The WHATWG Blog — HTML and shared memory]]
([TIME[2017-05-02 09:01:53 +09:00]])
<https://blog.whatwg.org/html-and-shared-memory>