Skip to content

Commit

Permalink
Tests: Make the beforeunload event tests work regardless of extensions
Browse files Browse the repository at this point in the history
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

(cherry picked from commit 399a78e)
  • Loading branch information
mgol committed Apr 24, 2024
1 parent 5d5872b commit 5d83fad
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 10 deletions.
11 changes: 6 additions & 5 deletions test/data/event/onbeforeunload.html
Expand Up @@ -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>
19 changes: 14 additions & 5 deletions test/unit/event.js
Expand Up @@ -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" );
Expand Down

0 comments on commit 5d83fad

Please sign in to comment.