blob: 6ceee5b8577d422057c943b5e77de6d2e94e0ffb [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>getSubscription must return the details of the active subscription if there is one</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>
</head>
<body>
<script>
async_test(function(test) {
var workerUrl = 'resources/empty_worker.js';
var workerScope = 'resources/scope/' + location.pathname;
var swRegistration = null;
service_worker_unregister_and_register(test, workerUrl, workerScope)
.then(function(serviceWorkerRegistration) {
swRegistration = serviceWorkerRegistration;
return wait_for_state(test, swRegistration.installing, 'activated');
})
.then(function() {
// If running manually, grant permission when prompted.
if (self.testRunner)
testRunner.setPermission('push-messaging', 'granted', location.origin, location.origin);
assert_inherits(swRegistration.pushManager, 'getSubscription',
'getSubscription() should be exposed on the PushManager object');
assert_equals(typeof(swRegistration.pushManager.getSubscription), 'function',
'PushManager.getSubscription() is a function.');
return swRegistration.pushManager.getSubscription();
})
.then(function(pushSubscription) {
assert_equals(pushSubscription, null,
"pushSubscription should be null if there is no active push registration.")
return swRegistration.pushManager.subscribe({ userVisibleOnly: true });
})
.then(function(pushSubscription) {
previousPushSubscription = pushSubscription;
return swRegistration.pushManager.getSubscription();
})
.then(function(pushSubscription) {
assert_equals(previousPushSubscription.endpoint, pushSubscription.endpoint,
"Both subscription objects should have the same endpoint.");
return pushSubscription.unsubscribe();
})
.then(function(unsubscribed) {
assert_true(unsubscribed, "unsubscription was successful");
return swRegistration.pushManager.getSubscription();
})
.then(function(pushSubscription) {
assert_equals(pushSubscription, null,
"pushSubscription should be null after unsubscribing.")
return swRegistration.pushManager.subscribe({ userVisibleOnly: true });
})
.then(function(pushSubscription) {
assert_not_equals(pushSubscription, null,
"Subscription should have succeeded.");
return service_worker_unregister(test, workerScope);
})
.then(function() {
return swRegistration.pushManager.getSubscription();
})
.then(function(pushSubscription) {
assert_equals(pushSubscription, null,
"After unregistration of SW, there should be no push subscription.");
return service_worker_unregister_and_done(test, workerScope);
})
.catch(unreached_rejection(test));
}, 'getSubscription must return the details of the active subscription if there is one');
</script>
</body>
</html>