diff options
author | yvt <i@yvt.jp> | 2021-07-26 01:07:29 +0900 |
---|---|---|
committer | yvt <i@yvt.jp> | 2021-07-26 01:07:29 +0900 |
commit | c28e98ec40e0950e77c60b32af023c6eb7da7366 (patch) | |
tree | 6fcc0af229cba18114dd347e19ee5687c0f9ea21 /components/script/dom/bindings/codegen | |
parent | 66a4ea0727cf1e1cec8c6d49bcea495ff8b0650e (diff) | |
download | servo-c28e98ec40e0950e77c60b32af023c6eb7da7366.tar.gz servo-c28e98ec40e0950e77c60b32af023c6eb7da7366.zip |
refactor(script): squash `CGDOMJSProxyHandler_set`
The implementation in `crate::dom::bindings::proxyhandler::
maybe_cross_origin_set_rawcx` is now directly assigned to `ProxyTraps::
set`.
Diffstat (limited to 'components/script/dom/bindings/codegen')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 56 |
1 files changed, 5 insertions, 51 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 8b94cc1b5d1..1319dbab3a6 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -3556,7 +3556,11 @@ class CGDefineProxyHandler(CGAbstractMethod): customSet = 'None' if self.descriptor.isMaybeCrossOriginObject(): - customSet = 'Some(set)' + # `maybe_cross_origin_set_rawcx` doesn't support legacy platform objects' + # `[[Set]]` (https://heycam.github.io/webidl/#legacy-platform-object-set) (yet). + assert not self.descriptor.operations['IndexedGetter'] + assert not self.descriptor.operations['NamedGetter'] + customSet = 'Some(proxyhandler::maybe_cross_origin_set_rawcx)' getOwnEnumerablePropertyKeys = "own_property_keys" if self.descriptor.interface.getExtendedAttribute("LegacyUnenumerableNamedProperties") or \ @@ -5958,55 +5962,6 @@ return true;""" % (maybeCrossOriginGet, getIndexedOrExpando, getNamed) return CGGeneric(self.getBody()) -class CGDOMJSProxyHandler_set(CGAbstractExternMethod): - def __init__(self, descriptor): - args = [Argument('*mut JSContext', 'cx'), Argument('RawHandleObject', 'proxy'), - Argument('RawHandleId', 'id'), Argument('RawHandleValue', 'v'), - Argument('RawHandleValue', 'receiver'), - Argument('*mut ObjectOpResult', 'opresult')] - CGAbstractExternMethod.__init__(self, descriptor, "set", "bool", args) - self.descriptor = descriptor - - def getBody(self): - descriptor = self.descriptor - - # `CGDOMJSProxyHandler_set` doesn't support legacy platform objects' - # `[[Set]]` (https://heycam.github.io/webidl/#legacy-platform-object-set) yet. - # - assert descriptor.isMaybeCrossOriginObject() - assert not descriptor.operations['IndexedGetter'] - assert not descriptor.operations['NamedGetter'] - - maybeCrossOriginSet = dedent( - """ - if !proxyhandler::is_platform_object_same_origin(cx, proxy) { - return proxyhandler::cross_origin_set(cx, proxy, id, v, receiver, opresult); - } - - // Safe to enter the Realm of proxy now. - let _ac = JSAutoRealm::new(*cx, proxy.get()); - """) - - return dedent( - """ - let cx = SafeJSContext::from_ptr(cx); - %(maybeCrossOriginSet)s - - // OrdinarySet - // <https://tc39.es/ecma262/#sec-ordinaryset> - rooted!(in(*cx) let mut own_desc = PropertyDescriptor::default()); - if !getOwnPropertyDescriptor(*cx, proxy, id, own_desc.handle_mut().into()) { - return false; - } - - js::jsapi::SetPropertyIgnoringNamedGetter( - *cx, proxy, id, v, receiver, own_desc.handle().into(), opresult) - """) % {"maybeCrossOriginSet": maybeCrossOriginSet} - - def definition_body(self): - return CGGeneric(self.getBody()) - - class CGDOMJSProxyHandler_getPrototype(CGAbstractExternMethod): def __init__(self, descriptor): args = [Argument('*mut JSContext', 'cx'), Argument('RawHandleObject', 'proxy'), @@ -6693,7 +6648,6 @@ class CGDescriptor(CGThing): if descriptor.isMaybeCrossOriginObject(): cgThings.append(CGDOMJSProxyHandler_getPrototype(descriptor)) - cgThings.append(CGDOMJSProxyHandler_set(descriptor)) # cgThings.append(CGDOMJSProxyHandler(descriptor)) # cgThings.append(CGIsMethod(descriptor)) |