summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Iván Vieitez Parra <3857362+corrideat@users.noreply.github.com>2023-07-31 23:22:07 +0200
committerGitHub <noreply@github.com>2023-07-31 23:22:07 +0200
commit98403691d100fec0804c86d8b89d0d3f8da68354 (patch)
tree2757dc1a0ed392a9f2ca403903a078c6f61e8605
parentaa8078b6888ee4d55ef348e336e076676dffc25f (diff)
fix: call setIsTrusted for generated events (MessageEvent) (#19919)
This addresses issue #19918. ## Issue description Event messages have the wrong isTrusted value when they are not triggered by user interaction, which differs from the browser. In particular, all MessageEvents created by Deno have isTrusted set to false, even though it should be true. This is my first ever contribution to Deno, so I might be missing something.
-rw-r--r--ext/broadcast_channel/01_broadcast_channel.js2
-rw-r--r--ext/web/13_message_port.js3
-rw-r--r--ext/websocket/01_websocket.js3
-rw-r--r--runtime/js/11_workers.js3
-rw-r--r--runtime/js/99_main.js2
-rw-r--r--tools/wpt/expectation.json6
6 files changed, 16 insertions, 3 deletions
diff --git a/ext/broadcast_channel/01_broadcast_channel.js b/ext/broadcast_channel/01_broadcast_channel.js
index d92aef072..ab315eaa6 100644
--- a/ext/broadcast_channel/01_broadcast_channel.js
+++ b/ext/broadcast_channel/01_broadcast_channel.js
@@ -8,6 +8,7 @@ import * as webidl from "ext:deno_webidl/00_webidl.js";
import {
defineEventHandler,
EventTarget,
+ setIsTrusted,
setTarget,
} from "ext:deno_web/02_event.js";
import DOMException from "ext:deno_web/01_dom_exception.js";
@@ -56,6 +57,7 @@ function dispatch(source, name, data) {
data: core.deserialize(data), // TODO(bnoordhuis) Cache immutables.
origin: "http://127.0.0.1",
});
+ setIsTrusted(event, true);
setTarget(event, channel);
channel.dispatchEvent(event);
};
diff --git a/ext/web/13_message_port.js b/ext/web/13_message_port.js
index 08f668b2d..40145db78 100644
--- a/ext/web/13_message_port.js
+++ b/ext/web/13_message_port.js
@@ -14,6 +14,7 @@ import {
EventTarget,
MessageEvent,
setEventTargetData,
+ setIsTrusted,
} from "ext:deno_web/02_event.js";
import DOMException from "ext:deno_web/01_dom_exception.js";
const primordials = globalThis.__bootstrap.primordials;
@@ -155,6 +156,7 @@ class MessagePort extends EventTarget {
transferables = v[1];
} catch (err) {
const event = new MessageEvent("messageerror", { data: err });
+ setIsTrusted(event, true);
this.dispatchEvent(event);
return;
}
@@ -165,6 +167,7 @@ class MessagePort extends EventTarget {
(t) => ObjectPrototypeIsPrototypeOf(MessagePortPrototype, t),
),
});
+ setIsTrusted(event, true);
this.dispatchEvent(event);
}
this[_enabled] = false;
diff --git a/ext/websocket/01_websocket.js b/ext/websocket/01_websocket.js
index 3f4e16b90..71abb0830 100644
--- a/ext/websocket/01_websocket.js
+++ b/ext/websocket/01_websocket.js
@@ -17,6 +17,7 @@ import {
Event,
EventTarget,
MessageEvent,
+ setIsTrusted,
} from "ext:deno_web/02_event.js";
import { Blob, BlobPrototype } from "ext:deno_web/09_file.js";
import { getLocationHref } from "ext:deno_web/12_location.js";
@@ -430,6 +431,7 @@ class WebSocket extends EventTarget {
data: op_ws_get_buffer_as_string(rid),
origin: this[_url],
});
+ setIsTrusted(event, true);
dispatch(this, event);
break;
}
@@ -450,6 +452,7 @@ class WebSocket extends EventTarget {
origin: this[_url],
[_skipInternalInit]: true,
});
+ setIsTrusted(event, true);
dispatch(this, event);
break;
}
diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js
index e04690005..f5548d8d1 100644
--- a/runtime/js/11_workers.js
+++ b/runtime/js/11_workers.js
@@ -22,6 +22,7 @@ import {
ErrorEvent,
EventTarget,
MessageEvent,
+ setIsTrusted,
} from "ext:deno_web/02_event.js";
import {
deserializeJsMessageData,
@@ -187,6 +188,7 @@ class Worker extends EventTarget {
cancelable: false,
data: err,
});
+ setIsTrusted(event, true);
this.dispatchEvent(event);
return;
}
@@ -198,6 +200,7 @@ class Worker extends EventTarget {
(t) => ObjectPrototypeIsPrototypeOf(MessagePortPrototype, t),
),
});
+ setIsTrusted(event, true);
this.dispatchEvent(event);
}
};
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index 483ca9012..dc6839646 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -154,6 +154,7 @@ async function pollForMessages() {
ObjectPrototypeIsPrototypeOf(messagePort.MessagePortPrototype, t),
),
});
+ event.setIsTrusted(msgEvent, true);
try {
globalDispatchEvent(msgEvent);
@@ -167,6 +168,7 @@ async function pollForMessages() {
error: e,
});
+ event.setIsTrusted(errorEvent, true);
globalDispatchEvent(errorEvent);
if (!errorEvent.defaultPrevented) {
throw e;
diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json
index 946f374eb..19075e224 100644
--- a/tools/wpt/expectation.json
+++ b/tools/wpt/expectation.json
@@ -6399,8 +6399,8 @@
"Channel_postMessage_with_transfer_incoming_messages.any.worker.html": true,
"Channel_postMessage_with_transfer_outgoing_messages.any.html": true,
"Channel_postMessage_with_transfer_outgoing_messages.any.worker.html": true,
- "MessageEvent-trusted.any.html": false,
- "MessageEvent-trusted.any.worker.html": false,
+ "MessageEvent-trusted.any.html": true,
+ "MessageEvent-trusted.any.worker.html": true,
"MessageEvent-trusted.window.html": false,
"MessageEvent.any.html": true,
"MessageEvent.any.worker.html": true,
@@ -9688,4 +9688,4 @@
"media-sniff.window.html": false
}
}
-} \ No newline at end of file
+}