Bug 929890 - Canonicalise media preload attribute value of "" to "auto" r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D249523
This commit is contained in:
committed by
mozilla@keithcirkel.co.uk
parent
e9b5391a5b
commit
9b9b7194e1
@@ -3129,20 +3129,20 @@ bool HTMLMediaElement::AllowedToPlay() const {
|
|||||||
|
|
||||||
uint32_t HTMLMediaElement::GetPreloadDefault() const {
|
uint32_t HTMLMediaElement::GetPreloadDefault() const {
|
||||||
if (mMediaSource) {
|
if (mMediaSource) {
|
||||||
return HTMLMediaElement::PRELOAD_ATTR_METADATA;
|
return HTMLMediaElement::PRELOAD_METADATA;
|
||||||
}
|
}
|
||||||
if (OnCellularConnection()) {
|
if (OnCellularConnection()) {
|
||||||
return Preferences::GetInt("media.preload.default.cellular",
|
return Preferences::GetInt("media.preload.default.cellular",
|
||||||
HTMLMediaElement::PRELOAD_ATTR_NONE);
|
HTMLMediaElement::PRELOAD_NONE);
|
||||||
}
|
}
|
||||||
return Preferences::GetInt("media.preload.default",
|
return Preferences::GetInt("media.preload.default",
|
||||||
HTMLMediaElement::PRELOAD_ATTR_METADATA);
|
HTMLMediaElement::PRELOAD_METADATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t HTMLMediaElement::GetPreloadDefaultAuto() const {
|
uint32_t HTMLMediaElement::GetPreloadDefaultAuto() const {
|
||||||
if (OnCellularConnection()) {
|
if (OnCellularConnection()) {
|
||||||
return Preferences::GetInt("media.preload.auto.cellular",
|
return Preferences::GetInt("media.preload.auto.cellular",
|
||||||
HTMLMediaElement::PRELOAD_ATTR_METADATA);
|
HTMLMediaElement::PRELOAD_METADATA);
|
||||||
}
|
}
|
||||||
return Preferences::GetInt("media.preload.auto",
|
return Preferences::GetInt("media.preload.auto",
|
||||||
HTMLMediaElement::PRELOAD_ENOUGH);
|
HTMLMediaElement::PRELOAD_ENOUGH);
|
||||||
@@ -3167,14 +3167,13 @@ void HTMLMediaElement::UpdatePreloadAction() {
|
|||||||
// media.preload.default pref, or just preload metadata if not present.
|
// media.preload.default pref, or just preload metadata if not present.
|
||||||
nextAction = static_cast<PreloadAction>(preloadDefault);
|
nextAction = static_cast<PreloadAction>(preloadDefault);
|
||||||
} else if (val->Type() == nsAttrValue::eEnum) {
|
} else if (val->Type() == nsAttrValue::eEnum) {
|
||||||
PreloadAttrValue attr =
|
MediaPreloadAttrValue attr =
|
||||||
static_cast<PreloadAttrValue>(val->GetEnumValue());
|
static_cast<MediaPreloadAttrValue>(val->GetEnumValue());
|
||||||
if (attr == HTMLMediaElement::PRELOAD_ATTR_EMPTY ||
|
if (attr == MediaPreloadAttrValue::PRELOAD_ATTR_AUTO) {
|
||||||
attr == HTMLMediaElement::PRELOAD_ATTR_AUTO) {
|
|
||||||
nextAction = static_cast<PreloadAction>(preloadAuto);
|
nextAction = static_cast<PreloadAction>(preloadAuto);
|
||||||
} else if (attr == HTMLMediaElement::PRELOAD_ATTR_METADATA) {
|
} else if (attr == MediaPreloadAttrValue::PRELOAD_ATTR_METADATA) {
|
||||||
nextAction = HTMLMediaElement::PRELOAD_METADATA;
|
nextAction = HTMLMediaElement::PRELOAD_METADATA;
|
||||||
} else if (attr == HTMLMediaElement::PRELOAD_ATTR_NONE) {
|
} else if (attr == MediaPreloadAttrValue::PRELOAD_ATTR_NONE) {
|
||||||
nextAction = HTMLMediaElement::PRELOAD_NONE;
|
nextAction = HTMLMediaElement::PRELOAD_NONE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -4946,21 +4945,16 @@ bool HTMLMediaElement::ParseAttribute(int32_t aNamespaceID, nsAtom* aAttribute,
|
|||||||
const nsAString& aValue,
|
const nsAString& aValue,
|
||||||
nsIPrincipal* aMaybeScriptedPrincipal,
|
nsIPrincipal* aMaybeScriptedPrincipal,
|
||||||
nsAttrValue& aResult) {
|
nsAttrValue& aResult) {
|
||||||
// Mappings from 'preload' attribute strings to an enumeration.
|
|
||||||
static const nsAttrValue::EnumTableEntry kPreloadTable[] = {
|
|
||||||
{"", HTMLMediaElement::PRELOAD_ATTR_EMPTY},
|
|
||||||
{"none", HTMLMediaElement::PRELOAD_ATTR_NONE},
|
|
||||||
{"metadata", HTMLMediaElement::PRELOAD_ATTR_METADATA},
|
|
||||||
{"auto", HTMLMediaElement::PRELOAD_ATTR_AUTO},
|
|
||||||
};
|
|
||||||
|
|
||||||
if (aNamespaceID == kNameSpaceID_None) {
|
if (aNamespaceID == kNameSpaceID_None) {
|
||||||
if (aAttribute == nsGkAtoms::crossorigin) {
|
if (aAttribute == nsGkAtoms::crossorigin) {
|
||||||
ParseCORSValue(aValue, aResult);
|
ParseCORSValue(aValue, aResult);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (aAttribute == nsGkAtoms::preload) {
|
if (aAttribute == nsGkAtoms::preload) {
|
||||||
return aResult.ParseEnumValue(aValue, kPreloadTable, false);
|
return aResult.ParseEnumValue(aValue, kPreloadTable, false,
|
||||||
|
// The default value is "auto" if aValue is
|
||||||
|
// not a recognised value.
|
||||||
|
kPreloadDefaultType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,25 @@ enum class StreamCaptureBehavior : uint8_t {
|
|||||||
FINISH_WHEN_ENDED
|
FINISH_WHEN_ENDED
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Possible values of the 'preload' attribute.
|
||||||
|
*/
|
||||||
|
enum MediaPreloadAttrValue : uint8_t {
|
||||||
|
PRELOAD_ATTR_NONE, // set to "none"
|
||||||
|
PRELOAD_ATTR_METADATA, // set to "metadata"
|
||||||
|
PRELOAD_ATTR_AUTO // set to "auto"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mappings from 'preload' attribute strings to an enumeration.
|
||||||
|
static const nsAttrValue::EnumTableEntry kPreloadTable[] = {
|
||||||
|
{"none", MediaPreloadAttrValue::PRELOAD_ATTR_NONE},
|
||||||
|
{"metadata", MediaPreloadAttrValue::PRELOAD_ATTR_METADATA},
|
||||||
|
{"auto", MediaPreloadAttrValue::PRELOAD_ATTR_AUTO},
|
||||||
|
};
|
||||||
|
|
||||||
|
static constexpr const nsAttrValue::EnumTableEntry* kPreloadDefaultType =
|
||||||
|
&kPreloadTable[std::size(kPreloadTable) - 1];
|
||||||
|
|
||||||
class HTMLMediaElement : public nsGenericHTMLElement,
|
class HTMLMediaElement : public nsGenericHTMLElement,
|
||||||
public MediaDecoderOwner,
|
public MediaDecoderOwner,
|
||||||
public PrincipalChangeObserver<MediaStreamTrack>,
|
public PrincipalChangeObserver<MediaStreamTrack>,
|
||||||
@@ -521,7 +540,7 @@ class HTMLMediaElement : public nsGenericHTMLElement,
|
|||||||
nsGkAtoms::none->ToString(aValue);
|
nsGkAtoms::none->ToString(aValue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GetEnumAttr(nsGkAtoms::preload, nullptr, aValue);
|
GetEnumAttr(nsGkAtoms::preload, kPreloadDefaultType->tag, aValue);
|
||||||
}
|
}
|
||||||
void SetPreload(const nsAString& aValue, ErrorResult& aRv) {
|
void SetPreload(const nsAString& aValue, ErrorResult& aRv) {
|
||||||
if (mSrcAttrStream) {
|
if (mSrcAttrStream) {
|
||||||
@@ -1165,16 +1184,6 @@ class HTMLMediaElement : public nsGenericHTMLElement,
|
|||||||
*/
|
*/
|
||||||
void NotifyShutdownEvent();
|
void NotifyShutdownEvent();
|
||||||
|
|
||||||
/**
|
|
||||||
* Possible values of the 'preload' attribute.
|
|
||||||
*/
|
|
||||||
enum PreloadAttrValue : uint8_t {
|
|
||||||
PRELOAD_ATTR_EMPTY, // set to ""
|
|
||||||
PRELOAD_ATTR_NONE, // set to "none"
|
|
||||||
PRELOAD_ATTR_METADATA, // set to "metadata"
|
|
||||||
PRELOAD_ATTR_AUTO // set to "auto"
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The preloading action to perform. These dictate how we react to the
|
* The preloading action to perform. These dictate how we react to the
|
||||||
* preload attribute. See mPreloadAction.
|
* preload attribute. See mPreloadAction.
|
||||||
|
|||||||
@@ -660,8 +660,6 @@ skip-if = [
|
|||||||
|
|
||||||
["test_bug666200.html"]
|
["test_bug666200.html"]
|
||||||
|
|
||||||
["test_bug666666.html"]
|
|
||||||
|
|
||||||
["test_bug669012.html"]
|
["test_bug669012.html"]
|
||||||
|
|
||||||
["test_bug674558.html"]
|
["test_bug674558.html"]
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
https://bugzilla.mozilla.org/show_bug.cgi?id=666666
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<title>Test for Bug 666666</title>
|
|
||||||
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<script type="application/javascript" src="reflect.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=666666">Mozilla Bug 666666</a>
|
|
||||||
<p id="display"></p>
|
|
||||||
<div id="content" style="display: none">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<pre id="test">
|
|
||||||
<script type="application/javascript">
|
|
||||||
/** Test for Bug 666666 **/
|
|
||||||
["audio", "video"].forEach(function(element) {
|
|
||||||
reflectLimitedEnumerated({
|
|
||||||
element: document.createElement(element),
|
|
||||||
attribute: "preload",
|
|
||||||
validValues: ["none", "metadata", "auto"],
|
|
||||||
invalidValues: ["cheesecake", ""]
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -957,8 +957,6 @@ skip-if = ["appname == 'seamonkey'"] # Seamonkey: Bug 598252, bug 1307337, bug
|
|||||||
|
|
||||||
["test_preload_actions.html"]
|
["test_preload_actions.html"]
|
||||||
|
|
||||||
["test_preload_attribute.html"]
|
|
||||||
|
|
||||||
["test_preload_suspend.html"]
|
["test_preload_suspend.html"]
|
||||||
|
|
||||||
["test_preserve_playbackrate_after_ui_play.html"]
|
["test_preserve_playbackrate_after_ui_play.html"]
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
https://bugzilla.mozilla.org/show_bug.cgi?id=479863
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<title>Test for Bug 479863</title>
|
|
||||||
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=479863">Mozilla Bug 479863</a>
|
|
||||||
<p id="display"></p>
|
|
||||||
<div id="content" style="display: none">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<video id='v1'></video><audio id='a1'></audio>
|
|
||||||
<video id='v2' preload="auto"></video><audio id='a2' preload="auto"></audio>
|
|
||||||
|
|
||||||
<pre id="test">
|
|
||||||
<script type="application/javascript">
|
|
||||||
var v1 = document.getElementById('v1');
|
|
||||||
var a1 = document.getElementById('a1');
|
|
||||||
var v2 = document.getElementById('v2');
|
|
||||||
var a2 = document.getElementById('a2');
|
|
||||||
is(v1.getAttribute("preload"), null, "video preload via getAttribute should be null by default");
|
|
||||||
is(a1.getAttribute("preload"), null, "video preload via getAttribute should be null by default");
|
|
||||||
is(v1.preload, "", "v1.preload should be empty by default");
|
|
||||||
is(a1.preload, "", "a1.preload should be empty by default");
|
|
||||||
is(v2.preload, "auto", "v2.preload should be auto");
|
|
||||||
is(a2.preload, "auto", "a2.preload should be auto");
|
|
||||||
|
|
||||||
v1.preload = "auto";
|
|
||||||
a1.preload = "auto";
|
|
||||||
is(v1.preload, "auto", "video.preload should be auto");
|
|
||||||
is(a1.preload, "auto", "audio.preload should be auto");
|
|
||||||
is(v1.getAttribute("preload"), "auto", "video preload attribute should be auto");
|
|
||||||
is(a1.getAttribute("preload"), "auto", "video preload attribute should be auto");
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Reference in New Issue
Block a user