From 20f8f25850664665318ef653f9e65b3ef9db826f Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Thu, 2 Jun 2016 20:32:46 +0200 Subject: [PATCH] Backed out changeset 5c995bbdfa3a (bug 1178738) --- dom/media/webspeech/synth/SpeechSynthesis.cpp | 25 +----- dom/media/webspeech/synth/SpeechSynthesis.h | 4 - dom/media/webspeech/synth/nsSpeechTask.cpp | 17 +--- dom/media/webspeech/synth/test/common.js | 6 -- .../synth/test/file_global_queue_cancel.html | 18 +--- .../synth/test/file_speech_cancel.html | 12 +-- .../test/file_speech_cancel_reentry.html | 87 ------------------- dom/media/webspeech/synth/test/mochitest.ini | 2 - .../test/test_speech_cancel_reentry.html | 35 -------- 9 files changed, 11 insertions(+), 195 deletions(-) delete mode 100644 dom/media/webspeech/synth/test/file_speech_cancel_reentry.html delete mode 100644 dom/media/webspeech/synth/test/test_speech_cancel_reentry.html diff --git a/dom/media/webspeech/synth/SpeechSynthesis.cpp b/dom/media/webspeech/synth/SpeechSynthesis.cpp index 8cff4506c1df..d9eed4f854ad 100644 --- a/dom/media/webspeech/synth/SpeechSynthesis.cpp +++ b/dom/media/webspeech/synth/SpeechSynthesis.cpp @@ -12,7 +12,6 @@ #include "mozilla/dom/Element.h" #include "mozilla/dom/SpeechSynthesisBinding.h" -#include "mozilla/dom/SpeechSynthesisErrorEvent.h" #include "SpeechSynthesis.h" #include "nsSynthVoiceRegistry.h" #include "nsIDocument.h" @@ -194,34 +193,13 @@ SpeechSynthesis::AdvanceQueue() return; } -void -SpeechSynthesis::DispatchToCanceledQueue() -{ - while (mCanceledQueue.Length()) { - RefPtr utterance = mCanceledQueue.ElementAt(0); - mCanceledQueue.RemoveElementAt(0); - - utterance->DispatchSpeechSynthesisErrorEvent( - 0, 0, SpeechSynthesisErrorCode::Canceled); - } -} - void SpeechSynthesis::Cancel() { - if (mCanceledQueue.IsEmpty()) { - mCanceledQueue.SwapElements(mSpeechQueue); - } else { - while (mSpeechQueue.Length()) { - mCanceledQueue.AppendElement(mSpeechQueue.ElementAt(0)); - mSpeechQueue.RemoveElementAt(0); - } - } + mSpeechQueue.Clear(); if (mCurrentTask) { mCurrentTask->Cancel(); - } else { - DispatchToCanceledQueue(); } } @@ -261,7 +239,6 @@ SpeechSynthesis::OnEnd(const nsSpeechTask* aTask) MOZ_ASSERT(mCurrentTask == aTask); mCurrentTask = nullptr; - DispatchToCanceledQueue(); AdvanceQueue(); } diff --git a/dom/media/webspeech/synth/SpeechSynthesis.h b/dom/media/webspeech/synth/SpeechSynthesis.h index 0e8db45f8020..5a0ea138bd49 100644 --- a/dom/media/webspeech/synth/SpeechSynthesis.h +++ b/dom/media/webspeech/synth/SpeechSynthesis.h @@ -70,14 +70,10 @@ private: void AdvanceQueue(); - void DispatchToCanceledQueue(); - bool HasVoices() const; nsTArray > mSpeechQueue; - nsTArray > mCanceledQueue; - RefPtr mCurrentTask; nsRefPtrHashtable mVoiceCache; diff --git a/dom/media/webspeech/synth/nsSpeechTask.cpp b/dom/media/webspeech/synth/nsSpeechTask.cpp index 21c90bd3f681..ac7734bd96d8 100644 --- a/dom/media/webspeech/synth/nsSpeechTask.cpp +++ b/dom/media/webspeech/synth/nsSpeechTask.cpp @@ -535,19 +535,10 @@ nsSpeechTask::DispatchErrorImpl(float aElapsedTime, uint32_t aCharIndex, uint32_ } RefPtr utterance = mUtterance; - SpeechSynthesisErrorCode err; - if (utterance->mState == SpeechSynthesisUtterance::STATE_PENDING && - aError == uint32_t(SpeechSynthesisErrorCode::Interrupted)) { - // If utterance never started the error should be "canceled" instead of - // "interrupted". - err = SpeechSynthesisErrorCode::Canceled; - utterance->mState = SpeechSynthesisUtterance::STATE_NONE; - } else { - err = SpeechSynthesisErrorCode(aError); - utterance->mState = SpeechSynthesisUtterance::STATE_ENDED; - } - - utterance->DispatchSpeechSynthesisErrorEvent(aCharIndex, aElapsedTime, err); + utterance->mState = (utterance->mState == SpeechSynthesisUtterance::STATE_SPEAKING) ? + SpeechSynthesisUtterance::STATE_ENDED : SpeechSynthesisUtterance::STATE_NONE; + utterance->DispatchSpeechSynthesisErrorEvent(aCharIndex, aElapsedTime, + SpeechSynthesisErrorCode(aError)); return NS_OK; } diff --git a/dom/media/webspeech/synth/test/common.js b/dom/media/webspeech/synth/test/common.js index d5f22429b183..a7ca34c7bcfa 100644 --- a/dom/media/webspeech/synth/test/common.js +++ b/dom/media/webspeech/synth/test/common.js @@ -89,10 +89,4 @@ function testSynthState(win, expectedState) { is(win.speechSynthesis[attr], expectedState[attr], win.document.title + ": '" + attr + '" does not match'); } -} - -function synthEventPromise(utterance, eventType) { - return new Promise(resolve => { - utterance.addEventListener(eventType, resolve); - }); } \ No newline at end of file diff --git a/dom/media/webspeech/synth/test/file_global_queue_cancel.html b/dom/media/webspeech/synth/test/file_global_queue_cancel.html index 363c11cdc7a2..b73e91894c7e 100644 --- a/dom/media/webspeech/synth/test/file_global_queue_cancel.html +++ b/dom/media/webspeech/synth/test/file_global_queue_cancel.html @@ -50,25 +50,17 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1188099 SpecialPowers.wrap(win1.speechSynthesis).forceEnd(); }); - - var error4 = synthEventPromise(utterance4, 'error').then(isCanceled); - var error5 = synthEventPromise(utterance5, 'error').then(isCanceled); - - var end1 = synthEventPromise(utterance1, 'end').then(() => { + utterance1.addEventListener('end', function(e) { is(eventOrder.shift(), 'end1', 'end1'); testSynthState(win1, { pending: true }); testSynthState(win2, { pending: false }); }); - - var start2 = synthEventPromise(utterance2, 'start').then(() => { + utterance2.addEventListener('start', function(e) { is(eventOrder.shift(), 'start2', 'start2'); testSynthState(win1, { speaking: true, pending: true }); testSynthState(win2, { speaking: true, pending: false }); + win1.speechSynthesis.cancel(); }); - - Promise.all([error4, error5, end1, start2]).then( - () => win1.speechSynthesis.cancel()); - utterance2.addEventListener('error', function(e) { is(eventOrder.shift(), 'error2', 'error2'); testSynthState(win1, { speaking: false, pending: false }); @@ -80,10 +72,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1188099 ok(false, 'This shall not be uttered: "' + e.target.text + '"'); } - function isCanceled(e) { - is(e.error, "canceled", "Utterance was canceled: " + e.target.text); - } - utterance3.addEventListener('start', wrongUtterance); utterance4.addEventListener('start', wrongUtterance); utterance5.addEventListener('start', wrongUtterance); diff --git a/dom/media/webspeech/synth/test/file_speech_cancel.html b/dom/media/webspeech/synth/test/file_speech_cancel.html index ba0bd5980389..ff8980afb434 100644 --- a/dom/media/webspeech/synth/test/file_speech_cancel.html +++ b/dom/media/webspeech/synth/test/file_speech_cancel.html @@ -44,16 +44,11 @@ function testFunc(done_cb) { utterance.addEventListener('start', function(e) { ok(true, 'start utterance 1'); speechSynthesis.cancel(); + info('cancel!'); + speechSynthesis.speak(utterance2); + info('speak??'); }); - var utterance_never = new SpeechSynthesisUtterance("I never get uttered"); - var promise_cancelled = synthEventPromise(utterance_never, "error").then( - e => is(e.error, "canceled", "utterance was canceled")); - var promise_interrupted = synthEventPromise(utterance, "error").then( - e => is(e.error, "interrupted", "utterance was interrupted")); - Promise.all([promise_cancelled, promise_interrupted]).then( - () => speechSynthesis.speak(utterance2)); - var utterance2 = new SpeechSynthesisUtterance("Proin ornare neque vitae " + "risus mattis rutrum. Suspendisse a velit ut est convallis aliquet." + "Nullam ante elit, malesuada vel luctus rutrum, ultricies nec libero." + @@ -88,7 +83,6 @@ function testFunc(done_cb) { speechSynthesis.resume(); speechSynthesis.speak(utterance); - speechSynthesis.speak(utterance_never); ok(!speechSynthesis.speaking, "speechSynthesis is not speaking yet."); ok(speechSynthesis.pending, "speechSynthesis has an utterance queued."); } diff --git a/dom/media/webspeech/synth/test/file_speech_cancel_reentry.html b/dom/media/webspeech/synth/test/file_speech_cancel_reentry.html deleted file mode 100644 index cddada2194c5..000000000000 --- a/dom/media/webspeech/synth/test/file_speech_cancel_reentry.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - Test for Bug 1178738: Make sure cancel is reentrant - - - - -Mozilla Bug 1178738 -

- -
-
-
- - diff --git a/dom/media/webspeech/synth/test/mochitest.ini b/dom/media/webspeech/synth/test/mochitest.ini index 0d95cc64aafd..f27cd4e1b22b 100644 --- a/dom/media/webspeech/synth/test/mochitest.ini +++ b/dom/media/webspeech/synth/test/mochitest.ini @@ -8,7 +8,6 @@ support-files = file_speech_queue.html file_speech_simple.html file_speech_cancel.html - file_speech_cancel_reentry.html file_speech_error.html file_indirect_service_events.html file_global_queue.html @@ -19,7 +18,6 @@ support-files = [test_speech_queue.html] [test_speech_simple.html] [test_speech_cancel.html] -[test_speech_cancel_reentry.html] [test_speech_error.html] [test_indirect_service_events.html] [test_global_queue.html] diff --git a/dom/media/webspeech/synth/test/test_speech_cancel_reentry.html b/dom/media/webspeech/synth/test/test_speech_cancel_reentry.html deleted file mode 100644 index 3f2a1708c238..000000000000 --- a/dom/media/webspeech/synth/test/test_speech_cancel_reentry.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - Test for Bug 1178738: Make sure cancel is reentrant - - - - - -Mozilla Bug 1178738 -

- - -
-
-
- -