| Index: Source/modules/speech/SpeechSynthesis.cpp
|
| diff --git a/Source/modules/speech/SpeechSynthesis.cpp b/Source/modules/speech/SpeechSynthesis.cpp
|
| index 35560788f0929cb1f0307052ee753fe826cbc619..7393a91c45acddd9ad3dcbe6a786c66bc1c15119 100644
|
| --- a/Source/modules/speech/SpeechSynthesis.cpp
|
| +++ b/Source/modules/speech/SpeechSynthesis.cpp
|
| @@ -34,9 +34,9 @@
|
|
|
| namespace WebCore {
|
|
|
| -SpeechSynthesis* SpeechSynthesis::create(ExecutionContext* context)
|
| -{
|
| - return adoptRefCountedGarbageCollected(new SpeechSynthesis(context));
|
| +PassRefPtrWillBeRawPtr<SpeechSynthesis> SpeechSynthesis::create(ExecutionContext* context)
|
| +{
|
| + return adoptRefWillBeRefCountedGarbageCollected(new SpeechSynthesis(context));
|
| }
|
|
|
| SpeechSynthesis::SpeechSynthesis(ExecutionContext* context)
|
| @@ -64,7 +64,7 @@
|
| dispatchEvent(Event::create(EventTypeNames::voiceschanged));
|
| }
|
|
|
| -const HeapVector<Member<SpeechSynthesisVoice> >& SpeechSynthesis::getVoices()
|
| +const WillBeHeapVector<RefPtrWillBeMember<SpeechSynthesisVoice> >& SpeechSynthesis::getVoices()
|
| {
|
| if (m_voiceList.size())
|
| return m_voiceList;
|
| @@ -152,6 +152,10 @@
|
| void SpeechSynthesis::handleSpeakingCompleted(SpeechSynthesisUtterance* utterance, bool errorOccurred)
|
| {
|
| ASSERT(utterance);
|
| +
|
| + // Keep the utterance around long enough to fire an event on it in case m_utteranceQueue
|
| + // is holding the last reference to it.
|
| + RefPtrWillBeRawPtr<SpeechSynthesisUtterance> protect(utterance);
|
|
|
| bool didJustFinishCurrentUtterance = false;
|
| // If the utterance that completed was the one we're currently speaking,
|
|
|