Today, I've requested extension of this experiment. Please see https://groups.google.com/u/1/a/chromium.org/g/blink-dev/c/WETrrUYLrTM.
Thanks! Matt On Thu, Sep 2, 2021 at 12:35 PM Matthew Wolenetz <wolen...@chromium.org> wrote: > Thank you for the response - I fully intend to much more strictly restrict > the specification on what kinds of allowances are there, probably just say > that it must be like postMessage(), with a P&S section reference > explicitly describing why (to mitigate potential for enabling Spectre-like > attacks). Cross-origin isolation may be too restrictive for interop unless > implementations use different mechanisms (optimized if isolated, > unoptimized if not, for example). > > On Thu, Sep 2, 2021 at 11:15 AM Mike West <mk...@chromium.org> wrote: > >> LGTM to experiment (assuming a normal length of ~M95 through ~M99 (and my >> sincere apologies that it took me a while to get back to this). I think the >> mitigation y'all are putting into place is reasonable, and I'm happy with >> the CL's direction. >> >> I would like to see this mitigation explained in the specification; the >> current PR suggests that "implementations MAY choose to communicate in >> potentially faster ways", and I'd like to see that tempered a bit with >> considerations that implementers should run through before implementing a >> faster-than-postMessage mechanism (up to and including cross-origin >> isolation). >> >> Thanks! >> >> -mike >> >> >> On Wed, Aug 25, 2021 at 11:32 PM Matthew Wolenetz <wolen...@chromium.org> >> wrote: >> >>> The mitigation code (using kPostedMessage task runner type for >>> cross-thread MSE API state that an app might otherwise use for a high-res >>> timer if optimized too much) is currently in code review ( >>> https://chromium-review.googlesource.com/c/chromium/src/+/3095089). >>> >>> On Thu, Aug 12, 2021 at 12:57 PM Matthew Wolenetz <wolen...@chromium.org> >>> wrote: >>> >>>> I'm lining up the code to do this currently, since the various hooks >>>> into the shared state are complex. Hope to have something for review by >>>> EOW, but then I'm out next week on holiday. >>>> >>>> On Thu, Aug 12, 2021 at 12:19 PM Alex Russell <slightly...@chromium.org> >>>> wrote: >>>> >>>>> I know lots of folks are out on holiday, but wanted to check to see if >>>>> the postMessage timing experiment worked out. >>>>> >>>>> On Wednesday, July 28, 2021 at 12:24:23 PM UTC-7 Matthew Wolenetz >>>>> wrote: >>>>> >>>>>> [CrossOriginIsolated]'s isolation seems to be too strict of a >>>>>> requirement, especially given we can instead require (variable) delays in >>>>>> communication to be induced by queuing tasks to transfer the >>>>>> information. I >>>>>> will investigate adding task queueing for the worker-to-window >>>>>> communication of live seekable range and duration, as used by the window >>>>>> thread for seekable, buffered and duration attribute values. Similarly, >>>>>> "recent error" status of the media element may need task queueing at >>>>>> least >>>>>> in the specification, though I think Chromium's implementation may >>>>>> already >>>>>> be somewhat protected from using it to create a high-res timer. >>>>>> >>>>>> >>>>>> >>>>>> On Thu, Jul 22, 2021 at 11:05 AM Matthew Wolenetz < >>>>>> wolen...@chromium.org> wrote: >>>>>> >>>>>>> Thank you for the background information. I have not discussed >>>>>>> CrossOriginIsolated], though will look and see if it might be a viable >>>>>>> option, as well as discuss with the WG. >>>>>>> >>>>>>> Matt >>>>>>> >>>>>>> On Thu, Jul 22, 2021 at 10:02 AM Mike West <mk...@chromium.org> >>>>>>> wrote: >>>>>>> >>>>>>>> On Thu, Jul 15, 2021 at 8:54 PM Matthew Wolenetz < >>>>>>>> wolen...@chromium.org> wrote: >>>>>>>> >>>>>>>>> Thank you for your question. I'm uncertain what is meant by a >>>>>>>>> "cross-thread stream" in the context of MSE-in-Workers, though I >>>>>>>>> believe I >>>>>>>>> understand your overall concern. >>>>>>>>> >>>>>>>>> The specification makes most of the MSE/HTMLMediaEelement >>>>>>>>> Worker/Window state communication operations rely upon a >>>>>>>>> "cross-context >>>>>>>>> communication mechanism" which allows for implementations to be as >>>>>>>>> slow as >>>>>>>>> an app doing postMessages to communicate state changes across >>>>>>>>> contexts. >>>>>>>>> However, the spec also allows for implementations to perform such >>>>>>>>> communication in more optimized fashion. The current experimental >>>>>>>>> Chromium >>>>>>>>> implementation does some, though not all, operations in this more >>>>>>>>> performant fashion. I'll attempt to list the ops which are/are not >>>>>>>>> optimized here: >>>>>>>>> >>>>>>>>> - Most operations in the MSE impl that touch the media >>>>>>>>> pipeline/demuxer are asynchronous: >>>>>>>>> - SourceBuffer >>>>>>>>> appendBuffer(..)/appendEncodedChunk(..)/remove(start,end): >>>>>>>>> apart from >>>>>>>>> initial sanity checks internal to the MSE API, these queue >>>>>>>>> tasks to parse >>>>>>>>> and buffer input (or remove a range of buffered media) with the >>>>>>>>> demuxer >>>>>>>>> asynchronously, with completion or error causing a change to >>>>>>>>> the 'updating' >>>>>>>>> attribute in Worker, newly queued events in Worker, and if the >>>>>>>>> media >>>>>>>>> pipeline deems the newly buffered information merits media >>>>>>>>> element >>>>>>>>> notification (readyState transition, playback state >>>>>>>>> progress/stall/etc), >>>>>>>>> that is done too (though concurrently and not synchronous with >>>>>>>>> the dispatch >>>>>>>>> or 'updating' transition in Worker). Also, at most one of these >>>>>>>>> operations >>>>>>>>> on a specific SourceBuffer can be in flight at a time. I don't >>>>>>>>> think it's >>>>>>>>> possible to construct a high-res timer from these operations. >>>>>>>>> - Duration attribute updates in Worker are trampolined via >>>>>>>>> media thread asynchronously to Window. >>>>>>>>> - HTMLMediaElement.buffered and seekable queries in Window >>>>>>>>> are dependent upon the result of asynchronous operations in >>>>>>>>> Worker >>>>>>>>> (appends/removes, described above), with the exception of: >>>>>>>>> - The buffered and seekable synchronous calculations are >>>>>>>>> done under a micro-lock on the shared Worker state, and >>>>>>>>> though the buffered >>>>>>>>> ranges are updated asynchronously (per above) in a >>>>>>>>> SourceBuffer, there are >>>>>>>>> other operations on MSE API that are synchronous and could >>>>>>>>> modify the >>>>>>>>> result of the seekable query: >>>>>>>>> - [*] set/clearLiveSeekableRange is used by .seekable >>>>>>>>> if duration is +Infinity. If duration is not used and >>>>>>>>> nothing is buffered, >>>>>>>>> then seekable contains the duration value as the single >>>>>>>>> range's end time. >>>>>>>>> This is the only information of which I am aware that the >>>>>>>>> implementation >>>>>>>>> might allow a Worker to set timing information using the >>>>>>>>> seekable range and >>>>>>>>> duration. >>>>>>>>> >>>>>>>>> Considering a successful MSE-in-Worker attachment/connection is >>>>>>>>> allowed only for same-origin workers, if I understand correctly, then >>>>>>>>> would >>>>>>>>> [*] be a cause for concern? >>>>>>>>> >>>>>>>>> Possible mitigations for [*]: >>>>>>>>> >>>>>>>>> - Make the seekable and buffered queries done by the media >>>>>>>>> element depend on asynchronously updated live-seekable-range and >>>>>>>>> duration >>>>>>>>> information. >>>>>>>>> >>>>>>>>> If one side of the optimized communication channel can set state >>>>>>>> that's visible to the other side, it seems like it might be a cause for >>>>>>>> concern, as it sounds like it might allow developers to create a very >>>>>>>> high-resolution timer in the same way that SharedArrayBuffer does >>>>>>>> (e.g. by >>>>>>>> incrementing a value in a tight loop on one side, and reading the value >>>>>>>> from the other, see >>>>>>>> https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#implicit-clocks). >>>>>>>> We've addressed that concern for SharedArrayBuffer by gating it on >>>>>>>> cross-origin isolation to ensure that attackers using timers for >>>>>>>> side-channel attacks have a harder time gaining access to sensitive >>>>>>>> data. >>>>>>>> Could [CrossOriginIsolated >>>>>>>> <https://heycam.github.io/webidl/#CrossOriginIsolated>] be a >>>>>>>> reasonable restriction for this mechanism as well? Is this something >>>>>>>> you've >>>>>>>> discussed in the working group? Or am I misunderstanding the >>>>>>>> capability you >>>>>>>> refer to above? >>>>>>>> >>>>>>>> >>>>>>>>> Regarding P&S in the MSE spec, there's an MSE spec bug previously >>>>>>>>> already, separate from MSE-in-Workers, to add the P&S sections per >>>>>>>>> Media >>>>>>>>> WG: https://github.com/w3c/media-source/issues/261. I could >>>>>>>>> update it and the draft MSE-in-Worker spec PR to ensure that the >>>>>>>>> seekable >>>>>>>>> and buffered information is not over-optimized, if either >>>>>>>>> cross-origin MSE >>>>>>>>> attachments (worker scripts) are somehow allowed, or if there is >>>>>>>>> still the >>>>>>>>> high-res timer concern even if same-origin. >>>>>>>>> >>>>>>>>> Thanks again for your question - please help me further understand >>>>>>>>> the concern. >>>>>>>>> >>>>>>>>> -Matt >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Thu, Jul 15, 2021 at 12:45 AM Mike West <mk...@chromium.org> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Friendly ping on the question below. >>>>>>>>>> >>>>>>>>>> -mike >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Thu, Jul 1, 2021 at 8:45 PM Mike West <mk...@chromium.org> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> It sounds like there may be some potential for creating a >>>>>>>>>>> high-resolution timer using a cross-thread stream. Is this >>>>>>>>>>> something y'all >>>>>>>>>>> have looked into? Is memory shared between the Dedicated Worker and >>>>>>>>>>> its >>>>>>>>>>> Window? https://w3c.github.io/media-source/ doesn't have a >>>>>>>>>>> security considerations section, so it's not clear if this has been >>>>>>>>>>> considered. >>>>>>>>>>> >>>>>>>>>>> -mike >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Wed, Jun 30, 2021 at 11:55 PM Matthew Wolenetz < >>>>>>>>>>> wolen...@chromium.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> Changed title (fixed typo) in case filters missed the original >>>>>>>>>>>> transmission. >>>>>>>>>>>> >>>>>>>>>>>> On Wed, Jun 30, 2021 at 2:53 PM Matthew Wolenetz < >>>>>>>>>>>> wolen...@chromium.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Contact emailswolen...@chromium.org >>>>>>>>>>>>> >>>>>>>>>>>>> Explainer >>>>>>>>>>>>> https://github.com/wicg/media-source/blob/mse-in-workers-using-handle/mse-in-workers-using-handle-explainer.md >>>>>>>>>>>>> >>>>>>>>>>>>> Specificationhttps://github.com/w3c/media-source/pull/282 >>>>>>>>>>>>> >>>>>>>>>>>>> Summary >>>>>>>>>>>>> >>>>>>>>>>>>> Enable Media Source Extensions (MSE) API usage from >>>>>>>>>>>>> DedicatedWorker contexts to enable improved performance of >>>>>>>>>>>>> buffering media >>>>>>>>>>>>> for playback by an HTMLMediaElement on the main Window context. >>>>>>>>>>>>> By creating >>>>>>>>>>>>> a MediaSource object on a DedicatedWorker context, an application >>>>>>>>>>>>> may then >>>>>>>>>>>>> create an ObjectURL for it and postMessage that URL to the main >>>>>>>>>>>>> thread for >>>>>>>>>>>>> use in attaching to an HTMLMediaElement. The context that created >>>>>>>>>>>>> the >>>>>>>>>>>>> MediaSource object may then use it to buffer media. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Blink componentBlink>Media >>>>>>>>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EMedia> >>>>>>>>>>>>> >>>>>>>>>>>>> Search tagsMSE <https://chromestatus.com/features#tags:MSE>, >>>>>>>>>>>>> MediaSource >>>>>>>>>>>>> <https://chromestatus.com/features#tags:MediaSource>, >>>>>>>>>>>>> MediaSourceExtensions >>>>>>>>>>>>> <https://chromestatus.com/features#tags:MediaSourceExtensions> >>>>>>>>>>>>> >>>>>>>>>>>>> TAG reviewhttps://github.com/w3ctag/design-reviews/issues/656 >>>>>>>>>>>>> >>>>>>>>>>>>> TAG review statusPending >>>>>>>>>>>>> >>>>>>>>>>>>> Risks >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Interoperability and Compatibility >>>>>>>>>>>>> >>>>>>>>>>>>> Main interoperability risk is that other browsers may not >>>>>>>>>>>>> implement it. Compatibility risk is mitigated by unchanged >>>>>>>>>>>>> same-thread MSE >>>>>>>>>>>>> API support and proactive feature-detectability of MSE-in-Workers >>>>>>>>>>>>> with a >>>>>>>>>>>>> new canConstructInDedicatedWorker attribute on the MediaSource >>>>>>>>>>>>> interface. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Gecko: No signal ( >>>>>>>>>>>>> https://github.com/mozilla/standards-positions/issues/547) >>>>>>>>>>>>> >>>>>>>>>>>>> WebKit: No signal ( >>>>>>>>>>>>> https://lists.webkit.org/pipermail/webkit-dev/2021-June/031916.html >>>>>>>>>>>>> ) >>>>>>>>>>>>> >>>>>>>>>>>>> Web developers: No signals >>>>>>>>>>>>> >>>>>>>>>>>>> Ergonomics >>>>>>>>>>>>> >>>>>>>>>>>>> DedicatedWorker, WorkerGlobalScope and postMessage/onmessage >>>>>>>>>>>>> availability is integral to using this feature. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Activation >>>>>>>>>>>>> >>>>>>>>>>>>> The primary risk is the potential difficulty in refactoring >>>>>>>>>>>>> existing MSE web applications to (conditionally, depending on >>>>>>>>>>>>> browser >>>>>>>>>>>>> support) perform buffering in a different execution context from >>>>>>>>>>>>> the Window >>>>>>>>>>>>> context that hosts the DOM and the media element. The benefit of >>>>>>>>>>>>> potentially improved buffering performance by offloading the MSE >>>>>>>>>>>>> API usage >>>>>>>>>>>>> to a worker context provides motivation to overcome this >>>>>>>>>>>>> challenge. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Security >>>>>>>>>>>>> >>>>>>>>>>>>> Unpredictability of racing context destruction of either the >>>>>>>>>>>>> main thread hosting the media element (and owning the underlying >>>>>>>>>>>>> MSE media >>>>>>>>>>>>> demuxer and player) or the dedicated worker thread hosting the >>>>>>>>>>>>> interface to >>>>>>>>>>>>> the MSE demuxer when using MSE from a worker context motivated >>>>>>>>>>>>> careful >>>>>>>>>>>>> design of a refcounted, outside-of-Oilpan, attachment abstraction >>>>>>>>>>>>> to ensure >>>>>>>>>>>>> safety of operations using locks and having a lifetime that >>>>>>>>>>>>> exceeds those >>>>>>>>>>>>> execution contexts. Preventing use-after-free and similar was a >>>>>>>>>>>>> primary >>>>>>>>>>>>> complexity of implementation and a focus area of added tests. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Goals for experimentation >>>>>>>>>>>>> >>>>>>>>>>>>> * Obtain developer feedback on API ergonomics and >>>>>>>>>>>>> implementation stability. * Increase confidence in benefits of >>>>>>>>>>>>> feature >>>>>>>>>>>>> (exposing and enabling MSE usage from DedicatedWorker contexts) >>>>>>>>>>>>> to support >>>>>>>>>>>>> its standardization. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Reason this experiment is being extended >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Ongoing technical constraints >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Will this feature be supported on all six Blink platforms >>>>>>>>>>>>> (Windows, Mac, Linux, Chrome OS, Android, and Android WebView)? >>>>>>>>>>>>> Yes >>>>>>>>>>>>> >>>>>>>>>>>>> MSE and DedicatedWorker already exist on all six Blink >>>>>>>>>>>>> platforms. This feature lets MSE work from DedicatedWorker >>>>>>>>>>>>> contexts. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Is this feature fully tested by web-platform-tests >>>>>>>>>>>>> <https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md> >>>>>>>>>>>>> ?Yes >>>>>>>>>>>>> >>>>>>>>>>>>> DevTrial instructions >>>>>>>>>>>>> https://github.com/w3c/media-source/issues/175#issuecomment-721395481 >>>>>>>>>>>>> >>>>>>>>>>>>> Flag nameMediaSourceInWorkers >>>>>>>>>>>>> >>>>>>>>>>>>> Tracking bughttps://crbug.com/878133 >>>>>>>>>>>>> >>>>>>>>>>>>> Link to entry on the Chrome Platform Status >>>>>>>>>>>>> https://chromestatus.com/feature/5177263249162240 >>>>>>>>>>>>> >>>>>>>>>>>>> Links to previous Intent discussionsIntent to prototype: >>>>>>>>>>>>> https://groups.google.com/u/1/a/chromium.org/g/blink-dev/c/CNRywDqgKjY/m/F0nnA4tTAwAJ >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> This intent message was generated by Chrome Platform Status >>>>>>>>>>>>> <https://www.chromestatus.com/>. >>>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>> Google Groups "blink-dev" group. >>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>> it, send an email to blink-dev+unsubscr...@chromium.org. >>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAADho6OYdKY_VBN94cDZGKwDrR_D7JSG4EZq%3DvMas%2B5Q%2BXR-xA%40mail.gmail.com >>>>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAADho6OYdKY_VBN94cDZGKwDrR_D7JSG4EZq%3DvMas%2B5Q%2BXR-xA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>> . >>>>>>>>>>>> >>>>>>>>>>> -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAADho6NTFE1rGL3tiRJ%2BBJn50xnEEZ-ziMPstJ-u1T_b%3D3syRQ%40mail.gmail.com.