Bug 1540573 - P6. Use frugal preloading of media data when on cellular, otherwise aggressive. r=jya
We're allowed to take some liberties as to what the default value and behaviour we assume for the 'preload' attribute on HTMLMediaElement by the spec. On desktop we assumed preload="metadata", while on mobile we assumed the default of preload="none" to save data. On mobile we also assumed that preload="auto" meant preload="metadata". I think it makes sense to instead of always assuming that data on Android is always expensive, we can instead detect if we're running on a cellular connection, and preload frugally then, otherwise aggressively. Differential Revision: https://phabricator.services.mozilla.com/D26235
This commit is contained in:
@@ -2455,6 +2455,27 @@ bool HTMLMediaElement::AllowedToPlay() const {
|
||||
return AutoplayPolicy::IsAllowedToPlay(*this);
|
||||
}
|
||||
|
||||
uint32_t HTMLMediaElement::GetPreloadDefault() const {
|
||||
if (mMediaSource) {
|
||||
return HTMLMediaElement::PRELOAD_ATTR_METADATA;
|
||||
}
|
||||
if (OnCellularConnection()) {
|
||||
return Preferences::GetInt("media.preload.default.cellular",
|
||||
HTMLMediaElement::PRELOAD_ATTR_NONE);
|
||||
}
|
||||
return Preferences::GetInt("media.preload.default",
|
||||
HTMLMediaElement::PRELOAD_ATTR_METADATA);
|
||||
}
|
||||
|
||||
uint32_t HTMLMediaElement::GetPreloadDefaultAuto() const {
|
||||
if (OnCellularConnection()) {
|
||||
return Preferences::GetInt("media.preload.auto.cellular",
|
||||
HTMLMediaElement::PRELOAD_ATTR_METADATA);
|
||||
}
|
||||
return Preferences::GetInt("media.preload.auto",
|
||||
HTMLMediaElement::PRELOAD_ENOUGH);
|
||||
}
|
||||
|
||||
void HTMLMediaElement::UpdatePreloadAction() {
|
||||
PreloadAction nextAction = PRELOAD_UNDEFINED;
|
||||
// If autoplay is set, or we're playing, we should always preload data,
|
||||
@@ -2469,13 +2490,8 @@ void HTMLMediaElement::UpdatePreloadAction() {
|
||||
mAttrs.GetAttr(nsGkAtoms::preload, kNameSpaceID_None);
|
||||
// MSE doesn't work if preload is none, so it ignores the pref when src is
|
||||
// from MSE.
|
||||
uint32_t preloadDefault =
|
||||
mMediaSource
|
||||
? HTMLMediaElement::PRELOAD_ATTR_METADATA
|
||||
: Preferences::GetInt("media.preload.default",
|
||||
HTMLMediaElement::PRELOAD_ATTR_METADATA);
|
||||
uint32_t preloadAuto = Preferences::GetInt(
|
||||
"media.preload.auto", HTMLMediaElement::PRELOAD_ENOUGH);
|
||||
uint32_t preloadDefault = GetPreloadDefault();
|
||||
uint32_t preloadAuto = GetPreloadDefaultAuto();
|
||||
if (!val) {
|
||||
// Attribute is not set. Use the preload action specified by the
|
||||
// media.preload.default pref, or just preload metadata if not present.
|
||||
|
||||
Reference in New Issue
Block a user