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/CAADho6PeoCEU-ToTZdB5uEX7936m2o6FSER9XtO-DjOV%3DF4QTw%40mail.gmail.com.