forked from mirrors/gecko-dev
		
	This is more fission-compatible, and a lot simpler. Differential Revision: https://phabricator.services.mozilla.com/D111480
		
			
				
	
	
		
			254 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 * User Override Mixed Content Block - Tests for Bug 822367
 | 
						|
 */
 | 
						|
 | 
						|
const PREF_DISPLAY = "security.mixed_content.block_display_content";
 | 
						|
const PREF_DISPLAY_UPGRADE = "security.mixed_content.upgrade_display_content";
 | 
						|
const PREF_ACTIVE = "security.mixed_content.block_active_content";
 | 
						|
 | 
						|
// We alternate for even and odd test cases to simulate different hosts
 | 
						|
const HTTPS_TEST_ROOT = getRootDirectory(gTestPath).replace(
 | 
						|
  "chrome://mochitests/content",
 | 
						|
  "https://example.com"
 | 
						|
);
 | 
						|
const HTTPS_TEST_ROOT_2 = getRootDirectory(gTestPath).replace(
 | 
						|
  "chrome://mochitests/content",
 | 
						|
  "https://test1.example.com"
 | 
						|
);
 | 
						|
 | 
						|
var gTestBrowser = null;
 | 
						|
 | 
						|
add_task(async function test() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [PREF_DISPLAY, true],
 | 
						|
      [PREF_DISPLAY_UPGRADE, false],
 | 
						|
      [PREF_ACTIVE, true],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  var newTab = BrowserTestUtils.addTab(gBrowser);
 | 
						|
  gBrowser.selectedTab = newTab;
 | 
						|
  gTestBrowser = gBrowser.selectedBrowser;
 | 
						|
  newTab.linkedBrowser.stop();
 | 
						|
 | 
						|
  // Mixed Script Test
 | 
						|
  var url = HTTPS_TEST_ROOT + "file_bug822367_1.html";
 | 
						|
  BrowserTestUtils.loadURI(gTestBrowser, url);
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser, false, url);
 | 
						|
});
 | 
						|
 | 
						|
// Mixed Script Test
 | 
						|
add_task(async function MixedTest1A() {
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: false,
 | 
						|
    activeBlocked: true,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.disableMixedContentProtection();
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest1B() {
 | 
						|
  await SpecialPowers.spawn(gTestBrowser, [], async function() {
 | 
						|
    await ContentTaskUtils.waitForCondition(
 | 
						|
      () => content.document.getElementById("p1").innerHTML == "hello",
 | 
						|
      "Waited too long for mixed script to run in Test 1"
 | 
						|
    );
 | 
						|
  });
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.enableMixedContentProtectionNoReload();
 | 
						|
});
 | 
						|
 | 
						|
// Mixed Display Test - Doorhanger should not appear
 | 
						|
add_task(async function MixedTest2() {
 | 
						|
  var url = HTTPS_TEST_ROOT_2 + "file_bug822367_2.html";
 | 
						|
  BrowserTestUtils.loadURI(gTestBrowser, url);
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser, false, url);
 | 
						|
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: false,
 | 
						|
    activeBlocked: false,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
// Mixed Script and Display Test - User Override should cause both the script and the image to load.
 | 
						|
add_task(async function MixedTest3() {
 | 
						|
  var url = HTTPS_TEST_ROOT + "file_bug822367_3.html";
 | 
						|
  BrowserTestUtils.loadURI(gTestBrowser, url);
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser, false, url);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest3A() {
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: false,
 | 
						|
    activeBlocked: true,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.disableMixedContentProtection();
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest3B() {
 | 
						|
  await SpecialPowers.spawn(gTestBrowser, [], async function() {
 | 
						|
    let p1 = ContentTaskUtils.waitForCondition(
 | 
						|
      () => content.document.getElementById("p1").innerHTML == "hello",
 | 
						|
      "Waited too long for mixed script to run in Test 3"
 | 
						|
    );
 | 
						|
    let p2 = ContentTaskUtils.waitForCondition(
 | 
						|
      () => content.document.getElementById("p2").innerHTML == "bye",
 | 
						|
      "Waited too long for mixed image to load in Test 3"
 | 
						|
    );
 | 
						|
    await Promise.all([p1, p2]);
 | 
						|
  });
 | 
						|
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: true,
 | 
						|
    activeBlocked: false,
 | 
						|
    passiveLoaded: true,
 | 
						|
  });
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.enableMixedContentProtectionNoReload();
 | 
						|
});
 | 
						|
 | 
						|
// Location change - User override on one page doesn't propagate to another page after location change.
 | 
						|
add_task(async function MixedTest4() {
 | 
						|
  var url = HTTPS_TEST_ROOT_2 + "file_bug822367_4.html";
 | 
						|
  BrowserTestUtils.loadURI(gTestBrowser, url);
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser, false, url);
 | 
						|
});
 | 
						|
 | 
						|
let preLocationChangePrincipal = null;
 | 
						|
add_task(async function MixedTest4A() {
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: false,
 | 
						|
    activeBlocked: true,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
 | 
						|
  preLocationChangePrincipal = gTestBrowser.contentPrincipal;
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.disableMixedContentProtection();
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest4B() {
 | 
						|
  let url = HTTPS_TEST_ROOT + "file_bug822367_4B.html";
 | 
						|
  await SpecialPowers.spawn(gTestBrowser, [url], async function(wantedUrl) {
 | 
						|
    await ContentTaskUtils.waitForCondition(
 | 
						|
      () => content.document.location == wantedUrl,
 | 
						|
      "Waited too long for mixed script to run in Test 4"
 | 
						|
    );
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest4C() {
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: false,
 | 
						|
    activeBlocked: true,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
 | 
						|
  await SpecialPowers.spawn(gTestBrowser, [], async function() {
 | 
						|
    await ContentTaskUtils.waitForCondition(
 | 
						|
      () => content.document.getElementById("p1").innerHTML == "",
 | 
						|
      "Mixed script loaded in test 4 after location change!"
 | 
						|
    );
 | 
						|
  });
 | 
						|
  SitePermissions.removeFromPrincipal(
 | 
						|
    preLocationChangePrincipal,
 | 
						|
    "mixed-content"
 | 
						|
  );
 | 
						|
});
 | 
						|
 | 
						|
// Mixed script attempts to load in a document.open()
 | 
						|
add_task(async function MixedTest5() {
 | 
						|
  var url = HTTPS_TEST_ROOT + "file_bug822367_5.html";
 | 
						|
  BrowserTestUtils.loadURI(gTestBrowser, url);
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser, false, url);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest5A() {
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: false,
 | 
						|
    activeBlocked: true,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.disableMixedContentProtection();
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest5B() {
 | 
						|
  await SpecialPowers.spawn(gTestBrowser, [], async function() {
 | 
						|
    await ContentTaskUtils.waitForCondition(
 | 
						|
      () => content.document.getElementById("p1").innerHTML == "hello",
 | 
						|
      "Waited too long for mixed script to run in Test 5"
 | 
						|
    );
 | 
						|
  });
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.enableMixedContentProtectionNoReload();
 | 
						|
});
 | 
						|
 | 
						|
// Mixed script attempts to load in a document.open() that is within an iframe.
 | 
						|
add_task(async function MixedTest6() {
 | 
						|
  var url = HTTPS_TEST_ROOT_2 + "file_bug822367_6.html";
 | 
						|
  BrowserTestUtils.loadURI(gTestBrowser, url);
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser, false, url);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest6A() {
 | 
						|
  gTestBrowser.removeEventListener("load", MixedTest6A, true);
 | 
						|
  let { gIdentityHandler } = gTestBrowser.ownerGlobal;
 | 
						|
 | 
						|
  await BrowserTestUtils.waitForCondition(
 | 
						|
    () =>
 | 
						|
      gIdentityHandler._identityBox.classList.contains("mixedActiveBlocked"),
 | 
						|
    "Waited too long for control center to get mixed active blocked state"
 | 
						|
  );
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest6B() {
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: false,
 | 
						|
    activeBlocked: true,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.disableMixedContentProtection();
 | 
						|
 | 
						|
  await BrowserTestUtils.browserLoaded(gTestBrowser);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest6C() {
 | 
						|
  await SpecialPowers.spawn(gTestBrowser, [], async function() {
 | 
						|
    function test() {
 | 
						|
      try {
 | 
						|
        return (
 | 
						|
          content.document
 | 
						|
            .getElementById("f1")
 | 
						|
            .contentDocument.getElementById("p1").innerHTML == "hello"
 | 
						|
        );
 | 
						|
      } catch (e) {
 | 
						|
        return false;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    await ContentTaskUtils.waitForCondition(
 | 
						|
      test,
 | 
						|
      "Waited too long for mixed script to run in Test 6"
 | 
						|
    );
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function MixedTest6D() {
 | 
						|
  await assertMixedContentBlockingState(gTestBrowser, {
 | 
						|
    activeLoaded: true,
 | 
						|
    activeBlocked: false,
 | 
						|
    passiveLoaded: false,
 | 
						|
  });
 | 
						|
  gTestBrowser.ownerGlobal.gIdentityHandler.enableMixedContentProtectionNoReload();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function cleanup() {
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
});
 |