forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const TEST_PATH = getRootDirectory(gTestPath).replace(
 | 
						|
  "chrome://mochitests/content",
 | 
						|
  "http://example.com"
 | 
						|
);
 | 
						|
const TEST_URI = TEST_PATH + "file_csp_uir.html"; // important to be http: to test upgrade-insecure-requests
 | 
						|
const RESULT_URI =
 | 
						|
  TEST_PATH.replace("http://", "https://") + "file_csp_uir_dummy.html";
 | 
						|
 | 
						|
function verifyCSP(aTestName, aBrowser, aResultURI) {
 | 
						|
  return SpecialPowers.spawn(
 | 
						|
    aBrowser,
 | 
						|
    [{ aTestName, aResultURI }],
 | 
						|
    async function({ aTestName, aResultURI }) {
 | 
						|
      let channel = content.docShell.currentDocumentChannel;
 | 
						|
      is(channel.URI.asciiSpec, aResultURI, "testing CSP for " + aTestName);
 | 
						|
    }
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
add_task(async function test_csp_inheritance_regular_click() {
 | 
						|
  await BrowserTestUtils.withNewTab(TEST_URI, async function(browser) {
 | 
						|
    let loadPromise = BrowserTestUtils.browserLoaded(
 | 
						|
      browser,
 | 
						|
      false,
 | 
						|
      RESULT_URI
 | 
						|
    );
 | 
						|
    // set the data href + simulate click
 | 
						|
    BrowserTestUtils.synthesizeMouseAtCenter(
 | 
						|
      "#testlink",
 | 
						|
      {},
 | 
						|
      gBrowser.selectedBrowser
 | 
						|
    );
 | 
						|
    await loadPromise;
 | 
						|
    await verifyCSP("click()", gBrowser.selectedBrowser, RESULT_URI);
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_csp_inheritance_ctrl_click() {
 | 
						|
  await BrowserTestUtils.withNewTab(TEST_URI, async function(browser) {
 | 
						|
    let loadPromise = BrowserTestUtils.waitForNewTab(
 | 
						|
      gBrowser,
 | 
						|
      RESULT_URI,
 | 
						|
      true
 | 
						|
    );
 | 
						|
    // set the data href + simulate ctrl+click
 | 
						|
    BrowserTestUtils.synthesizeMouseAtCenter(
 | 
						|
      "#testlink",
 | 
						|
      { ctrlKey: true, metaKey: true },
 | 
						|
      gBrowser.selectedBrowser
 | 
						|
    );
 | 
						|
    let tab = await loadPromise;
 | 
						|
    gBrowser.selectTabAtIndex(2);
 | 
						|
    await verifyCSP("ctrl-click()", gBrowser.selectedBrowser, RESULT_URI);
 | 
						|
    await BrowserTestUtils.removeTab(tab);
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(
 | 
						|
  async function test_csp_inheritance_right_click_open_link_in_new_tab() {
 | 
						|
    await BrowserTestUtils.withNewTab(TEST_URI, async function(browser) {
 | 
						|
      let loadPromise = BrowserTestUtils.waitForNewTab(gBrowser, RESULT_URI);
 | 
						|
      // set the data href + simulate right-click open link in tab
 | 
						|
      BrowserTestUtils.waitForEvent(document, "popupshown", false, event => {
 | 
						|
        // These are operations that must be executed synchronously with the event.
 | 
						|
        document.getElementById("context-openlinkintab").doCommand();
 | 
						|
        event.target.hidePopup();
 | 
						|
        return true;
 | 
						|
      });
 | 
						|
      BrowserTestUtils.synthesizeMouseAtCenter(
 | 
						|
        "#testlink",
 | 
						|
        { type: "contextmenu", button: 2 },
 | 
						|
        gBrowser.selectedBrowser
 | 
						|
      );
 | 
						|
 | 
						|
      let tab = await loadPromise;
 | 
						|
      gBrowser.selectTabAtIndex(2);
 | 
						|
      await verifyCSP(
 | 
						|
        "right-click-open-in-new-tab()",
 | 
						|
        gBrowser.selectedBrowser,
 | 
						|
        RESULT_URI
 | 
						|
      );
 | 
						|
      await BrowserTestUtils.removeTab(tab);
 | 
						|
    });
 | 
						|
  }
 | 
						|
);
 |