blob: 96aa2efd3dafee30904cab50e43beee49c6284a5 [file] [log] [blame]
<!DOCTYPE html>
<title>Service Worker: UseCounter for page controlled-on-claim</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.js"></script>
<script src="resources/usecounter.js"></script>
<script>
promise_test(function(t) {
var url = 'resources/claim-worker.js';
var scope = 'resources/blank.html?usecounter-on-claim';
var worker;
var frame;
return service_worker_unregister(t, scope)
.then(function() { return with_iframe(scope); })
.then(function(f) {
frame = f;
add_completion_callback(function() { frame.remove(); });
var w = frame.contentWindow;
assert_equals(w.navigator.serviceWorker.controller, null);
assert_false(isUseCounted(frame),
'should not be counted as controlled yet');
return navigator.serviceWorker.register(url, {scope: scope});
})
.then(function(registration) {
add_completion_callback(function() { registration.unregister(); });
worker = registration.installing;
return wait_for_state(t, worker, 'activated');
})
.then(function() {
var w = frame.contentWindow;
var saw_controllerchanged = new Promise(function(resolve) {
w.navigator.serviceWorker.oncontrollerchange = resolve;
});
var channel = new MessageChannel();
var saw_message = new Promise(function(resolve) {
channel.port1.onmessage = t.step_func(function(e) {
assert_equals(e.data, 'PASS', 'claim() should fulfill');
resolve();
});
});
worker.postMessage({port: channel.port2}, [channel.port2]);
return Promise.all([saw_controllerchanged, saw_message]);
})
.then(function() {
var w = frame.contentWindow;
var controller = w.navigator.serviceWorker.controller;
assert_true(controller instanceof w.ServiceWorker);
assert_true(isUseCounted(frame),
'should be counted as controlled after claim()');
});
}, 'usecounter is counted upon claim() after registration');
</script>
</html>