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

Unified Diff: ppapi/proxy/ppb_audio_proxy.cc

Issue 6334016: Refactor PPAPI proxy resource handling to maintain which host they came from,... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/ppb_audio_proxy.h ('k') | ppapi/proxy/ppb_buffer_proxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « ppapi/proxy/ppb_audio_proxy.h ('k') | ppapi/proxy/ppb_buffer_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698