Commit Graph

1283 Commits

Author SHA1 Message Date
alwu
9a611c8727 Bug 1579588 - part2 : create media controller for media element only. r=chunmin
We use `NotifyMediaStarted()` and `NotifyMediaStopped()` to notify `MediaControlService` on parent process to start/stop a media controller, and use `NotifyMediaAudibleChanged()` to notify controller's audible state in order to request audio focus.

As our goal is to use media controller to control media element, not for web audio, web speech and other stuffs which also use audio channel agent.

Therefore, we should notify parent process to start/stop controller only for media element, instead of sending a notification in AudioChannelService because that would create media controller for all different consumers which uses audio channel agent.

Differential Revision: https://phabricator.services.mozilla.com/D45591
2019-09-12 23:13:04 +00:00
alwu
d2febdf654 Bug 1579588 - part1 : split NotifyAudioChannelAgent() to StartAudioChannelAgent() and StopAudioChanelAgent(). r=chunmin
Spliting NotifyAudioChannelAgent() to StartAudioChannelAgent() and StopAudioChanelAgent() allows us to start and stop an AudioChannelAgent in a clear naming function, and to do related operation and checking every time we start/stop the agent.

Differential Revision: https://phabricator.services.mozilla.com/D45590
2019-09-12 23:13:04 +00:00
Alastor Wu
79203ef324 Bug 1578609 - part1 : only check source element's type attribute when it's not empty. r=bryce
According to the spec [1], we abort loading only when we're sure the type of source element is something we don't support.

If source element's type is empty, it's equal to not having any type, so we won't have to check can play type, we should start loading to see if we can play it or not.

[1] https://html.spec.whatwg.org/multipage/media.html#loading-the-media-resource:attr-source-type

Differential Revision: https://phabricator.services.mozilla.com/D45269
2019-09-10 19:42:25 +00:00
Micah Tigley
9ed1864f67 Bug 1322708 - Improve console warnings for unsupported media resource. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D44596
2019-09-04 22:10:02 +00:00
Andreas Pehrson
4947cd3ec5 Bug 1576836 - Let audio elements end when a MediaStream becomes inaudible. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D43629
2019-09-02 13:53:50 +00:00
Csoregi Natalia
869a0bf5ea Backed out 2 changesets (bug 1576836) for media failures on DOMMediaStream.cpp. CLOSED TREE
Backed out changeset 6c0f218a2988 (bug 1576836)
Backed out changeset 481ab3a1f913 (bug 1576836)
2019-09-02 16:30:05 +03:00
Andreas Pehrson
99042f2f36 Bug 1576836 - Let audio elements end when a MediaStream becomes inaudible. r=jib
Depends on D43628

Differential Revision: https://phabricator.services.mozilla.com/D43629
2019-08-31 00:13:42 +00:00
Andreas Pehrson
6764460057 Bug 1577734 - Don't unset mGraphTimeOffset in MediaStreamRenderer. r=padenot
Differential Revision: https://phabricator.services.mozilla.com/D44158
2019-08-30 14:46:44 +00:00
Andreas Pehrson
e9f4bbc3c3 Bug 1577495 - Use a single SharedDummyStream per HTMLMediaElement. r=karlt
Differential Revision: https://phabricator.services.mozilla.com/D43982
2019-08-29 23:11:19 +00:00
Andreas Pehrson
ee66e4c075 Bug 1573102 - Remove mGraph from HTMLMediaElement::OutputMediaStream and OutputStreamManager. r=karlt
Differential Revision: https://phabricator.services.mozilla.com/D43666
2019-08-29 13:32:50 +00:00
Andreas Pehrson
e50d387ec9 Bug 1573102 - Remove mGraph from HTMLMediaElement::MediaStreamRenderer. r=karlt
Differential Revision: https://phabricator.services.mozilla.com/D43665
2019-08-29 13:32:31 +00:00
Andreas Pehrson
8bc930c910 Bug 1507193 - Don't leave dangling js promises after seeking. r=jya
Only SeekToNextFrame cares about promises, but prior to this patch the common
method HTMLMediaElement::Seek() would always return a promise.

When the caller was not SeekToNextFrame (e.g., SetCurrentTime, FastSeek), the
promise would end up *not* being exposed. When later rejected, we would catch
this and write an error to the js console.

This patch lifts the handling of the promise out of Seek() and into
SeekToNextFrame() so that we avoid creating promises that would not get exposed
to js.

Differential Revision: https://phabricator.services.mozilla.com/D42511
2019-08-29 14:30:06 +00:00
Edgar Chen
db71a8a293 Bug 1576627 - Move MaybeNotifyAutoplayBlocked from Document to HTMLMediaElement; r=alwu
Given that it is used only in HTMLMediaElement.

Differential Revision: https://phabricator.services.mozilla.com/D43452
2019-08-27 21:22:19 +00:00
Coroiu Cristina
6de141d9b3 Backed out changeset dd79fbdfac8d (bug 1507193) for wpt failures at media-source/mediasource-seek-beyond-duration.html on a CLOSED TREE 2019-08-28 20:40:18 +03:00
Andreas Pehrson
7876127b0c Bug 1507193 - Don't leave dangling js promises after seeking. r=jya
Only SeekToNextFrame cares about promises, but prior to this patch the common
method HTMLMediaElement::Seek() would always return a promise.

When the caller was not SeekToNextFrame (e.g., SetCurrentTime, FastSeek), the
promise would end up *not* being exposed. When later rejected, we would catch
this and write an error to the js console.

This patch lifts the handling of the promise out of Seek() and into
SeekToNextFrame() so that we avoid creating promises that would not get exposed
to js.

Differential Revision: https://phabricator.services.mozilla.com/D42511
2019-08-28 14:57:13 +00:00
Bryce Seager van Dyk
008ae35f5e Bug 1547784 - Return an error if an EME associated MediaElement becomes inactive as deocder setup finishes. r=alwu
This fixes an edge case where it was possible for an HTMLMediaElement in the
middle of setup to have ownership transferred to a inactive document and deref a
null pointer. This happened because we have special handling for EME related
media where we perform more aggressive shutdown on for media in inactive
documents.

As far as I can tell, there's nothing specced that forbids performing EME
related functionality on elements in inactive documents. However, our code
already prevents doing so in other cases. E.g. if you create an inactive
document, place an HTMLMediaElement in it and try to setup EME related data on
it, then that will fail. So this fix just covers another such case.

While it would be nice to support doing these operations on inactive document's
media, it seems like very much an edge case, and something that would require a
large amount of reworking in how we handle inactive documents. We can cross that
bridge later should we ever need do so.

Differential Revision: https://phabricator.services.mozilla.com/D40482
2019-08-06 17:48:41 +00:00
Narcis Beleuzu
b147bf96a2 Backed out 2 changesets (bug 1547784) for crashtest failrues on 1547784.html . CLOSED TREE
Backed out changeset 21f0da4d5763 (bug 1547784)
Backed out changeset 54b3b878f07d (bug 1547784)
2019-08-03 02:54:04 +03:00
Bryce Seager van Dyk
d159ed22a7 Bug 1547784 - Return an error if an EME associated MediaElement becomes inactive as deocder setup finishes. r=alwu
This fixes an edge case where it was possible for an HTMLMediaElement in the
middle of setup to have ownership transferred to a inactive document and deref a
null pointer. This happened because we have special handling for EME related
media where we perform more aggressive shutdown on for media in inactive
documents.

As far as I can tell, there's nothing specced that forbids performing EME
related functionality on elements in inactive documents. However, our code
already prevents doing so in other cases. E.g. if you create an inactive
document, place an HTMLMediaElement in it and try to setup EME related data on
it, then that will fail. So this fix just covers another such case.

While it would be nice to support doing these operations on inactive document's
media, it seems like very much an edge case, and something that would require a
large amount of reworking in how we handle inactive documents. We can cross that
bridge later should we ever need do so.

Differential Revision: https://phabricator.services.mozilla.com/D40482
2019-08-02 21:53:53 +00:00
Dan Minor
3eb6429b8e Bug 1356046 - Remove expired media telemetry; r=jya,alwu,bryce
This removes all telemetry which expired in Firefox 69 or earlier, with the
exceptions of the following, which we plan to renew:
* AUDIO_TRACK_SILENCE_PROPORTION
* MEDIA_AUTOPLAY_WOULD_BE_ALLOWED_COUNT
* MEDIA_AUTOPLAY_WOULD_NOT_BE_ALLOWED_COUNT
* MEDIACACHESTREAM_LENGTH_KB
* MEDIA_MKV_CANPLAY_REQUESTED
* MEDIA_PAGE_COUNT
* MEDIA_PAGE_HAD_MEDIA_COUNT
* VIDEO_DROPPED_FRAMES_PROPORTION
* VIDEO_PLAY_TIME
* VIDEO_HIDDEN_PLAY_TIME
* VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE
* VIDEO_INFERRED_DECODE_SUSPEND_PERCENTAGE
* VIDEO_INTER_KEYFRAME_AVERAGE_MS
* VIDEO_INTER_KEYFRAME_MAX_MS
* VIDEO_SUSPEND_RECOVERY_TIME_MS
* VIDEO_VP9_BENCHMARK_FPS
* WEB_AUDIO_BECOMES_AUDIBLE_TIME
* WEBVTT_TRACK_KINDS

Differential Revision: https://phabricator.services.mozilla.com/D37313
2019-08-02 18:17:45 +00:00
arthur.iakab
2158fca6a8 Backed out changeset b8661a3b5dc2 (bug 1356046) for causing buid bustages on HTMLMediaElement.cpp CLOSED TREE 2019-08-02 19:00:45 +03:00
Dan Minor
68cd685c10 Bug 1356046 - Remove expired media telemetry; r=jya,alwu,bryce
This removes all telemetry which expired in Firefox 69 or earlier, with the
exceptions of the following, which we plan to renew:
* AUDIO_TRACK_SILENCE_PROPORTION
* MEDIA_AUTOPLAY_WOULD_BE_ALLOWED_COUNT
* MEDIA_AUTOPLAY_WOULD_NOT_BE_ALLOWED_COUNT
* MEDIACACHESTREAM_LENGTH_KB
* MEDIA_MKV_CANPLAY_REQUESTED
* MEDIA_PAGE_COUNT
* MEDIA_PAGE_HAD_MEDIA_COUNT
* VIDEO_DROPPED_FRAMES_PROPORTION
* VIDEO_PLAY_TIME
* VIDEO_HIDDEN_PLAY_TIME
* VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE
* VIDEO_INFERRED_DECODE_SUSPEND_PERCENTAGE
* VIDEO_INTER_KEYFRAME_AVERAGE_MS
* VIDEO_INTER_KEYFRAME_MAX_MS
* VIDEO_SUSPEND_RECOVERY_TIME_MS
* VIDEO_VP9_BENCHMARK_FPS
* WEB_AUDIO_BECOMES_AUDIBLE_TIME
* WEBVTT_TRACK_KINDS

Differential Revision: https://phabricator.services.mozilla.com/D37313
2019-08-02 15:37:59 +00:00
Andreas Pehrson
387c1fa8fe Bug 1570594 - Remove need for variable that's unused in release. r=padenot
Differential Revision: https://phabricator.services.mozilla.com/D40171
2019-08-01 13:09:54 +00:00
Andreas Pehrson
19275168df Bug 1493613 - Move MediaStream control from DOMMediaStream to MediaStreamTrack. r=padenot
This is inherently large, because modifying these bits of DOMMediaStream and
MediaStreamTrack affects all consumers and producers of all DOMMediaStreams and
MediaStreamTracks.

Things are generally much simpler now.

Producers of tracks now create a MediaStream in the graph, add it to a
MediaStreamTrackSource subclass that takes ownership of it, and add the source
to a MediaStreamTrack. Should the producer need a DOMMediaStream it is now much
simpler to create as the only thing needed is the current window. The stream is
a rather simple wrapper around an array of MediaStreamTracks.

HTMLMediaElement is still not as straight forward as other consumers since it
consumes the DOMMediaStream directly, as opposed to a set of tracks.
The new MediaStreamRenderer helper class helps bridge the gap between this fact
and the new track-based MediaStreamGraph interface, as it needs to juggle
registering multiple audio tracks for audio output. This hooks into existing
HTMLMediaElement logic and brings a welcome simplification to all the glue
previously needed there.

Differential Revision: https://phabricator.services.mozilla.com/D37934
2019-07-31 07:58:17 +00:00
Kannan Vijayan
c690c1925f Bug 1559414 - Rename unaudited pre-fission methods with SameProcess for future audit burndown. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D39378
2019-07-26 16:48:31 +00:00
Nicholas Nethercote
c4aacd8403 Bug 1563139 - Remove StaticPrefs.h. r=glandium
This requires replacing inclusions of it with inclusions of more specific prefs
files.

The exception is that StaticPrefsAll.h, which is equivalent to StaticPrefs.h,
and is used in `Codegen.py` because doing something smarter is tricky and
suitable for a follow-up. As a result, any change to StaticPrefList.yaml will
still trigger recompilation of all the generated DOM bindings files, but that's
still a big improvement over trigger recompilation of every file that uses
static prefs.

Most of the changes in this commit are very boring. The only changes that are
not boring are modules/libpref/*, Codegen.py, and ServoBindings.toml.

Differential Revision: https://phabricator.services.mozilla.com/D39138
2019-07-26 01:10:23 +00:00
Andreas Pehrson
8a4cb5f9a3 Bug 1177793 - Pass principal instead of forcing black when capturing cross-origin media resource. r=jya,jib
Differential Revision: https://phabricator.services.mozilla.com/D36896
2019-07-08 21:15:10 +00:00
Nicholas Nethercote
8069550dc0 Bug 1562331 - Make media.* static prefs follow the naming convention. r=KrisWright
This also removes the following prefs, because they're unused:
- media.autoplay.allow-muted pref
- media.autoplay.blackList-override-default

Differential Revision: https://phabricator.services.mozilla.com/D36396
2019-06-28 14:09:05 +10:00
Boris Zbarsky
25366cc043 Bug 1560055 part 3. Switch various "width" and "height" attributes on HTML elements to mostly follow the spec for parsing the attribute. r=mccr8
The spec allows non-integer values, but we don't have a good way to store them
in nsAttrValue yet.  See https://bugzilla.mozilla.org/show_bug.cgi?id=1561440

HTMLTableCellElement::MapAttributesIntoRule can now call
MapImageSizeAttributesInto instead of manually mapping width and height, because
0 values (which it was excluding before) are now excluded at attribute parse
time.

For 'width' on HTMLTableElement I kept our old behavior for 0, which matches the spec
but not Safari or Chrome.

For 'height' on HTMLTableElement I kept our old behavior for 0, which matches
Safari and Chrome but not the spec.  https://github.com/whatwg/html/issues/4715
tracks a possible spec change.

Same thing for 'height' on HTMLTableRowElement.

Same thing for 'width' on HTMLTableColElement.

The ParseImageAttribute call in HTMLMediaElement is not needed, because
HTMLAudioElement does not map any of those to style and HTMLVideoElement only
maps width/height, which it already parses.

Differential Revision: https://phabricator.services.mozilla.com/D36127
2019-06-28 20:56:55 +00:00
Andreas Pehrson
8f627f0fd1 Bug 1547899 - Discard output streams also when playback is aborted. r=jib
This was done as a catch-all in PlaybackEnded(), but playback might not end if
the source changes in the middle of playback. This catches those cases too.

Differential Revision: https://phabricator.services.mozilla.com/D35321
2019-06-26 09:18:54 +00:00
Chris Pearce
b173baa97b Bug 1555946 - Remove HTMLMediaElement::mUnboundFromTree and use nsINode::IsInComposedDoc() instead. r=emilio
HTMLMediaElement::mUnboundFromTree was added in bug 1239899, and I'm pretty
sure its behaviour is intended to be the same as what IsInComposedDocument()
gives us, so we can just use that instead.

Differential Revision: https://phabricator.services.mozilla.com/D35295
2019-06-19 22:37:56 +00:00
Andreas Pehrson
6157f062c2 Bug 1553262 - Ignore removing video tracks for streams that only capture audio. r=jib
Video tracks are not added to output streams that capture only audio, so we
cannot assume that an output stream that captures only audio has been locked to
capture MediaStream sources when a video track is removed.

Depends on D34854

Differential Revision: https://phabricator.services.mozilla.com/D34855
2019-06-14 13:33:46 +00:00
Peter Van der Beken
6c1f25a923 Bug 1490044 - Move all prefs used in WebIDL to StaticPrefs. r=bzbarsky
Differential Revision: https://phabricator.services.mozilla.com/D33507
2019-06-13 09:00:59 +00:00
Andreas Pehrson
f95f381343 Bug 1554699 - The loop attribute should not have any effect on a media element playing a MediaStream. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D33655
2019-06-12 08:50:57 +00:00
Andreas Pehrson
d8b62c86e4 Bug 1554699 - Don't fire "timeupdate" in PlayInternal as it's against spec, v2. r=jya
This FireTimeUpdate(false) dates back to bug 611994. Perhaps it was spec
compliant back in the day, but it surely isn't now.

Differential Revision: https://phabricator.services.mozilla.com/D33651
2019-06-11 11:49:35 +00:00
Andreas Pehrson
c0ff42ded3 Bug 1554699 - Don't fire "timeupdate" in PlayInternal as it's against spec. r=jya,alwu
Bug 1279865 introduced this under the premise of
"Run TimeMarchesOn() at the beginning of play.", but it did a bit too much.

This makes us spec compliant for this particular case again.

Differential Revision: https://phabricator.services.mozilla.com/D33650
2019-06-11 11:49:26 +00:00
Andreas Pehrson
be700cc883 Bug 1554699 - Report real duration after playing a MediaStream ended. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D33649
2019-06-11 11:49:17 +00:00
Andreas Pehrson
06a5715103 Bug 1554699 - Ignore setting currentTime synchronously with assigning a MediaStream. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D33648
2019-06-11 11:49:07 +00:00
Andreas Pehrson
e92a9d3e4c Bug 1554699 - HTMLMediaElement.playbackRate/defaultPlaybackRate: Ignore setting and always get 1.0 when playing a MediaStream. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D33095
2019-06-11 11:48:14 +00:00
Boris Zbarsky
8e16a497d9 Bug 1557793 part 3. Change the signatures of various nsContentUtils localization methods to play nicer with the new stringbundle API. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D34201
2019-06-08 21:26:12 +00:00
Andreas Pehrson
aea5aa6bd6 Bug 1306999 - Make HTMLMediaElement::CanActivateAutoplay() spec compliant. r=jya,jib
HTMLMediaElement::CanActivateAutoplay() had an exception for MediaStreams in its
check for whether autoplay can be activated. This removes that exception and
requires us to be in HAVE_ENOUGH_DATA regardless of source, per spec.

Doing this broke autoplay of an ended media element that's playing a
MediaStream, since autoplay of this MediaStream could no longer be immediately
activated. The exact sequence algorithm for autoplaying the stream in this case
is not defined in mediacapture-main, but we know we must reach HAVE_ENOUGH_DATA
to play, and we must run the load algorithm to reach HAVE_ENOUGH_DATA, that's
what we do:
When the MediaStream we're autoplaying once again becomes active, we run the
media element load algorithm.

Differential Revision: https://phabricator.services.mozilla.com/D33298
2019-06-10 13:11:49 +00:00
Andreas Pehrson
271998fdfa Bug 1306999 - Reset mSrcStreamPlaybackEnded when unsetting srcObject. r=padenot
Differential Revision: https://phabricator.services.mozilla.com/D33296
2019-06-10 13:11:28 +00:00
Andreas Pehrson
51a1a48473 Bug 1306999 - Invalidate HTMLVideoElement after resetting videoWidth and videoHeight. r=jya
Unsetting a playing video element's MediaStream-srcObject attribute will
otherwise leave the element displaying the latest frame of the video track.

Differential Revision: https://phabricator.services.mozilla.com/D33295
2019-06-10 13:11:14 +00:00
Andreas Pehrson
69d3971ccf Bug 1306999 - Load the first frame of a MediaStream with video into a media element when not playing or autoplaying. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D33293
2019-06-10 13:10:56 +00:00
Andreas Pehrson
91beaaef32 Bug 1306999 - Move HTMLMediaElement's VideoFrameListener to a VideoOutput. r=jib
This allows it to intercept frames in the rendering pipe, so that we don't have
to duplicate the logic for converting VideoChunks to NonOwningImages.

Differential Revision: https://phabricator.services.mozilla.com/D33292
2019-06-10 13:10:49 +00:00
Thomas Nguyen
5a46d126ce Bug 1534681 Use ReferrerInfo class in document r=ckerschb,baku,Gijs
Also, in many place, we use document uri as referrer. It is not right
for the case srdoc iframe. We should use the last non-srdoc parent
document's uri

Differential Revision: https://phabricator.services.mozilla.com/D30191
2019-06-06 07:23:37 +00:00
Andrea Marchesini
534b0646ae Bug 1554847 - Improve cross-origin checks in canvas API - consider intermediate redirects, r=jya
Differential Revision: https://phabricator.services.mozilla.com/D32792
2019-06-04 06:32:37 +00:00
Coroiu Cristina
5e9bd5d3ab Backed out 4 changesets (bug 1554847) for wpt failures at /service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html
Backed out changeset 17e36d139ac2 (bug 1554847)
Backed out changeset 101bd1c2d688 (bug 1554847)
Backed out changeset 3ff9a221f3e5 (bug 1554847)
Backed out changeset 946e4d9420dd (bug 1554847)
2019-06-04 03:24:42 +03:00
Andrea Marchesini
0d630266c0 Bug 1554847 - Improve cross-origin checks in canvas API - consider intermediate redirects, r=jya
Differential Revision: https://phabricator.services.mozilla.com/D32792
2019-06-03 09:54:43 +00:00
Emilio Cobos Álvarez
a3b32df884 Bug 1555216 - Change the signature of BindToTree to be (BindContext&, nsINode& aParentNode). r=bzbarsky
BindContext was going to have way more information at first, but then I realized
that most of the things I wanted to know were basically a flag away using the
parent node.

Still I think it's worth it, now experimenting with BindToTree will only mean
adding a field to a struct that's included from a couple cpp files, instead of a
massive pain.

I also think this is clearer, and doing this highlights quite a few
inconsistencies in our code which I've left untouched, but commented with
FIXMEs.

Steps are:

$ for file in $(rg 'nsresult BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#nsresult BindToTree(Document\* aDocument, nsIContent\* aParent,#nsresult BindToTree(BindContext\&, nsINode\& aParent)#g' $file; done
$ for file in $(rg 'nsresult BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#                      nsIContent\* aBindingParent) override#override#g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#::BindToTree(Document\* aDocument, nsIContent\* aParent,#::BindToTree(BindContext\& aContext, nsINode\& aParent)#g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#nsIContent\* aBindingParent)##g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#::BindToTree(aDocument, aParent, aBindingParent)#::BindToTree(aContext, aParent)#g' $file; done
$ ./mach clang-format

Then manual fixups.

Depends on D32948

Differential Revision: https://phabricator.services.mozilla.com/D32949
2019-05-31 23:31:52 +02:00
Andreas Pehrson
71a3c5adc0 Bug 1474621 - Ignore same values in SetDefaultPlaybackRate. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D33094
2019-05-30 07:38:54 +00:00