chromium/third_party/blink/web_tests/fast/events/composition-event-source-device-event-sender.html

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<script src="../../resources/js-test.js"></script>
<input id="input" type="input">
<script type="text/javascript">
description('Test that composition events should have a sourceCapabilities and its firesTouchEvents should always be false.');

function compositionHandler() {
    debug(event.type);
    shouldBeNonNull("event.sourceCapabilities");
    shouldBeFalse("event.sourceCapabilities.firesTouchEvents");
}

if (window.eventSender) {
    for (var evt of ['compositionstart', 'compositionupdate', 'compositionend']) {
        document.addEventListener(evt, compositionHandler);
    }

    var input = document.getElementById('input');
    input.focus();

    // We need to force a text input update here so that later the call to
    // RenderWidget::resetInputMethod() will lead to finishComposingText().
    // Normally this would not be needed if the focus was due to user gesture.
    // But on Mac, even with user gesture, we wait for the next compositing
    // to update text input state frame. That is why we are explicitly calling
    // this method here.
    textInputController.forceTextInputStateUpdate();

    textInputController.setMarkedText('abcde', 1, 3);

    input.blur();
} else {
   debug('This test requires eventSender.');
}

</script>