aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishnunarayan K I <appukuttancr@gmail.com>2018-11-07 00:38:12 +0530
committerVishnunarayan K I <appukuttancr@gmail.com>2018-11-20 13:30:45 +0530
commit684d1081d45ed1e840276718ab4afad0a6d5a70b (patch)
tree2b46fd0f3acdbffb400a807d39b73dffa35e9d87
parentf1dd31f70440fa9c7a40525bd1e03eede568f74d (diff)
downloadservo-684d1081d45ed1e840276718ab4afad0a6d5a70b.tar.gz
servo-684d1081d45ed1e840276718ab4afad0a6d5a70b.zip
Implement Audio constructor
-rw-r--r--components/script/dom/htmlaudioelement.rs26
-rw-r--r--components/script/dom/webidls/HTMLAudioElement.webidl2
-rw-r--r--tests/wpt/metadata/html/dom/interfaces.https.html.ini87
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/__dir__.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-audio-element/audio_constructor.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json2
-rw-r--r--tests/wpt/mozilla/tests/mozilla/interfaces.html1
10 files changed, 35 insertions, 101 deletions
diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs
index fbdce667f0c..af92835af6a 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<DOMString>) -> Fallible<DomRoot<HTMLAudioElement>> {
+ let document = window.Document();
+ let audio = HTMLAudioElement::new(local_name!("audio"), None, &document);
+
+ audio
+ .upcast::<Element>()
+ .SetAttribute(DOMString::from("preload"), DOMString::from("auto"))
+ .expect("should be infallible");
+ if let Some(s) = src {
+ audio
+ .upcast::<Element>()
+ .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 4fa1cd97bef..8b8ff5fa612 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 749f4ee5890..e27465977fa 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 16df0a158c8..00000000000
--- 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 59edc405c17..00000000000
--- 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 fd8fc8860ab..51811a2a184 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 163ca23a12f..e69de29bb2d 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 00000000000..81986a14e1c
--- /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 af116a9143a..d29df9db9e8 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 fba582932f6..b1de57409ad 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",