summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/idle-detection/page-visibility.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/idle-detection/page-visibility.https.html')
-rw-r--r--testing/web-platform/tests/idle-detection/page-visibility.https.html79
1 files changed, 79 insertions, 0 deletions
diff --git a/testing/web-platform/tests/idle-detection/page-visibility.https.html b/testing/web-platform/tests/idle-detection/page-visibility.https.html
new file mode 100644
index 0000000000..550683f704
--- /dev/null
+++ b/testing/web-platform/tests/idle-detection/page-visibility.https.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/samuelgoto/idle-detection">
+<title>Tests the Idle Detection API</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/test-only-api.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 src="resources/idle-detection-helper.js"></script>
+<script>
+'use strict';
+
+promise_setup(async t => {
+ await test_driver.set_permission({ name: 'idle-detection' }, 'granted');
+ if (isChromiumBased) {
+ await loadChromiumResources();
+ }
+})
+
+promise_test(async t => {
+ let monitor;
+
+ expect(addMonitor).andReturn(async (monitorPtr) => {
+ monitor = monitorPtr;
+ return {
+ error: IdleDetectorError.SUCCESS,
+ state: {
+ idleTime: null,
+ screenLocked: false
+ }
+ };
+ });
+
+ const controller = new AbortController();
+ t.add_cleanup(() => {
+ controller.abort();
+ });
+ const detector = new IdleDetector();
+ const watcher = new EventWatcher(t, detector, ["change"]);
+ const initial_state = watcher.wait_for("change");
+
+ await detector.start({threshold: 60000, signal: controller.signal});
+ await initial_state;
+
+ assert_equals(detector.userState, "active");
+ assert_false(document.hidden);
+
+ const {minimize, restore} = window_state_context(t);
+
+ await minimize();
+ monitor.update(
+ {
+ idleTime: { milliseconds: 0 },
+ screenLocked: false
+ },
+ /*is_overridden_by_devtools=*/true
+ );
+
+ // Assert that the detector works while the page is not visible.
+ await watcher.wait_for("change");
+ assert_equals(detector.userState, "idle");
+ assert_true(document.hidden);
+
+ await restore();
+ monitor.update(
+ {
+ idleTime: null,
+ screenLocked: false
+ },
+ /*is_overridden_by_devtools=*/true
+ );
+
+ await watcher.wait_for("change");
+ assert_equals(detector.userState, "active");
+ assert_false(document.hidden);
+}, 'Page visibility.');
+
+</script>