diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
commit | 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch) | |
tree | a31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/screen-wake-lock | |
parent | Initial commit. (diff) | |
download | firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip |
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/screen-wake-lock')
23 files changed, 548 insertions, 0 deletions
diff --git a/testing/web-platform/tests/screen-wake-lock/META.yml b/testing/web-platform/tests/screen-wake-lock/META.yml new file mode 100644 index 0000000000..b311993d82 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/META.yml @@ -0,0 +1,6 @@ +spec: https://w3c.github.io/screen-wake-lock/ +suggested_reviewers: + - Honry + - marcoscaceres + - rakuco + - reillyeon diff --git a/testing/web-platform/tests/screen-wake-lock/chrome-bug-1348019.https.html b/testing/web-platform/tests/screen-wake-lock/chrome-bug-1348019.https.html new file mode 100644 index 0000000000..7c9909581c --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/chrome-bug-1348019.https.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<link rel="author" href="mailto:caseq@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1348019"> +<title>Releasing wake locks upon visibility change does not cause crash if an iframe is appended in event listener</title> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/page-visibility/resources/window_state_context.js"></script> +<script> +'use strict'; + +promise_test(async t => { + await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); + const { minimize } = window_state_context(t); + + const screenLock = await navigator.wakeLock.request('screen'); + + assert_false(screenLock.released, "The released attribute is initially false"); + + screenLock.addEventListener('release', () => { + const iframe = document.createElement('iframe'); + iframe.src = 'about:blank'; + document.body.appendChild(iframe); + }); + + const release = new EventWatcher(t, screenLock, 'release').wait_for('release'); + await Promise.all([minimize(), release]); + assert_true(screenLock.released, "The released attribute is true after the lock is released"); +}, "Appending iframe in release event listener does not cause a crash when page visibility changes"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/screen-wake-lock/idlharness.https.window.js b/testing/web-platform/tests/screen-wake-lock/idlharness.https.window.js new file mode 100644 index 0000000000..6509d9c70e --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/idlharness.https.window.js @@ -0,0 +1,27 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: timeout=long + +// https://w3c.github.io/screen-wake-lock/ + +'use strict'; + +idl_test( + ['screen-wake-lock'], + ['dom', 'html'], + async idl_array => { + idl_array.add_objects({ Navigator: ['navigator'] }); + + idl_array.add_objects({ + WakeLock: ['navigator.wakeLock'], + WakeLockSentinel: ['sentinel'], + }); + + await test_driver.set_permission( + { name: 'screen-wake-lock' }, 'granted'); + self.sentinel = await navigator.wakeLock.request('screen'); + self.sentinel.release(); + } +); diff --git a/testing/web-platform/tests/screen-wake-lock/resources/page1.html b/testing/web-platform/tests/screen-wake-lock/resources/page1.html new file mode 100644 index 0000000000..7fc080d380 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/resources/page1.html @@ -0,0 +1 @@ +<meta charset="utf-8"> diff --git a/testing/web-platform/tests/screen-wake-lock/resources/page2.html b/testing/web-platform/tests/screen-wake-lock/resources/page2.html new file mode 100644 index 0000000000..7fc080d380 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/resources/page2.html @@ -0,0 +1 @@ +<meta charset="utf-8"> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-active-document.https.window.js b/testing/web-platform/tests/screen-wake-lock/wakelock-active-document.https.window.js new file mode 100644 index 0000000000..724ce09196 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-active-document.https.window.js @@ -0,0 +1,87 @@ +function getWakeLockObject(iframe, url) { + return new Promise(resolve => { + iframe.addEventListener( + "load", + () => { + const { wakeLock } = iframe.contentWindow.navigator; + resolve(wakeLock); + }, + { once: true } + ); + iframe.src = url; + }); +} + +promise_test(async t => { + const iframe = document.createElement("iframe"); + document.body.appendChild(iframe); + // We first got to page1.html, grab a WakeLock object. + const wakeLock1 = await getWakeLockObject( + iframe, + "/screen-wake-lock/resources/page1.html" + ); + // Save the DOMException of page1.html before navigating away. + const frameDOMException1 = iframe.contentWindow.DOMException; + // We navigate the iframe again, putting wakeLock1's document into an inactive state. + const wakeLock2 = await getWakeLockObject( + iframe, + "/screen-wake-lock/resources/page2.html" + ); + // Now, wakeLock1's relevant global object's document is no longer active. + // So, call .request(), and make sure it rejects appropriately. + await promise_rejects_dom( + t, + "NotAllowedError", + frameDOMException1, + wakeLock1.request('screen'), + "Inactive document, so must throw NotAllowedError" + ); + // We are done, so clean up. + iframe.remove(); +}, "navigator.wakeLock.request() aborts if the document is not active."); + +promise_test(async t => { + // We nest two iframes and wait for them to load. + const outerIframe = document.createElement("iframe"); + document.body.appendChild(outerIframe); + // Load the outer iframe (we don't care about the awaited request) + await getWakeLockObject( + outerIframe, + "/screen-wake-lock/resources/page1.html" + ); + + // Now we create the inner iframe + const innerIframe = outerIframe.contentDocument.createElement("iframe"); + + // nest them + outerIframe.contentDocument.body.appendChild(innerIframe); + + // load innerIframe, and get the WakeLock instance + const wakeLock = await getWakeLockObject( + innerIframe, + "/screen-wake-lock/resources/page2.html" + ); + // Save DOMException from innerIframe before navigating away. + const innerIframeDOMException = innerIframe.contentWindow.DOMException; + + // Navigate the outer iframe to a new location. + // Wait for the load event to fire. + await new Promise(resolve => { + outerIframe.addEventListener("load", resolve); + outerIframe.src = "/screen-wake-lock/resources/page2.html"; + }); + + // Now, request's relevant global object's document is still active + // (it is the active document of the inner iframe), but is not fully active + // (since the parent of the inner iframe is itself no longer active). + // So, call request.show() and make sure it rejects appropriately. + await promise_rejects_dom( + t, + "NotAllowedError", + innerIframeDOMException, + wakeLock.request('screen'), + "Active, but not fully active, so must throw NotAllowedError" + ); + // We are done, so clean up. + outerIframe.remove(); +}, "navigator.wakeLock.request() aborts if the document is active, but not fully active."); diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-disabled-by-permissions-policy.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-disabled-by-permissions-policy.https.html new file mode 100644 index 0000000000..fe4147b46c --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-disabled-by-permissions-policy.https.html @@ -0,0 +1,39 @@ +<!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 src="/common/get-host-info.sub.js"></script> +<script> + "use strict"; + + const same_origin_src = + "/permissions-policy/resources/permissions-policy-screen-wakelock.html"; + const cross_origin_src = + get_host_info().HTTPS_REMOTE_ORIGIN + same_origin_src; + + const header = 'Permissions-Policy header "screen-wake-lock=()"'; + + promise_test(t => { + return promise_rejects_dom(t, "NotAllowedError", navigator.wakeLock.request("screen")); + }, `${header} disallows the top-level document.`); + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + same_origin_src, + expect_feature_unavailable_default + ); + }, `${header} disallows same-origin iframes.`); + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + cross_origin_src, + expect_feature_unavailable_default + ); + }, `${header} disallows cross-origin iframes.`); +</script> +</body> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-disabled-by-permissions-policy.https.html.headers b/testing/web-platform/tests/screen-wake-lock/wakelock-disabled-by-permissions-policy.https.html.headers new file mode 100644 index 0000000000..66f07f4c1c --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-disabled-by-permissions-policy.https.html.headers @@ -0,0 +1 @@ +Permissions-Policy: screen-wake-lock=() diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-document-hidden.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-document-hidden.https.html new file mode 100644 index 0000000000..c8c9712bdd --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-document-hidden.https.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> +<html> +<title>Screen wake locks respect page visibility changes</title> +<link rel="help" href="https://w3c.github.io/screen-wake-lock/#handling-document-loss-of-visibility"> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/page-visibility/resources/window_state_context.js"></script> +<script> +'use strict'; + +promise_test(async t => { + await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); + + const {minimize, restore} = window_state_context(t); + await minimize(); + + assert_true(document.hidden); + await promise_rejects_dom(t, "NotAllowedError", navigator.wakeLock.request('screen'), + "new screen locks are not allowed when the page is not visible"); +}, "navigator.wakeLock.request('screen') fails when the document is hidden"); + +promise_test(async t => { + await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); + + const { minimize, restore } = window_state_context(t); + + const screenLock1 = await navigator.wakeLock.request('screen'); + const screenLock2 = await navigator.wakeLock.request('screen'); + + assert_false(screenLock1.released, "The released attribute is initially false"); + assert_false(screenLock2.released, "The released attribute is initially false"); + + const wait1 = new EventWatcher(t, screenLock1, 'release').wait_for('release'); + const wait2 = new EventWatcher(t, screenLock2, 'release').wait_for('release'); + + await minimize(); + assert_true(document.hidden); + + await Promise.all([wait1, wait2]); + + assert_true(screenLock1.released, "The released attribute is true after the lock is released"); + assert_true(screenLock2.released, "The released attribute is true after the lock is released"); +}, "Screen wake locks are released when the document the page is hidden"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy-attribute-redirect-on-load.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy-attribute-redirect-on-load.https.html new file mode 100644 index 0000000000..acfce43f96 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy-attribute-redirect-on-load.https.html @@ -0,0 +1,37 @@ +<!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 src="/common/get-host-info.sub.js"></script> +<script> + "use strict"; + + const relative_path = "/permissions-policy/resources/permissions-policy-screen-wakelock.html"; + const base_src = "/permissions-policy/resources/redirect-on-load.html#"; + const same_origin_src = base_src + relative_path; + const cross_origin_src = + base_src + get_host_info().HTTPS_REMOTE_ORIGIN + relative_path; + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + same_origin_src, + expect_feature_available_default, + "screen-wake-lock" + ); + }, 'Permissions-Policy allow="screen-wake-lock" allows same-origin relocation'); + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + cross_origin_src, + expect_feature_unavailable_default, + "screen-wake-lock" + ); + }, 'Permissions-Policy allow="screen-wake-lock" disallows cross-origin relocation'); + +</script> +</body> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy-attribute.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy-attribute.https.html new file mode 100644 index 0000000000..c2be3a4508 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy-attribute.https.html @@ -0,0 +1,35 @@ +<!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 src="/common/get-host-info.sub.js"></script> +<script> + "use strict"; + + const same_origin_src = + "/permissions-policy/resources/permissions-policy-screen-wakelock.html"; + const cross_origin_src = + get_host_info().HTTPS_REMOTE_ORIGIN + same_origin_src; + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + same_origin_src, + expect_feature_available_default, + "screen-wake-lock" + ); + }, 'Permissions policy "screen-wake-lock" can be enabled in same-origin iframe using allow="screen-wake-lock" attribute'); + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + cross_origin_src, + expect_feature_available_default, + "screen-wake-lock" + ); + }, 'Permissions policy "screen-wake-lock" can be enabled in cross-origin iframe using allow="screen-wake-lock" attribute'); +</script> +</body> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy.https.html new file mode 100644 index 0000000000..cc9106967e --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy.https.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/permissions-policy/resources/permissions-policy.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script> + "use strict"; + + const same_origin_src = + "/permissions-policy/resources/permissions-policy-screen-wakelock.html"; + const cross_origin_src = + get_host_info().HTTPS_REMOTE_ORIGIN + same_origin_src; + + const header = 'Permissions-Policy header "screen-wake-lock=*"'; + + promise_test(async t => { + await test_driver.set_permission( + { name: 'screen-wake-lock' }, 'granted'); + await navigator.wakeLock.request('screen').then(lock => lock.release()); + }, `${header} allows the top-level document.`); + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + same_origin_src, + expect_feature_available_default + ); + }, `${header} allows same-origin iframes.`); + + // Set allow="screen-wake-lock" on iframe element to delegate + // 'screen-wake-lock' to cross origin subframe. + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + cross_origin_src, + expect_feature_available_default, + 'screen-wake-lock' + ); + }, `${header} allows cross-origin iframes.`); + +</script> +</body> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy.https.html.headers b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy.https.html.headers new file mode 100644 index 0000000000..ea7d848e74 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-by-permissions-policy.https.html.headers @@ -0,0 +1 @@ +Permissions-Policy: screen-wake-lock=* diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-on-self-origin-by-permissions-policy.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-on-self-origin-by-permissions-policy.https.html new file mode 100644 index 0000000000..5b90b4f4ce --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-on-self-origin-by-permissions-policy.https.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/permissions-policy/resources/permissions-policy.js"></script> +<script src="/common/get-host-info.sub.js"></script> + +<script> + "use strict"; + + const same_origin_src = + "/permissions-policy/resources/permissions-policy-screen-wakelock.html"; + const cross_origin_src = + get_host_info().HTTPS_REMOTE_ORIGIN + same_origin_src; + + const header = 'Permissions-Policy header "screen-wake-lock=self"'; + + promise_test(async t => { + await test_driver.set_permission( + { name: 'screen-wake-lock' }, 'granted'); + await navigator.wakeLock.request('screen').then(lock => lock.release()); + }, `${header} allows the top-level document.`); + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + same_origin_src, + expect_feature_available_default + ); + }, `${header} allows same-origin iframes.`); + + async_test(t => { + test_feature_availability( + 'navigator.wakeLock.request("screen")', + t, + cross_origin_src, + expect_feature_unavailable_default + ); + }, `${header} disallows cross-origin iframes.`); +</script> +</body> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-on-self-origin-by-permissions-policy.https.html.headers b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-on-self-origin-by-permissions-policy.https.html.headers new file mode 100644 index 0000000000..9849d6b89b --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-enabled-on-self-origin-by-permissions-policy.https.html.headers @@ -0,0 +1 @@ +Permissions-Policy: screen-wake-lock=self diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-insecure-context.any.js b/testing/web-platform/tests/screen-wake-lock/wakelock-insecure-context.any.js new file mode 100644 index 0000000000..f32cc3c354 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-insecure-context.any.js @@ -0,0 +1,5 @@ +//META: title=Wake Lock API is not exposed in an insecure context + +test(() => { + assert_false("WakeLock" in self, "'WakeLock' must not be exposed"); +}, "Wake Lock API is not exposed in an insecure context"); diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-onrelease.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-onrelease.https.html new file mode 100644 index 0000000000..fb071b3763 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-onrelease.https.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<link rel="help" href="https://w3c.github.io/screen-wake-lock/#the-onrelease-attribute"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script> +promise_test(async t => { + await test_driver.set_permission({name: 'screen-wake-lock'}, 'granted'); + + const lock = await navigator.wakeLock.request("screen"); + return new Promise(resolve => { + lock.onrelease = resolve; + lock.release(); + }).then(ev => { + assert_class_string(ev, "Event", "release() must fire an Event object"); + assert_equals(ev.target, lock, "The event's target must be the lock that was acquired"); + assert_true(ev.isTrusted); + assert_false(ev.bubbles); + assert_false(ev.cancelable); + }); +}, "Test onreleased event's basic properties"); + +promise_test(async t => { + await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); + + const lock = await navigator.wakeLock.request("screen"); + + let releaseFired = false; + lock.onrelease = t.step_func(() => { + releaseFired = true; + }); + + const releasePromise = lock.release(); + assert_true(releaseFired, "The 'release' event fires immediately after release() is called"); + + return releasePromise; +}, "Ensure onreleased is called before WakeLockSentinel.release() resolves"); +</script> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-released.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-released.https.html new file mode 100644 index 0000000000..8d351e3e68 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-released.https.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<link rel="help" href="https://w3c.github.io/screen-wake-lock/#dom-wakelocksentinel-released"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script> +promise_test(async t => { + await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); + + const lock = await navigator.wakeLock.request("screen"); + assert_false(lock.released, "lock.released must be false on creation"); + + lock.onrelease = t.step_func(() => { + assert_true(lock.released, "WakeLockSentinel.released is true in an onrelease event handler"); + }); + await lock.release(); + assert_true(lock.released, "WakeLockSentinel.released remains true outside the event handler"); +}, "The released attribute inside an event handler"); +</script> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-request-denied.https.html b/testing/web-platform/tests/screen-wake-lock/wakelock-request-denied.https.html new file mode 100644 index 0000000000..f3fede6e10 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-request-denied.https.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script> +'use strict'; + +promise_test(async t => { + await test_driver.set_permission({name: 'screen-wake-lock'}, 'denied'); + return promise_rejects_dom(t, "NotAllowedError", navigator.wakeLock.request('screen')); +}, 'Denied requests should abort with NotAllowedError'); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-screen-type-on-worker.https.worker.js b/testing/web-platform/tests/screen-wake-lock/wakelock-screen-type-on-worker.https.worker.js new file mode 100644 index 0000000000..0201294e23 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-screen-type-on-worker.https.worker.js @@ -0,0 +1,8 @@ +//META: title=Screen wake lock should not be allowed in dedicated worker +importScripts("/resources/testharness.js"); + +promise_test(t => { + return promise_rejects_dom(t, "NotAllowedError", navigator.wakeLock.request('screen')); +}, "Screen wake lock should not be allowed in dedicated worker"); + +done(); diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-supported-by-permissions-policy.html b/testing/web-platform/tests/screen-wake-lock/wakelock-supported-by-permissions-policy.html new file mode 100644 index 0000000000..cc0bb963b1 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-supported-by-permissions-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that screen-wake-lock is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/screen-wake-lock/#dfn-wake-lock-feature"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('screen-wake-lock', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise screen-wake-lock.'); +</script> diff --git a/testing/web-platform/tests/screen-wake-lock/wakelock-type.https.window.js b/testing/web-platform/tests/screen-wake-lock/wakelock-type.https.window.js new file mode 100644 index 0000000000..5008064684 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelock-type.https.window.js @@ -0,0 +1,21 @@ +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js + +promise_test(async t => { + await test_driver.set_permission( + {name: 'screen-wake-lock'}, 'granted'); + + const lock = await navigator.wakeLock.request(); + t.add_cleanup(() => { + lock.release(); + }); + assert_equals(lock.type, 'screen'); +}, '\'type\' parameter in WakeLock.request() defaults to \'screen\''); + +promise_test(t => { + const invalidTypes = ['invalid', null, 123, {}, '', true]; + return Promise.all(invalidTypes.map(invalidType => { + return promise_rejects_js( + t, TypeError, navigator.wakeLock.request(invalidType)); + })); +}, '\'TypeError\' is thrown when set an invalid wake lock type'); diff --git a/testing/web-platform/tests/screen-wake-lock/wakelockpermissiondescriptor.https.html b/testing/web-platform/tests/screen-wake-lock/wakelockpermissiondescriptor.https.html new file mode 100644 index 0000000000..252aa3ce28 --- /dev/null +++ b/testing/web-platform/tests/screen-wake-lock/wakelockpermissiondescriptor.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<link rel="help" href="https://w3c.github.io/screen-wake-lock/#the-screen-wake-lock-powerful-feature"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script> +promise_test(async t => { + await test_driver.set_permission({name: 'screen-wake-lock'}, 'denied'); + + return navigator.permissions.query({name:'screen-wake-lock'}).then(status => { + assert_class_string(status, "PermissionStatus"); + assert_equals(status.state, "denied"); + }); +}, "PermissionDescriptor with name='screen-wake-lock' works"); +</script> |