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/CAADho6OhjD6WsWbtf6O%2BFmUv6gfS4BH35OjUc6wPf4HcKtQaug%40mail.gmail.com.