99 // See https://github.com/w3c/respec/wiki/ for how to configure ReSpec
1010 var respecConfig = {
1111 group : "webrtc" ,
12- xref : [ "geometry-1" , "html" , "infra" , "permissions" , "dom" , "hr-time" , "image-capture" , "mediacapture-streams" , "screen-capture" , "webaudio" , "webcodecs" , "webidl" ] ,
12+ xref : [ "geometry-1" , "html" , "infra" , "permissions" , "dom" , "hr-time" , "image-capture" , "mediacapture-streams" , "screen-capture" , "webaudio" , "webcodecs" , "webidl" , "ECMAScript" ] ,
1313 edDraftURI : "https://w3c.github.io/mediacapture-extensions/" ,
1414 editors : [
1515 { name : "Jan-Ivar Bruaroey" , company : "Mozilla Corporation" , w3cid : 79152 } ,
@@ -353,7 +353,7 @@ <h3>Transferable MediaStreamTrack</h3>
353353 < div >
354354 < p > A {{MediaStreamTrack}} is a < a data-cite ="!HTML/#transferable-objects "> transferable object</ a > .
355355 This allows manipulating real-time media outside the context it was requested or created in,
356- for instance in workers or third-party iframes.</ p >
356+ for instance in dedicated workers or same-agent-cluster iframes.</ p >
357357 < p > To preserve the existing privacy and security infrastructure, in particular for capture tracks,
358358 the track source lifetime management remains tied to the context that created it.
359359 The transfer algorithm MUST ensure the following behaviors:</ p >
@@ -379,7 +379,7 @@ <h3>Transferable MediaStreamTrack</h3>
379379 < div >
380380 < p > The WebIDL changes to make the track transferable are the following:
381381 < pre class ="idl "
382- > [Exposed=(Window,Worker ), Transferable]
382+ > [Exposed=(Window,DedicatedWorker ), Transferable]
383383partial interface MediaStreamTrack {
384384};</ pre >
385385 </ div >
@@ -393,6 +393,7 @@ <h3>Transferable MediaStreamTrack</h3>
393393 < p > The {{MediaStreamTrack}} < a data-cite ="!HTML/#transfer-steps "> transfer steps</ a > , given < var > value</ var > and < var > dataHolder</ var > , are:</ p >
394394 < ol >
395395 < li > < p > If < var > value</ var > .`[[IsDetached]]` is < code > true</ code > , throw a "DataCloneError" DOMException.</ p > </ li >
396+ < li > < p > Set < var > dataHolder</ var > .`[[agentCluster]]` to the [=ECMAScript/surrounding agent=]’s [=ECMAScript/agent cluster=].</ p > </ li >
396397 < li > < p > Set < var > dataHolder</ var > .`[[id]]` to < var > value</ var > .{{MediaStreamTrack/id}}.</ p > </ li >
397398 < li > < p > Set < var > dataHolder</ var > .`[[kind]]` to < var > value</ var > .{{MediaStreamTrack/kind}}.</ p > </ li >
398399 < li > < p > Set < var > dataHolder</ var > .`[[label]]` to < var > value</ var > .{{MediaStreamTrack/label}}.</ p > </ li >
@@ -408,6 +409,8 @@ <h3>Transferable MediaStreamTrack</h3>
408409 </ div >
409410 < div > < p > {{MediaStreamTrack}} < a data-cite ="!HTML/#transfer-receiving-steps "> transfer-receiving steps</ a > , given < var > dataHolder</ var > and < var > track</ var > , are:</ p >
410411 < ol >
412+ < li > < p > If the [=ECMAScript/surrounding agent=]’s [=ECMAScript/agent cluster=] is not
413+ < var > dataHolder</ var > .`[[agentCluster]]`, then throw a "DataCloneError" DOMException.</ p > </ li >
411414 < li > < p > Initialize < var > track</ var > .{{MediaStreamTrack/id}} to < var > dataHolder</ var > .`[[id]]`.</ p > </ li >
412415 < li > < p > Initialize < var > track</ var > .{{MediaStreamTrack/kind}} to < var > dataHolder</ var > .`[[kind]]`.</ p > </ li >
413416 < li > < p > Initialize < var > track</ var > .{{MediaStreamTrack/label}} to < var > dataHolder</ var > .`[[label]]`.</ p > </ li >
@@ -507,7 +510,7 @@ <h4>Attributes</h4>
507510 < section >
508511 < h4 > The MediaStreamTrackAudioStats interface</ h4 >
509512 < div >
510- < pre class ="idl " data-cite ="HR-TIME "> [Exposed=Window]
513+ < pre class ="idl " data-cite ="HR-TIME "> [Exposed=( Window,DedicatedWorker) ]
511514interface MediaStreamTrackAudioStats {
512515 readonly attribute unsigned long long deliveredFrames;
513516 readonly attribute DOMHighResTimeStamp deliveredFramesDuration;
@@ -793,7 +796,7 @@ <h4>Methods</h4>
793796 < section >
794797 < h4 > The MediaStreamTrackVideoStats interface</ h4 >
795798 < div >
796- < pre class ="idl "> [Exposed=Window]
799+ < pre class ="idl "> [Exposed=( Window,DedicatedWorker) ]
797800interface MediaStreamTrackVideoStats {
798801 readonly attribute unsigned long long deliveredFrames;
799802 readonly attribute unsigned long long discardedFrames;
@@ -1845,7 +1848,7 @@ <h3>Examples</h3>
18451848 throw('Face bounding box detection is not supported');
18461849}
18471850
1848- // Use a video worker and show to user.
1851+ // Use a dedicated video worker and show to user.
18491852const videoElement = document.querySelector('video');
18501853const videoWorker = new Worker('video-worker.js');
18511854videoWorker.postMessage({track: videoTrack}, [videoTrack]);
@@ -1961,13 +1964,12 @@ <h3>Example</h3>
19611964 </ section >
19621965 </ section >
19631966 < section >
1964- < h2 > MediaStream in workers</ h2 >
1965- < div >
1966- < p > {{MediaStreamTrack}}'s objects are exposed to workers, so can do {{MediaStream}}'s objects.
1967+ < h2 > MediaStream in dedicated workers</ h2 >
19671968 < div >
1969+ < p > {{MediaStream}} is exposed to dedicated workers, matching {{MediaStreamTrack}}, to enable composition.</ p >
19681970 < p > The WebIDL changes are the following:
19691971 < pre class ="idl "
1970- > [Exposed=(Window,Worker )]
1972+ > [Exposed=(Window,DedicatedWorker )]
19711973partial interface MediaStream {
19721974};</ pre >
19731975 </ div >
@@ -2033,7 +2035,7 @@ <h3>Example</h3>
20332035// Open camera.
20342036const stream = await navigator.mediaDevices.getUserMedia({video: true});
20352037const [track] = stream.getVideoTracks();
2036- // Do video processing in a worker.
2038+ // Do video processing in a dedicated worker.
20372039const worker = new Worker('worker.js');
20382040worker.postMessage({track}, [track]);
20392041const {data} = await new Promise(result => worker.onmessage = result);
0 commit comments