| Index: Source/modules/speech/SpeechSynthesis.cpp | 
| diff --git a/Source/modules/speech/SpeechSynthesis.cpp b/Source/modules/speech/SpeechSynthesis.cpp | 
| index b12f14619b8048908e88318e40bf5c326eba2353..c2b7f5da90030b279a84ffd29bdba2532fb48cb1 100644 | 
| --- a/Source/modules/speech/SpeechSynthesis.cpp | 
| +++ b/Source/modules/speech/SpeechSynthesis.cpp | 
| @@ -27,6 +27,7 @@ | 
| #include "modules/speech/SpeechSynthesis.h" | 
|  | 
| #include "bindings/v8/ExceptionState.h" | 
| +#include "core/dom/ExecutionContext.h" | 
| #include "core/platform/PlatformSpeechSynthesisVoice.h" | 
| #include "core/platform/PlatformSpeechSynthesizer.h" | 
| #include "modules/speech/SpeechSynthesisEvent.h" | 
| @@ -35,13 +36,14 @@ | 
|  | 
| namespace WebCore { | 
|  | 
| -PassRefPtr<SpeechSynthesis> SpeechSynthesis::create() | 
| +PassRefPtr<SpeechSynthesis> SpeechSynthesis::create(ExecutionContext* context) | 
| { | 
| -    return adoptRef(new SpeechSynthesis()); | 
| +    return adoptRef(new SpeechSynthesis(context)); | 
| } | 
|  | 
| -SpeechSynthesis::SpeechSynthesis() | 
| -    : m_platformSpeechSynthesizer(PlatformSpeechSynthesizer::create(this)) | 
| +SpeechSynthesis::SpeechSynthesis(ExecutionContext* context) | 
| +    : ContextLifecycleObserver(context) | 
| +    , m_platformSpeechSynthesizer(PlatformSpeechSynthesizer::create(this)) | 
| , m_currentSpeechUtterance(0) | 
| , m_isPaused(false) | 
| { | 
| @@ -53,9 +55,16 @@ void SpeechSynthesis::setPlatformSynthesizer(PassOwnPtr<PlatformSpeechSynthesize | 
| m_platformSpeechSynthesizer = synthesizer; | 
| } | 
|  | 
| +ExecutionContext* SpeechSynthesis::executionContext() const | 
| +{ | 
| +    return ContextLifecycleObserver::executionContext(); | 
| +} | 
| + | 
| void SpeechSynthesis::voicesDidChange() | 
| { | 
| m_voiceList.clear(); | 
| +    if (!executionContext()->activeDOMObjectsAreStopped()) | 
| +        dispatchEvent(Event::create(EventTypeNames::voiceschanged)); | 
| } | 
|  | 
| const Vector<RefPtr<SpeechSynthesisVoice> >& SpeechSynthesis::getVoices() | 
| @@ -142,7 +151,8 @@ void SpeechSynthesis::resume() | 
|  | 
| void SpeechSynthesis::fireEvent(const AtomicString& type, SpeechSynthesisUtterance* utterance, unsigned long charIndex, const String& name) | 
| { | 
| -    utterance->dispatchEvent(SpeechSynthesisEvent::create(type, charIndex, (currentTime() - utterance->startTime()), name)); | 
| +    if (!executionContext()->activeDOMObjectsAreStopped()) | 
| +        utterance->dispatchEvent(SpeechSynthesisEvent::create(type, charIndex, (currentTime() - utterance->startTime()), name)); | 
| } | 
|  | 
| void SpeechSynthesis::handleSpeakingCompleted(SpeechSynthesisUtterance* utterance, bool errorOccurred) | 
| @@ -214,4 +224,9 @@ void SpeechSynthesis::speakingErrorOccurred(PassRefPtr<PlatformSpeechSynthesisUt | 
| handleSpeakingCompleted(static_cast<SpeechSynthesisUtterance*>(utterance->client()), true); | 
| } | 
|  | 
| +const AtomicString& SpeechSynthesis::interfaceName() const | 
| +{ | 
| +    return EventTargetNames::SpeechSynthesisUtterance; | 
| +} | 
| + | 
| } // namespace WebCore | 
|  |