blob: f2dd2059dc2becd2aad7a1ecf72c16366181399f [file]
<!DOCTYPE html>
<!--
Copyright 2026 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<html lang="en">
<head>
<title>Payment App Error After User Interaction</title>
<meta charset="utf-8">
</head>
<body>
<button id="reject-button">Reject Payment</button>
<script>
function postMessage(msg) {
if (navigator.serviceWorker.controller) {
navigator.serviceWorker.controller.postMessage(msg);
} else {
navigator.serviceWorker.ready.then(reg => {
reg.active.postMessage(msg);
});
}
}
document.getElementById('reject-button').addEventListener('click', () => {
// Since `window.onload` awaits service worker readiness before the page is
// interactive, `navigator.serviceWorker.controller` is guaranteed to be
// available here.
navigator.serviceWorker.controller.postMessage('reject');
});
// window client is ready
window.onload = function() {
navigator.serviceWorker.ready.then(reg => {
// app is ready
reg.active.postMessage('app_is_ready');
})
}
// Providing page loaded signal for payment app service worker to
// immediately reject promise and cause an error status.
// We use the custom postMessage because the service worker controller might
// not be set up yet at this early stage of script execution.
postMessage('loaded');
</script>
</body>
</html>