// META: script=/common/get-host-info.sub.js
// META: script=/service-workers/service-worker/resources/test-helpers.sub.js

'use strict'

promise_test(async test => {
  const script = 'service_workers/sw.js';
  const scope = 'service_workers' + location.pathname;

  const serviceWorkerRegistration =
      await service_worker_unregister_and_register(test, script, scope);

  assert_equals(
      serviceWorkerRegistration.active, null,
      'There must not be an activated worker');

  await promise_rejects_dom(
      test, 'InvalidStateError',
      serviceWorkerRegistration.periodicSync.register(
          'test_tag'),
      'register() must reject on pending and installing workers');
}, 'Periodic Background Sync requires an activated Service Worker');

promise_test(async test => {
  const script = 'service_workers/sw.js';
  const scope = 'service_workers' + location.pathname;

  const serviceWorkerRegistration =
      await service_worker_unregister_and_register(test, script, scope);

  assert_equals(
      serviceWorkerRegistration.active, null,
      'There must not be an activated worker');

  await serviceWorkerRegistration.periodicSync.unregister('test_tag');
  }, 'Periodic Background Sync unregister silently succeeds when Service Worker is unactivated');
