forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 * Test that following a link with a scheme that opens externally (like
 | 
						|
 * irc:) does not blank the page (Bug 1630757).
 | 
						|
 */
 | 
						|
 | 
						|
const { HandlerServiceTestUtils } = ChromeUtils.importESModule(
 | 
						|
  "resource://testing-common/HandlerServiceTestUtils.sys.mjs"
 | 
						|
);
 | 
						|
 | 
						|
let gHandlerService = Cc["@mozilla.org/uriloader/handler-service;1"].getService(
 | 
						|
  Ci.nsIHandlerService
 | 
						|
);
 | 
						|
 | 
						|
let Pages = [httpURL("dummy_page.html"), fileURL("dummy_page.html")];
 | 
						|
 | 
						|
/**
 | 
						|
 * Creates dummy protocol handler
 | 
						|
 */
 | 
						|
function initTestHandlers() {
 | 
						|
  let handlerInfo =
 | 
						|
    HandlerServiceTestUtils.getBlankHandlerInfo("test-proto://");
 | 
						|
 | 
						|
  let appHandler = Cc[
 | 
						|
    "@mozilla.org/uriloader/local-handler-app;1"
 | 
						|
  ].createInstance(Ci.nsILocalHandlerApp);
 | 
						|
  // This is a dir and not executable, but that's enough for here.
 | 
						|
  appHandler.executable = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
 | 
						|
  handlerInfo.possibleApplicationHandlers.appendElement(appHandler);
 | 
						|
  handlerInfo.preferredApplicationHandler = appHandler;
 | 
						|
  handlerInfo.preferredAction = handlerInfo.useHelperApp;
 | 
						|
  handlerInfo.alwaysAskBeforeHandling = false;
 | 
						|
  gHandlerService.store(handlerInfo);
 | 
						|
 | 
						|
  registerCleanupFunction(() => {
 | 
						|
    gHandlerService.remove(handlerInfo);
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
async function runTest() {
 | 
						|
  initTestHandlers();
 | 
						|
 | 
						|
  for (let page of Pages) {
 | 
						|
    await BrowserTestUtils.withNewTab(page, async function (aBrowser) {
 | 
						|
      await SpecialPowers.spawn(aBrowser, [], async () => {
 | 
						|
        let h = content.document.createElement("h1");
 | 
						|
        ok(h);
 | 
						|
        h.innerHTML = "My heading";
 | 
						|
        h.id = "my-heading";
 | 
						|
        content.document.body.append(h);
 | 
						|
        is(content.document.getElementById("my-heading"), h, "h exists");
 | 
						|
 | 
						|
        let a = content.document.createElement("a");
 | 
						|
        ok(a);
 | 
						|
        a.innerHTML = "my link";
 | 
						|
        a.id = "my-link";
 | 
						|
        content.document.body.append(a);
 | 
						|
      });
 | 
						|
 | 
						|
      await SpecialPowers.spawn(aBrowser, [], async () => {
 | 
						|
        let url = "test-proto://some-thing";
 | 
						|
 | 
						|
        let a = content.document.getElementById("my-link");
 | 
						|
        ok(a);
 | 
						|
        a.href = url;
 | 
						|
        a.click();
 | 
						|
      });
 | 
						|
 | 
						|
      await SpecialPowers.spawn(aBrowser, [], async () => {
 | 
						|
        ok(
 | 
						|
          content.document.getElementById("my-heading"),
 | 
						|
          "Page contents not erased"
 | 
						|
        );
 | 
						|
      });
 | 
						|
    });
 | 
						|
  }
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
}
 | 
						|
 | 
						|
add_task(runTest);
 |