chromium/third_party/blink/web_tests/fast/speechsynthesis/speech-synthesis-cancel.html

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test.js"></script>
</head>
<body id="body">

<div id="console"></div>

<script>

    description("This tests that cancelling a speech job fires the right events.");

    if (window.testRunner)
        testRunner.waitUntilDone();

    if (window.internals)
        internals.enableMockSpeechSynthesizer(window);

    window.jsTestIsAsync = true;

    var u = new SpeechSynthesisUtterance("this is a test");
    u.onstart = function(event) {
       debug("Speech started");
    }

    u.onerror = function(event) {
       debug("Speech error received because we cancelled and speech should no longer be pending.");
       shouldBeFalse("speechSynthesis.pending");
       finishJSTest();
    }

    // Queue the first job which will start speaking immediately.
    speechSynthesis.speak(u);

    // Make a few more jobs, so that when we cancel, it will clear the entire queue.
    var u2 = new SpeechSynthesisUtterance("this is a second test");
    speechSynthesis.speak(u2);

    // Make a few more jobs, so that when we cancel, it will clear the entire queue.
    var u3 = new SpeechSynthesisUtterance("this is a third test");
    speechSynthesis.speak(u3);

    // While we have two jobs, speech synthesis should report that it's pending.
    shouldBeTrue("speechSynthesis.pending");

    // Cancel speaking.
    setTimeout("speechSynthesis.cancel()", 1); 

</script>

</body>
</html>