<!DOCTYPE html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/permissions-policy/resources/permissions-policy.js></script>
<script>
'use strict';

const sub = 'https://{{domains[www]}}:{{ports[https][0]}}';
const same_origin_src =
  '/permissions-policy/resources/permissions-policy-idle-detection.html'
const same_origin_worker_frame_src =
    '/permissions-policy/resources/permissions-policy-idle-detection-worker.html';
const cross_origin_src = sub + same_origin_src;
const cross_origin_worker_frame_src = sub + same_origin_worker_frame_src;

promise_test(async () => {
  try {
    let idleDetector = new IdleDetector();
    await idleDetector.start();
    assert_unreached('expected promise to reject with SecurityError');
  } catch (error) {
    assert_equals(error.name, 'SecurityError');
  }
}, 'Permissions-Policy idle-detection=() explicitly set by top-level frame ' +
   'disallows query in the top-level document.');

async_test(t => {
  test_feature_availability('new IdleDetector().start()', t, same_origin_src,
      expect_feature_unavailable_default);
}, 'Permissions-Policy idle-detection=() explicitly set by top-level frame ' +
   'disallows same-origin iframes.');

async_test(t => {
  test_feature_availability('new IdleDetector().start()', t, same_origin_worker_frame_src,
      expect_feature_unavailable_default);
}, 'Permissions-Policy idle-detection=() explicitly set by top-level frame ' +
   'disallows workers in same-origin iframes.');

async_test(t => {
  test_feature_availability('new IdleDetector().start()', t, cross_origin_src,
      expect_feature_unavailable_default);
}, 'Permissions-Policy idle-detection=() explicitly set by top-level frame ' +
   'disallows cross-origin iframes.');

async_test(t => {
  test_feature_availability('new IdleDetector().start()', t, cross_origin_worker_frame_src,
      expect_feature_unavailable_default);
}, 'Permissions-Policy idle-detection=() explicitly set by top-level frame ' +
   'disallows workers in cross-origin iframes.');

fetch_tests_from_worker(new Worker(
  'resources/idle-detection-disabled-by-permissions-policy-worker.js'))

</script>
</body>
