| Index: chrome/browser/chromeos/audio/audio_mixer_cras.cc | 
| diff --git a/chrome/browser/chromeos/audio/audio_mixer_cras.cc b/chrome/browser/chromeos/audio/audio_mixer_cras.cc | 
| index 17519ca5165d7bab7450d2e9082e9ea8691f97d1..eb9ff783c994e50cc330626b98df85f8fa3bb620 100644 | 
| --- a/chrome/browser/chromeos/audio/audio_mixer_cras.cc | 
| +++ b/chrome/browser/chromeos/audio/audio_mixer_cras.cc | 
| @@ -10,11 +10,11 @@ | 
|  | 
| #include "base/bind.h" | 
| #include "base/bind_helpers.h" | 
| +#include "base/callback.h" | 
| #include "base/logging.h" | 
| #include "base/message_loop.h" | 
| #include "base/threading/thread.h" | 
| #include "base/threading/thread_restrictions.h" | 
| -#include "chrome/browser/speech/extension_api/tts_extension_api_chromeos.h" | 
| #include "content/public/browser/browser_thread.h" | 
|  | 
| using content::BrowserThread; | 
| @@ -54,14 +54,16 @@ AudioMixerCras::~AudioMixerCras() { | 
| cras_client_destroy(client_); | 
| } | 
|  | 
| -void AudioMixerCras::Init() { | 
| +void AudioMixerCras::Init(const base::Closure& on_connected) { | 
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 
| DCHECK(!thread_.get()) << "Init() called twice"; | 
|  | 
| thread_.reset(new base::Thread("AudioMixerCras")); | 
| CHECK(thread_->Start()); | 
| thread_->message_loop()->PostTask( | 
| -      FROM_HERE, base::Bind(&AudioMixerCras::Connect, base::Unretained(this))); | 
| +      FROM_HERE, base::Bind(&AudioMixerCras::Connect, | 
| +                            base::Unretained(this), | 
| +                            on_connected)); | 
| } | 
|  | 
| double AudioMixerCras::GetVolumePercent() { | 
| @@ -139,7 +141,7 @@ void AudioMixerCras::SetCaptureMuteLocked(bool locked) { | 
| ApplyStateIfNeeded(); | 
| } | 
|  | 
| -void AudioMixerCras::Connect() { | 
| +void AudioMixerCras::Connect(const base::Closure& on_connected) { | 
| DCHECK(MessageLoop::current() == thread_->message_loop()); | 
|  | 
| // Create the client structure. | 
| @@ -149,18 +151,17 @@ void AudioMixerCras::Connect() { | 
| } | 
|  | 
| if (cras_client_connect(client_) != 0) { | 
| -    thread_->message_loop()->PostDelayedTask(FROM_HERE, | 
| -        base::Bind(&AudioMixerCras::Connect, base::Unretained(this)), | 
| +    thread_->message_loop()->PostDelayedTask( | 
| +        FROM_HERE, | 
| +        base::Bind(&AudioMixerCras::Connect, | 
| +                   base::Unretained(this), | 
| +                   on_connected), | 
| base::TimeDelta::FromSeconds(kConnectionRetrySleepSec)); | 
| return; | 
| } | 
| client_connected_ = true; | 
|  | 
| -  // The speech synthesis service shouldn't be initialized until after | 
| -  // we get to this point, so we call this function to tell it that it's | 
| -  // safe to do TTS now.  NotificationService would be cleaner, | 
| -  // but it's not available at this point. | 
| -  EnableChromeOsTts(); | 
| +  on_connected.Run(); | 
|  | 
| ApplyState(); | 
| } | 
|  |