Commit 859144ba authored by Masayuki Nakano's avatar Masayuki Nakano
Browse files

Bug 1832710 - Make `EditorBase::DispatchClipboardEventAndUpdateClipboard`...

Bug 1832710 - Make `EditorBase::DispatchClipboardEventAndUpdateClipboard` handle `ePasteNoFormatting` event message r=m_kato

Just a mistake, it should treat `ePasteNoFormatting` as an equivalent of `ePaste`.

Differential Revision: https://phabricator.services.mozilla.com/D177988
parent da8a8f31
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1584,7 +1584,9 @@ EditorBase::DispatchClipboardEventAndUpdateClipboard(EventMessage aEventMessage,
                                                     int32_t aClipboardType) {
  MOZ_ASSERT(IsEditActionDataAvailable());

  if (aEventMessage == ePaste) {
  const bool isPasting =
      aEventMessage == ePaste || aEventMessage == ePasteNoFormatting;
  if (isPasting) {
    CommitComposition();
    if (NS_WARN_IF(Destroyed())) {
      return Err(NS_ERROR_EDITOR_DESTROYED);
@@ -1623,7 +1625,7 @@ EditorBase::DispatchClipboardEventAndUpdateClipboard(EventMessage aEventMessage,
  // If we handle a "paste" and nsCopySupport::FireClipboardEvent sets
  // actionTaken to "false" means that it's an error.  Otherwise, the "paste"
  // event is just canceled.
  if (aEventMessage == ePaste) {
  if (isPasting) {
    return actionTaken ? ClipboardEventResult::DefaultPreventedOfPaste
                       : ClipboardEventResult::IgnoredOrError;
  }
+33 −4
Original line number Diff line number Diff line
@@ -47,11 +47,31 @@ const isHeadless = await SpecialPowers.spawnChrome([], () => {
    return inputEventPromise;
  }

  function cancelEvent(event) {
    event.preventDefault();
  }

  // Paste into input and textarea
  for (let fieldid of ["input", "textarea"]) {
    let field = document.getElementById(fieldid);
    const field = document.getElementById(fieldid);
    field.focus();

    field.addEventListener("paste", cancelEvent);
    doKey(field, false);
    is(
      field.value,
      "",
      `Nothing should be pasted into <${field.tagName.toLowerCase()}> when paste event is canceled (shift key is not pressed)`
    );

    doKey(field, true);
    is(
      field.value,
      "",
      `Nothing should be pasted into <${field.tagName.toLowerCase()}> when paste event is canceled (shift key is pressed)`
    );
    field.removeEventListener("paste", cancelEvent);

    doKey(field, false);
    is(field.value, expectedText, "paste into " + fieldid);

@@ -67,6 +87,15 @@ const isHeadless = await SpecialPowers.spawnChrome([], () => {
  (function test_pasteWithFormatIntoEditableArea() {
    selection.selectAllChildren(editable);
    selection.collapseToStart();
    editable.addEventListener("paste", cancelEvent);
    doKey(editable, false);
    is(
      editable.innerHTML,
      "",
      "test_pasteWithFormatIntoEditableArea: Nothing should be pasted when paste event is canceled"
    );
    editable.removeEventListener("paste", cancelEvent);

    doKey(editable, false);
    is(
      editable.innerHTML,