Implement partial spec-recommended preload=none support.

This commit is contained in:
Josh Matthews 2015-11-08 09:25:59 -05:00
parent ef10393ba6
commit f78d88acbe
5 changed files with 20 additions and 247 deletions

View file

@ -387,7 +387,19 @@ impl HTMLMediaElement {
// Step 4
if let Resource::Url(url) = resource {
// TODO 4.1 (preload=none)
// 4.1
if self.Preload() == "none" && !self.autoplaying.get(){
// 4.1.1
self.network_state.set(NETWORK_IDLE);
// 4.1.2
self.queue_fire_simple_event("suspend");
// TODO 4.1.3 (delay load flag)
// TODO 4.1.5-7 (state for load that initiates later)
return;
}
// 4.2
let context = Arc::new(Mutex::new(HTMLMediaElementContext::new(self, url.clone())));
@ -509,6 +521,12 @@ impl HTMLMediaElementMethods for HTMLMediaElement {
// https://html.spec.whatwg.org/multipage/#dom-media-src
make_setter!(SetSrc, "src");
// https://html.spec.whatwg.org/multipage/#attr-media-preload
// Missing value default is user-agent defined.
make_enumerated_getter!(Preload, "preload", "", ("none") | ("metadata") | ("auto"));
// https://html.spec.whatwg.org/multipage/#attr-media-preload
make_setter!(SetPreload, "preload");
// https://html.spec.whatwg.org/multipage/#dom-media-currentsrc
fn CurrentSrc(&self) -> DOMString {
DOMString::from(self.current_src.borrow().clone())

View file

@ -19,7 +19,7 @@ interface HTMLMediaElement : HTMLElement {
const unsigned short NETWORK_LOADING = 2;
const unsigned short NETWORK_NO_SOURCE = 3;
readonly attribute unsigned short networkState;
// attribute DOMString preload;
attribute DOMString preload;
//readonly attribute TimeRanges buffered;
void load();
CanPlayTypeResult canPlayType(DOMString type);

View file

@ -2505,9 +2505,6 @@
[HTMLMediaElement interface: document.createElement("video") must inherit property "crossOrigin" with the proper type (3)]
expected: FAIL
[HTMLMediaElement interface: document.createElement("video") must inherit property "preload" with the proper type (9)]
expected: FAIL
[HTMLMediaElement interface: document.createElement("video") must inherit property "buffered" with the proper type (10)]
expected: FAIL
@ -2583,9 +2580,6 @@
[HTMLMediaElement interface: document.createElement("audio") must inherit property "crossOrigin" with the proper type (3)]
expected: FAIL
[HTMLMediaElement interface: document.createElement("audio") must inherit property "preload" with the proper type (9)]
expected: FAIL
[HTMLMediaElement interface: document.createElement("audio") must inherit property "buffered" with the proper type (10)]
expected: FAIL
@ -2916,9 +2910,6 @@
[HTMLMediaElement interface: attribute crossOrigin]
expected: FAIL
[HTMLMediaElement interface: attribute preload]
expected: FAIL
[HTMLMediaElement interface: attribute buffered]
expected: FAIL

View file

@ -9645,120 +9645,6 @@
[video.crossOrigin: IDL set to "USE-CREDENTIALS" followed by IDL get]
expected: FAIL
[video.preload: typeof IDL attribute]
expected: FAIL
[video.preload: setAttribute() to "none" followed by IDL get]
expected: FAIL
[video.preload: setAttribute() to "NONE" followed by IDL get]
expected: FAIL
[video.preload: setAttribute() to "metadata" followed by IDL get]
expected: FAIL
[video.preload: setAttribute() to "METADATA" followed by IDL get]
expected: FAIL
[video.preload: setAttribute() to "auto" followed by IDL get]
expected: FAIL
[video.preload: setAttribute() to "AUTO" followed by IDL get]
expected: FAIL
[video.preload: IDL set to "" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo " followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to undefined followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to 7 followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to 1.5 followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to true followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to false followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to object "[object Object\]" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to NaN followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to Infinity followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to -Infinity followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "\\0" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to object "test-toString" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to object "test-valueOf" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "none" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "xnone" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "none\\0" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "one" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "NONE" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "NONE" followed by IDL get]
expected: FAIL
[video.preload: IDL set to "metadata" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "xmetadata" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "metadata\\0" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "etadata" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "METADATA" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "METADATA" followed by IDL get]
expected: FAIL
[video.preload: IDL set to "auto" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "xauto" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "auto\\0" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "uto" followed by getAttribute()]
expected: FAIL
[video.preload: IDL set to "AUTO" followed by IDL get]
expected: FAIL
[video.loop: typeof IDL attribute]
expected: FAIL
@ -11685,120 +11571,6 @@
[audio.crossOrigin: IDL set to "USE-CREDENTIALS" followed by IDL get]
expected: FAIL
[audio.preload: typeof IDL attribute]
expected: FAIL
[audio.preload: setAttribute() to "none" followed by IDL get]
expected: FAIL
[audio.preload: setAttribute() to "NONE" followed by IDL get]
expected: FAIL
[audio.preload: setAttribute() to "metadata" followed by IDL get]
expected: FAIL
[audio.preload: setAttribute() to "METADATA" followed by IDL get]
expected: FAIL
[audio.preload: setAttribute() to "auto" followed by IDL get]
expected: FAIL
[audio.preload: setAttribute() to "AUTO" followed by IDL get]
expected: FAIL
[audio.preload: IDL set to "" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo " followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to undefined followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to 7 followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to 1.5 followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to true followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to false followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to object "[object Object\]" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to NaN followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to Infinity followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to -Infinity followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "\\0" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to object "test-toString" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to object "test-valueOf" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "none" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "xnone" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "none\\0" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "one" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "NONE" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "NONE" followed by IDL get]
expected: FAIL
[audio.preload: IDL set to "metadata" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "xmetadata" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "metadata\\0" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "etadata" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "METADATA" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "METADATA" followed by IDL get]
expected: FAIL
[audio.preload: IDL set to "auto" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "xauto" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "auto\\0" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "uto" followed by getAttribute()]
expected: FAIL
[audio.preload: IDL set to "AUTO" followed by IDL get]
expected: FAIL
[audio.loop: typeof IDL attribute]
expected: FAIL

View file

@ -1,8 +0,0 @@
[preload_reflects_none_autoplay.html]
type: testharness
[audio.preload - reflection test]
expected: FAIL
[video.preload - reflection test]
expected: FAIL