Support stringifier attributes

This commit is contained in:
Kagami Sascha Rosylight 2019-10-25 15:46:52 +09:00
parent 97c01fc479
commit 691af0e98b
14 changed files with 11 additions and 73 deletions

View file

@ -3667,6 +3667,8 @@ class CGSpecializedMethod(CGAbstractExternMethod):
@staticmethod @staticmethod
def makeNativeName(descriptor, method): def makeNativeName(descriptor, method):
if method.underlyingAttr:
return CGSpecializedGetter.makeNativeName(descriptor, method.underlyingAttr)
name = method.identifier.name name = method.identifier.name
nativeName = descriptor.binaryNameFor(name) nativeName = descriptor.binaryNameFor(name)
if nativeName == name: if nativeName == name:
@ -5762,7 +5764,7 @@ class CGInterfaceTrait(CGThing):
for m in descriptor.interface.members: for m in descriptor.interface.members:
if (m.isMethod() and not m.isStatic() and if (m.isMethod() and not m.isStatic() and
not m.isMaplikeOrSetlikeOrIterableMethod() and not m.isMaplikeOrSetlikeOrIterableMethod() and
(not m.isIdentifierLess() or m.isStringifier()) and (not m.isIdentifierLess() or (m.isStringifier() and not m.underlyingAttr)) and
not m.isDefaultToJSON()): not m.isDefaultToJSON()):
name = CGSpecializedMethod.makeNativeName(descriptor, m) name = CGSpecializedMethod.makeNativeName(descriptor, m)
infallible = 'infallible' in descriptor.getExtendedAttributes(m) infallible = 'infallible' in descriptor.getExtendedAttributes(m)
@ -6172,10 +6174,6 @@ class CGDescriptor(CGThing):
cgThings.append(CGSpecializedMethod(descriptor, m)) cgThings.append(CGSpecializedMethod(descriptor, m))
cgThings.append(CGMemberJITInfo(descriptor, m)) cgThings.append(CGMemberJITInfo(descriptor, m))
elif m.isAttr(): elif m.isAttr():
if m.stringifier:
raise TypeError("Stringifier attributes not supported yet. "
"See https://github.com/servo/servo/issues/7590\n"
"%s" % m.location)
if m.getExtendedAttribute("Unscopable"): if m.getExtendedAttribute("Unscopable"):
assert not m.isStatic() assert not m.isStatic()
unscopableNames.append(m.identifier.name) unscopableNames.append(m.identifier.name)

View file

@ -177,11 +177,6 @@ impl DOMTokenListMethods for DOMTokenList {
Ok(()) Ok(())
} }
// https://dom.spec.whatwg.org/#concept-dtl-serialize
fn Stringifier(&self) -> DOMString {
self.element.get_string_attribute(&self.local_name)
}
// check-tidy: no specs after this line // check-tidy: no specs after this line
fn IndexedGetter(&self, index: u32) -> Option<DOMString> { fn IndexedGetter(&self, index: u32) -> Option<DOMString> {
self.Item(index) self.Item(index)

View file

@ -526,11 +526,6 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement {
// Step 5. // Step 5.
self.update_href(url); self.update_href(url);
} }
// https://html.spec.whatwg.org/multipage/#dom-hyperlink-href
fn Stringifier(&self) -> DOMString {
DOMString::from(self.Href().0)
}
} }
impl Activatable for HTMLAnchorElement { impl Activatable for HTMLAnchorElement {

View file

@ -9,7 +9,7 @@ use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::{DOMString, USVString}; use crate::dom::bindings::str::USVString;
use crate::dom::globalscope::GlobalScope; use crate::dom::globalscope::GlobalScope;
use crate::dom::urlhelper::UrlHelper; use crate::dom::urlhelper::UrlHelper;
use crate::dom::window::Window; use crate::dom::window::Window;
@ -246,11 +246,6 @@ impl LocationMethods for Location {
Ok(()) Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-location-href
fn Stringifier(&self) -> Fallible<DOMString> {
Ok(DOMString::from(self.GetHref()?.0))
}
// https://html.spec.whatwg.org/multipage/#dom-location-search // https://html.spec.whatwg.org/multipage/#dom-location-search
fn GetSearch(&self) -> Fallible<USVString> { fn GetSearch(&self) -> Fallible<USVString> {
self.check_same_origin_domain()?; self.check_same_origin_domain()?;

View file

@ -270,11 +270,6 @@ impl URLMethods for URL {
.or_init(|| URLSearchParams::new(&self.global(), Some(self))) .or_init(|| URLSearchParams::new(&self.global(), Some(self)))
} }
// https://url.spec.whatwg.org/#dom-url-href
fn Stringifier(&self) -> DOMString {
DOMString::from(self.Href().0)
}
// https://url.spec.whatwg.org/#dom-url-username // https://url.spec.whatwg.org/#dom-url-username
fn Username(&self) -> USVString { fn Username(&self) -> USVString {
UrlHelper::Username(&self.url.borrow()) UrlHelper::Username(&self.url.borrow())

View file

@ -22,8 +22,7 @@ interface DOMTokenList {
void replace(DOMString token, DOMString newToken); void replace(DOMString token, DOMString newToken);
[CEReactions, Pure] [CEReactions, Pure]
attribute DOMString value; stringifier attribute DOMString value;
stringifier;
iterable<DOMString?>; iterable<DOMString?>;
}; };

View file

@ -4,10 +4,8 @@
// https://html.spec.whatwg.org/multipage/#htmlhyperlinkelementutils // https://html.spec.whatwg.org/multipage/#htmlhyperlinkelementutils
interface mixin HTMLHyperlinkElementUtils { interface mixin HTMLHyperlinkElementUtils {
// [CEReactions]
// stringifier attribute USVString href;
[CEReactions] [CEReactions]
attribute USVString href; stringifier attribute USVString href;
readonly attribute USVString origin; readonly attribute USVString origin;
[CEReactions] [CEReactions]
attribute USVString protocol; attribute USVString protocol;
@ -27,9 +25,4 @@ interface mixin HTMLHyperlinkElementUtils {
attribute USVString search; attribute USVString search;
[CEReactions] [CEReactions]
attribute USVString hash; attribute USVString hash;
// Adding a separate stringifier method until
// https://github.com/servo/servo/issues/7590 adds attribute stringifier
// support.
stringifier;
}; };

View file

@ -4,7 +4,7 @@
// https://html.spec.whatwg.org/multipage/#location // https://html.spec.whatwg.org/multipage/#location
[Exposed=Window, Unforgeable] interface Location { [Exposed=Window, Unforgeable] interface Location {
/*stringifier*/ [Throws] attribute USVString href; [Throws] stringifier attribute USVString href;
[Throws] readonly attribute USVString origin; [Throws] readonly attribute USVString origin;
[Throws] attribute USVString protocol; [Throws] attribute USVString protocol;
[Throws] attribute USVString host; [Throws] attribute USVString host;
@ -19,9 +19,4 @@
[Throws] void reload(); [Throws] void reload();
//[SameObject] readonly attribute USVString[] ancestorOrigins; //[SameObject] readonly attribute USVString[] ancestorOrigins;
// This is only doing as well as gecko right now.
// https://github.com/servo/servo/issues/7590 is on file for
// adding attribute stringifier support.
[Throws] stringifier;
}; };

View file

@ -3,10 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://drafts.csswg.org/cssom/#the-medialist-interface // https://drafts.csswg.org/cssom/#the-medialist-interface
// [LegacyArrayClass]
[Exposed=Window] [Exposed=Window]
interface MediaList { interface MediaList {
/* stringifier */ attribute [TreatNullAs=EmptyString] DOMString mediaText; stringifier attribute [TreatNullAs=EmptyString] DOMString mediaText;
readonly attribute unsigned long length; readonly attribute unsigned long length;
getter DOMString? item(unsigned long index); getter DOMString? item(unsigned long index);
void appendMedium(DOMString medium); void appendMedium(DOMString medium);

View file

@ -8,7 +8,7 @@
interface URL { interface URL {
[Throws] constructor(USVString url, optional USVString base); [Throws] constructor(USVString url, optional USVString base);
[SetterThrows] [SetterThrows]
/*stringifier*/ attribute USVString href; stringifier attribute USVString href;
readonly attribute USVString origin; readonly attribute USVString origin;
attribute USVString protocol; attribute USVString protocol;
attribute USVString username; attribute USVString username;
@ -27,9 +27,4 @@ interface URL {
static void revokeObjectURL(DOMString url); static void revokeObjectURL(DOMString url);
USVString toJSON(); USVString toJSON();
// This is only doing as well as gecko right now.
// https://github.com/servo/servo/issues/7590 is on file for
// adding attribute stringifier support.
stringifier;
}; };

View file

@ -5,7 +5,7 @@
// https://html.spec.whatwg.org/multipage/#worker-locations // https://html.spec.whatwg.org/multipage/#worker-locations
[Exposed=Worker] [Exposed=Worker]
interface WorkerLocation { interface WorkerLocation {
/*stringifier*/ readonly attribute USVString href; stringifier readonly attribute USVString href;
readonly attribute USVString origin; readonly attribute USVString origin;
readonly attribute USVString protocol; readonly attribute USVString protocol;
readonly attribute USVString host; readonly attribute USVString host;
@ -14,9 +14,4 @@ interface WorkerLocation {
readonly attribute USVString pathname; readonly attribute USVString pathname;
readonly attribute USVString search; readonly attribute USVString search;
readonly attribute USVString hash; readonly attribute USVString hash;
// This is only doing as well as gecko right now.
// https://github.com/servo/servo/issues/7590 is on file for
// adding attribute stringifier support.
stringifier;
}; };

View file

@ -6,7 +6,7 @@ use crate::dom::bindings::codegen::Bindings::WorkerLocationBinding;
use crate::dom::bindings::codegen::Bindings::WorkerLocationBinding::WorkerLocationMethods; use crate::dom::bindings::codegen::Bindings::WorkerLocationBinding::WorkerLocationMethods;
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
use crate::dom::bindings::root::DomRoot; use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{DOMString, USVString}; use crate::dom::bindings::str::USVString;
use crate::dom::urlhelper::UrlHelper; use crate::dom::urlhelper::UrlHelper;
use crate::dom::workerglobalscope::WorkerGlobalScope; use crate::dom::workerglobalscope::WorkerGlobalScope;
use dom_struct::dom_struct; use dom_struct::dom_struct;
@ -87,9 +87,4 @@ impl WorkerLocationMethods for WorkerLocation {
fn Search(&self) -> USVString { fn Search(&self) -> USVString {
UrlHelper::Search(&self.url) UrlHelper::Search(&self.url)
} }
// https://html.spec.whatwg.org/multipage/#dom-workerlocation-href
fn Stringifier(&self) -> DOMString {
DOMString::from(self.Href().0)
}
} }

View file

@ -1,8 +0,0 @@
[MediaList.html]
type: testharness
[MediaList]
expected: FAIL
[CSSOM - MediaList interface]
expected: FAIL

View file

@ -95,9 +95,6 @@
[Stringification of sheet.cssRules[2\].cssRules[0\]] [Stringification of sheet.cssRules[2\].cssRules[0\]]
expected: FAIL expected: FAIL
[MediaList interface: stringifier]
expected: FAIL
[CSSImportRule interface: attribute media] [CSSImportRule interface: attribute media]
expected: FAIL expected: FAIL