forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			161 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
add_task(async function oopProcessSwap() {
 | 
						|
  const FILE = fileURL("dummy_page.html");
 | 
						|
  const WEB = httpURL("file_postmsg_parent.html");
 | 
						|
 | 
						|
  let win = await BrowserTestUtils.openNewBrowserWindow({ fission: true });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser: win.gBrowser, url: FILE },
 | 
						|
    async browser => {
 | 
						|
      is(browser.browsingContext.children.length, 0);
 | 
						|
 | 
						|
      info("creating an in-process frame");
 | 
						|
      let frameId = await SpecialPowers.spawn(
 | 
						|
        browser,
 | 
						|
        [{ FILE }],
 | 
						|
        async ({ FILE }) => {
 | 
						|
          let iframe = content.document.createElement("iframe");
 | 
						|
          iframe.setAttribute("src", FILE);
 | 
						|
          content.document.body.appendChild(iframe);
 | 
						|
 | 
						|
          // The nested URI should be same-process
 | 
						|
          ok(iframe.browsingContext.docShell, "Should be in-process");
 | 
						|
 | 
						|
          return iframe.browsingContext.id;
 | 
						|
        }
 | 
						|
      );
 | 
						|
 | 
						|
      is(browser.browsingContext.children.length, 1);
 | 
						|
 | 
						|
      info("navigating to x-process frame");
 | 
						|
      let oopinfo = await SpecialPowers.spawn(
 | 
						|
        browser,
 | 
						|
        [{ WEB }],
 | 
						|
        async ({ WEB }) => {
 | 
						|
          let iframe = content.document.querySelector("iframe");
 | 
						|
 | 
						|
          iframe.contentWindow.location = WEB;
 | 
						|
 | 
						|
          let data = await new Promise(resolve => {
 | 
						|
            content.window.addEventListener(
 | 
						|
              "message",
 | 
						|
              function (evt) {
 | 
						|
                info("oop iframe loaded");
 | 
						|
                is(evt.source, iframe.contentWindow);
 | 
						|
                resolve(evt.data);
 | 
						|
              },
 | 
						|
              { once: true }
 | 
						|
            );
 | 
						|
          });
 | 
						|
 | 
						|
          is(iframe.browsingContext.docShell, null, "Should be out-of-process");
 | 
						|
          is(
 | 
						|
            iframe.browsingContext.embedderElement,
 | 
						|
            iframe,
 | 
						|
            "correct embedder"
 | 
						|
          );
 | 
						|
 | 
						|
          return {
 | 
						|
            location: data.location,
 | 
						|
            browsingContextId: iframe.browsingContext.id,
 | 
						|
          };
 | 
						|
        }
 | 
						|
      );
 | 
						|
 | 
						|
      is(browser.browsingContext.children.length, 1);
 | 
						|
 | 
						|
      if (Services.prefs.getBoolPref("fission.preserve_browsing_contexts")) {
 | 
						|
        is(
 | 
						|
          frameId,
 | 
						|
          oopinfo.browsingContextId,
 | 
						|
          `BrowsingContext should not have changed (${frameId} != ${oopinfo.browsingContextId})`
 | 
						|
        );
 | 
						|
      }
 | 
						|
      is(oopinfo.location, WEB, "correct location");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await BrowserTestUtils.closeWindow(win);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function oopOriginProcessSwap() {
 | 
						|
  const COM_DUMMY = httpURL("dummy_page.html", "https://example.com/");
 | 
						|
  const ORG_POSTMSG = httpURL(
 | 
						|
    "file_postmsg_parent.html",
 | 
						|
    "https://example.org/"
 | 
						|
  );
 | 
						|
 | 
						|
  let win = await BrowserTestUtils.openNewBrowserWindow({ fission: true });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser: win.gBrowser, url: COM_DUMMY },
 | 
						|
    async browser => {
 | 
						|
      is(browser.browsingContext.children.length, 0);
 | 
						|
 | 
						|
      info("creating an in-process frame");
 | 
						|
      let frameId = await SpecialPowers.spawn(
 | 
						|
        browser,
 | 
						|
        [{ COM_DUMMY }],
 | 
						|
        async ({ COM_DUMMY }) => {
 | 
						|
          let iframe = content.document.createElement("iframe");
 | 
						|
          iframe.setAttribute("src", COM_DUMMY);
 | 
						|
          content.document.body.appendChild(iframe);
 | 
						|
 | 
						|
          // The nested URI should be same-process
 | 
						|
          ok(iframe.browsingContext.docShell, "Should be in-process");
 | 
						|
 | 
						|
          return iframe.browsingContext.id;
 | 
						|
        }
 | 
						|
      );
 | 
						|
 | 
						|
      is(browser.browsingContext.children.length, 1);
 | 
						|
 | 
						|
      info("navigating to x-process frame");
 | 
						|
      let oopinfo = await SpecialPowers.spawn(
 | 
						|
        browser,
 | 
						|
        [{ ORG_POSTMSG }],
 | 
						|
        async ({ ORG_POSTMSG }) => {
 | 
						|
          let iframe = content.document.querySelector("iframe");
 | 
						|
 | 
						|
          iframe.contentWindow.location = ORG_POSTMSG;
 | 
						|
 | 
						|
          let data = await new Promise(resolve => {
 | 
						|
            content.window.addEventListener(
 | 
						|
              "message",
 | 
						|
              function (evt) {
 | 
						|
                info("oop iframe loaded");
 | 
						|
                is(evt.source, iframe.contentWindow);
 | 
						|
                resolve(evt.data);
 | 
						|
              },
 | 
						|
              { once: true }
 | 
						|
            );
 | 
						|
          });
 | 
						|
 | 
						|
          is(iframe.browsingContext.docShell, null, "Should be out-of-process");
 | 
						|
          is(
 | 
						|
            iframe.browsingContext.embedderElement,
 | 
						|
            iframe,
 | 
						|
            "correct embedder"
 | 
						|
          );
 | 
						|
 | 
						|
          return {
 | 
						|
            location: data.location,
 | 
						|
            browsingContextId: iframe.browsingContext.id,
 | 
						|
          };
 | 
						|
        }
 | 
						|
      );
 | 
						|
 | 
						|
      is(browser.browsingContext.children.length, 1);
 | 
						|
      if (Services.prefs.getBoolPref("fission.preserve_browsing_contexts")) {
 | 
						|
        is(
 | 
						|
          frameId,
 | 
						|
          oopinfo.browsingContextId,
 | 
						|
          `BrowsingContext should not have changed (${frameId} != ${oopinfo.browsingContextId})`
 | 
						|
        );
 | 
						|
      }
 | 
						|
      is(oopinfo.location, ORG_POSTMSG, "correct location");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await BrowserTestUtils.closeWindow(win);
 | 
						|
});
 |