https://github.com/web-platform-tests/wpt
Raw File
Tip revision: 98cc5c8bb77ef18be9c4464c8e66873654ade128 authored by Chris Lilley on 11 April 2018, 09:30:00 UTC
quick test to see if descriptor supported anywhere
Tip revision: 98cc5c8
clients-get.https.html
<!DOCTYPE html>
<title>Service Worker: Clients.get</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
var scope = 'resources/clients-get-frame.html';
var client_ids = [];
var frame;
promise_test(function(t) {
    return service_worker_unregister_and_register(
        t, 'resources/clients-get-worker.js', scope)
      .then(function(registration) {
          add_completion_callback(function() { registration.unregister(); });
          return wait_for_state(t, registration.installing, 'activated');
        })
      .then(function() {
          return with_iframe(scope + '#1');
        })
      .then(function(frame1) {
          add_completion_callback(function() { frame1.remove(); });
          frame1.focus();
          return wait_for_clientId();
        })
      .then(function(client_id) {
          client_ids.push(client_id);
          return with_iframe(scope + '#2');
        })
      .then(function(frame2) {
          frame = frame2;
          add_completion_callback(function() { frame2.remove(); });
          return wait_for_clientId();
        })
      .then(function(client_id) {
          client_ids.push(client_id, 'invalid-id');
          var channel = new MessageChannel();
          var saw_message = new Promise(function(resolve) {
              channel.port1.onmessage = resolve;
            });
          frame.contentWindow.navigator.serviceWorker.controller.postMessage(
              {port: channel.port2, clientIds: client_ids}, [channel.port2]);
          return saw_message;
        })
      .then(function(e) {
          assert_equals(e.data.length, 3);
          assert_array_equals(e.data[0], expected[0]);
          assert_array_equals(e.data[1], expected[1]);
          assert_equals(e.data[2], expected[2]);
        });
  }, 'Test Clients.get()');

function wait_for_clientId() {
  return new Promise(function(resolve, reject) {
      function get_client_id(e) {
        window.removeEventListener('message', get_client_id);
        resolve(e.data.clientId);
      }
      window.addEventListener('message', get_client_id, false);
    });
}

var expected = [
    // visibilityState, focused, url, type, frameType
    ['visible', true, normalizeURL(scope) + '#1', 'window', 'nested'],
    ['visible', false, normalizeURL(scope) + '#2', 'window', 'nested'],
    undefined
];
</script>
back to top