chromium/third_party/blink/web_tests/wpt_internal/geolocation-api/resources/notimer-after-unload-inner-before.html

<!DOCTYPE html>
<script type="module">
import {GeolocationMock} from './geolocation-mock.js';

const parent = window.parent;

const mock = new GeolocationMock();
mock.setGeolocationPermission(true);

// Query the position but intercept the query so the service doesn't respond
// immediately. If it responds too early, we won't exercise the intended code
// path, i.e. geolocation API receiving a response from the service after page
// unload. Similarly, issuing the request too late will also fail to exercise
// that path because the mock service may not receive the request in time to
// process and reply to it.
//
// Instead, we ensure the service sees the request before moving forward, but
// we defer its response until we're within the unload handler below.
const promise = mock.interceptQueryNextPosition();
navigator.geolocation.getCurrentPosition(
    parent.onGeolocationResponse, parent.onGeolocationResponse,
    {timeout: 500, maximumAge:0});
const respond = await promise;
document.body.onunload = () => respond(mock.makeGeoposition(1, 2, 3));
parent.navigateToSecondPage();
</script>