Index: content/renderer/pepper/pepper_platform_audio_input_impl.cc |
=================================================================== |
--- content/renderer/pepper/pepper_platform_audio_input_impl.cc (revision 186213) |
+++ content/renderer/pepper/pepper_platform_audio_input_impl.cc (working copy) |
@@ -64,17 +64,10 @@ |
} |
void PepperPlatformAudioInputImpl::OnStreamCreated( |
- base::SharedMemoryHandle handle, |
base::SyncSocket::Handle socket_handle, |
- int length) { |
-#if defined(OS_WIN) |
- DCHECK(handle); |
- DCHECK(socket_handle); |
-#else |
- DCHECK_NE(-1, handle.fd); |
- DCHECK_NE(-1, socket_handle); |
-#endif |
- DCHECK(length); |
+ int total_handles) { |
+ DCHECK_NE(socket_handle, base::SyncSocket::kInvalidHandle); |
+ DCHECK_EQ(total_handles, 1); |
if (base::MessageLoopProxy::current() != main_message_loop_proxy_) { |
// No need to check |shutdown_called_| here. If shutdown has occurred, |
@@ -83,15 +76,42 @@ |
main_message_loop_proxy_->PostTask( |
FROM_HERE, |
base::Bind(&PepperPlatformAudioInputImpl::OnStreamCreated, this, |
- handle, socket_handle, length)); |
+ socket_handle, total_handles)); |
} else { |
// Must dereference the client only on the main thread. Shutdown may have |
// occurred while the request was in-flight, so we need to NULL check. |
if (client_) { |
- client_->StreamCreated(handle, length, socket_handle); |
+ socket_handle_ = socket_handle; |
} else { |
// Clean up the handles. |
base::SyncSocket temp_socket(socket_handle); |
+ } |
+ } |
+} |
+ |
+void PepperPlatformAudioInputImpl::OnSharedMemoryCreated( |
+ base::SharedMemoryHandle handle, |
+ int length, |
+ int index) { |
+ DCHECK(base::SharedMemory::IsHandleValid(handle)); |
+ DCHECK(length); |
+ DCHECK_NE(socket_handle_, base::SyncSocket::kInvalidHandle); |
+ |
+ if (base::MessageLoopProxy::current() != main_message_loop_proxy_) { |
+ // No need to check |shutdown_called_| here. If shutdown has occurred, |
+ // |client_| will be NULL and the handles will be cleaned up on the main |
+ // thread. |
+ main_message_loop_proxy_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&PepperPlatformAudioInputImpl::OnSharedMemoryCreated, this, |
+ handle, length, index)); |
+ } else { |
+ // Must dereference the client only on the main thread. Shutdown may have |
+ // occurred while the request was in-flight, so we need to NULL check. |
+ if (client_) { |
+ client_->StreamCreated(handle, length, socket_handle_); |
+ } else { |
+ // Clean up the handles. |
base::SharedMemory temp_shared_memory(handle, false); |
} |
} |
@@ -117,7 +137,7 @@ |
this)); |
} else { |
// We will be notified by OnStreamCreated(). |
- ipc_->CreateStream(stream_id_, params_, device_id, false); |
+ ipc_->CreateStream(stream_id_, params_, device_id, false, 1); |
} |
} |
@@ -139,6 +159,7 @@ |
PepperPlatformAudioInputImpl::PepperPlatformAudioInputImpl() |
: client_(NULL), |
+ socket_handle_(base::SyncSocket::kInvalidHandle), |
stream_id_(0), |
render_view_id_(MSG_ROUTING_NONE), |
main_message_loop_proxy_(base::MessageLoopProxy::current()), |
@@ -196,7 +217,7 @@ |
if (!session_id) { |
// We will be notified by OnStreamCreated(). |
ipc_->CreateStream(stream_id_, params_, |
- media::AudioManagerBase::kDefaultDeviceId, false); |
+ media::AudioManagerBase::kDefaultDeviceId, false, 1); |
} else { |
// We will be notified by OnDeviceReady(). |
ipc_->StartDevice(stream_id_, session_id); |