From 684d1081d45ed1e840276718ab4afad0a6d5a70b Mon Sep 17 00:00:00 2001 From: Vishnunarayan K I Date: Wed, 7 Nov 2018 00:38:12 +0530 Subject: [PATCH] Implement Audio constructor --- components/script/dom/htmlaudioelement.rs | 26 ++++++ .../dom/webidls/HTMLAudioElement.webidl | 2 +- .../html/dom/interfaces.https.html.ini | 87 ------------------- ...n-invoke-audio-constructor-no-src.html.ini | 5 -- ...election-invoke-audio-constructor.html.ini | 5 -- .../pause-remove-from-document.html.ini | 3 +- .../the-audio-element/__dir__.ini | 1 - .../audio_constructor.html.ini | 4 + tests/wpt/mozilla/meta/MANIFEST.json | 2 +- .../wpt/mozilla/tests/mozilla/interfaces.html | 1 + 10 files changed, 35 insertions(+), 101 deletions(-) delete mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html.ini delete mode 100644 tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini create mode 100644 tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/audio_constructor.html.ini diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs index fbdce667f0cf..af92835af6a4 100644 --- a/components/script/dom/htmlaudioelement.rs +++ b/components/script/dom/htmlaudioelement.rs @@ -2,11 +2,18 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +use crate::dom::bindings::codegen::Bindings::ElementBinding::ElementBinding::ElementMethods; use crate::dom::bindings::codegen::Bindings::HTMLAudioElementBinding; +use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; +use crate::dom::bindings::error::Fallible; +use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::str::DOMString; use crate::dom::document::Document; +use crate::dom::element::Element; use crate::dom::htmlmediaelement::HTMLMediaElement; use crate::dom::node::Node; +use crate::dom::window::Window; use dom_struct::dom_struct; use html5ever::{LocalName, Prefix}; @@ -40,4 +47,23 @@ impl HTMLAudioElement { HTMLAudioElementBinding::Wrap, ) } + + // https://html.spec.whatwg.org/multipage/#dom-audio + pub fn Audio(window: &Window, src: Option) -> Fallible> { + let document = window.Document(); + let audio = HTMLAudioElement::new(local_name!("audio"), None, &document); + + audio + .upcast::() + .SetAttribute(DOMString::from("preload"), DOMString::from("auto")) + .expect("should be infallible"); + if let Some(s) = src { + audio + .upcast::() + .SetAttribute(DOMString::from("src"), s) + .expect("should be infallible"); + } + + Ok(audio) + } } diff --git a/components/script/dom/webidls/HTMLAudioElement.webidl b/components/script/dom/webidls/HTMLAudioElement.webidl index 4fa1cd97bef6..8b8ff5fa6125 100644 --- a/components/script/dom/webidls/HTMLAudioElement.webidl +++ b/components/script/dom/webidls/HTMLAudioElement.webidl @@ -3,5 +3,5 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlaudioelement -[HTMLConstructor/*, NamedConstructor=Audio(optional DOMString src)*/] +[HTMLConstructor, NamedConstructor=Audio(optional DOMString src)] interface HTMLAudioElement : HTMLMediaElement {}; diff --git a/tests/wpt/metadata/html/dom/interfaces.https.html.ini b/tests/wpt/metadata/html/dom/interfaces.https.html.ini index 749f4ee58904..e27465977fab 100644 --- a/tests/wpt/metadata/html/dom/interfaces.https.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.https.html.ini @@ -6888,96 +6888,18 @@ [HTMLMediaElement interface: calling addTextTrack(TextTrackKind, DOMString, DOMString) on document.createElement("audio") with too few arguments must throw TypeError] expected: FAIL - [HTMLAudioElement must be primary interface of new Audio()] - expected: FAIL - - [Stringification of new Audio()] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "error" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "src" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "srcObject" with the proper type] expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "currentSrc" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "crossOrigin" with the proper type] expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "NETWORK_EMPTY" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "NETWORK_IDLE" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "NETWORK_LOADING" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "NETWORK_NO_SOURCE" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "networkState" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "preload" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "buffered" with the proper type] expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "load()" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "canPlayType(DOMString)" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: calling canPlayType(DOMString) on new Audio() with too few arguments must throw TypeError] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "HAVE_NOTHING" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "HAVE_METADATA" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "HAVE_CURRENT_DATA" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "HAVE_FUTURE_DATA" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "HAVE_ENOUGH_DATA" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "readyState" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "seeking" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "currentTime" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "fastSeek(double)" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: calling fastSeek(double) on new Audio() with too few arguments must throw TypeError] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "duration" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "getStartDate()" with the proper type] expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "paused" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "defaultPlaybackRate" with the proper type] expected: FAIL @@ -6993,18 +6915,9 @@ [HTMLMediaElement interface: new Audio() must inherit property "ended" with the proper type] expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "autoplay" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "loop" with the proper type] expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "play()" with the proper type] - expected: FAIL - - [HTMLMediaElement interface: new Audio() must inherit property "pause()" with the proper type] - expected: FAIL - [HTMLMediaElement interface: new Audio() must inherit property "controls" with the proper type] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html.ini deleted file mode 100644 index 16df0a158c85..000000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[resource-selection-invoke-audio-constructor-no-src.html] - type: testharness - [NOT invoking resource selection with new Audio() sans src] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini deleted file mode 100644 index 59edc405c17a..000000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[resource-selection-invoke-audio-constructor.html] - type: testharness - [invoking resource selection with new Audio(src)] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html.ini index fd8fc8860ab9..51811a2a184b 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html.ini @@ -1,5 +1,6 @@ [pause-remove-from-document.html] type: testharness + expected: TIMEOUT [paused state when removing from a document] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/__dir__.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/__dir__.ini index 163ca23a12f6..e69de29bb2d1 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/__dir__.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/__dir__.ini @@ -1 +0,0 @@ -disabled: for now diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/audio_constructor.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/audio_constructor.html.ini new file mode 100644 index 000000000000..81986a14e1cb --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/audio_constructor.html.ini @@ -0,0 +1,4 @@ +[audio_constructor.html] + [Calling Audio should throw] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index af116a9143a4..d29df9db9e87 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -27064,7 +27064,7 @@ "testharness" ], "mozilla/interfaces.html": [ - "fba582932f67521659378db241b6d52a3ada250d", + "b1de57409ad5e6f9fedeb8a34c9474b4e378ec0a", "testharness" ], "mozilla/interfaces.js": [ diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.html b/tests/wpt/mozilla/tests/mozilla/interfaces.html index fba582932f67..b1de57409ad5 100644 --- a/tests/wpt/mozilla/tests/mozilla/interfaces.html +++ b/tests/wpt/mozilla/tests/mozilla/interfaces.html @@ -13,6 +13,7 @@ test_interfaces([ "AnalyserNode", "Attr", + "Audio", "AudioBuffer", "AudioBufferSourceNode", "AudioContext",