forked from mirrors/gecko-dev
		
	- Switches to add_task and async functions. - Waits for the correct url to be loaded in BTU.browserLoaded. - Gets rid of all the CPOWs because we don't like them. MozReview-Commit-ID: HysaFYIEtVq --HG-- extra : rebase_source : 8065cb8f84b50d7260f36fbc1e6186c782590899
		
			
				
	
	
		
			123 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 * Description of the Tests for
 | 
						|
 *  - Bug 902156: Persist "disable protection" option for Mixed Content Blocker
 | 
						|
 *
 | 
						|
 * 1. Navigate to the same domain via document.location
 | 
						|
 *    - Load a html page which has mixed content
 | 
						|
 *    - Control Center button to disable protection appears - we disable it
 | 
						|
 *    - Load a new page from the same origin using document.location
 | 
						|
 *    - Control Center button should not appear anymore!
 | 
						|
 *
 | 
						|
 * 2. Navigate to the same domain via simulateclick for a link on the page
 | 
						|
 *    - Load a html page which has mixed content
 | 
						|
 *    - Control Center button to disable protection appears - we disable it
 | 
						|
 *    - Load a new page from the same origin simulating a click
 | 
						|
 *    - Control Center button should not appear anymore!
 | 
						|
 *
 | 
						|
 * 3. Navigate to a differnet domain and show the content is still blocked
 | 
						|
 *    - Load a different html page which has mixed content
 | 
						|
 *    - Control Center button to disable protection should appear again because
 | 
						|
 *      we navigated away from html page where we disabled the protection.
 | 
						|
 *
 | 
						|
 * Note, for all tests we set gHttpTestRoot to use 'https'.
 | 
						|
 */
 | 
						|
 | 
						|
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_1 = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "https://test1.example.com");
 | 
						|
const HTTPS_TEST_ROOT_2 = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "https://test2.example.com");
 | 
						|
 | 
						|
add_task(async function setup() {
 | 
						|
  await SpecialPowers.pushPrefEnv({set: [[PREF_ACTIVE, true]]});
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test1() {
 | 
						|
  let url = HTTPS_TEST_ROOT_1 + "file_bug902156_1.html";
 | 
						|
  await BrowserTestUtils.withNewTab(url, async function(browser) {
 | 
						|
    await assertMixedContentBlockingState(browser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
 | 
						|
 | 
						|
    // Disable Mixed Content Protection for the page (and reload)
 | 
						|
    let browserLoaded = BrowserTestUtils.browserLoaded(browser, false, url);
 | 
						|
    let {gIdentityHandler} = browser.ownerGlobal;
 | 
						|
    gIdentityHandler.disableMixedContentProtection();
 | 
						|
    await browserLoaded;
 | 
						|
 | 
						|
    await ContentTask.spawn(browser, null, async function() {
 | 
						|
      let expected = "Mixed Content Blocker disabled";
 | 
						|
      await ContentTaskUtils.waitForCondition(
 | 
						|
        () => content.document.getElementById("mctestdiv").innerHTML == expected,
 | 
						|
        "Error: Waited too long for mixed script to run in Test 1");
 | 
						|
 | 
						|
      let actual = content.document.getElementById("mctestdiv").innerHTML;
 | 
						|
      is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 1");
 | 
						|
    });
 | 
						|
 | 
						|
    // The Script loaded after we disabled the page, now we are going to reload the
 | 
						|
    // page and see if our decision is persistent
 | 
						|
    url = HTTPS_TEST_ROOT_1 + "file_bug902156_2.html";
 | 
						|
    browserLoaded = BrowserTestUtils.browserLoaded(browser, false, url);
 | 
						|
    BrowserTestUtils.loadURI(browser, url);
 | 
						|
    await browserLoaded;
 | 
						|
 | 
						|
    // The Control Center button should appear but isMixedContentBlocked should be NOT true,
 | 
						|
    // because our decision of disabling the mixed content blocker is persistent.
 | 
						|
    await assertMixedContentBlockingState(browser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
 | 
						|
    await ContentTask.spawn(browser, null, function() {
 | 
						|
      let actual = content.document.getElementById("mctestdiv").innerHTML;
 | 
						|
      is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 1");
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
// ------------------------ Test 2 ------------------------------
 | 
						|
 | 
						|
add_task(async function test2() {
 | 
						|
  let url = HTTPS_TEST_ROOT_2 + "file_bug902156_2.html";
 | 
						|
  await BrowserTestUtils.withNewTab(url, async function(browser) {
 | 
						|
    await assertMixedContentBlockingState(browser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
 | 
						|
 | 
						|
    // Disable Mixed Content Protection for the page (and reload)
 | 
						|
    let browserLoaded = BrowserTestUtils.browserLoaded(browser, false, url);
 | 
						|
    let {gIdentityHandler} = browser.ownerGlobal;
 | 
						|
    gIdentityHandler.disableMixedContentProtection();
 | 
						|
    await browserLoaded;
 | 
						|
 | 
						|
    await ContentTask.spawn(browser, null, async function() {
 | 
						|
      let expected = "Mixed Content Blocker disabled";
 | 
						|
      await ContentTaskUtils.waitForCondition(
 | 
						|
        () => content.document.getElementById("mctestdiv").innerHTML == expected,
 | 
						|
        "Error: Waited too long for mixed script to run in Test 2");
 | 
						|
 | 
						|
      let actual = content.document.getElementById("mctestdiv").innerHTML;
 | 
						|
      is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 2");
 | 
						|
    });
 | 
						|
 | 
						|
    // The Script loaded after we disabled the page, now we are going to reload the
 | 
						|
    // page and see if our decision is persistent
 | 
						|
    url = HTTPS_TEST_ROOT_2 + "file_bug902156_1.html";
 | 
						|
    browserLoaded = BrowserTestUtils.browserLoaded(browser, false, url);
 | 
						|
    // reload the page using the provided link in the html file
 | 
						|
    await ContentTask.spawn(browser, null, function() {
 | 
						|
      let mctestlink = content.document.getElementById("mctestlink");
 | 
						|
      mctestlink.click();
 | 
						|
    });
 | 
						|
    await browserLoaded;
 | 
						|
 | 
						|
    // The Control Center button should appear but isMixedContentBlocked should be NOT true,
 | 
						|
    // because our decision of disabling the mixed content blocker is persistent.
 | 
						|
    await assertMixedContentBlockingState(browser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
 | 
						|
 | 
						|
    await ContentTask.spawn(browser, null, function() {
 | 
						|
      let actual = content.document.getElementById("mctestdiv").innerHTML;
 | 
						|
      is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 2");
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test3() {
 | 
						|
  let url = HTTPS_TEST_ROOT_1 + "file_bug902156_3.html";
 | 
						|
  await BrowserTestUtils.withNewTab(url, async function(browser) {
 | 
						|
    await assertMixedContentBlockingState(browser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
 | 
						|
  });
 | 
						|
});
 |