forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			98 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
   http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
function dummyPageURL(domain, query = "") {
 | 
						|
  return (
 | 
						|
    getRootDirectory(gTestPath).replace(
 | 
						|
      "chrome://mochitests/content",
 | 
						|
      `https://${domain}`
 | 
						|
    ) +
 | 
						|
    "dummy_page.html" +
 | 
						|
    query
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
async function openContextMenu(browser) {
 | 
						|
  let contextMenu = document.getElementById("contentAreaContextMenu");
 | 
						|
  let awaitPopupShown = BrowserTestUtils.waitForEvent(
 | 
						|
    contextMenu,
 | 
						|
    "popupshown"
 | 
						|
  );
 | 
						|
  await BrowserTestUtils.synthesizeMouse(
 | 
						|
    "body",
 | 
						|
    1,
 | 
						|
    1,
 | 
						|
    {
 | 
						|
      type: "contextmenu",
 | 
						|
      button: 2,
 | 
						|
    },
 | 
						|
    browser
 | 
						|
  );
 | 
						|
  await awaitPopupShown;
 | 
						|
}
 | 
						|
 | 
						|
async function closeContextMenu() {
 | 
						|
  let contextMenu = document.getElementById("contentAreaContextMenu");
 | 
						|
  let awaitPopupHidden = BrowserTestUtils.waitForEvent(
 | 
						|
    contextMenu,
 | 
						|
    "popuphidden"
 | 
						|
  );
 | 
						|
  contextMenu.hidePopup();
 | 
						|
  await awaitPopupHidden;
 | 
						|
}
 | 
						|
 | 
						|
async function testWithDomain(domain) {
 | 
						|
  // Passing a query to make sure the next load is never a same-document
 | 
						|
  // navigation.
 | 
						|
  let dummy = dummyPageURL("example.org", "?start");
 | 
						|
  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, dummy);
 | 
						|
  let browser = tab.linkedBrowser;
 | 
						|
 | 
						|
  let sel = await SpecialPowers.spawn(browser, [], function() {
 | 
						|
    let sel = content.getSelection();
 | 
						|
    sel.removeAllRanges();
 | 
						|
    sel.selectAllChildren(content.document.body);
 | 
						|
    return sel.toString();
 | 
						|
  });
 | 
						|
 | 
						|
  await openContextMenu(browser);
 | 
						|
 | 
						|
  let copyItem = document.getElementById("context-copy");
 | 
						|
  ok(!copyItem.disabled, "Copy item should be enabled if text is selected.");
 | 
						|
 | 
						|
  await closeContextMenu();
 | 
						|
 | 
						|
  let loaded = BrowserTestUtils.browserLoaded(browser, false, null, true);
 | 
						|
  BrowserTestUtils.loadURI(browser, dummyPageURL(domain));
 | 
						|
  await loaded;
 | 
						|
  loaded = BrowserTestUtils.waitForLocationChange(gBrowser, dummy);
 | 
						|
  browser.goBack();
 | 
						|
  await loaded;
 | 
						|
 | 
						|
  let sel2 = await SpecialPowers.spawn(browser, [], function() {
 | 
						|
    return content.getSelection().toString();
 | 
						|
  });
 | 
						|
  is(sel, sel2, "Selection should remain when coming out of BFCache.");
 | 
						|
 | 
						|
  await openContextMenu(browser);
 | 
						|
 | 
						|
  ok(!copyItem.disabled, "Copy item should be enabled if text is selected.");
 | 
						|
 | 
						|
  await closeContextMenu();
 | 
						|
 | 
						|
  await BrowserTestUtils.removeTab(tab);
 | 
						|
}
 | 
						|
 | 
						|
add_task(async function testValidSameOrigin() {
 | 
						|
  await testWithDomain("example.org");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testValidCrossOrigin() {
 | 
						|
  await testWithDomain("example.com");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testInvalid() {
 | 
						|
  await testWithDomain("this.is.invalid");
 | 
						|
});
 |