// META: global=window,worker
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
// META: timeout=long

'use strict';

// https://w3c.github.io/web-based-payment-handler/

idl_test(
  ['web-based-payment-handler'],
  ['service-workers', 'html', 'dom'],
  async (idl_array, t) => {
    const isWindow = self.GLOBAL.isWindow();
    const isServiceWorker = 'ServiceWorkerGlobalScope' in self;
    const hasRegistration = isServiceWorker || isWindow;

    if (hasRegistration) {
      idl_array.add_objects({
        ServiceWorkerRegistration: ['registration'],
        PaymentManager: ['paymentManager'],
      });
    }
    if (isServiceWorker) {
      idl_array.add_objects({
        ServiceWorkerGlobalScope: ['self'],
        CanMakePaymentEvent: ['new CanMakePaymentEvent("type")'],
        PaymentRequestEvent: ['new PaymentRequestEvent("type")'],
      })
    }

    if (isWindow) {
      const scope = '/service-workers/service-worker/resources/';
      const reg = await service_worker_unregister_and_register(
        t, '/service-workers/service-worker/resources/empty-worker.js', scope);
      self.registration = reg;
      await wait_for_state(t, reg.installing, "activated");
      add_completion_callback(() => reg.unregister());
    }
    if (hasRegistration) {
      self.paymentManager = self.registration.paymentManager;
    }
  }
);
