Skip to content

Commit 30d717e

Browse files
authored
Auto merge of #29396 - delan:window-getter, r=<try>
HTML #named-access-on-the-window-object (see also #27952, #25562, #21869, #19904) * [x] updates #27952, resolving conflicts related to #29079 and #28546 (5ae0ca4) * [x] fixes “Servo exited with return value 11” (1e24ffd) * [x] fixes “Assertion failure: CurrentThreadCanAccessRuntime(cx->runtime())” (5a2f05a) <details><summary>130× tests that now pass</summary> * /cors/script-304.html * /css/CSS2/abspos/adjacent-to-relpos-inline-in-inline-that-had-block.html * /css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html * /css/CSS2/floats-clear/remove-block-before-self-collapsing-sibling-with-clearance.html * /css/CSS2/floats/computed-float-position-absolute.html * /css/CSS2/normal-flow/block-in-inline-hittest-float-001.html * /css/CSS2/normal-flow/block-in-inline-insert-018.html * /css/CSS2/normal-flow/margin-collapse-through-percentage-padding.html * /css/CSS2/positioning/abspos-change-in-inline-block.html * /css/CSS2/positioning/abspos-width-change-inline-container-001.html * /css/CSS2/positioning/detach-abspos-before-layout.html * /css/CSS2/positioning/relpos-percentage-left-in-scrollable-2.html * /css/CSS2/positioning/relpos-percentage-left-in-scrollable.html * /css/CSS2/stacking-context/composite-change-after-scroll-preserves-stacking-order.html * /css/CSS2/stacking-context/opacity-change-parent-stacking-context.html * /css/CSS2/stacking-context/opacity-change-twice-stacking-context.html * /css/CSS2/stacking-context/opacity-transition-change-parent-stacking-context.html * /css/css-animations/animation-base-response-002.html * /css/css-animations/style-animation-parsing.html * /css/css-backgrounds/background-clip-color-repaint.html * /css/css-backgrounds/background-image-gradient-currentcolor-conic-repaint.html * /css/css-backgrounds/background-image-gradient-currentcolor-linear-repaint.html * /css/css-backgrounds/background-image-gradient-currentcolor-radial-repaint.html * /css/css-backgrounds/background-image-none-gradient-repaint.html * /css/css-backgrounds/border-radius-dynamic-from-no-radius.html * /css/css-backgrounds/child-move-reveals-parent-background.html * /css/css-color/filters-under-will-change-opacity.html * /css/css-flexbox/anonymous-flex-item-001.html * /css/css-flexbox/anonymous-flex-item-003.html * /css/css-flexbox/dynamic-bsize-change.html * /css/css-flexbox/flex-aspect-ratio-img-row-016.html * /css/cssom/at-namespace.html * /css/cssom/computed-style-002.html * /css/cssom/getComputedStyle-display-none-002.html * /css/cssom/getComputedStyle-display-none-003.html * /css/cssom/preferred-stylesheet-reversed-order.html * /css/cssom-view/HTMLImageElement-x-and-y-ignore-transforms.html * /css/cssom-view/pt-to-px-width.html * /css/cssom-view/scroll-back-to-initial-position.html * /css/css-text-decor/text-decoration-color-recalc-002.html * /css/css-text-decor/text-decoration-line-grammar-error-color-dynamic-001.optional.html * /css/css-text-decor/text-decoration-line-spelling-error-color-dynamic-001.optional.html * /css/css-text/text-indent/percentage-value-intrinsic-size.html * /css/css-text/white-space/display-contents-remove-whitespace-change.html * /css/css-text/white-space/white-space-empty-text-sibling.html * /css/css-transforms/change-perspective-property.html * /css/css-transforms/change-scale-wide-range.html * /css/css-transforms/change-transform-origin-property.html * /css/css-transforms/dynamic-fixed-pos-cb-change.html * /css/css-transforms/individual-transform/change-rotate-property.html * /css/css-transforms/individual-transform/change-scale-property.html * /css/css-transforms/paint-order-with-transform-change.html * /css/css-transforms/size-change-under-backface-visibility-hidden.html * /css/css-transforms/subpixel-transform-changes-001.html * /css/css-transforms/subpixel-transform-changes-002.html * /css/css-transforms/subpixel-transform-changes-003.html * /css/css-transforms/subpixel-transform-changes-004.html * /css/css-transitions/transition-reparented.html * /css/css-ui/historical/moz-user-modify-01.html * /css/css-ui/historical/user-modify-01.html * /css/css-ui/historical/webkit-user-modify-01.html * /css/css-ui/resize-change-margin.html * /css/css-ui/text-overflow-change-color.html * /css/css-ui/text-overflow-ellipsis-width-001.html * /css/css-values/animations/line-height-lh-transition.html * /css/css-values/calc-nesting.html * /css/css-values/update-subpixel-rem-unit.html * /css/css-values/viewport-units-modify.html * /css/css-variables/css-variable-change-style-001.html * /css/css-variables/css-variable-change-style-002.html * /css/css-variables/variable-cycles.html * /css/selectors/attribute-selectors/style-attribute-selector.html * /css/selectors/i18n/lang-pseudo-class-disconnected.html * /css/selectors/invalidation/attribute.html * /css/selectors/invalidation/class-id-attr.html * /css/selectors/invalidation/defined.html * /css/selectors/invalidation/sheet-going-away-001.html * /css/selectors/invalidation/sibling.html * /css/selectors/missing-right-token.html * /css/selectors/not-complex.html * /css/selectors/not-specificity.html * /css/selectors/nth-of-type-namespace.html * /css/selectors/selectors-case-sensitive-001.html * /css/selectors/visited-inheritance.html * /custom-elements/CustomElementRegistry-constructor-and-callbacks-are-held-strongly.html * /dom/events/event-global-is-still-set-when-coercing-beforeunload-result.html * /dom/nodes/remove-and-adopt-thcrash.html * /FileAPI/Blob-methods-from-detached-frame.html done #29450 #29451 * /html/browsers/browsing-the-web/history-traversal/history-traversal-navigate-parent-while-child-loading.html * /html/browsers/history/the-history-interface/history_back_cross_realm_method.html * /html/browsers/history/the-history-interface/history_forward_cross_realm_method.html * /html/browsers/history/the-history-interface/history_go_cross_realm_method.html * /html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html * /html/dom/elements/images/bypass-cache-revalidation.html * /html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html * /html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-alt-crash-001.html * /html/rendering/replaced-elements/embedded-content/change-src-while-not-displayed.html * /html/rendering/replaced-elements/embedded-content/cross-domain-iframe-in-multicol.sub.html * /html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html * /html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html * /html/rendering/widgets/the-select-element/select-invalidation.html * /html/semantics/document-metadata/the-base-element/base_target_does_not_affect_iframe_src_navigation.html * /html/semantics/document-metadata/the-base-element/base_target_does_not_affect_location_assignment.html * /html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html * /html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html * /html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html * /html/semantics/embedded-content/the-iframe-element/srcdoc-anchor.html * /html/semantics/embedded-content/the-iframe-element/srcdoc-attribute-reset.html * /html/semantics/embedded-content/the-img-element/image-compositing-change.html * /html/semantics/embedded-content/the-img-element/image-compositing-large-scale-change.html * /html/semantics/embedded-content/the-img-element/image-loading-lazy-clip-path.html * /html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html * /html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html * /html/semantics/forms/form-submission-0/form-double-submit-to-different-origin-frame.html * /html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html * /html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html * /html/semantics/forms/the-button-element/button-willvalidate-readonly-attribute.html * /html/semantics/forms/the-input-element/datetime-local-trailing-zeros.html * /html/semantics/forms/the-input-element/radio-morphed.html * /html/semantics/forms/the-progress-element/progress.html * /html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.html * /html/semantics/selectors/pseudo-classes/placeholder-shown-type-change.html * /html/syntax/serializing-html-fragments/initial-linefeed-pre.html * /html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-errorevent.html * /html/webappapis/scripting/events/event-handler-processing-algorithm-error/frameset-element-synthetic-event.html * /quirks/unitless-length/excluded-properties-001.html * /quirks/unitless-length/excluded-properties-003.html * /selection/caret/empty-elements.html * /selection/contenteditable/cefalse-on-boundaries.html * /selection/textcontrols/onselectionchange-content-attribute.html </details> <details><summary>94× tests that improve but still fail in a way that’s clearly the subject of the test</summary> * **/css/css-animations/animation-base-response-001.html** * **/css/css-backgrounds/background-image-gradient-currentcolor-visited.html** * **/css/css-backgrounds/inheritance.sub.html** * **/css/css-backgrounds/local-attachment-content-box-scroll.html** * **/css/css-color/canvas-change-opacity.html** * **/css/css-color/color-initial-canvastext.html** * **/css/css-flexbox/flex-aspect-ratio-img-column-010.html** * **/css/css-flexbox/flex-aspect-ratio-img-row-004.html** * **/css/css-fonts/parsing/font-face-src-format.html** getter works but insertRule does nothing * **/css/css-fonts/parsing/font-face-src-list.html** as above * **/css/css-fonts/parsing/font-face-src-local.html** as above, but also delayed length change? * **/css/css-fonts/parsing/font-face-src-tech.html** as above * **/css/css-text/white-space/trailing-space-before-br-001.html** * **/css/css-transforms/3d-rendering-context-behavior.html** failures are subject of test, but also blank page? * **/css/css-transforms/individual-transform/change-translate-property.html** * **/css/css-transforms/preserve-3d-flat-grouping-properties.html** * **/css/css-transforms/transforms-support-calc.html** * **/css/css-transitions/inherit-height-transition.html** * **/css/css-ui/inheritance.html** * **/css/css-ui/parsing/outline-width-computed.html** failures are subject of test; https://drafts.csswg.org/css-values-4/#snap-a-length-as-a-border-width * **/css/css-values/lh-unit-003.html** * **/css/css-values/viewport-units-compute.html** * **/css/css-values/viewport-units-keyframes.html** * **/css/css-values/viewport-units-media-queries.html** * **/css/css-values/viewport-units-writing-mode.html** * **/css/cssom-view/elementsFromPoint-table.html** * **/css/cssom-view/scroll-behavior-default-css.html** * **/css/cssom-view/scroll-behavior-element.html** * **/css/cssom-view/scroll-behavior-main-frame-root.html** * **/css/cssom-view/scroll-behavior-main-frame-window.html** * **/css/cssom-view/scroll-behavior-smooth-navigation.html** * **/css/cssom-view/scroll-behavior-subframe-root.html** * **/css/cssom/computed-style-003.html** * **/css/cssom/computed-style-004.html** * **/css/cssom/font-variant-shorthand-serialization.html** * **/css/selectors/dir-selector-auto.html** * **/css/selectors/has-argument-with-explicit-scope.html** * **/css/selectors/has-basic.html** * **/css/selectors/has-relative-argument.html** * **/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html** * **/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html** * **/css/selectors/invalidation/dir-pseudo-class-in-has.html** * **/css/selectors/invalidation/empty-pseudo-in-has.html** * **/css/selectors/invalidation/has-in-adjacent-position.html** * **/css/selectors/invalidation/has-in-ancestor-position.html** * **/css/selectors/invalidation/has-in-parent-position.html** * **/css/selectors/invalidation/has-in-sibling-position.html** * **/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html** * **/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html** * **/css/selectors/invalidation/has-sibling.html** * **/css/selectors/invalidation/has-with-not.html** * **/css/selectors/invalidation/has-with-pseudo-class.html** * **/css/selectors/invalidation/input-pseudo-classes-in-has.html** * **/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html** * **/css/selectors/invalidation/lang-pseudo-class-in-has.html** * **/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html** * **/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html** * **/css/selectors/is-where-basic.html** * **/css/selectors/is-where-not.html** * **/html/rendering/non-replaced-elements/tables/form-in-tables.html** * /html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update- * **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-attribute-changes.html** * **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-normal-descendant-change.html** * **/html/semantics/document-metadata/the-meta-element/color-scheme/meta-color-scheme-remove.html** * **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-aspect-ratio.html** * **/html/semantics/embedded-content/the-img-element/image-loading-lazy-slow.html** * **/html/semantics/interactive-elements/the-dialog-element/inertness-with-modal-dialogs-and-iframes.html** * **/html/semantics/popovers/popover-stacking.html** * **/referrer-policy/generic/inheritance/popup-inheritance-form-submission.html** * **/resource-timing/resource-reload-TAO.html** * **/selection/bidi/modify.tentative.html** * **/selection/contenteditable/modify.tentative.html** * **/selection/textcontrols/selectionchange.html** * **/css/CSS2/normal-flow/block-in-inline-client-rects-001.html** * **/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html** * **/css/css-animations/computed-style-animation-parsing.html** * **/css/css-variables/variables-substitute-guaranteed-invalid.html** * **/css/cssom-view/elementsFromPoint-simple.html** * **/css/cssom/CSSStyleSheet-modify-after-removal.html** * **/css/cssom/getComputedStyle-display-none-001.html** * **/css/selectors/focus-visible-script-focus-001.html** * **/css/selectors/has-specificity.html** * **/css/selectors/invalidation/is.html** * **/css/selectors/invalidation/not-002.html** * **/dom/events/EventListener-handleEvent-cross-realm.html** * **/dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html** * **/html/browsers/the-window-object/window-properties.https.html** * **/html/browsers/the-window-object/window-prototype-chain.html** * **/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html** * **/html/dom/aria-element-reflection.html** * **/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-update-with-border-object-fit.html** * **/html/semantics/forms/form-submission-0/form-double-submit-multiple-targets.html** * **/html/semantics/forms/the-input-element/show-picker-cross-origin-iframe.html** * **/html/webappapis/scripting/events/compile-event-handler-lexical-scopes-form-owner.html** * **/quirks/unitless-length/excluded-properties-002.html** </details> <details open><summary>22× tests with failures that looked interesting</summary> * 1× CRASH [expected ...] * **/css/css-fonts/crash-large-grapheme-cluster.html** crash is subject of test * 6× FAIL [expected PASS] /... (reftest) * **/css/css-flexbox/anonymous-flex-item-005.html** old pass was spurious * **/css/css-flexbox/anonymous-flex-item-006.html** old pass was spurious * **/css/css-text-decor/text-decoration-line-recalc.html** old pass was spurious; ‘text-decoration’ shorthand unimplemented * **/css/css-ui/appearance-auto-non-html-namespace-001.html** old pass was spurious * **/html/canvas/element/drawing-text-to-the-canvas/direction-inherit-rtl.html** old pass was spurious * **/html/canvas/element/drawing-text-to-the-canvas/direction-rtl.html** old pass was spurious * 13× TIMEOUT [expected ...] * **/css/css-fonts/font-size-monospace-adjust.html** timeout is subject of test; reftest runner bug with 1e10s transition? * **/css/cssom-view/background-change-during-smooth-scroll.html** timeout is subject of test * **/css/selectors/invalidation/has-complexity.html** timeout is subject of test * **/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html** timeout is subject of test; :has() unimplemented * **/fetch/stale-while-revalidate/stale-image.html** timeout is subject of test * **/html/browsers/browsing-the-web/history-traversal/history-traversal-navigates-multiple-frames.html** timeout is subject of test * **/html/rendering/widgets/appearance/appearance-animation-001.html** timeout is subject of test; reftest runner bug with 1e10s animation? * **/html/rendering/widgets/appearance/appearance-animation-002.html** timeout is subject of test; reftest runner bug with 1e10s animation? * **/html/rendering/widgets/appearance/appearance-transition-001.html** timeout is subject of test; reftest runner bug with 1e10s transition? * **/html/rendering/widgets/appearance/appearance-transition-002.html** timeout is subject of test; reftest runner bug with 1e10s transition? * **/html/rendering/widgets/appearance/appearance-transition-003.html** timeout is subject of test; reftest runner bug with 1e10s transition? * **/resource-timing/opaque-origin.html** timeout is subject of test * **/selection/textcontrols/selectionchange-bubble.html** timeout is subject of test * **/webidl/ecmascript-binding/invalid-this-value-cross-realm.html** ‘HTMLDocument’ unimplemented * **/webidl/ecmascript-binding/window-named-properties-object.html** potentially interesting? </details> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [ ] `./mach build -d` does not report any errors - [ ] `./mach test-tidy` does not report any errors - [ ] These changes fix #27949 (GitHub issue number if applicable) <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because ___
2 parents 18015e6 + 1835fd2 commit 30d717e

File tree

264 files changed

+6119
-1428
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

264 files changed

+6119
-1428
lines changed

components/script/dom/bindings/codegen/CodegenRust.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3290,6 +3290,13 @@ def definition_body(self):
32903290
%s;
32913291
assert!(!prototype_proto.is_null());""" % getPrototypeProto)]
32923292

3293+
if self.descriptor.hasNamedPropertiesObject():
3294+
assert not self.haveUnscopables
3295+
code.append(CGGeneric("""\
3296+
rooted!(in(*cx) let mut prototype_proto_proto = prototype_proto.get());
3297+
dom::types::%s::create_named_properties_object(cx, prototype_proto_proto.handle(), prototype_proto.handle_mut());
3298+
assert!(!prototype_proto.is_null());""" % name))
3299+
32933300
properties = {
32943301
"id": name,
32953302
"unscopables": "unscopable_names" if self.haveUnscopables else "&[]",
@@ -5508,24 +5515,23 @@ def getBody(self):
55085515
attrs += " | JSPROP_READONLY"
55095516
fillDescriptor = ("set_property_descriptor(\n"
55105517
" MutableHandle::from_raw(desc),\n"
5511-
" result_root.handle(),\n"
5518+
" rval.handle(),\n"
55125519
" (%s) as u32,\n"
55135520
" &mut *is_none\n"
55145521
");\n"
55155522
"return true;" % attrs)
55165523
templateValues = {
5517-
'jsvalRef': 'result_root.handle_mut()',
5524+
'jsvalRef': 'rval.handle_mut()',
55185525
'successCode': fillDescriptor,
5519-
'pre': 'rooted!(in(*cx) let mut result_root = UndefinedValue());'
5526+
'pre': 'rooted!(in(*cx) let mut rval = UndefinedValue());'
55205527
}
55215528
get += ("if let Some(index) = index {\n"
55225529
+ " let this = UnwrapProxy(proxy);\n"
55235530
+ " let this = &*this;\n"
55245531
+ CGIndenter(CGProxyIndexedGetter(self.descriptor, templateValues)).define() + "\n"
55255532
+ "}\n")
55265533

5527-
namedGetter = self.descriptor.operations['NamedGetter']
5528-
if namedGetter:
5534+
if self.descriptor.supportsNamedProperties():
55295535
attrs = []
55305536
if not self.descriptor.interface.getExtendedAttribute("LegacyUnenumerableNamedProperties"):
55315537
attrs.append("JSPROP_ENUMERATE")
@@ -5537,15 +5543,15 @@ def getBody(self):
55375543
attrs = "0"
55385544
fillDescriptor = ("set_property_descriptor(\n"
55395545
" MutableHandle::from_raw(desc),\n"
5540-
" result_root.handle(),\n"
5546+
" rval.handle(),\n"
55415547
" (%s) as u32,\n"
55425548
" &mut *is_none\n"
55435549
");\n"
55445550
"return true;" % attrs)
55455551
templateValues = {
5546-
'jsvalRef': 'result_root.handle_mut()',
5552+
'jsvalRef': 'rval.handle_mut()',
55475553
'successCode': fillDescriptor,
5548-
'pre': 'rooted!(in(*cx) let mut result_root = UndefinedValue());'
5554+
'pre': 'rooted!(in(*cx) let mut rval = UndefinedValue());'
55495555
}
55505556

55515557
# See the similar-looking in CGDOMJSProxyHandler_get for the spec quote.
@@ -5638,7 +5644,7 @@ def getBody(self):
56385644
+ CGIndenter(CGProxyNamedSetter(self.descriptor)).define()
56395645
+ " return (*opresult).succeed();\n"
56405646
+ "}\n")
5641-
elif self.descriptor.operations['NamedGetter']:
5647+
elif self.descriptor.supportsNamedProperties():
56425648
set += ("if id.is_string() || id.is_int() {\n"
56435649
+ CGIndenter(CGProxyNamedGetter(self.descriptor)).define()
56445650
+ " if result.is_some() {\n"
@@ -5722,7 +5728,7 @@ def getBody(self):
57225728
}
57235729
""")
57245730

5725-
if self.descriptor.operations['NamedGetter']:
5731+
if self.descriptor.supportsNamedProperties():
57265732
body += dedent(
57275733
"""
57285734
for name in (*unwrapped_proxy).SupportedPropertyNames() {
@@ -5844,11 +5850,10 @@ def getBody(self):
58445850
+ " return true;\n"
58455851
+ "}\n\n")
58465852

5847-
namedGetter = self.descriptor.operations['NamedGetter']
58485853
condition = "id.is_string() || id.is_int()"
58495854
if indexedGetter:
58505855
condition = "index.is_none() && (%s)" % condition
5851-
if namedGetter:
5856+
if self.descriptor.supportsNamedProperties():
58525857
named = """\
58535858
if %s {
58545859
let mut has_on_proto = false;
@@ -5943,8 +5948,7 @@ def getBody(self):
59435948
else:
59445949
getIndexedOrExpando = getFromExpando + "\n"
59455950

5946-
namedGetter = self.descriptor.operations['NamedGetter']
5947-
if namedGetter:
5951+
if self.descriptor.supportsNamedProperties():
59485952
condition = "id.is_string() || id.is_int()"
59495953
# From step 1:
59505954
# If O supports indexed properties and P is an array index, then:
@@ -6214,7 +6218,7 @@ def members():
62146218
),
62156219
rettype)
62166220

6217-
if descriptor.proxy:
6221+
if descriptor.proxy or descriptor.isGlobal():
62186222
for name, operation in descriptor.operations.items():
62196223
if not operation or operation.isStringifier():
62206224
continue

components/script/dom/bindings/codegen/Configuration.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,8 @@ def addOperation(operation, m):
280280
continue
281281

282282
def addIndexedOrNamedOperation(operation, m):
283-
self.proxy = True
283+
if not self.isGlobal():
284+
self.proxy = True
284285
if m.isIndexed():
285286
operation = 'Indexed' + operation
286287
else:
@@ -369,6 +370,15 @@ def binaryNameFor(self, name):
369370
def internalNameFor(self, name):
370371
return self._internalNames.get(name, name)
371372

373+
def hasNamedPropertiesObject(self):
374+
if self.interface.isExternal():
375+
return False
376+
377+
return self.isGlobal() and self.supportsNamedProperties()
378+
379+
def supportsNamedProperties(self):
380+
return self.operations['NamedGetter'] is not None
381+
372382
def getExtendedAttributes(self, member, getter=False, setter=False):
373383
def maybeAppendInfallibleToAttrs(attrs, throws):
374384
if throws is None:

components/script/dom/bindings/proxyhandler.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ use js::jsapi::{DOMProxyShadowsResult, JSContext, JSObject, PropertyDescriptor};
3939
use js::jsapi::{GetWellKnownSymbol, SymbolCode};
4040
use js::jsapi::{JSErrNum, SetDOMProxyInformation};
4141
use js::jsid::SymbolId;
42+
use js::jsval::JSVal;
4243
use js::jsval::ObjectValue;
4344
use js::jsval::UndefinedValue;
4445
use js::rust::wrappers::JS_AlreadyHasOwnPropertyById;
@@ -193,7 +194,7 @@ pub unsafe fn ensure_expando_object(
193194
/// Set the property descriptor's object to `obj` and set it to enumerable,
194195
/// and writable if `readonly` is true.
195196
pub fn set_property_descriptor(
196-
desc: MutableHandle<PropertyDescriptor>,
197+
mut desc: MutableHandle<PropertyDescriptor>,
197198
value: HandleValue,
198199
attrs: u32,
199200
is_none: &mut bool,

0 commit comments

Comments
 (0)