Closed Bug 1457661 Opened 6 years ago Closed 6 years ago

Audio canplaythrough event does not fire when loaded from URL.createObjectURL source created from a Blob created from an arraybuffer loaded via XMLHttpRequest

Categories

(Core :: Audio/Video: Playback, defect)

59 Branch
defect
Not set
normal

Tracking

()

VERIFIED FIXED
mozilla62
Tracking Status
firefox-esr52 --- unaffected
firefox-esr60 --- fixed
firefox59 --- wontfix
firefox60 --- wontfix
firefox61 --- fixed
firefox62 --- verified

People

(Reporter: eniko, Assigned: jya)

References

Details

(Keywords: regression)

Attachments

(3 files)

User Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0
Build ID: 20180323154952

Steps to reproduce:

I load an OGG file via XMLHttpRequest with responseType arraybuffer. I then create a Blob using that arraybuffer with type audio/ogg, and pass that to URL.createObjectURL.

After this I create an audio element, add the canplaythrough even listener, set preload to auto, set src to the url created via URL.createObjectURL, and call the load function.

Can confirm this used to work as late as December 2017. Using responseType blob instead of arraybuffer seems to have the expected result. Code that minimally reproduces the issue has been attached as a zip.


Actual results:

The canplaythrough event never fires and readyState is stuck at 3 (HAVE_FUTURE_DATA).


Expected results:

The canplaythrough event should fire and readyState should be set to 4 (HAVE_ENOUGH_DATA). This used to be the case as late as December 2017.
User Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Firefox: 61.0a1, Build ID: 20180501220047

I have managed to reproduce this issue on latest Firefox (59.0.3) release and latest Nightly (61.0a1) build. After I have opened the attached test case, nothing happened and the "3" message was displayed in browser console.
However, I have also tested this on an older Nightly build (build from 2017-12-01) and the issue is not reproducible. After I have opened the provided test case, a "can-play-through" dialog appeared and the "4" message was displayed in browser console after I clicked the "OK" button.

Considering this, I have found the regression window using the mozregression tools. Here are the results:
Last good revision: 772fef647fd7750f8c87dfd4f55bbd85046a555a
First bad revision: 821560cd716d50fbb0c49d0170bd351255e55bc3
Pushlog: https://goo.gl/VYxvVL

Looks like bug 1423465 introduced this issue.
Wang, can you please take a look at this?
Blocks: 1423465
Component: Untriaged → Audio/Video: Playback
Flags: needinfo?(suro001)
Keywords: regression
Product: Firefox → Core
Status: UNCONFIRMED → NEW
Ever confirmed: true
Flags: needinfo?(jyavenard)
:jw_wang unfortunately no longer works at mozilla.
Flags: needinfo?(suro001)
Bug was introduced in P5 of bug 1423465
https://hg.mozilla.org/integration/autoland/rev/a493885e5a0d

Prior P5, ChannelMediaDecoder::CanPayThroughImpl() would calculate the playback rate synchronously when called.

However, following P5, mCanPlayThrough is cached and only calculated through ChannelMediaDecoder::DownloadProgressed()

This method is never called as the resource has completed loading when we use an arraybuffer
Flags: needinfo?(jyavenard)
Assignee: nobody → jyavenard
Could you please try with this build ?

https://queue.taskcluster.net/v1/task/NnuNIIaPQf-hADmEAJ4-ig/runs/0/artifacts/public/build/target.zip

simply unzip and run the firefox.exe 

thank you
Flags: needinfo?(eniko)
Comment on attachment 8981248 [details]
Bug 1457661 - P1. Add mochitest.

https://reviewboard.mozilla.org/r/247328/#review253568

::: dom/media/test/test_arraybuffer.html:4
(Diff revision 1)
> +<!DOCTYPE HTML>
> +<html>
> +<!--
> +https://bugzilla.mozilla.org/show_bug.cgi?id=1462967

Should the test reference bug 1457661 since we're landing it against that bug and 1462967 is marked as a dupe?

::: dom/media/test/test_arraybuffer.html:7
(Diff revision 1)
> +<html>
> +<!--
> +https://bugzilla.mozilla.org/show_bug.cgi?id=1462967
> +-->
> +<head>
> +  <title>Test for Bug 462957</title>

Missing first digit of bug

::: dom/media/test/test_arraybuffer.html:69
(Diff revision 1)
> +    });
> +    const blob = new Blob([arr], {type:test.type});
> +    const blobUrl = URL.createObjectURL(blob);
> +
> +    document.body.appendChild(v);
> +    v.preload = "auto"

Missing semicolon
Attachment #8981248 - Flags: review?(bvandyk) → review+
Comment on attachment 8981249 [details]
Bug 1457661 - P2. Ensure we call NotifyDataEnded for local resource once size is known.

https://reviewboard.mozilla.org/r/247330/#review253598
Attachment #8981249 - Flags: review?(bvandyk) → review+
Comment on attachment 8981248 [details]
Bug 1457661 - P1. Add mochitest.

https://reviewboard.mozilla.org/r/247328/#review253568

> Should the test reference bug 1457661 since we're landing it against that bug and 1462967 is marked as a dupe?

oops of course.

> Missing semicolon

thanks for the reviews
Pushed by jyavenard@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/8569fdbf5a12
P1. Add mochitest. r=bryce
https://hg.mozilla.org/integration/autoland/rev/27562071aaaa
P2. Ensure we call NotifyDataEnded for local resource once size is known. r=bryce
https://hg.mozilla.org/mozilla-central/rev/8569fdbf5a12
https://hg.mozilla.org/mozilla-central/rev/27562071aaaa
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla62
(In reply to Jean-Yves Avenard [:jya] from comment #7)
> Could you please try with this build ?
> 
> https://queue.taskcluster.net/v1/task/NnuNIIaPQf-hADmEAJ4-ig/runs/0/
> artifacts/public/build/target.zip
> 
> simply unzip and run the firefox.exe 
> 
> thank you

This works as expected. Thanks for the fix!
Flags: needinfo?(eniko)
Status: RESOLVED → VERIFIED
Please request Beta approval on this when you feel that it has had sufficient bake time.
Flags: needinfo?(jyavenard)
Comment on attachment 8981248 [details]
Bug 1457661 - P1. Add mochitest.

Approval Request Comment
[Feature/Bug causing the regression]: bug 1423465
[User impact if declined]: some content will no longer autoplay, now will the proper events be fired
[Is this code covered by automated tests?]: yes, new tests added.
[Has the fix been verified in Nightly?]: yes
[Needs manual test from QE? If yes, steps to reproduce]:  none
[List of other uplifts needed for the feature/fix]: all patches (one are the tests)
[Is the change risky?]: no.
[Why is the change risky/not risky?]: we force dispatching the required event. Even before the regression caused by bug 1423465, the bug was there, just hidden.
[String changes made/needed]:
Flags: needinfo?(jyavenard)
Attachment #8981248 - Flags: approval-mozilla-esr60?
Attachment #8981248 - Flags: approval-mozilla-beta?
Comment on attachment 8981248 [details]
Bug 1457661 - P1. Add mochitest.

Fixes broken autoplay under some circumstances. Thanks for writing a new test for this! Approved for 61.0b11.
Attachment #8981248 - Flags: approval-mozilla-beta? → approval-mozilla-beta+
Comment on attachment 8981248 [details]
Bug 1457661 - P1. Add mochitest.

This has baked for awhile on Nightly and Beta without any known issues. Approved for ESR 60.1 as well.
Attachment #8981248 - Flags: approval-mozilla-esr60? → approval-mozilla-esr60+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: