diff --git a/components/script/dom/textencoder.rs b/components/script/dom/textencoder.rs index 674243dded8..996e5d28e98 100644 --- a/components/script/dom/textencoder.rs +++ b/components/script/dom/textencoder.rs @@ -5,75 +5,54 @@ use core::nonzero::NonZero; use dom::bindings::codegen::Bindings::TextEncoderBinding; use dom::bindings::codegen::Bindings::TextEncoderBinding::TextEncoderMethods; -use dom::bindings::error::{Error, Fallible}; +use dom::bindings::error::Fallible; use dom::bindings::global::GlobalRef; use dom::bindings::js::Root; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::str::{DOMString, USVString}; use encoding::EncoderTrap; -use encoding::label::encoding_from_whatwg_label; -use encoding::types::EncodingRef; +use encoding::Encoding; +use encoding::all::UTF_8; use js::jsapi::{JSContext, JSObject}; use js::jsapi::{JS_GetUint8ArrayData, JS_NewUint8Array}; use libc::uint8_t; -use std::borrow::ToOwned; use std::ptr; #[dom_struct] pub struct TextEncoder { reflector_: Reflector, - #[ignore_heap_size_of = "Defined in rust-encoding"] - encoder: EncodingRef, } impl TextEncoder { - fn new_inherited(encoder: EncodingRef) -> TextEncoder { + fn new_inherited() -> TextEncoder { TextEncoder { reflector_: Reflector::new(), - encoder: encoder, } } - pub fn new(global: GlobalRef, encoder: EncodingRef) -> Root { - reflect_dom_object(box TextEncoder::new_inherited(encoder), + pub fn new(global: GlobalRef) -> Root { + reflect_dom_object(box TextEncoder::new_inherited(), global, TextEncoderBinding::Wrap) } // https://encoding.spec.whatwg.org/#dom-textencoder - pub fn Constructor(global: GlobalRef, - label: DOMString) -> Fallible> { - let encoding = match encoding_from_whatwg_label(&label) { - Some(enc) => enc, - None => { - debug!("Encoding Label Not Supported"); - return Err(Error::Range("The given encoding is not supported.".to_owned())) - } - }; - - match encoding.name() { - "utf-8" | "utf-16be" | "utf-16le" => { - Ok(TextEncoder::new(global, encoding)) - } - _ => { - debug!("Encoding Not UTF"); - Err(Error::Range("The encoding must be utf-8, utf-16le, or utf-16be.".to_owned())) - } - } + pub fn Constructor(global: GlobalRef) -> Fallible> { + Ok(TextEncoder::new(global)) } } impl TextEncoderMethods for TextEncoder { // https://encoding.spec.whatwg.org/#dom-textencoder-encoding fn Encoding(&self) -> DOMString { - DOMString::from(self.encoder.name()) + DOMString::from(UTF_8.name()) } #[allow(unsafe_code)] // https://encoding.spec.whatwg.org/#dom-textencoder-encode fn Encode(&self, cx: *mut JSContext, input: USVString) -> NonZero<*mut JSObject> { unsafe { - let encoded = self.encoder.encode(&input.0, EncoderTrap::Strict).unwrap(); + let encoded = UTF_8.encode(&input.0, EncoderTrap::Strict).unwrap(); let length = encoded.len() as u32; rooted!(in(cx) let js_object = JS_NewUint8Array(cx, length)); assert!(!js_object.is_null()); diff --git a/components/script/dom/webidls/TextEncoder.webidl b/components/script/dom/webidls/TextEncoder.webidl index a9eb8a95463..eef46f68edf 100644 --- a/components/script/dom/webidls/TextEncoder.webidl +++ b/components/script/dom/webidls/TextEncoder.webidl @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* https://encoding.spec.whatwg.org/#interface-textencoder */ -[Constructor(optional DOMString utfLabel = "utf-8"), Exposed=(Window,Worker)] +[Constructor, Exposed=(Window,Worker)] interface TextEncoder { readonly attribute DOMString encoding; [NewObject] diff --git a/tests/wpt/metadata/encoding/textencoder-constructor-non-utf.html.ini b/tests/wpt/metadata/encoding/textencoder-constructor-non-utf.html.ini deleted file mode 100644 index 1005a7d11de..00000000000 --- a/tests/wpt/metadata/encoding/textencoder-constructor-non-utf.html.ini +++ /dev/null @@ -1,120 +0,0 @@ -[textencoder-constructor-non-utf.html] - type: testharness - bug: https://github.com/servo/servo/issues/13231 - [Encoding argument not considered for encode: ibm866] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-2] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-3] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-4] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-5] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-6] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-7] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-8] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-8-i] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-10] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-13] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-14] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-15] - expected: FAIL - - [Encoding argument not considered for encode: iso-8859-16] - expected: FAIL - - [Encoding argument not considered for encode: koi8-r] - expected: FAIL - - [Encoding argument not considered for encode: koi8-u] - expected: FAIL - - [Encoding argument not considered for encode: macintosh] - expected: FAIL - - [Encoding argument not considered for encode: windows-874] - expected: FAIL - - [Encoding argument not considered for encode: windows-1250] - expected: FAIL - - [Encoding argument not considered for encode: windows-1251] - expected: FAIL - - [Encoding argument not considered for encode: windows-1252] - expected: FAIL - - [Encoding argument not considered for encode: windows-1253] - expected: FAIL - - [Encoding argument not considered for encode: windows-1254] - expected: FAIL - - [Encoding argument not considered for encode: windows-1255] - expected: FAIL - - [Encoding argument not considered for encode: windows-1256] - expected: FAIL - - [Encoding argument not considered for encode: windows-1257] - expected: FAIL - - [Encoding argument not considered for encode: windows-1258] - expected: FAIL - - [Encoding argument not considered for encode: x-mac-cyrillic] - expected: FAIL - - [Encoding argument not considered for encode: gbk] - expected: FAIL - - [Encoding argument not considered for encode: gb18030] - expected: FAIL - - [Encoding argument not considered for encode: big5] - expected: FAIL - - [Encoding argument not considered for encode: euc-jp] - expected: FAIL - - [Encoding argument not considered for encode: iso-2022-jp] - expected: FAIL - - [Encoding argument not considered for encode: shift_jis] - expected: FAIL - - [Encoding argument not considered for encode: euc-kr] - expected: FAIL - - [Encoding argument not considered for encode: replacement] - expected: FAIL - - [Encoding argument not considered for encode: utf-16be] - expected: FAIL - - [Encoding argument not considered for encode: utf-16le] - expected: FAIL - - [Encoding argument not considered for encode: x-user-defined] - expected: FAIL -