Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1530)

Side by Side Diff: ppapi/proxy/ppb_audio_input_proxy.cc

Issue 10828023: PPAPI/NaCl: Make NaClIPCAdapter transfer handles more generally (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ready for review? Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/ppb_audio_input_proxy.h" 5 #include "ppapi/proxy/ppb_audio_input_proxy.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "ppapi/c/dev/ppb_audio_input_dev.h" 8 #include "ppapi/c/dev/ppb_audio_input_dev.h"
9 #include "ppapi/c/pp_errors.h" 9 #include "ppapi/c/pp_errors.h"
10 #include "ppapi/c/ppb_audio_config.h" 10 #include "ppapi/c/ppb_audio_config.h"
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 EnterPluginFromHostResource<PPB_AudioInput_API> enter(audio_input); 279 EnterPluginFromHostResource<PPB_AudioInput_API> enter(audio_input);
280 if (enter.succeeded()) { 280 if (enter.succeeded()) {
281 static_cast<AudioInput*>(enter.object())->OnEnumerateDevicesComplete( 281 static_cast<AudioInput*>(enter.object())->OnEnumerateDevicesComplete(
282 result, devices); 282 result, devices);
283 } 283 }
284 } 284 }
285 285
286 void PPB_AudioInput_Proxy::OnMsgOpenACK( 286 void PPB_AudioInput_Proxy::OnMsgOpenACK(
287 const HostResource& audio_input, 287 const HostResource& audio_input,
288 int32_t result, 288 int32_t result,
289 IPC::PlatformFileForTransit socket_handle, 289 const ppapi::proxy::SerializedHandle& socket_handle,
290 base::SharedMemoryHandle handle, 290 const ppapi::proxy::SerializedHandle& handle) {
291 uint32_t length) { 291 CHECK(socket_handle.is_socket());
292 CHECK(handle.is_shmem());
292 EnterPluginFromHostResource<PPB_AudioInput_API> enter(audio_input); 293 EnterPluginFromHostResource<PPB_AudioInput_API> enter(audio_input);
293 if (enter.failed()) { 294 if (enter.failed()) {
294 // The caller may still have given us these handles in the failure case. 295 // The caller may still have given us these handles in the failure case.
295 // The easiest way to clean these up is to just put them in the objects 296 // The easiest way to clean these up is to just put them in the objects
296 // and then close them. This failure case is not performance critical. 297 // and then close them. This failure case is not performance critical.
297 base::SyncSocket temp_socket( 298 base::SyncSocket temp_socket(
298 IPC::PlatformFileForTransitToPlatformFile(socket_handle)); 299 IPC::PlatformFileForTransitToPlatformFile(
299 base::SharedMemory temp_mem(handle, false); 300 socket_handle.descriptor()));
301 base::SharedMemory temp_mem(handle.shmem(), false);
300 } else { 302 } else {
301 static_cast<AudioInput*>(enter.object())->OnOpenComplete( 303 static_cast<AudioInput*>(enter.object())->OnOpenComplete(
302 result, handle, length, 304 result, handle.shmem(), handle.size(),
303 IPC::PlatformFileForTransitToPlatformFile(socket_handle)); 305 IPC::PlatformFileForTransitToPlatformFile(socket_handle.descriptor()));
304 } 306 }
305 } 307 }
306 308
307 void PPB_AudioInput_Proxy::EnumerateDevicesACKInHost( 309 void PPB_AudioInput_Proxy::EnumerateDevicesACKInHost(
308 int32_t result, 310 int32_t result,
309 const HostResource& audio_input) { 311 const HostResource& audio_input) {
310 EnterHostFromHostResource<PPB_AudioInput_API> enter(audio_input); 312 EnterHostFromHostResource<PPB_AudioInput_API> enter(audio_input);
311 dispatcher()->Send(new PpapiMsg_PPBAudioInput_EnumerateDevicesACK( 313 dispatcher()->Send(new PpapiMsg_PPBAudioInput_EnumerateDevicesACK(
312 API_ID_PPB_AUDIO_INPUT_DEV, audio_input, result, 314 API_ID_PPB_AUDIO_INPUT_DEV, audio_input, result,
313 enter.succeeded() && result == PP_OK ? 315 enter.succeeded() && result == PP_OK ?
314 enter.object()->GetDeviceRefData() : std::vector<DeviceRefData>())); 316 enter.object()->GetDeviceRefData() : std::vector<DeviceRefData>()));
315 } 317 }
316 318
317 void PPB_AudioInput_Proxy::OpenACKInHost(int32_t result, 319 void PPB_AudioInput_Proxy::OpenACKInHost(int32_t result,
318 const HostResource& audio_input) { 320 const HostResource& audio_input) {
319 IPC::PlatformFileForTransit socket_handle = 321 ppapi::proxy::SerializedHandle socket_handle(
320 IPC::InvalidPlatformFileForTransit(); 322 ppapi::proxy::SerializedHandle::SOCKET);
321 base::SharedMemoryHandle shared_memory = IPC::InvalidPlatformFileForTransit(); 323 ppapi::proxy::SerializedHandle shared_memory(
322 uint32_t shared_memory_length = 0; 324 ppapi::proxy::SerializedHandle::SHARED_MEMORY);
323 325
324 if (result == PP_OK) { 326 if (result == PP_OK) {
325 result = GetAudioInputConnectedHandles(audio_input, &socket_handle, 327 IPC::PlatformFileForTransit temp_socket;
326 &shared_memory, 328 base::SharedMemoryHandle temp_shmem;
327 &shared_memory_length); 329 uint32_t temp_size;
330 result = GetAudioInputConnectedHandles(audio_input, &temp_socket,
331 &temp_shmem, &temp_size);
332 if (result == PP_OK) {
333 socket_handle.set_socket(temp_socket);
334 shared_memory.set_shmem(temp_shmem, temp_size);
335 }
328 } 336 }
329 337
330 // Send all the values, even on error. This simplifies some of our cleanup 338 // Send all the values, even on error. This simplifies some of our cleanup
331 // code since the handles will be in the other process and could be 339 // code since the handles will be in the other process and could be
332 // inconvenient to clean up. Our IPC code will automatically handle this for 340 // inconvenient to clean up. Our IPC code will automatically handle this for
333 // us, as long as the remote side always closes the handles it receives 341 // us, as long as the remote side always closes the handles it receives
334 // (in OnMsgOpenACK), even in the failure case. 342 // (in OnMsgOpenACK), even in the failure case.
335 dispatcher()->Send(new PpapiMsg_PPBAudioInput_OpenACK( 343 dispatcher()->Send(new PpapiMsg_PPBAudioInput_OpenACK(
336 API_ID_PPB_AUDIO_INPUT_DEV, audio_input, result, socket_handle, 344 API_ID_PPB_AUDIO_INPUT_DEV, audio_input, result, socket_handle,
337 shared_memory, shared_memory_length)); 345 shared_memory));
338 } 346 }
339 347
340 int32_t PPB_AudioInput_Proxy::GetAudioInputConnectedHandles( 348 int32_t PPB_AudioInput_Proxy::GetAudioInputConnectedHandles(
341 const HostResource& resource, 349 const HostResource& resource,
342 IPC::PlatformFileForTransit* foreign_socket_handle, 350 IPC::PlatformFileForTransit* foreign_socket_handle,
343 base::SharedMemoryHandle* foreign_shared_memory_handle, 351 base::SharedMemoryHandle* foreign_shared_memory_handle,
344 uint32_t* shared_memory_length) { 352 uint32_t* shared_memory_length) {
345 // Get the audio interface which will give us the handles. 353 // Get the audio interface which will give us the handles.
346 EnterHostFromHostResource<PPB_AudioInput_API> enter(resource); 354 EnterHostFromHostResource<PPB_AudioInput_API> enter(resource);
347 if (enter.failed()) 355 if (enter.failed())
(...skipping 22 matching lines...) Expand all
370 *foreign_shared_memory_handle = dispatcher()->ShareHandleWithRemote( 378 *foreign_shared_memory_handle = dispatcher()->ShareHandleWithRemote(
371 IntToPlatformFile(shared_memory_handle), false); 379 IntToPlatformFile(shared_memory_handle), false);
372 if (*foreign_shared_memory_handle == IPC::InvalidPlatformFileForTransit()) 380 if (*foreign_shared_memory_handle == IPC::InvalidPlatformFileForTransit())
373 return PP_ERROR_FAILED; 381 return PP_ERROR_FAILED;
374 382
375 return PP_OK; 383 return PP_OK;
376 } 384 }
377 385
378 } // namespace proxy 386 } // namespace proxy
379 } // namespace ppapi 387 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698