Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この文書は、アプリケーション APP が実行されているタブを CAPTR が画面キャプチャしている場合に、アプリケーション APP が 特定の情報を別のアプリケーション CAPTR に公開することへオプトインできる仕組みを提案する。これは タブキャプチャ または ウィンドウキャプチャのための仕組みを説明する。
この節は、この文書の公開時点における ステータスを説明する。現在の W3C 公開文書の一覧と、この技術報告の最新改訂版は、 https://www.w3.org/TR/ にある W3C 技術 報告索引で確認できる。
この文書は完全ではない。
この文書は、Web Real-Time Communications Working Group により、 勧告トラックを用いた 作業草案として公開された。
作業草案としての公開は、 W3C およびその会員による支持を意味しない。
これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される 可能性がある。この文書を進行中の作業以外のものとして引用することは 適切ではない。
この文書は、 W3C 特許 ポリシーの下で活動する グループによって作成された。 W3C は、 そのグループの成果物に関連して行われた 特許開示の公開リストを管理している。 そのページには、特許を開示するための 手順も含まれている。個人が、 必須クレームを含むとその個人が考える 特許について実際の知識を有する場合、 W3C 特許ポリシーの第 6 節に従って その情報を開示しなければならない。
この文書は、 2023年11月3日版 W3C プロセス文書に準拠する。
非規範的と記された節と同様に、この仕様におけるすべての作成ガイドライン、図、例、および注記は非規範的である。この仕様のそれ以外のすべては規範的である。
この文書におけるキーワード MUST および MUST NOT は、 BCP 14 [RFC2119] [RFC8174] に記述されているように、かつここに示すようにすべて大文字で現れる場合に限り、解釈されるものとする。
1 つのタブで実行されている Web アプリケーションを考え、それを "main_app" と呼ぶことにする。 main_app が getDisplayMedia を呼び出し、ユーザーが次のいずれかを選択すると仮定する:
次の点に注意されたい:
これら 2 つの性質は一般的な場合には望ましいが、ブラウザーがアプリケーションに、 その隔たりを埋めて接続を可能にすることへオプトインすることを許可したい正当なユースケースが存在する。
一般的な場合を従来どおりに保ちながら、正当なユースケースを可能にしたい。
協調するプレゼンテーションソフトウェアとビデオ会議ソフトウェアを考える。 ユーザーが VC セッション内にいると仮定する。ユーザーはプレゼンテーションの共有を開始する。 両方のアプリケーションは、VC アプリに、それがスライドセッションをキャプチャしていること、 どのアプリケーションであるか、さらにはどのセッションであるかを発見させることに関心がある。 これにより、VC アプリケーションはスライドをめくるためのコントロールをユーザーに公開できる。 ユーザーがそれらのコントロールをクリックすると、VC アプリはプレゼンテーションアプリにメッセージを送信し、 スライドをめくる、プレゼンテーションモードに入る/出る、などの処理を行うよう要求できる。
これらのメッセージを送信する手段は、この文書の範囲外である。選択肢には次のものがある:
キャプチャするアプリケーションは、多くの場合、ユーザーがどのようなアプリケーションを キャプチャする傾向にあるかについて統計を収集したいと考える。たとえば、VC アプリケーションは、 ユーザーが特定のプロバイダーのプレゼンテーションアプリケーション、Wikipedia、CNN などを どの程度の頻度で共有するかを知りたい。このような情報の収集は、上で述べたような新たな コラボレーションを導入することにより、ユーザー向けサービスの改善に利用できる。
ユーザーは誤ったタブを共有することがある。場合によっては、share-this-tab-instead ボタンを 誤ってクリックすることで、誤ったタブの共有に切り替えてしまうことがある。善意のアプリケーションは、 ユーザーが間違いを犯した可能性があると判断した場合、再確認のためにアプリ内ダイアログを表示して ユーザーを保護しようとすることができる。
このユースケースは #3 の下位ケースであるが、その重要性から独自の節に値する。 「鏡の間」効果は、ユーザーが VC 通話が行われているタブを共有することを選択した場合に発生する。 自己キャプチャを検出した場合、VC アプリケーションはキャプチャされたストリームをユーザーに表示し返すことを避け、 それにより恐れられる効果を回避できる。
capture-handle 機構は、2 つの主要な部分、すなわち被キャプチャ側とキャプチャ側からなる。
setCaptureHandleConfig を
呼び出すことにより、情報の公開にオプトインする。
CaptureHandle として読み取る。
アプリケーションは、キャプチャするアプリケーションに情報を公開することを許可される。
通常、それらは自身がキャプチャされているかどうかを知る前にそうする。
使用される機構は、適切な CaptureHandleConfig を指定して
setCaptureHandleConfig
を呼び出すことである。
CaptureHandleConfig 辞書は、被キャプチャアプリケーションがどの情報を公開する意図であるか、 および当該情報をどのアプリケーションに公開してよいと考えているかを、ユーザーエージェントに指示するために用いられる。
WebIDLdictionary CaptureHandleConfig {
boolean exposeOrigin = false;
DOMString handle = "";
sequence<DOMString> permittedOrigins = [];
};
exposeOrigin
true の場合、ユーザーエージェントは MUST、被キャプチャ
アプリケーションのオリジンを origin フィールドを通じて
CaptureHandle に公開しなければならない。
false の場合、ユーザーエージェントは MUST NOT、
被キャプチャアプリケーションのオリジンを公開してはならない。
handle
ユーザーエージェントは MUST、この値を handle として公開しなければならない。
注記: このフィールドの値は、1024 個の 16 ビット文字に制限される。この制限は、
setCaptureHandleConfig
でさらに規定される。
permittedOrigins
このフィールドの有効な値には次のものが含まれる:
"*" を持つリスト。
permittedOrigins
が単一の項目
"*" からなる場合、CaptureHandle はすべてのキャプチャ側から
観測可能である。
そうでない場合、CaptureHandle は、
そのオリジンが permittedOrigins
に列挙されている
キャプチャ側にのみ
観測可能である。
MediaDevices は、
setCaptureHandleConfig
というメソッドで拡張される。
このメソッドは CaptureHandleConfig
オブジェクトを受け取る。このメソッドを呼び出すことにより、アプリケーションは、
キャプチャするアプリケーションにどの情報を観測することを許可するかをユーザーエージェントに知らせる。
setCaptureHandleConfig
が複数回呼び出された場合にどのように振る舞うべきかについては、
それ自体がクロスオリジンメッセージングチャネルとして悪用される懸念があるため、まだ合意がない。
これは
issue #11 で議論中である。
WebIDLpartial interface MediaDevices {
undefined setCaptureHandleConfig(optional CaptureHandleConfig config = {});
};
setCaptureHandleConfig
ユーザーエージェントは MUST、次の検証を実行しなければならない:
handle が無効な値に設定されている場合、
ユーザーエージェントは MUST、
TypeError
を送出して
拒否しなければならない。
permittedOrigins
が無効な値に設定されている場合、ユーザー
エージェントは MUST、NotSupportedError
を送出して
拒否しなければならない。
setCaptureHandleConfig()
の呼び出しが 最上位
閲覧コンテキスト からのものではない場合、ユーザーエージェントは MUST、
InvalidStateError
を送出して
拒否しなければならない。
すべての検証に合格した場合、ユーザーエージェントは MUST 新しい config を受け入れなければならない。
ユーザーエージェントは
MUST、setCaptureHandleConfig
への以前の呼び出しをすべて忘れなければならない。
以後、アプリケーションの CaptureHandleConfig は
config である。
観測可能な CaptureHandle は、すべての
キャプチャアプリケーションについて再評価される。
CaptureHandle
が、setCaptureHandleConfig
の呼び出し前と
異なるすべてのキャプチャアプリケーションについて、ユーザーエージェントは MUST、
イベントを発火する。その名前は
capturehandlechange である。
getCaptureHandle
が呼び出されるたびに、新しい 観測可能な CaptureHandle を報告しなければならない。
トラックの CaptureHandle を
観測することを許可された
キャプチャアプリケーションには、それを読み取る 2 つの方法がある。
getCaptureHandle
によって返される現在の値を読み取る。oncapturehandlechange に
EventListener を登録する。
ユーザーエージェントは、CaptureHandle 辞書を通じて、
被キャプチャアプリケーションに関する情報をキャプチャアプリケーションへ公開する。
CaptureHandle オブジェクトは、
それを
観測することを許可されていないキャプチャアプリケーションに
渡されては MUST NOT ならない点に注意されたい。
WebIDLdictionary CaptureHandle {
DOMString origin;
DOMString handle;
};
origin
被キャプチャアプリケーションが、自身のオリジンを公開することにオプトインしている場合
(exposeOrigin を true
に設定することによる)、
ユーザーエージェントは MUST、
origin を
被キャプチャアプリケーションのオリジンに設定しなければならない。そうでない場合、
origin は設定されない。
handle
ユーザーエージェントは MUST、このフィールドを、
被キャプチャアプリケーションが
handle に設定した値に
設定しなければならない。
MediaStreamTrack
を getCaptureHandle というメソッドで拡張する。
MediaStreamTrack
が画面キャプチャから派生したビデオトラックである場合、
getCaptureHandle は、最新の
観測可能な CaptureHandle を返す。
そうでない場合は null を返す。
getCaptureHandle
が
MediaStreamTrack
上に属するべきか、それとも単一トラックの消費から、すべてのトラックに影響するメッセージングを分離するために、
クローン可能でも
転送可能でもない
専用のコントローラーオブジェクト上に属するべきかについては、まだ合意がない。
これは
issue #12 で議論中である。
WebIDLpartial interface MediaStreamTrack {
CaptureHandle? getCaptureHandle();
};
getCaptureHandle
問題のトラックがビデオトラックでない場合、ユーザーエージェントは MUST
null を返さなければならない。
トラックが
browser または
window
display surface
のいずれも表していない場合、ユーザー
エージェントは MUST null を返さなければならない。
トラックが 終了している場合、ユーザー
エージェントは MUST
null を返さなければならない。
被キャプチャアプリケーションが CaptureHandleConfig を設定していない場合、
または最後にそれを空の CaptureHandleConfig に設定した場合、ユーザー
エージェントは MUST
null を返さなければならない。
ユーザーエージェントは MUST、キャプチャ文書のオリジンを、
被キャプチャアプリケーションが permittedOrigins
に列挙したものと
比較しなければならない。キャプチャ側のオリジンが CaptureHandle を
観測することを許可されていない場合、
ユーザーエージェントは MUST null を返さなければならない。
以前のすべての検証に合格した場合、ユーザーエージェントは MUST、
被キャプチャアプリケーションによって最後に設定された
CaptureHandleConfig から派生した値を持つ
CaptureHandle 辞書を返さなければならない。
指定されたキャプチャアプリケーションに対する
観測可能な CaptureHandle が変化するたびに、
ユーザーエージェントは capturehandlechange という名前の
イベントを発火する。これは次の場合に発生しうる:
CaptureHandleConfig を指定して
setCaptureHandleConfig()
を呼び出す。(新しい CaptureHandleConfig は、
たとえば permittedOrigins
を変更する場合など、
観測可能な CaptureHandle を変化させる場合もあれば、
そうでない場合もあることに注意されたい。)
MediaStreamTrack
は、
oncapturehandlechange と呼ばれる
EventListener
で拡張される。
WebIDLpartial interface MediaStreamTrack {
attribute EventHandler oncapturehandlechange;
};
oncapturehandlechange
EventHandler
は、capturehandlechange
という名前のイベント用である。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: