forked from mirrors/gecko-dev
		
	 736a5983b8
			
		
	
	
		736a5983b8
		
	
	
	
	
		
			
			Renames all instances of the snake_case identifier to camelCase to match more closely to idiomatic JavaScript and to existing conventions throughout the code base. Differential Revision: https://phabricator.services.mozilla.com/D198825
		
			
				
	
	
		
			175 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const TEST_ROOT = getRootDirectory(gTestPath).replace(
 | |
|   "chrome://mochitests/content/",
 | |
|   "https://example.com/"
 | |
| );
 | |
| const TEST_PAGE = TEST_ROOT + "get_user_media.html";
 | |
| 
 | |
| add_setup(async function () {
 | |
|   let prefs = [
 | |
|     [PREF_PERMISSION_FAKE, true],
 | |
|     [PREF_AUDIO_LOOPBACK, ""],
 | |
|     [PREF_VIDEO_LOOPBACK, ""],
 | |
|     [PREF_FAKE_STREAMS, true],
 | |
|     [PREF_FOCUS_SOURCE, false],
 | |
|   ];
 | |
|   await SpecialPowers.pushPrefEnv({ set: prefs });
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Tests that if the user chooses to "Stop Sharing" a display while
 | |
|  * also sharing their microphone or camera, that only the display
 | |
|  * stream is stopped.
 | |
|  */
 | |
| add_task(async function test_stop_sharing() {
 | |
|   await BrowserTestUtils.withNewTab(TEST_PAGE, async browser => {
 | |
|     let indicatorPromise = promiseIndicatorWindow();
 | |
| 
 | |
|     await shareDevices(
 | |
|       browser,
 | |
|       true /* camera */,
 | |
|       true /* microphone */,
 | |
|       SHARE_SCREEN
 | |
|     );
 | |
| 
 | |
|     let indicator = await indicatorPromise;
 | |
| 
 | |
|     let stopSharingButton = indicator.document.getElementById("stop-sharing");
 | |
|     let stopSharingPromise = expectObserverCalled("recording-device-events");
 | |
|     stopSharingButton.click();
 | |
|     await stopSharingPromise;
 | |
| 
 | |
|     // Ensure that we're still sharing the other streams.
 | |
|     await checkSharingUI({ audio: true, video: true });
 | |
| 
 | |
|     // Ensure that the "display-share" section of the indicator is now hidden
 | |
|     Assert.ok(
 | |
|       BrowserTestUtils.isHidden(
 | |
|         indicator.document.getElementById("display-share")
 | |
|       ),
 | |
|       "The display-share section of the indicator should now be hidden."
 | |
|     );
 | |
|   });
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Tests that if the user chooses to "Stop Sharing" a display while
 | |
|  * sharing their display on multiple sites, all of those display sharing
 | |
|  * streams are closed.
 | |
|  */
 | |
| add_task(async function test_stop_sharing_multiple() {
 | |
|   let indicatorPromise = promiseIndicatorWindow();
 | |
| 
 | |
|   info("Opening first tab");
 | |
|   let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE);
 | |
|   info("Sharing camera, microphone and screen");
 | |
|   await shareDevices(tab1.linkedBrowser, true, true, SHARE_SCREEN);
 | |
| 
 | |
|   info("Opening second tab");
 | |
|   let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE);
 | |
|   info("Sharing camera and screen");
 | |
|   await shareDevices(tab2.linkedBrowser, true, false, SHARE_SCREEN);
 | |
| 
 | |
|   let indicator = await indicatorPromise;
 | |
| 
 | |
|   let stopSharingButton = indicator.document.getElementById("stop-sharing");
 | |
|   let stopSharingPromise = TestUtils.waitForCondition(() => {
 | |
|     return !webrtcUI.showScreenSharingIndicator;
 | |
|   });
 | |
|   stopSharingButton.click();
 | |
|   await stopSharingPromise;
 | |
| 
 | |
|   Assert.equal(gBrowser.selectedTab, tab2, "Should have tab2 selected.");
 | |
|   await checkSharingUI({ audio: false, video: true }, window, {
 | |
|     audio: true,
 | |
|     video: true,
 | |
|   });
 | |
|   BrowserTestUtils.removeTab(tab2);
 | |
| 
 | |
|   Assert.equal(gBrowser.selectedTab, tab1, "Should have tab1 selected.");
 | |
|   await checkSharingUI({ audio: true, video: true }, window, {
 | |
|     audio: true,
 | |
|     video: true,
 | |
|   });
 | |
| 
 | |
|   // Ensure that the "display-share" section of the indicator is now hidden
 | |
|   Assert.ok(
 | |
|     BrowserTestUtils.isHidden(
 | |
|       indicator.document.getElementById("display-share")
 | |
|     ),
 | |
|     "The display-share section of the indicator should now be hidden."
 | |
|   );
 | |
| 
 | |
|   BrowserTestUtils.removeTab(tab1);
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Tests that if the user chooses to "Stop Sharing" a display, persistent
 | |
|  * permissions are not removed for camera or microphone devices.
 | |
|  */
 | |
| add_task(async function test_keep_permissions() {
 | |
|   await BrowserTestUtils.withNewTab(TEST_PAGE, async browser => {
 | |
|     let indicatorPromise = promiseIndicatorWindow();
 | |
| 
 | |
|     await shareDevices(
 | |
|       browser,
 | |
|       true /* camera */,
 | |
|       true /* microphone */,
 | |
|       SHARE_SCREEN,
 | |
|       true /* remember */
 | |
|     );
 | |
| 
 | |
|     let indicator = await indicatorPromise;
 | |
| 
 | |
|     let stopSharingButton = indicator.document.getElementById("stop-sharing");
 | |
|     let stopSharingPromise = expectObserverCalled("recording-device-events");
 | |
|     stopSharingButton.click();
 | |
|     await stopSharingPromise;
 | |
| 
 | |
|     // Ensure that we're still sharing the other streams.
 | |
|     await checkSharingUI({ audio: true, video: true }, undefined, undefined, {
 | |
|       audio: { scope: SitePermissions.SCOPE_PERSISTENT },
 | |
|       video: { scope: SitePermissions.SCOPE_PERSISTENT },
 | |
|     });
 | |
| 
 | |
|     // Ensure that the "display-share" section of the indicator is now hidden
 | |
|     Assert.ok(
 | |
|       BrowserTestUtils.isHidden(
 | |
|         indicator.document.getElementById("display-share")
 | |
|       ),
 | |
|       "The display-share section of the indicator should now be hidden."
 | |
|     );
 | |
| 
 | |
|     let { state: micState, scope: micScope } = SitePermissions.getForPrincipal(
 | |
|       browser.contentPrincipal,
 | |
|       "microphone",
 | |
|       browser
 | |
|     );
 | |
| 
 | |
|     Assert.equal(micState, SitePermissions.ALLOW);
 | |
|     Assert.equal(micScope, SitePermissions.SCOPE_PERSISTENT);
 | |
| 
 | |
|     let { state: camState, scope: camScope } = SitePermissions.getForPrincipal(
 | |
|       browser.contentPrincipal,
 | |
|       "camera",
 | |
|       browser
 | |
|     );
 | |
|     Assert.equal(camState, SitePermissions.ALLOW);
 | |
|     Assert.equal(camScope, SitePermissions.SCOPE_PERSISTENT);
 | |
| 
 | |
|     SitePermissions.removeFromPrincipal(
 | |
|       browser.contentPrincipal,
 | |
|       "camera",
 | |
|       browser
 | |
|     );
 | |
|     SitePermissions.removeFromPrincipal(
 | |
|       browser.contentPrincipal,
 | |
|       "microphone",
 | |
|       browser
 | |
|     );
 | |
|   });
 | |
| });
 |