<!doctype html>
<html>
  <head>
    <title>Push API: Verifies that the right Push API interfaces get exposed.</title>
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
    <script src="../serviceworker/resources/test-helpers.js"></script>
  </head>
  <body>
    <script>
      // Tests that the expected Push API interfaces are being exposed on both
      // the Service Worker and Document global scopes.
      service_worker_test(
          'resources/interfaces-worker.js',
          'Exposure of interfaces in a Service Worker.');

      test(function() {
          assert_own_property(self, 'PushManager', 'PushManager needs to be exposed as a global.');

          assert_own_property(PushManager, 'supportedContentEncodings');

          assert_own_property(PushManager.prototype, 'subscribe');
          assert_own_property(PushManager.prototype, 'getSubscription');
          assert_own_property(PushManager.prototype, 'permissionState');

      }, 'PushManager should be exposed and have the expected interface in a Document.');

      test(function() {
          assert_own_property(self, 'PushSubscription', 'PushSubscription needs to be exposed as a global.');

          assert_own_property(PushSubscription.prototype, 'endpoint');

          assert_own_property(PushSubscription.prototype, 'getKey');
          assert_own_property(PushSubscription.prototype, 'unsubscribe');

      }, 'PushSubscription should be exposed and have the expected interface in a Document.');
    </script>
  </body>
</html>
