Bug 1721317 - part 2: Make _pasteToTargetElement() sync r=m_kato

The function tests whether `input` event whose `inputType` is `insertFromPaste`
or not and it waits the event until timeout.  This sometimes fails in my
environment, and `input` event should be fired synchronously in this case.
Therefore, it should just fail if the event isn't fired.

Depends on D120424

Differential Revision: https://phabricator.services.mozilla.com/D120425
This commit is contained in:
Masayuki Nakano 2021-07-21 23:22:04 +00:00
parent e21daf33c3
commit dbc4e0135e

View file

@ -110,7 +110,7 @@
} }
await this._copyToClipboard(expectedPastedHTML); await this._copyToClipboard(expectedPastedHTML);
await this._pasteToTargetElement(); this._pasteToTargetElement();
const targetElement = document.getElementById(kTargetElementId); const targetElement = document.getElementById(kTargetElementId);
is(targetElement.children.length, 1, is(targetElement.children.length, 1,
@ -284,31 +284,34 @@
() => synthesizeKey("c", { accelKey: true } /* aEvent*/), flavor); () => synthesizeKey("c", { accelKey: true } /* aEvent*/), flavor);
} }
async _pasteToTargetElement() { _pasteToTargetElement() {
const promiseTargetElementChanged = new Promise(resolve => { const editingHost = (this._editabilityMode ==
const editingHost = (this._editabilityMode == kEditabilityModeContenteditable) ?
kEditabilityModeContenteditable) ? document.getElementById(kTargetElementId) :
document.getElementById(kTargetElementId) : document;
document;
function handleInputEvent(aEvent) { let inputEvent;
if (aEvent.inputType == kInputEventInputTypeInsertFromPaste) { function handleInputEvent(aEvent) {
editingHost.removeEventListener(kInputEventType, handleInputEvent); if (aEvent.inputType == kInputEventInputTypeInsertFromPaste) {
SimpleTest.info( editingHost.removeEventListener(kInputEventType, handleInputEvent);
'Listened to an "' + kInputEventInputTypeInsertFromPaste + '" "' SimpleTest.info(
+ kInputEventType + ' event.'); 'Listened to an "' + kInputEventInputTypeInsertFromPaste + '" "'
resolve(); + kInputEventType + ' event.');
} inputEvent = aEvent;
} }
editingHost.addEventListener(kInputEventType, handleInputEvent); }
}); editingHost.addEventListener(kInputEventType, handleInputEvent);
const targetElement = document.getElementById(kTargetElementId); const targetElement = document.getElementById(kTargetElementId);
synthesizeMouseAtCenter(targetElement, {}); synthesizeMouseAtCenter(targetElement, {});
synthesizeKey("v", { accelKey: true } /* aEvent */); synthesizeKey("v", { accelKey: true } /* aEvent */);
info("Waiting for paste..."); ok(
await promiseTargetElementChanged; inputEvent != undefined,
`An ${kInputEventType} whose "inputType" is ${
kInputEventInputTypeInsertFromPaste
} should've been fired on ${editingHost.localName}`
);
} }
} }