Bug 1284350. Reland on top of backouts "Bug 1282710 - Part 1 - implement the suspend and resume logics in HTMLMediaElement.cpp according to visibility events; r=cpearce r=kamidphish" r=kaku

Instead of "not visible", "approximately visible", and "visible" (in display port) we now have "approximately not visible", and "approximately visible" which includes "visible".
This commit is contained in:
Kaku Kuo 2016-07-04 13:26:40 +08:00
Родитель 97166ec5f2
Коммит cca4120327
2 изменённых файлов: 54 добавлений и 0 удалений

Просмотреть файл

@ -6017,6 +6017,48 @@ HTMLMediaElement::IsAllowedToPlay()
return true;
}
static const char* VisibilityString(Visibility aVisibility) {
switch(aVisibility) {
case Visibility::UNTRACKED: {
return "UNTRACKED";
}
case Visibility::APPROXIMATELY_NONVISIBLE: {
return "APPROXIMATELY_NONVISIBLE";
}
case Visibility::APPROXIMATELY_VISIBLE: {
return "APPROXIMATELY_VISIBLE";
}
}
return "NAN";
}
void
HTMLMediaElement::OnVisibilityChange(Visibility aNewVisibility)
{
LOG(LogLevel::Debug, ("OnVisibilityChange(): %s\n",
VisibilityString(aNewVisibility)));
if (!mDecoder) {
return;
}
switch (aNewVisibility) {
case Visibility::UNTRACKED: {
MOZ_ASSERT_UNREACHABLE("Shouldn't notify for untracked visibility");
break;
}
case Visibility::APPROXIMATELY_NONVISIBLE: {
mDecoder->NotifyOwnerActivityChanged(false);
break;
}
case Visibility::APPROXIMATELY_VISIBLE: {
mDecoder->NotifyOwnerActivityChanged(true);
break;
}
}
}
#ifdef MOZ_EME
MediaKeys*
HTMLMediaElement::GetMediaKeys() const

Просмотреть файл

@ -23,8 +23,11 @@
#ifdef GetCurrentTime
#undef GetCurrentTime
#endif
#include "Visibility.h"
%}
native Visibility(mozilla::Visibility);
[uuid(c041d76c-15ce-47ad-b61d-e8755a6db638)]
interface nsIDOMHTMLMediaElement : nsISupports
{
@ -129,4 +132,13 @@ interface nsIDOMHTMLMediaElement : nsISupports
// * onmozinterruptend - called when the interruption is concluded
[notxpcom] boolean isVideo();
/**
* Called by layout to announce when the frame associated with this content
* has changed its visibility state.
*
* @param aOldVisibility The previous visibility state.
* @param aNewVisibility The new visibility state.
*/
[noscript, notxpcom] void onVisibilityChange(in Visibility aNewVisibility);
};