<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Android Push API instrumentation test page</title>
<link rel="manifest" href="manifest.json">
</head>
<body>
<!-- This page is used by the PushMessagingTest instrumentation test. -->
<script src="../notifications/notification_test_utils.js"></script>
<script>
// PushMessagingTest observes changes to the tab title as an asynchronous
// response mechanism from JavaScript to Java.
// TODO(mvanouwerkerk): Use DomAutomationController - crbug.com/562487
var errorCounter = 0;
function sendToTest(message) {
// Duplicate messages cannot be detected by the test, don't send them.
if (message == document.title) {
console.log('Duplicate message: ' + message);
message =
'Error ' + errorCounter + ' - duplicate message: ' + message;
errorCounter++;
}
document.title = message;
}
// Installs a service worker, subscribes to push, and sets up a messaging
// mechanism between this page and the service worker. Called by the test.
function subscribePush() {
GetActivatedServiceWorker(
'push_messaging_test_worker_android.js', location.pathname)
.then(registration =>
registration.pushManager.subscribe({ userVisibleOnly: true }))
.then(subscription => {
setupMessageHandler();
sendToTest('subscribe ok');
})
.catch(error => sendToTest('subscribe fail: ' + error));
}
// Sets whether the service worker should show a notification when it
// receives a push message or not. Called by the test.
function setNotifyOnPush(notify) {
sendToServiceWorker('setNotifyOnPush', notify);
}
// Sends a message of type |type| with a data payload of |data| to the
// service worker.
function sendToServiceWorker(type, data) {
navigator.serviceWorker.ready
.then(registration => {
registration.active.postMessage(
JSON.stringify({'type': type, 'data': data}));
});
}
// The data for messages of type sendToTest will be passed to the test.
function setupMessageHandler() {
messagePort.addEventListener('message', event => {
var message = JSON.parse(event.data);
if (message.type == 'sendToTest') {
sendToTest(message.data);
}
});
}
</script>
</body>
</html>