Make WebIDL static methods take a more specific global if possible

This commit is contained in:
Anthony Ramine 2016-11-27 14:37:04 +01:00
parent 973f77c006
commit ddfb8805dc
3 changed files with 12 additions and 11 deletions

View file

@ -3378,12 +3378,13 @@ class CGAbstractStaticBindingMethod(CGAbstractMethod):
Argument('*mut JSVal', 'vp'), Argument('*mut JSVal', 'vp'),
] ]
CGAbstractMethod.__init__(self, descriptor, name, "bool", args, extern=True) CGAbstractMethod.__init__(self, descriptor, name, "bool", args, extern=True)
self.exposureSet = descriptor.interface.exposureSet
def definition_body(self): def definition_body(self):
preamble = CGGeneric("""\ preamble = "let global = GlobalScope::from_object(JS_CALLEE(cx, vp).to_object());\n"
let global = GlobalScope::from_object(JS_CALLEE(cx, vp).to_object()); if len(self.exposureSet) == 1:
""") preamble += "let global = Root::downcast::<dom::types::%s>(global).unwrap();\n" % list(self.exposureSet)[0]
return CGList([preamble, self.generate_code()]) return CGList([CGGeneric(preamble), self.generate_code()])
def generate_code(self): def generate_code(self):
raise NotImplementedError # Override me! raise NotImplementedError # Override me!

View file

@ -7,7 +7,7 @@ use dom::bindings::error::Error::Syntax;
use dom::bindings::error::Fallible; use dom::bindings::error::Fallible;
use dom::bindings::reflector::Reflector; use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString; use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope; use dom::window::Window;
use regex::Regex; use regex::Regex;
pub type UUID = DOMString; pub type UUID = DOMString;
@ -271,22 +271,22 @@ const VALID_UUID_REGEX: &'static str = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-
impl BluetoothUUID { impl BluetoothUUID {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-canonicaluuid // https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-canonicaluuid
pub fn CanonicalUUID(_: &GlobalScope, alias: u32) -> UUID { pub fn CanonicalUUID(_: &Window, alias: u32) -> UUID {
canonical_uuid(alias) canonical_uuid(alias)
} }
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-getservice // https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-getservice
pub fn GetService(_: &GlobalScope, name: BluetoothServiceUUID) -> Fallible<UUID> { pub fn GetService(_: &Window, name: BluetoothServiceUUID) -> Fallible<UUID> {
Self::service(name) Self::service(name)
} }
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-getcharacteristic // https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-getcharacteristic
pub fn GetCharacteristic(_: &GlobalScope, name: BluetoothCharacteristicUUID) -> Fallible<UUID> { pub fn GetCharacteristic(_: &Window, name: BluetoothCharacteristicUUID) -> Fallible<UUID> {
Self::characteristic(name) Self::characteristic(name)
} }
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-getdescriptor // https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-getdescriptor
pub fn GetDescriptor(_: &GlobalScope, name: BluetoothDescriptorUUID) -> Fallible<UUID> { pub fn GetDescriptor(_: &Window, name: BluetoothDescriptorUUID) -> Fallible<UUID> {
Self::descriptor(name) Self::descriptor(name)
} }
} }

View file

@ -6,7 +6,7 @@ use cssparser::serialize_identifier;
use dom::bindings::error::Fallible; use dom::bindings::error::Fallible;
use dom::bindings::reflector::Reflector; use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString; use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope; use dom::window::Window;
#[dom_struct] #[dom_struct]
pub struct CSS { pub struct CSS {
@ -15,7 +15,7 @@ pub struct CSS {
impl CSS { impl CSS {
// http://dev.w3.org/csswg/cssom/#serialize-an-identifier // http://dev.w3.org/csswg/cssom/#serialize-an-identifier
pub fn Escape(_: &GlobalScope, ident: DOMString) -> Fallible<DOMString> { pub fn Escape(_: &Window, ident: DOMString) -> Fallible<DOMString> {
let mut escaped = String::new(); let mut escaped = String::new();
serialize_identifier(&ident, &mut escaped).unwrap(); serialize_identifier(&ident, &mut escaped).unwrap();
Ok(DOMString::from(escaped)) Ok(DOMString::from(escaped))