Instagram videos aren't being played
Categories
(Core :: DOM: Streams, defect, P3)
Tracking
()
Tracking | Status | |
---|---|---|
firefox-esr91 | --- | unaffected |
firefox98 | --- | unaffected |
firefox99 | --- | unaffected |
firefox100 | --- | verified |
People
(Reporter: danibodea, Unassigned)
References
(Regression)
Details
(Keywords: regression)
Note
- When the user logs into Instagram, scrolls down and reaches a video post, he will notice that the video won't play.
Affected versions
- Nightly v100.0a1
Affected platforms
- Ubuntu 20/22 wayland/xwayland
- Windows 10
Steps to reproduce
- Launch browser.
- Log into Instagram
- Scroll to watch a video post
Expected result
- The video plays.
Actual result
- The video does NOT play.
Regression range
- Recent regression:
27:42.81 INFO: No more integration revisions, bisection finished.
27:42.81 INFO: Last good revision: e0d73b8faa6648dc349e99ca932e7329a2ef3579
27:42.81 INFO: First bad revision: b58cc8e5384a36996dfebd9ebeb3bf2669ca6b52
27:42.81 INFO: Pushlog:
https://hg.mozilla.org/integration/autoland/pushloghtml?fromchange=e0d73b8faa6648dc349e99ca932e7329a2ef3579&tochange=b58cc8e5384a36996dfebd9ebeb3bf2669ca6b52
Additional notes
- Console error:
Uncaught (in promise) TypeError: s.pipeThrough is not a function
startStream https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:92
promise callbackstartStream https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:92
startStream https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:66
OzStreamingTask8 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:138
promise callback$OzStreamingTask8 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:138
addStreamDeferred https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:138
startStreamDeferred https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:137
$OzMediaStream36 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:134
execute https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:134
$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
promise callbackm.exports</this.$OzMediaStreamLoopDriver4 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
start https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:141
start https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:134
$Player61 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:2
$Player60 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:2
$Player68 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:2
$Player59 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:2
$Player50 https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:2
setupPlayer https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:2
load https://www.instagram.com/static/bundles/es6/oz-player.main.js/1a13126158cf.js:2
v https://www.instagram.com/static/bundles/es6/Consumer.js/12fb05ad461e.js:39
promise callbacke.useOzPlayer/< https://www.instagram.com/static/bundles/es6/Consumer.js/12fb05ad461e.js:39
tl https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
Ql https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
Wl https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
Vl https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
zl https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
Kn https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
Wl https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
Vl https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
_l https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:11
c https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:13
b https://www.instagram.com/static/bundles/es6/Vendor.js/17711fe62512.js:13
1a13126158cf.js:92:3300
Reporter | ||
Updated•2 years ago
|
Comment 1•2 years ago
•
|
||
Oh, so they expect pipeThrough too, even when they don't use TransformStream. Interesting, I thought those two would be paired together, but it seems the real world use disagrees.
Matthew, are we confident enough to ship pipeThrough together with WritableStream? Their feature detection is seemingly like this (why omit pipeThrough there, grrr):
__d(
function (g, r, i, a, m, e, d) {
"use strict";
m.exports = () =>
null == window.WritableStream ||
null == window.ReadableStream ||
null == window.ReadableStream.prototype.pipeTo;
},
3342382,
[]
);
(My personal answer: maybe we are okay with it? The pipeThrough tests are passing anyway, I just wish that enabling pipeThrough won't break another set of websites...)
(Another way would be to ping them and fix their feature detection.)
Updated•2 years ago
|
Comment 2•2 years ago
|
||
I can verify that if we set dom.streams.pipeTo.enabled=false
, video playback behaviour on Instagram seems to be restored.
We've got a variety of possibilities:
- Reach out to instagram, and see if they can also feature test for
pipeThrough
- Ship
WritableStream
, but notpipeTo
- Do a site-specific intervention to hide the
pipeTo
property until we shippipeThrough
- Unship
WritableStream
andpipeTo
and hold them untilTransformStream
andpipeThrough
are available; likely Firefox 101/102 time frame. - Try shipping
pipeThrough
early; I verified the videos also play usingdom.streams.transform_streams.enabled=true
, which revealspipeThrough
.
My current preference would be that we start reaching out to Instagram as choice 1, and look into an intervention as choice 2; Of course, this does depend a bit on how pervasive this is. I'm not sure if that media player component is OSS and used elsewhere, or if is purely instagram.
Comment 3•2 years ago
|
||
(I hadn't realized how decoupled pipeThrough is from TransformStream
... maybe we could get away with shipping that earlier (under a different pref name)... but not my first choice really)
Updated•2 years ago
|
Comment 4•2 years ago
•
|
||
Unfortunate, but I am not surprised that there is code in the real-world that either expects all of streams to work or only ReadableStream. I am afraid when we start shipping pipeThrough
sites are going to start requiring TransformStream
as well.
From my point of view there are two realistic options:
- Only ship the complete package WritableStream, pipe & TransformStream
- Test the water with adding pipeThrough as well.
I would think it should be possible to finish TransformStream in two days or so, no?
Comment 5•2 years ago
|
||
TransformStream would need some time to be fuzzer tested even if it finishes soon enough. (I think the only remaining parts are callback implementations unless I'm missing something, so yeah, expect it to be finished soon.)
For now I'd like to first see how many websites break without pipeThrough, and if it's only Instagram then maybe we can just ping them or do site intervention, as Matthew mentioned.
Updated•2 years ago
|
Comment 6•2 years ago
|
||
So: I have reached out via the Mozilla/Facebook coordination email list to see if they can fix this at their end.
I don't think we want to rush into shipping pipeThrough or TransformStreams.
I think current best option, if we see more similar breakage or Instagram can't fix, is to unship pipeTo
, given that it seems likely we'll be able to hit 101 with TransformStreams, pipeThrough, and then we can re-ship pipeTo at the same time.
We can make a call closer to the end of the cycle; I'd like to see if there's any other impacts in the mean time, and give Meta some time to fix.
Updated•2 years ago
|
Comment 7•2 years ago
|
||
At this point there's an intervention for this developed in Bug 1761930, so I expect unless we see more pipeTo fallout, we'll continue as planned to let it ride the 100 train.
Comment 8•2 years ago
•
|
||
Given we're going to have an intervention for this, dropping Severity and Priority here.
Comment 9•2 years ago
|
||
This was fixed by Instagram.
Updated•2 years ago
|
Updated•2 years ago
|
Comment 10•2 years ago
|
||
Reproducible on a 2022-03-24 Nightly build on Win10 64-bits; Verified as fixed on Firefox 100.0(20220428192727) and Nightly 101.0a1(20220428214715) on Win10 64-bits and Ubuntu 20.04.
Description
•