Commit Graph

1008 Commits

Author SHA1 Message Date
Sylvestre Ledru
e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Timothy Guan-tin Chien
416f9229e7 Bug 1508000 - Dispatch UAWidgetUnbindFromTree event before calling nsGenericHTMLElement::UnbindFromTree() r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D12205
2018-11-28 02:29:38 +00:00
Andreas Pehrson
595a842b58 Bug 1423241 - Unify decoder and stream paths in HTMLMediaElement::AddRemoveSelfReference. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D12287
2018-11-23 15:03:21 +00:00
Andreas Pehrson
4eade8a036 Bug 1423241 - Remove OnTracksAvailableCallback from HTMLMediaElement. r=padenot
Differential Revision: https://phabricator.services.mozilla.com/D12277
2018-11-23 15:02:23 +00:00
Andreas Pehrson
8db9987b44 Bug 1423241 - Refactor DecodedStream. r=jya
This removes DecodedStream's use of MediaStreamListener in favor of
MediaStreamTrackListener. This change has however rippled through to a lot
more cleanup, per below.

This moves the MediaStreamTrack lifetime ownership for captured
HTMLMediaElements from the media element to DecodedStream, where the
MediaStreamGraph-side tracks are already created and ended today.

This makes MediaStreamTrack creation explicit across the entire codebase and
lets us remove the MediaStreamTrackSourceGetter class and the infrastructure
of adding MediaStreamTracks after they've already been created in the graph
from DOMMediaStream.

With track ownership, and thus TrackID allocation ownership, happening
exclusively in DecodedStream for its output tracks, we also stop throwing
away and recreating the SourceMediaStream to which we feed data on seek.
This is one step closer to fixing bug 1172394 and spec compliance of
HTMLMediaElement.captureStream().

Differential Revision: https://phabricator.services.mozilla.com/D12273
2018-11-23 15:02:03 +00:00
Andreas Pehrson
0d7bdfee9a Bug 1423241 - Hold back readyState while no frame has been displayed as intended. r=jya
HasVideo() might be false even though there is a video track present as it will
only look at the resolution of a VideoTrack.

Differential Revision: https://phabricator.services.mozilla.com/D9103
2018-11-23 15:01:24 +00:00
Andreas Pehrson
aa36cf76cb Bug 1423241 - Remove screen-wakelock code that no longer has an effect. r=alwu
Differential Revision: https://phabricator.services.mozilla.com/D9102
2018-11-23 15:01:18 +00:00
Andreas Pehrson
2464b2c177 Bug 1423241 - Expose MSG's GraphTime through main-thread-Watchable and move media element to it. r=padenot
Differential Revision: https://phabricator.services.mozilla.com/D9101
2018-11-23 15:01:13 +00:00
Andreas Pehrson
0f201df50f Bug 1423241 - Remove a rawptr in HTMLMediaElement. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D9099
2018-11-23 15:00:55 +00:00
Andreas Pehrson
18a0293bcf Bug 1423241 - Remove HTMLMediaElement::StreamListener::NotifyHasCurrentData. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D9098
2018-11-23 15:00:49 +00:00
Andreas Pehrson
0146552fd0 Bug 1423241 - Rename StreamSizeListener to VideoFrameListener and minor cleanup. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D9096
2018-11-23 15:00:43 +00:00
Andreas Pehrson
16f1d830d6 Bug 1423241 - Implement HTMLMediaElement::IsPlaybackEnded and IsEnded properly for MediaStreams. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D9095
2018-11-23 15:00:37 +00:00
Andreas Pehrson
866bc0a6aa Bug 1423241 - Move special media element captureStream handling of inactive stream out of MediaStreamGraph. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D12264
2018-11-23 14:59:56 +00:00
Jean-Yves Avenard
e3ef685f6c Bug 1507093 - P4. Don't lazily allocate mVideoTrackList and mAudioTrackList. r=pehrsons
Should the media element be cycle collected and a decoder still be active, a change of state could have caused the track list to be re-created causing a cycle between the HTMLMediaElement and the track list.

We also check when potentially updating the ready state if the self reference is still needed.

Place various assertions.

Differential Revision: https://phabricator.services.mozilla.com/D11860
2018-11-15 12:48:34 +00:00
Jean-Yves Avenard
e81afc16f2 Bug 1507093 - P3. Ensure that self AddRef/DeRef occur sequentially r=pehrsons
It was possible for two sequential calls to HTMLMediaElement::AddRemoveSelfReference to leave the media element deregistered when it should have registered.
And we ensure to ony ever self register once.

Differential Revision: https://phabricator.services.mozilla.com/D11859
2018-11-15 12:48:11 +00:00
Jean-Yves Avenard
8b3b627a62 Bug 1494073 - Always clamp playbackrate when setting decoder. r=padenot
We were clamping the playback rate properly if the decoder had been setup already, but not if setting it before playback started.

Differential Revision: https://phabricator.services.mozilla.com/D11005
2018-11-07 13:56:25 +00:00
Alexander Surkov
4e9cf93914 Bug 1497940 - add nsGenericHTMLElement::AttachAndSetUAShadowRoot helper method, r=smaug 2018-11-02 12:18:20 +08:00
Alex Chronopoulos
71d4d51e32 Bug 1498679 - Stop moving variable to fix Linux64 debug coverage build. r=pehrsons
Differential Revision: https://phabricator.services.mozilla.com/D9244
2018-10-19 12:47:06 +00:00
Alex Chronopoulos
cc6db18ec2 Bug 934425 - Implement setSinkId in HTMLMediaElement. r=pehrsons
Differential Revision: https://phabricator.services.mozilla.com/D5874
2018-10-12 09:39:30 +00:00
alwu
b0f3c40d6a Bug 1495064 - part2 : don't request wakelock for video without audio track. r=jya
There are often websites using videos without an audio track as background image or as GIF-like image. For these cases,
we don't want to hold a wakelock.

Differential Revision: https://phabricator.services.mozilla.com/D7215
2018-10-02 17:55:50 +00:00
alwu
ab38dd17ca Bug 1495064 - part1 : refactor the logic of requesting wakelock. r=jya
HTMLMediaElement::UpdateWakeLock() is responsible for creating and releasing audio wakelock.
HTMLVideoElement::UpdateWakeLock() is responsible for creating and releasing video wakelock.

In addition, each platform would handle system wakelock properly depending on different requests.

Differential Revision: https://phabricator.services.mozilla.com/D7214
2018-10-02 17:56:21 +00:00
Jan-Ivar Bruaroey
3b66219288 Bug 1497149 - Don't refcount runnables unnecessarily in Async[Resolve|Reject]SeekDOMPromiseIfExists. r=jya
Differential Revision: https://phabricator.services.mozilla.com/D8025
2018-10-08 19:53:08 +00:00
Jan-Ivar Bruaroey
1af791b434 Bug 1497149 - Avoid nulling mSeekDOMPromise on OOM, and use IgnoreErrors(). r=jya
Differential Revision: https://phabricator.services.mozilla.com/D8021
2018-10-08 19:39:41 +00:00
Jan-Ivar Bruaroey
fb402d9224 Bug 1495904 - Have HTMLMediaElement::Seek() return synchronous errors synchronously instead of causing uncatchable promise rejections in web console. Enforce existing fastSeek() and mediaElement.currentPosition = value behavior (which is to ignore... r=pehrsons
...errors) if srcObject is a MediaStream. r?pehrsons

Differential Revision: https://phabricator.services.mozilla.com/D7566
2018-10-05 15:43:32 +00:00
Nathan Froyd
f93834868a Bug 1492894 - part 1 - make the node hierarchy consistently constructed with NodeInfo&&; r=mccr8
Various places in dom/ use the pattern:

  already_AddRefed<NodeInfo> ni = ...;

which is supposed to be disallowed by our static analysis code, but
isn't, for whatever reason.  To fix our static analysis code, we need to
eliminate instances of the above pattern.

Unfortunately, eliminating this pattern requires restructuring how Nodes
are created.  Most Node subclasses take `already_AddRefed<NodeInfo>&` in
their constructors, and a few accept `already_AddRefed<NodeInfo>&&`.  We
need to enforce the latter pattern consistently, which requires changing
dozens of source files.
2018-09-21 16:45:49 -04:00
Nathan Froyd
cf31a7c12c Bug 1415980 - make hash keys movable and not copyable; r=erahm
Everything that goes in a PLDHashtable (and its derivatives, like
nsTHashtable) needs to inherit from PLDHashEntryHdr. But through a lack
of enforcement, copy constructors for these derived classes didn't
explicitly invoke the copy constructor for PLDHashEntryHdr (and the
compiler didn't invoke the copy constructor for us). Instead,
PLDHashTable explicitly copied around the bits that the copy constructor
would have.

The current setup has two problems:

1) Derived classes should be using move construction, not copy
   construction, since anything that's shuffling hash table keys/entries
   around will be using move construction.

2) Derived classes should take responsibility for transferring bits of
   superclass state around, and not rely on something else to handle that.

The second point is not a huge problem for PLDHashTable (PLDHashTable
only has to copy PLDHashEntryHdr's bits in a single place), but future
hash table implementations that might move entries around more
aggressively would have to insert compensation code all over the
place. Additionally, if moving entries is implemented via memcpy (which
is quite common), PLDHashTable copying around bits *again* is
inefficient.

Let's fix all these problems in one go, by:

1) Explicitly declaring the set of constructors that PLDHashEntryHdr
   implements (and does not implement). In particular, the copy
   constructor is deleted, so any derived classes that attempt to make
   themselves copyable will be detected at compile time: the compiler
   will complain that the superclass type is not copyable.

This change on its own will result in many compiler errors, so...

2) Change any derived classes to implement move constructors instead of
   copy constructors. Note that some of these move constructors are,
   strictly speaking, unnecessary, since the relevant classes are moved
   via memcpy in nsTHashtable and its derivatives.
2018-09-20 11:20:36 -04:00
alwu
bee8e5b854 Bug 1477767 - disconnect request when XPCOM is going to shutdown. r=cpearce
The reason we hit this assertion is that we still connected to Then() and waited for its result when the resolve or reject
runnable which dispatched by ThenValue can't be executed because the target thread had been shutdown.

Therefore, when XPCOM is going to shutdown, we should disconnect the Then() because it might not have a chance to execute
its resolve/reject method.

Differential Revision: https://phabricator.services.mozilla.com/D5893
2018-09-17 16:54:17 +00:00
Timothy Guan-tin Chien
19256253b0 Bug 1487143 - Properly dispatch MozAutoplayMediaBlocked event to content, r=alwu
The MozAutoplayMediaBlocked event should have its target set to the video
element, not the document.

Also, MozNoControlsBlockedVideo event has to initialized from the CustomEvent
constructor of the right window for the XBL binding to access it. I don't know
when it stopped working.

Test is added to ensure the entire UI won't break.

Differential Revision: https://phabricator.services.mozilla.com/D5801
2018-09-13 21:21:11 +00:00
alwu
4fd505da64 Bug 1453862 - Log to web console when autoplay blocked. r=flod,baku
Log to the web console when we block autoplay, in order to help web developers debug their sites.

Differential Revision: https://phabricator.services.mozilla.com/D4406
2018-08-29 16:51:24 +00:00
alwu
8e80542f14 Bug 1485189 - part1 : dispatch related events when play is not allowed. r=cpearce
"blocked" event is used for testing.

"MozAutoplayMediaBlocked" event is used for changing the control UI on Fennec.

Differential Revision: https://phabricator.services.mozilla.com/D4267
2018-08-28 22:03:15 +00:00
alwu
cb41b7da2e Bug 1479270 - part1 : remove external player support in media element. r=jya
Since we have native HLS support in 59 [1], we don't need those code anymore.

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1345752

Differential Revision: https://phabricator.services.mozilla.com/D4165
2018-08-25 00:03:38 +00:00
Andreea Pavel
546d6fb079 Backed out 2 changesets (bug 1479270) for android lint on a CLOSED TREE
Backed out changeset 1676f895a710 (bug 1479270)
Backed out changeset 643ef11ea720 (bug 1479270)
2018-08-24 20:16:14 +03:00
alwu
887f6aec00 Bug 1479270 - part1 : remove external player support in media element. r=jya
Since we have native HLS support in 59 [1], we don't need those code anymore.

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1345752

Differential Revision: https://phabricator.services.mozilla.com/D4165
2018-08-23 22:45:46 +00:00
alwu
681612a822 Bug 1483703 - part4 : modify current telemtry scalar because we won't block media without audio track anymore. r=cpearce,francois
Since we don't block media without audio track anymore, the original telemetry scalar becomes useless.

We need to change its meaning in order to know the number of allowed autoplay without audio track.

Differential Revision: https://phabricator.services.mozilla.com/D3673
2018-08-22 22:54:05 +00:00
alwu
45db0f9762 Bug 1483703 - part2 : add telemetry for the media which was blocked before loading metadata and ended up being without audio track. r=cpearce,francois
Add two telemetry scarlar,

"MEDIA_BLOCKED_NO_METADATA" records how many media which was blocked because it hadn't loaded metadata yet.
"MEDIA_BLOCKED_NO_METADATA_ENDUP_NO_AUDIO_TRACK" records how many media which was blocked because it hadn't loaded metadata and ended up for being no audio track.

By collecting those data, we can know the proportion of media which should be autoplay but was blocked because of lacking metadata.

Differential Revision: https://phabricator.services.mozilla.com/D3671
2018-08-22 22:50:54 +00:00
Emilio Cobos Álvarez
fb0af321f0 Bug 1484474 - Make the ua widget flag in ShadowRoot write-only. r=smaug
Letting people set it back to false would be bad.

Differential Revision: https://phabricator.services.mozilla.com/D3714
2018-08-18 21:32:38 +00:00
Timothy Guan-tin Chien
f1861cda63 Bug 1431255 - Part VII, Trap mouse/touch/pointer events in audio/video element for UI Widgets r=smaug
This is akin to what's done in bug 1327097.

MozReview-Commit-ID: EERkjrxWZOu
2018-07-12 12:32:44 +08:00
Timothy Guan-tin Chien
b367b1030b Bug 1431255 - Part V, Set the reflectors of the UA Widget DOM to UA Widget Scope r=bholley
The DOM elements within the UA Widget Shadow DOM should have its reflectors in
the UA Widget Scope. This is done by calling nsINode::IsInUAWidget() which
would check its containing shadow and its UA Widget bit.

To prevent JS access of the DOM element before it is in the
UA Widget Shadom DOM tree, various DOM methods are set to inaccessible to
UA Widget script. It would need to use the two special methods in ShadowRoot
instead to insert the DOM directly into the shadow tree.

MozReview-Commit-ID: Jz9iCaVIoij
2018-06-29 13:39:46 -07:00
Timothy Guan-tin Chien
3d96218b5e Bug 1431255 - Part II, Create a Shadow Root in HTMLMediaElement when enabled, skipping <xul:videocontrols> r=dholbert,smaug
This prevents XBL binding from being attached, and create the Shadow Root to
host controls to be created by the script.

Shadow Root and the JS controls are lazily constructed when the controls
attribute is set.

Set nsVideoFrame as dynamic-leaf so it will ignore content child frames when
the controls are XBL anonymous content, and handles child frames from controls
in the Shadow DOM. The content nodes are still ignored since there is no
<slot>s in our Shadow DOM.

MozReview-Commit-ID: 3hk41iMa07n
2018-06-27 11:12:38 -07:00
alwu
defb45989a Bug 1482259 - Add Telemetry to know the proportion of silent part in the whole audio track. r=cpearce,francois
Use new telemetry histogram ID 'AUDIO_TRACK_SILENCE_PROPORTION' to know the proportion of
silent part in the whole audio track.

Differential Revision: https://phabricator.services.mozilla.com/D3066
2018-08-15 16:35:51 +00:00
Dale Harvey
d9d889d663 Bug 1476555 - Show notification when autoplay blocked globally. r=cpearce,johannh
MozReview-Commit-ID: EI0GiaoBNqX
2018-07-23 16:43:08 +01:00
Emilio Cobos Álvarez
693b3d3877 Bug 1481601 - Remove now-useless aPreallocateChildren from nsINode::Clone() and friends. r=bzbarsky
Since sed on multiple lines ended up being such a pain and I didn't end up
writing a script for this because I didn't think it'd end up being so boring, I
may have made a couple cleanups here and there as well...

Differential Revision: https://phabricator.services.mozilla.com/D2887
2018-08-08 23:58:44 +00:00
Csoregi Natalia
aa79395ba6 Merge inbound to mozilla-central. a=merge 2018-08-08 12:58:36 +03:00
alwu
fd47378549 Bug 1480484 - add telemetry scalar to measure the count for blocked media element without audio track. r=cpearce,francois
This is used to count the potiential number of the blocked autoplay media element without audio track
even if user was enable autoplay.

It might happen on three cases,
1. play -> loadedmetadata
2. loadedmetadata -> play
3. loadedmetadata -> has 'autoplay' keyword

In first case we need to check whether the play invocation has been called, and check other other cases
before the media starts playing.

In addition, the scalar name isn't consist with other names is because of the 40 maximum limitation of
the ping name.

MozReview-Commit-ID: 6Qm6TD4ME8I
2018-08-03 13:21:03 -07:00
Narcis Beleuzu
3317944659 Backed out changeset a7067dbdc7b5 (bug 1480484) for build bustages on HTMLMediaElement.cpp. CLOSED TREE 2018-08-08 00:44:07 +03:00
alwu
9a26a543ac Bug 1480484 - add telemetry scalar to measure the count for blocked media element without audio track. r=cpearce,francois
This is used to count the potiential number of the blocked autoplay media element without audio track
even if user was enable autoplay.

It might happen on three cases,
1. play -> loadedmetadata
2. loadedmetadata -> play
3. loadedmetadata -> has 'autoplay' keyword

In first case we need to check whether the play invocation has been called, and check other other cases
before the media starts playing.

In addition, the scalar name isn't consist with other names is because of the 40 maximum limitation of
the ping name.

MozReview-Commit-ID: 6Qm6TD4ME8I
2018-08-03 13:21:03 -07:00
Olli Pettay
bcb0ac8885 Bug 1481399 - rename nsAttrAndChildArray to AttrArray, r=mrbkap 2018-08-07 22:07:26 +03:00
alwu
a7955fc610 Bug 1480281 - part2 : move exist log to autoplay log module. r=cpearce
MozReview-Commit-ID: EtBRTjYG8k3
2018-08-01 17:50:19 -07:00
alwu
46f05f8766 Bug 1480281 - part1 : add autoplay debug log module. r=cpearce
Add new log module which allow us to debug by using "MOZ_LOG=Autoplay:5".

MozReview-Commit-ID: 9CG5JyCw21G
2018-08-01 17:30:59 -07:00
Chris Pearce
55f204e44f Bug 1478208 - Implement HTMLMediaElement.allowedToPlay. r=alwu,bz
Various web authors have expressed desire to know in advance whether autoplay
will work.

They want this in order to avoid paying the price for downloading media that
won't play. Or they want to take other action such as showing a poster image
instead.

This is of particular interest to Firefox, as we're planning on showing a
prompt to ask the user whether they would like a site to play. If sites want to
determine whether they can autoplay but avoid the prompt showing, they won't be
able to just call play() in Firefox and see whether it works, as that would
likely show the prompt if the user doesn't already have a stored permission.

We've been working out a spec here:
https://github.com/whatwg/html/issues/3617#issuecomment-398613484

This implements what is the consensus to date there;
HTMLMediaElement.allowedToPlay, which returns true when a play() call would not
be blocked with NotAllowedError by autoplay blocking policies.

MozReview-Commit-ID: AkBu0G7uCJ0
2018-07-25 14:25:17 +12:00