Chromium Code Reviews| Index: chrome/renderer/pepper_plugin_delegate_impl.cc |
| =================================================================== |
| --- chrome/renderer/pepper_plugin_delegate_impl.cc (revision 67163) |
| +++ chrome/renderer/pepper_plugin_delegate_impl.cc (working copy) |
| @@ -123,10 +123,12 @@ |
| class PlatformAudioImpl |
| : public pepper::PluginDelegate::PlatformAudio, |
| - public AudioMessageFilter::Delegate { |
| + public AudioMessageFilter::Delegate, |
| + public base::RefCountedThreadSafe<PlatformAudioImpl> { |
| public: |
| explicit PlatformAudioImpl(scoped_refptr<AudioMessageFilter> filter) |
| - : client_(NULL), filter_(filter), stream_id_(0) { |
| + : client_(NULL), filter_(filter), stream_id_(0), |
| + main_message_loop_(MessageLoop::current()) { |
| DCHECK(filter_); |
| } |
| @@ -177,6 +179,8 @@ |
| // Our ID on the MessageFilter. |
| int32 stream_id_; |
| + MessageLoop* main_message_loop_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(PlatformAudioImpl); |
| }; |
| @@ -297,7 +301,15 @@ |
| #endif |
| DCHECK(length); |
| - client_->StreamCreated(handle, length, socket_handle); |
| + if (MessageLoop::current() == main_message_loop_) { |
| + if (client_) { |
| + client_->StreamCreated(handle, length, socket_handle); |
| + } |
| + } else { |
| + main_message_loop_->PostTask(FROM_HERE, |
| + NewRunnableMethod(this, &PlatformAudioImpl::OnLowLatencyCreated, |
| + handle, socket_handle, length)); |
| + } |
| } |
| void PlatformAudioImpl::ShutDown() { |
| @@ -309,6 +321,9 @@ |
| filter_->RemoveDelegate(stream_id_); |
| stream_id_ = 0; |
| client_ = NULL; |
| + // Release on the IO thread so that we avoid race problems with |
|
darin (slow to review)
2010/11/24 20:34:35
As Brett commented on the other file, please put a
nfullagar
2010/11/24 23:01:05
Done.
|
| + // OnLowLatencyCreated. |
| + filter_->message_loop()->ReleaseSoon(FROM_HERE, this); |
| } |
| // Implements the VideoDecoder. |
| @@ -560,7 +575,7 @@ |
| pepper::PluginDelegate::PlatformAudio* PepperPluginDelegateImpl::CreateAudio( |
| uint32_t sample_rate, uint32_t sample_count, |
| pepper::PluginDelegate::PlatformAudio::Client* client) { |
| - scoped_ptr<PlatformAudioImpl> audio( |
| + scoped_refptr<PlatformAudioImpl> audio( |
| new PlatformAudioImpl(render_view_->audio_message_filter())); |
| if (audio->Initialize(sample_rate, sample_count, client)) { |
| return audio.release(); |
|
darin (slow to review)
2010/11/24 20:34:35
I recommend inserting a comment here indicating th
nfullagar
2010/11/24 23:01:05
Done.
|