forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			160 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| // This test tends to trigger a race in the fullscreen time telemetry,
 | |
| // where the fullscreen enter and fullscreen exit events (which use the
 | |
| // same histogram ID) overlap. That causes TelemetryStopwatch to log an
 | |
| // error.
 | |
| SimpleTest.ignoreAllUncaughtExceptions(true);
 | |
| const { PromiseTestUtils } = ChromeUtils.importESModule(
 | |
|   "resource://testing-common/PromiseTestUtils.sys.mjs"
 | |
| );
 | |
| PromiseTestUtils.allowMatchingRejectionsGlobally(/Not in fullscreen mode/);
 | |
| 
 | |
| SimpleTest.requestCompleteLog();
 | |
| 
 | |
| async function requestNotificationPermission(browser) {
 | |
|   return SpecialPowers.spawn(browser, [], () => {
 | |
|     return content.Notification.requestPermission();
 | |
|   });
 | |
| }
 | |
| 
 | |
| async function requestCameraPermission(browser) {
 | |
|   return SpecialPowers.spawn(browser, [], () =>
 | |
|     content.navigator.mediaDevices
 | |
|       .getUserMedia({ video: true, fake: true })
 | |
|       .then(
 | |
|         () => true,
 | |
|         () => false
 | |
|       )
 | |
|   );
 | |
| }
 | |
| 
 | |
| add_task(async function test_fullscreen_closes_permissionui_prompt() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["dom.webnotifications.requireuserinteraction", false],
 | |
|       ["permissions.fullscreen.allowed", false],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     gBrowser,
 | |
|     "https://example.com"
 | |
|   );
 | |
|   let browser = tab.linkedBrowser;
 | |
| 
 | |
|   let popupShown, requestResult, popupHidden;
 | |
| 
 | |
|   popupShown = BrowserTestUtils.waitForEvent(
 | |
|     window.PopupNotifications.panel,
 | |
|     "popupshown"
 | |
|   );
 | |
| 
 | |
|   info("Requesting notification permission");
 | |
|   requestResult = requestNotificationPermission(browser);
 | |
|   await popupShown;
 | |
| 
 | |
|   info("Entering DOM full-screen");
 | |
|   popupHidden = BrowserTestUtils.waitForEvent(
 | |
|     window.PopupNotifications.panel,
 | |
|     "popuphidden"
 | |
|   );
 | |
| 
 | |
|   await changeFullscreen(browser, true);
 | |
| 
 | |
|   await popupHidden;
 | |
| 
 | |
|   is(
 | |
|     await requestResult,
 | |
|     "default",
 | |
|     "Expect permission request to be cancelled"
 | |
|   );
 | |
| 
 | |
|   await changeFullscreen(browser, false);
 | |
| 
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | |
| 
 | |
| add_task(async function test_fullscreen_closes_webrtc_permission_prompt() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["media.navigator.permission.fake", true],
 | |
|       ["media.navigator.permission.force", true],
 | |
|       ["permissions.fullscreen.allowed", false],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     gBrowser,
 | |
|     "https://example.com"
 | |
|   );
 | |
|   let browser = tab.linkedBrowser;
 | |
|   let popupShown, requestResult, popupHidden;
 | |
| 
 | |
|   popupShown = BrowserTestUtils.waitForEvent(
 | |
|     window.PopupNotifications.panel,
 | |
|     "popupshown"
 | |
|   );
 | |
| 
 | |
|   info("Requesting camera permission");
 | |
|   requestResult = requestCameraPermission(browser);
 | |
| 
 | |
|   await popupShown;
 | |
| 
 | |
|   info("Entering DOM full-screen");
 | |
|   popupHidden = BrowserTestUtils.waitForEvent(
 | |
|     window.PopupNotifications.panel,
 | |
|     "popuphidden"
 | |
|   );
 | |
|   await changeFullscreen(browser, true);
 | |
| 
 | |
|   await popupHidden;
 | |
| 
 | |
|   is(
 | |
|     await requestResult,
 | |
|     false,
 | |
|     "Expect webrtc permission request to be cancelled"
 | |
|   );
 | |
| 
 | |
|   await changeFullscreen(browser, false);
 | |
| 
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | |
| 
 | |
| add_task(async function test_permission_prompt_closes_fullscreen() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["dom.webnotifications.requireuserinteraction", false],
 | |
|       ["permissions.fullscreen.allowed", false],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     gBrowser,
 | |
|     "https://example.com"
 | |
|   );
 | |
|   let browser = tab.linkedBrowser;
 | |
|   info("Entering DOM full-screen");
 | |
|   await changeFullscreen(browser, true);
 | |
| 
 | |
|   let popupShown = BrowserTestUtils.waitForEvent(
 | |
|     window.PopupNotifications.panel,
 | |
|     "popupshown"
 | |
|   );
 | |
|   let fullScreenExit = waitForFullScreenState(browser, false);
 | |
| 
 | |
|   info("Requesting notification permission");
 | |
|   requestNotificationPermission(browser).catch(() => {});
 | |
|   await popupShown;
 | |
| 
 | |
|   info("Waiting for full-screen exit");
 | |
|   await fullScreenExit;
 | |
| 
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | 
