aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>2024-04-25 00:24:55 +0200
committerGitHub <noreply@github.com>2024-04-25 00:24:55 +0200
commit399a78ee9fc5802509df462a2851aef1b60b7fbc (patch)
tree49d187378c79f2e1b3e7b81df605efb6d0b7b316
parent7cdd8374234b77a3c70dd511a1b06066afb146bb (diff)
downloadjquery-399a78ee9fc5802509df462a2851aef1b60b7fbc.tar.gz
jquery-399a78ee9fc5802509df462a2851aef1b60b7fbc.zip
Tests: Make the beforeunload event tests work regardless of extensions
Some browser extensions, like React DevTools, send messages to the content area. Since our beforeunload event test listens for all messages, it used to catch those as well, failing the test. Add a `source` field to the payload JSON and check for it before treating the message as coming from our own test to make sure the test passes even with such browser extensions installed. Closes gh-5478
-rw-r--r--test/data/event/onbeforeunload.html11
-rw-r--r--test/unit/event.js19
2 files changed, 20 insertions, 10 deletions
diff --git a/test/data/event/onbeforeunload.html b/test/data/event/onbeforeunload.html
index 11ad1964a..30053967a 100644
--- a/test/data/event/onbeforeunload.html
+++ b/test/data/event/onbeforeunload.html
@@ -4,17 +4,18 @@
<script>
function report( event ) {
var payload = {
+ source: "jQuery onbeforeunload iframe test",
event: event.type
};
- return parent.postMessage( JSON.stringify(payload), "*" );
+ return parent.postMessage( JSON.stringify( payload ), "*" );
}
jQuery( window ).on( "beforeunload", function( event ) {
report( event );
- }).on( "load", function( event ) {
- setTimeout(function() {
+ } ).on( "load", function( event ) {
+ setTimeout( function() {
window.location.reload();
- }, 50);
- });
+ }, 50 );
+ } );
</script>
</html>
diff --git a/test/unit/event.js b/test/unit/event.js
index 38a805b37..ac309d22d 100644
--- a/test/unit/event.js
+++ b/test/unit/event.js
@@ -1448,13 +1448,22 @@ QUnit[ /(ipad|iphone|ipod)/i.test( navigator.userAgent ) ? "skip" : "test" ](
var done = assert.async();
window.onmessage = function( event ) {
- var payload = JSON.parse( event.data );
+ try {
+ var payload = JSON.parse( event.data );
- assert.ok( payload.event, "beforeunload", "beforeunload event" );
+ // Ignore unrelated messages
+ if ( payload.source === "jQuery onbeforeunload iframe test" ) {
+ assert.ok( payload.event, "beforeunload", "beforeunload event" );
- iframe.remove();
- window.onmessage = null;
- done();
+ iframe.remove();
+ window.onmessage = null;
+ done();
+ }
+ } catch ( e ) {
+
+ // Messages may come from other sources, like browser extensions;
+ // some may not be valid JSONs and thus cannot be `JSON.parse`d.
+ }
};
iframe.appendTo( "#qunit-fixture" );