mirror of
https://github.com/denoland/deno.git
synced 2024-12-25 00:29:09 -05:00
fix(runtime): Declare Window.self
and DedicatedWorkerGlobalScope.name
with util.writable()
(#12378)
`Window`'s `self` property and `DedicatedWorkerGlobalScope`'s `name` property are defined as Web IDL read-only attributes with the `[Replaceable]` extended attribute, meaning that their setter will redefine the property as a data property with the set value, rather than changing some internal state. Deno currently defines them as read-only data properties instead. Given that Web IDL requires all attributes to be accessor properties rather than data properties, but Deno exposes almost all of those properties as either read-only or writable data properties, it makes sense to expose `[Replaceable]` properties as writable as well – as is already the case with `WindowOrWorkerGlobalScope`'s `performance` property.
This commit is contained in:
parent
c40d5040cd
commit
fbcbbd7ae3
5 changed files with 35 additions and 3 deletions
|
@ -1185,6 +1185,13 @@ itest!(error_import_map_unable_to_load {
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Test that setting `self` in the main thread to some other value doesn't break
|
||||||
|
// the world.
|
||||||
|
itest!(replace_self {
|
||||||
|
args: "run replace_self.js",
|
||||||
|
output: "replace_self.js.out",
|
||||||
|
});
|
||||||
|
|
||||||
itest!(worker_event_handler_test {
|
itest!(worker_event_handler_test {
|
||||||
args: "run --quiet --reload --allow-read worker_event_handler_test.js",
|
args: "run --quiet --reload --allow-read worker_event_handler_test.js",
|
||||||
output: "worker_event_handler_test.js.out",
|
output: "worker_event_handler_test.js.out",
|
||||||
|
|
21
cli/tests/testdata/replace_self.js
vendored
Normal file
21
cli/tests/testdata/replace_self.js
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
// Test that setting `self` in the main thread to some other value doesn't break
|
||||||
|
// the world, in particular for events fired on the global scope.
|
||||||
|
|
||||||
|
// deno-lint-ignore no-global-assign
|
||||||
|
self = null;
|
||||||
|
|
||||||
|
addEventListener("load", () => {
|
||||||
|
console.log("load event (event listener)");
|
||||||
|
});
|
||||||
|
|
||||||
|
addEventListener("unload", () => {
|
||||||
|
console.log("unload event (event listener)");
|
||||||
|
});
|
||||||
|
|
||||||
|
globalThis.onload = () => {
|
||||||
|
console.log("load event (event handler)");
|
||||||
|
};
|
||||||
|
|
||||||
|
globalThis.onunload = () => {
|
||||||
|
console.log("unload event (event handler)");
|
||||||
|
};
|
4
cli/tests/testdata/replace_self.js.out
vendored
Normal file
4
cli/tests/testdata/replace_self.js.out
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
load event (event listener)
|
||||||
|
load event (event handler)
|
||||||
|
unload event (event listener)
|
||||||
|
unload event (event handler)
|
|
@ -475,7 +475,7 @@ delete Object.prototype.__proto__;
|
||||||
location: location.locationDescriptor,
|
location: location.locationDescriptor,
|
||||||
Window: globalInterfaces.windowConstructorDescriptor,
|
Window: globalInterfaces.windowConstructorDescriptor,
|
||||||
window: util.readOnly(globalThis),
|
window: util.readOnly(globalThis),
|
||||||
self: util.readOnly(globalThis),
|
self: util.writable(globalThis),
|
||||||
Navigator: util.nonEnumerable(Navigator),
|
Navigator: util.nonEnumerable(Navigator),
|
||||||
navigator: {
|
navigator: {
|
||||||
configurable: true,
|
configurable: true,
|
||||||
|
@ -628,7 +628,7 @@ delete Object.prototype.__proto__;
|
||||||
ObjectDefineProperties(globalThis, unstableWindowOrWorkerGlobalScope);
|
ObjectDefineProperties(globalThis, unstableWindowOrWorkerGlobalScope);
|
||||||
}
|
}
|
||||||
ObjectDefineProperties(globalThis, workerRuntimeGlobalProperties);
|
ObjectDefineProperties(globalThis, workerRuntimeGlobalProperties);
|
||||||
ObjectDefineProperties(globalThis, { name: util.readOnly(name) });
|
ObjectDefineProperties(globalThis, { name: util.writable(name) });
|
||||||
if (runtimeOptions.enableTestingFeaturesFlag) {
|
if (runtimeOptions.enableTestingFeaturesFlag) {
|
||||||
ObjectDefineProperty(
|
ObjectDefineProperty(
|
||||||
globalThis,
|
globalThis,
|
||||||
|
|
|
@ -27840,7 +27840,7 @@
|
||||||
"headers-normalize.any.html": true,
|
"headers-normalize.any.html": true,
|
||||||
"headers-record.any.html": true,
|
"headers-record.any.html": true,
|
||||||
"headers-structure.any.html": true,
|
"headers-structure.any.html": true,
|
||||||
"headers-basic.any.worker.html": false,
|
"headers-basic.any.worker.html": true,
|
||||||
"headers-casing.any.worker.html": true,
|
"headers-casing.any.worker.html": true,
|
||||||
"headers-combine.any.worker.html": true,
|
"headers-combine.any.worker.html": true,
|
||||||
"headers-errors.any.worker.html": true,
|
"headers-errors.any.worker.html": true,
|
||||||
|
|
Loading…
Reference in a new issue