Index: ppapi/proxy/ppb_audio_proxy.cc |
=================================================================== |
--- ppapi/proxy/ppb_audio_proxy.cc (revision 72840) |
+++ ppapi/proxy/ppb_audio_proxy.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -19,11 +19,11 @@ |
class Audio : public PluginResource, public pp::shared_impl::AudioImpl { |
public: |
- Audio(PP_Instance instance, |
+ Audio(const HostResource& audio_id, |
PP_Resource config_id, |
PPB_Audio_Callback callback, |
void* user_data) |
- : PluginResource(instance), |
+ : PluginResource(audio_id), |
config_(config_id) { |
SetCallback(callback, user_data); |
PluginResourceTracker::GetInstance()->AddRefResource(config_); |
@@ -43,7 +43,7 @@ |
SetStartPlaybackState(); |
PluginDispatcher::GetForInstance(instance())->Send( |
new PpapiHostMsg_PPBAudio_StartOrStop( |
- INTERFACE_ID_PPB_AUDIO, resource, true)); |
+ INTERFACE_ID_PPB_AUDIO, host_resource(), true)); |
} |
void StopPlayback(PP_Resource resource) { |
@@ -51,7 +51,7 @@ |
return; |
PluginDispatcher::GetForInstance(instance())->Send( |
new PpapiHostMsg_PPBAudio_StartOrStop( |
- INTERFACE_ID_PPB_AUDIO, resource, false)); |
+ INTERFACE_ID_PPB_AUDIO, host_resource(), false)); |
SetStopPlaybackState(); |
} |
@@ -67,16 +67,19 @@ |
PP_Resource config_id, |
PPB_Audio_Callback callback, |
void* user_data) { |
- PP_Resource result; |
+ PluginResource* config = PluginResourceTracker::GetInstance()-> |
+ GetResourceObject(config_id); |
+ if (!config) |
+ return 0; |
+ |
+ HostResource result; |
PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBAudio_Create( |
- INTERFACE_ID_PPB_AUDIO, instance_id, config_id, &result)); |
- if (!result) |
+ INTERFACE_ID_PPB_AUDIO, instance_id, config->host_resource(), &result)); |
+ if (result.is_null()) |
return 0; |
- linked_ptr<Audio> object(new Audio(instance_id, config_id, |
- callback, user_data)); |
- PluginResourceTracker::GetInstance()->AddResource(result, object); |
- return result; |
+ linked_ptr<Audio> object(new Audio(result, config_id, callback, user_data)); |
+ return PluginResourceTracker::GetInstance()->AddResource(object); |
} |
PP_Bool IsAudio(PP_Resource resource) { |
@@ -150,57 +153,61 @@ |
} |
void PPB_Audio_Proxy::OnMsgCreate(PP_Instance instance_id, |
- PP_Resource config_id, |
- PP_Resource* result) { |
+ const HostResource& config_id, |
+ HostResource* result) { |
const PPB_AudioTrusted* audio_trusted = |
reinterpret_cast<const PPB_AudioTrusted*>( |
dispatcher()->GetLocalInterface(PPB_AUDIO_TRUSTED_INTERFACE)); |
- if (!audio_trusted) { |
- *result = 0; |
+ if (!audio_trusted) |
return; |
- } |
- *result = audio_trusted->CreateTrusted(instance_id); |
- if (!result) |
+ result->SetHostResource(instance_id, |
+ audio_trusted->CreateTrusted(instance_id)); |
+ if (result->is_null()) |
return; |
CompletionCallback callback = callback_factory_.NewCallback( |
&PPB_Audio_Proxy::AudioChannelConnected, *result); |
- int32_t open_error = audio_trusted->Open(*result, config_id, |
+ int32_t open_error = audio_trusted->Open(result->host_resource(), |
+ config_id.host_resource(), |
callback.pp_completion_callback()); |
if (open_error != PP_ERROR_WOULDBLOCK) |
callback.Run(open_error); |
} |
-void PPB_Audio_Proxy::OnMsgStartOrStop(PP_Resource audio_id, bool play) { |
+void PPB_Audio_Proxy::OnMsgStartOrStop(const HostResource& audio_id, |
+ bool play) { |
if (play) |
- ppb_audio_target()->StartPlayback(audio_id); |
+ ppb_audio_target()->StartPlayback(audio_id.host_resource()); |
else |
- ppb_audio_target()->StopPlayback(audio_id); |
+ ppb_audio_target()->StopPlayback(audio_id.host_resource()); |
} |
+// Processed in the plugin (message from host). |
void PPB_Audio_Proxy::OnMsgNotifyAudioStreamCreated( |
- PP_Resource audio_id, |
- int32_t result_code, |
- IPC::PlatformFileForTransit socket_handle, |
- base::SharedMemoryHandle handle, |
- uint32_t length) { |
- Audio* object = PluginResource::GetAs<Audio>(audio_id); |
- if (!object || result_code != PP_OK) { |
+ const PPBAudio_NotifyAudioStreamCreated_Params& params) { |
+ PP_Resource plugin_resource = |
+ PluginResourceTracker::GetInstance()->PluginResourceForHostResource( |
+ params.audio_id); |
+ Audio* object = plugin_resource ? |
+ PluginResource::GetAs<Audio>(plugin_resource) : NULL; |
+ if (!object || params.result_code != PP_OK) { |
// The caller may still have given us these handles in the failure case. |
// The easiest way to clean these up is to just put them in the objects |
// and then close them. This failure case is not performance critical. |
base::SyncSocket temp_socket( |
- IPC::PlatformFileForTransitToPlatformFile(socket_handle)); |
- base::SharedMemory temp_mem(handle, false); |
+ IPC::PlatformFileForTransitToPlatformFile(params.socket_handle)); |
+ base::SharedMemory temp_mem(params.handle, false); |
return; |
} |
object->SetStreamInfo( |
- handle, length, IPC::PlatformFileForTransitToPlatformFile(socket_handle)); |
+ params.handle, params.length, |
+ IPC::PlatformFileForTransitToPlatformFile(params.socket_handle)); |
} |
-void PPB_Audio_Proxy::AudioChannelConnected(int32_t result, |
- PP_Resource resource) { |
+void PPB_Audio_Proxy::AudioChannelConnected( |
+ int32_t result, |
+ const HostResource& resource) { |
IPC::PlatformFileForTransit socket_handle = |
IPC::InvalidPlatformFileForTransit(); |
#if defined(OS_WIN) |
@@ -224,13 +231,18 @@ |
// inconvenient to clean up. Our IPC code will automatically handle this for |
// us, as long as the remote side always closes the handles it receives |
// (in OnMsgNotifyAudioStreamCreated), even in the failure case. |
+ PPBAudio_NotifyAudioStreamCreated_Params params; |
+ params.audio_id = resource; |
+ params.result_code = result; |
+ params.socket_handle = socket_handle; |
+ params.handle = shared_memory; |
+ params.length = shared_memory_length; |
dispatcher()->Send(new PpapiMsg_PPBAudio_NotifyAudioStreamCreated( |
- INTERFACE_ID_PPB_AUDIO, resource, result_code, socket_handle, |
- shared_memory, shared_memory_length)); |
+ INTERFACE_ID_PPB_AUDIO, params)); |
} |
int32_t PPB_Audio_Proxy::GetAudioConnectedHandles( |
- PP_Resource resource, |
+ const HostResource& resource, |
IPC::PlatformFileForTransit* foreign_socket_handle, |
base::SharedMemoryHandle* foreign_shared_memory_handle, |
uint32_t* shared_memory_length) { |
@@ -243,7 +255,8 @@ |
// Get the socket handle for signaling. |
int32_t socket_handle; |
- int32_t result = audio_trusted->GetSyncSocket(resource, &socket_handle); |
+ int32_t result = audio_trusted->GetSyncSocket(resource.host_resource(), |
+ &socket_handle); |
if (result != PP_OK) |
return result; |
@@ -265,8 +278,9 @@ |
// Get the shared memory for the buffer. |
// TODO(brettw) remove the reinterpret cast when the interface is updated. |
int shared_memory_handle; |
- result = audio_trusted->GetSharedMemory(resource, &shared_memory_handle, |
- shared_memory_length); |
+ result = audio_trusted->GetSharedMemory(resource.host_resource(), |
+ &shared_memory_handle, |
+ shared_memory_length); |
if (result != PP_OK) |
return result; |