| Index: chrome/browser/speech/tts_win.cc | 
| diff --git a/chrome/browser/speech/tts_win.cc b/chrome/browser/speech/tts_win.cc | 
| index 06a16f599d75141a77504ebbb6a1b94741065339..bfa28743165922a524b03ccb4c98f1eb0717e572 100644 | 
| --- a/chrome/browser/speech/tts_win.cc | 
| +++ b/chrome/browser/speech/tts_win.cc | 
| @@ -28,6 +28,10 @@ class TtsPlatformImplWin : public TtsPlatformImpl { | 
|  | 
| virtual bool StopSpeaking(); | 
|  | 
| +  virtual void Pause(); | 
| + | 
| +  virtual void Resume(); | 
| + | 
| virtual bool IsSpeaking(); | 
|  | 
| virtual void GetVoices(std::vector<VoiceData>* out_voices) OVERRIDE; | 
| @@ -51,6 +55,7 @@ class TtsPlatformImplWin : public TtsPlatformImpl { | 
| int prefix_len_; | 
| ULONG stream_number_; | 
| int char_position_; | 
| +  bool paused_; | 
|  | 
| friend struct DefaultSingletonTraits<TtsPlatformImplWin>; | 
|  | 
| @@ -125,10 +130,32 @@ bool TtsPlatformImplWin::StopSpeaking() { | 
| // Stop speech by speaking the empty string with the purge flag. | 
| speech_synthesizer_->Speak(L"", SPF_ASYNC | SPF_PURGEBEFORESPEAK, NULL); | 
| } | 
| +    if (paused_) { | 
| +      speech_synthesizer_->Resume(); | 
| +      paused_ = false; | 
| +    } | 
| } | 
| return true; | 
| } | 
|  | 
| +void TtsPlatformImplWin::Pause() { | 
| +  if (speech_synthesizer_.get() && utterance_id_ && !paused_) { | 
| +    speech_synthesizer_->Pause(); | 
| +    paused_ = true; | 
| +    TtsController::GetInstance()->OnTtsEvent( | 
| +        utterance_id_, TTS_EVENT_PAUSE, char_position_, ""); | 
| +  } | 
| +} | 
| + | 
| +void TtsPlatformImplWin::Resume() { | 
| +  if (speech_synthesizer_.get() && utterance_id_ && paused_) { | 
| +    speech_synthesizer_->Resume(); | 
| +    paused_ = false; | 
| +    TtsController::GetInstance()->OnTtsEvent( | 
| +        utterance_id_, TTS_EVENT_RESUME, char_position_, ""); | 
| +  } | 
| +} | 
| + | 
| bool TtsPlatformImplWin::IsSpeaking() { | 
| if (speech_synthesizer_.get()) { | 
| SPVOICESTATUS status; | 
| @@ -156,6 +183,8 @@ void TtsPlatformImplWin::GetVoices( | 
| voice.events.insert(TTS_EVENT_MARKER); | 
| voice.events.insert(TTS_EVENT_WORD); | 
| voice.events.insert(TTS_EVENT_SENTENCE); | 
| +  voice.events.insert(TTS_EVENT_PAUSE); | 
| +  voice.events.insert(TTS_EVENT_RESUME); | 
| } | 
|  | 
| void TtsPlatformImplWin::OnSpeechEvent() { | 
| @@ -199,7 +228,8 @@ TtsPlatformImplWin::TtsPlatformImplWin() | 
| : utterance_id_(0), | 
| prefix_len_(0), | 
| stream_number_(0), | 
| -    char_position_(0) { | 
| +    char_position_(0), | 
| +    paused_(false) { | 
| speech_synthesizer_.CreateInstance(CLSID_SpVoice); | 
| if (speech_synthesizer_.get()) { | 
| ULONGLONG event_mask = | 
|  |