Commit Graph

1000 Commits

Author SHA1 Message Date
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
Dorel Luca
9598133e75 Merge mozilla-cental to mozilla-inbound 2018-08-01 12:54:59 +03:00
Emilio Cobos Álvarez
bc847c0eef Bug 1479860: Remove unused aCompileEventHandlers argument from BindToTree. r=bz
Mostly automatic via sed. Only parts which I touched manually (apart from a
couple ones where I fixed indentation or which had mispelled arguments) are the
callers. I may have removed a couple redundant `virtual` keywords as well when
I started to do it manually, I can revert those if wanted.

Most of them are just removing the argument, but in Element.cpp I also added an
assertion for GetBindingParent when binding the ShadowRoot's kids (the binding
parent is set from the ShadowRoot constructor, and I don't think we bind a
shadow tree during unlink or what not which could cause a behavior difference).

Differential Revision: https://phabricator.services.mozilla.com/D2574

MozReview-Commit-ID: 2oIgatty2HU
2018-08-01 10:42:54 +02:00
alwu
c96fe8806b Bug 1476701 - notify observer when audible autoplay occurred. r=cpearce,jaws
In our autoplay shield-study, we want to collect the information which could tell us how many website
contains audible autoplay media, but there is no way to get this information on current API desigin.

Therefore, I would like to send a new notification when autoplay occurred.

The extension code could get the information by following way,
```
Services.obs.addObserver((subject, topic, data) => {
    // DO SOMETHING
}, "AudibleAutoplayMediaOccurred");
```

MozReview-Commit-ID: 4bSYcxDZOGK
2018-07-25 09:08:44 -07:00
Boris Zbarsky
df3b83f98c Bug 1450167. Stop using atom-or-string for event names in the listener manager. r=smaug
Now that we support atoms off the the main thread, we can just use atoms.
2018-07-24 18:15:19 -04:00
Gurzau Raul
c4e302db82 Merge inbound to mozilla-central. a=merge 2018-07-24 12:49:23 +03:00
Brian Hackett
f8c2aae2c6 Bug 1207696 Part 6a - Disable media elements when recording or replaying, r=jesup. 2018-07-23 14:41:26 +00:00
Chris Pearce
690fe5b3e8 Bug 1476456 - Add telemetry to report whether autoplay would be not allowed if autoplay was disabled. r=baku,francois
We'd like to add telemetry to help inform the decision as to how enabling
block autoplay will affect video playback in the wild.

Our data science team would also like some input to help them estimate the
rate at which our shield study would receive pings, and the telemetry
collected here will help them estimate that.

We'd like to collect the following, on a per session basis:
* Count of the number of top level content documents loaded, as denominator for
other stats collected here.
* Count of the number of top level content documents which contained (directly
or in a descendant document) playback of an audible media element.
* Count of the number of top level content documents which contained (directly
or in a descendant document) a muted media element that was paused by the
autoplay policy because it tried to unmute and it wasn't allowed to autoplay
audibly.
* Count of the total number of audible autoplay videos that would have not been
allowed to play if block autoplay was enabled. We'd either prompt for
permission on these videos, or block outright depending on user's settings.
* Count of the total number of audible autoplay videos that would have been
allowed to play if block autoplay was enabled.

MozReview-Commit-ID: vHWJPyqHjT
2018-07-18 15:34:04 +12:00
Cosmin Sabou
f9bab6df76 Backed out changeset 9035ff3757ac (bug 1415980) at request from froydnj on the suspicion that it's going to break MSVC builds when it gets merged to central. 2018-07-31 01:19:49 +03:00