forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			118 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
   http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
let contextMenu;
 | 
						|
 | 
						|
const example_base =
 | 
						|
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
 | 
						|
  "http://example.com/browser/browser/base/content/test/contextMenu/";
 | 
						|
const chrome_base =
 | 
						|
  "chrome://mochitests/content/browser/browser/base/content/test/contextMenu/";
 | 
						|
 | 
						|
/* import-globals-from contextmenu_common.js */
 | 
						|
Services.scriptloader.loadSubScript(
 | 
						|
  chrome_base + "contextmenu_common.js",
 | 
						|
  this
 | 
						|
);
 | 
						|
 | 
						|
async function openMenuAndPaste(browser, useFormatting) {
 | 
						|
  const kElementToUse = "test-contenteditable-spellcheck-false";
 | 
						|
  let oldText = await SpecialPowers.spawn(browser, [kElementToUse], elemID => {
 | 
						|
    return content.document.getElementById(elemID).textContent;
 | 
						|
  });
 | 
						|
 | 
						|
  // Open context menu and paste
 | 
						|
  await test_contextmenu(
 | 
						|
    "#" + kElementToUse,
 | 
						|
    [
 | 
						|
      "context-undo",
 | 
						|
      null, // whether we can undo changes mid-test.
 | 
						|
      "context-redo",
 | 
						|
      false,
 | 
						|
      "---",
 | 
						|
      null,
 | 
						|
      "context-cut",
 | 
						|
      false,
 | 
						|
      "context-copy",
 | 
						|
      false,
 | 
						|
      "context-paste",
 | 
						|
      true,
 | 
						|
      "context-paste-no-formatting",
 | 
						|
      true,
 | 
						|
      "context-delete",
 | 
						|
      false,
 | 
						|
      "context-selectall",
 | 
						|
      true,
 | 
						|
    ],
 | 
						|
    {
 | 
						|
      keepMenuOpen: true,
 | 
						|
    }
 | 
						|
  );
 | 
						|
  let popupHidden = BrowserTestUtils.waitForPopupEvent(contextMenu, "hidden");
 | 
						|
  let menuID = "context-paste" + (useFormatting ? "" : "-no-formatting");
 | 
						|
  contextMenu.activateItem(document.getElementById(menuID));
 | 
						|
  await popupHidden;
 | 
						|
  await SpecialPowers.spawn(
 | 
						|
    browser,
 | 
						|
    [kElementToUse, oldText, useFormatting],
 | 
						|
    (elemID, textToReset, expectStrong) => {
 | 
						|
      let node = content.document.getElementById(elemID);
 | 
						|
      Assert.stringContains(
 | 
						|
        node.textContent,
 | 
						|
        "Bold text",
 | 
						|
        "Text should have been pasted"
 | 
						|
      );
 | 
						|
      if (expectStrong) {
 | 
						|
        isnot(
 | 
						|
          node.querySelector("strong"),
 | 
						|
          null,
 | 
						|
          "Should be markup in the text."
 | 
						|
        );
 | 
						|
      } else {
 | 
						|
        is(
 | 
						|
          node.querySelector("strong"),
 | 
						|
          null,
 | 
						|
          "Should be no markup in the text."
 | 
						|
        );
 | 
						|
      }
 | 
						|
      node.textContent = textToReset;
 | 
						|
    }
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
add_task(async function test_contenteditable() {
 | 
						|
  // Put some HTML on the clipboard:
 | 
						|
  const xferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(
 | 
						|
    Ci.nsITransferable
 | 
						|
  );
 | 
						|
  xferable.init(null);
 | 
						|
  xferable.addDataFlavor("text/html");
 | 
						|
  xferable.setTransferData(
 | 
						|
    "text/html",
 | 
						|
    PlacesUtils.toISupportsString("<strong>Bold text</strong>")
 | 
						|
  );
 | 
						|
  xferable.addDataFlavor("text/plain");
 | 
						|
  xferable.setTransferData(
 | 
						|
    "text/plain",
 | 
						|
    PlacesUtils.toISupportsString("Bold text")
 | 
						|
  );
 | 
						|
  Services.clipboard.setData(
 | 
						|
    xferable,
 | 
						|
    null,
 | 
						|
    Services.clipboard.kGlobalClipboard
 | 
						|
  );
 | 
						|
 | 
						|
  let url = example_base + "subtst_contextmenu.html";
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    {
 | 
						|
      gBrowser,
 | 
						|
      url,
 | 
						|
    },
 | 
						|
    async function (browser) {
 | 
						|
      await openMenuAndPaste(browser, false);
 | 
						|
      await openMenuAndPaste(browser, true);
 | 
						|
    }
 | 
						|
  );
 | 
						|
});
 |