| <!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> |