blob: 6a71416c071521bb1f2419eecea3294684392639 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>subscribe must fail in service worker after permission is reset</title>
<link rel="manifest" href="resources/push_manifest.json">
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../serviceworker/resources/test-helpers.js"></script>
<script src="../notifications/resources/test-helpers.js"></script>
</head>
<body>
<script>
// This test requires the test runner.
async_test(function(test) {
if (window.testRunner)
testRunner.setPermission('push-messaging', 'granted', location.origin, location.origin);
var script = 'resources/instrumentation-service-worker.js';
var scope = 'resources/scope/' + location.pathname;
var registration;
var port;
getActiveServiceWorkerWithMessagePort(test, script, scope)
.then(function(workerInfo) {
registration = workerInfo.registration;
port = workerInfo.port;
// 1. Call subscribe in document context. The manifest details are stored in the service
// worker storage for later use in a service worker context where there is no manifest.
return registration.pushManager.subscribe({ userVisibleOnly: true });
})
.then(function(subscription) {
assert_true(subscription instanceof window.PushSubscription);
// 2. Call unsubscribe so we can subscribe again later inside a service worker.
return subscription.unsubscribe();
})
.then(function(unsubscription_result) {
assert_true(unsubscription_result,
'unsubscribe() on an active subscription should resolve with |true|');
// 3. Revoke permission.
if (window.testRunner)
testRunner.setPermission('push-messaging', 'prompt', location.origin, location.origin);
// 4. Call subscribe in service worker context. It should now fail because permission
// was reset to default.
port.postMessage({command: 'subscribe'});
port.addEventListener('message', function(event) {
if (typeof event.data != 'object' || !event.data.command)
assert_unreached('Invalid message from the service worker');
assert_equals(event.data.command, 'subscribe');
assert_false(event.data.success, 'subscribe must fail after permission is reset');
assert_regexp_match(event.data.errorMessage, /permission denied/);
test.done();
});
})
.catch(unreached_rejection(test));
}, 'subscribe must fail in service worker after permission is reset');
</script>
</body>
</html>