Skip to content

Commit aad3334

Browse files
authored
Merge pull request #165 from jan-ivar/dedicated
Reduce scope of MediaStreamTrack transfer to (same-agent-cluster) DedicatedWorker
2 parents f5c339d + 548e95a commit aad3334

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

index.html

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
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]
383383
partial 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)]
511514
interface 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)]
797800
interface 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.
18491852
const videoElement = document.querySelector('video');
18501853
const videoWorker = new Worker('video-worker.js');
18511854
videoWorker.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)]
19711973
partial interface MediaStream {
19721974
};</pre>
19731975
</div>
@@ -2033,7 +2035,7 @@ <h3>Example</h3>
20332035
// Open camera.
20342036
const stream = await navigator.mediaDevices.getUserMedia({video: true});
20352037
const [track] = stream.getVideoTracks();
2036-
// Do video processing in a worker.
2038+
// Do video processing in a dedicated worker.
20372039
const worker = new Worker('worker.js');
20382040
worker.postMessage({track}, [track]);
20392041
const {data} = await new Promise(result => worker.onmessage = result);

0 commit comments

Comments
 (0)