forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			156 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 * Make sure that the correct origin is shown for permission prompts.
 | 
						|
 */
 | 
						|
 | 
						|
async function check(contentTask, options = {}) {
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    "https://test1.example.com/",
 | 
						|
    async function(browser) {
 | 
						|
      let popupShownPromise = waitForNotificationPanel();
 | 
						|
      await SpecialPowers.spawn(browser, [], contentTask);
 | 
						|
      let panel = await popupShownPromise;
 | 
						|
      let notification = panel.children[0];
 | 
						|
      let body = notification.querySelector(".popup-notification-body");
 | 
						|
      ok(
 | 
						|
        body.innerHTML.includes("example.com"),
 | 
						|
        "Check that at least the eTLD+1 is present in the markup"
 | 
						|
      );
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  let channel = NetUtil.newChannel({
 | 
						|
    uri: getRootDirectory(gTestPath),
 | 
						|
    loadUsingSystemPrincipal: true,
 | 
						|
  });
 | 
						|
  channel = channel.QueryInterface(Ci.nsIFileChannel);
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(channel.file.path, async function(browser) {
 | 
						|
    let popupShownPromise = waitForNotificationPanel();
 | 
						|
    await SpecialPowers.spawn(browser, [], contentTask);
 | 
						|
    let panel = await popupShownPromise;
 | 
						|
    let notification = panel.children[0];
 | 
						|
    let body = notification.querySelector(".popup-notification-body");
 | 
						|
    if (
 | 
						|
      notification.id == "geolocation-notification" ||
 | 
						|
      notification.id == "xr-notification"
 | 
						|
    ) {
 | 
						|
      ok(
 | 
						|
        body.innerHTML.includes("local file"),
 | 
						|
        `file:// URIs should be displayed as local file.`
 | 
						|
      );
 | 
						|
    } else {
 | 
						|
      ok(
 | 
						|
        body.innerHTML.includes("Unknown origin"),
 | 
						|
        "file:// URIs should be displayed as unknown origin."
 | 
						|
      );
 | 
						|
    }
 | 
						|
  });
 | 
						|
 | 
						|
  if (!options.skipOnExtension) {
 | 
						|
    // Test the scenario also on the extension page if not explicitly unsupported
 | 
						|
    // (e.g. an extension page can't be navigated on a blob URL).
 | 
						|
    let extension = ExtensionTestUtils.loadExtension({
 | 
						|
      manifest: {
 | 
						|
        name: "Test Extension Name",
 | 
						|
      },
 | 
						|
      background() {
 | 
						|
        let { browser } = this;
 | 
						|
        browser.test.sendMessage(
 | 
						|
          "extension-tab-url",
 | 
						|
          browser.runtime.getURL("extension-tab-page.html")
 | 
						|
        );
 | 
						|
      },
 | 
						|
      files: {
 | 
						|
        "extension-tab-page.html": `<!DOCTYPE html><html><body></body></html>`,
 | 
						|
      },
 | 
						|
    });
 | 
						|
 | 
						|
    await extension.startup();
 | 
						|
    let extensionURI = await extension.awaitMessage("extension-tab-url");
 | 
						|
 | 
						|
    await BrowserTestUtils.withNewTab(extensionURI, async function(browser) {
 | 
						|
      let popupShownPromise = waitForNotificationPanel();
 | 
						|
      await SpecialPowers.spawn(browser, [], contentTask);
 | 
						|
      let panel = await popupShownPromise;
 | 
						|
      let notification = panel.children[0];
 | 
						|
      let body = notification.querySelector(".popup-notification-body");
 | 
						|
      ok(
 | 
						|
        body.innerHTML.includes("Test Extension Name"),
 | 
						|
        "Check the the extension name is present in the markup"
 | 
						|
      );
 | 
						|
    });
 | 
						|
 | 
						|
    await extension.unload();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
add_setup(async function() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      ["media.navigator.permission.fake", true],
 | 
						|
      ["media.navigator.permission.force", true],
 | 
						|
      ["dom.vr.always_support_vr", true],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_displayURI_geo() {
 | 
						|
  await check(async function() {
 | 
						|
    content.navigator.geolocation.getCurrentPosition(() => {});
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
const kVREnabled = SpecialPowers.getBoolPref("dom.vr.enabled");
 | 
						|
if (kVREnabled) {
 | 
						|
  add_task(async function test_displayURI_xr() {
 | 
						|
    await check(async function() {
 | 
						|
      content.navigator.getVRDisplays();
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
add_task(async function test_displayURI_camera() {
 | 
						|
  await check(async function() {
 | 
						|
    content.navigator.mediaDevices.getUserMedia({ video: true, fake: true });
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_displayURI_geo_blob() {
 | 
						|
  await check(
 | 
						|
    async function() {
 | 
						|
      let text =
 | 
						|
        "<script>navigator.geolocation.getCurrentPosition(() => {})</script>";
 | 
						|
      let blob = new Blob([text], { type: "text/html" });
 | 
						|
      let url = content.URL.createObjectURL(blob);
 | 
						|
      content.location.href = url;
 | 
						|
    },
 | 
						|
    { skipOnExtension: true }
 | 
						|
  );
 | 
						|
});
 | 
						|
 | 
						|
if (kVREnabled) {
 | 
						|
  add_task(async function test_displayURI_xr_blob() {
 | 
						|
    await check(
 | 
						|
      async function() {
 | 
						|
        let text = "<script>navigator.getVRDisplays()</script>";
 | 
						|
        let blob = new Blob([text], { type: "text/html" });
 | 
						|
        let url = content.URL.createObjectURL(blob);
 | 
						|
        content.location.href = url;
 | 
						|
      },
 | 
						|
      { skipOnExtension: true }
 | 
						|
    );
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
add_task(async function test_displayURI_camera_blob() {
 | 
						|
  await check(
 | 
						|
    async function() {
 | 
						|
      let text =
 | 
						|
        "<script>navigator.mediaDevices.getUserMedia({video: true, fake: true})</script>";
 | 
						|
      let blob = new Blob([text], { type: "text/html" });
 | 
						|
      let url = content.URL.createObjectURL(blob);
 | 
						|
      content.location.href = url;
 | 
						|
    },
 | 
						|
    { skipOnExtension: true }
 | 
						|
  );
 | 
						|
});
 |