Index: ppapi/proxy/talk_resource.cc |
diff --git a/ppapi/proxy/talk_resource.cc b/ppapi/proxy/talk_resource.cc |
index 557e30640400bf81bb4bdd2b6845376120c4677d..283958ce6cb8efd107804859721a13cebdbe0e4f 100644 |
--- a/ppapi/proxy/talk_resource.cc |
+++ b/ppapi/proxy/talk_resource.cc |
@@ -10,7 +10,10 @@ namespace ppapi { |
namespace proxy { |
TalkResource::TalkResource(Connection connection, PP_Instance instance) |
- : PluginResource(connection, instance) { |
+ : PluginResource(connection, instance), |
+ event_callback_(NULL), |
+ event_callback_user_data_(NULL) { |
+ SendCreate(BROWSER, PpapiHostMsg_Talk_Create()); |
} |
TalkResource::~TalkResource() { |
@@ -25,18 +28,75 @@ int32_t TalkResource::GetPermission(scoped_refptr<TrackedCallback> callback) { |
return PP_ERROR_INPROGRESS; |
callback_ = callback; |
- if (!sent_create_to_browser()) |
- SendCreate(BROWSER, PpapiHostMsg_Talk_Create()); |
- |
Call<PpapiPluginMsg_Talk_GetPermissionReply>( |
BROWSER, |
PpapiHostMsg_Talk_GetPermission(), |
- base::Bind(&TalkResource::GetPermissionReply, base::Unretained(this))); |
+ base::Bind(&TalkResource::OnCallCompleted, base::Unretained(this))); |
+ return PP_OK_COMPLETIONPENDING; |
+} |
+ |
+int32_t TalkResource::GetRemotingPermission( |
+ scoped_refptr<TrackedCallback> callback) { |
+ if (TrackedCallback::IsPending(callback_)) |
+ return PP_ERROR_INPROGRESS; |
+ callback_ = callback; |
+ |
+ Call<PpapiPluginMsg_Talk_GetRemotingPermissionReply>( |
+ BROWSER, |
+ PpapiHostMsg_Talk_GetRemotingPermission(), |
+ base::Bind(&TalkResource::OnCallCompleted, base::Unretained(this))); |
+ return PP_OK_COMPLETIONPENDING; |
+} |
+ |
+int32_t TalkResource::GetRemotingContinuePermission( |
+ scoped_refptr<TrackedCallback> callback) { |
+ if (TrackedCallback::IsPending(callback_)) |
+ return PP_ERROR_INPROGRESS; |
+ callback_ = callback; |
+ |
+ Call<PpapiPluginMsg_Talk_GetRemotingContinuePermissionReply>( |
+ BROWSER, |
+ PpapiHostMsg_Talk_GetRemotingContinuePermission(), |
+ base::Bind(&TalkResource::OnCallCompleted, base::Unretained(this))); |
return PP_OK_COMPLETIONPENDING; |
} |
-void TalkResource::GetPermissionReply( |
- const ResourceMessageReplyParams& params) { |
+int32_t TalkResource::StartRemoting(PP_TalkEventCallback event_callback, |
+ void* user_data) { |
+ if (event_callback_ != NULL) |
+ return PP_ERROR_INPROGRESS; |
+ |
+ event_callback_ = event_callback; |
+ event_callback_user_data_ = user_data; |
+ |
+ Post(BROWSER, PpapiHostMsg_Talk_StartRemoting()); |
+ return PP_OK; |
+} |
+ |
+void TalkResource::StopRemoting() { |
+ event_callback_ = NULL; |
+ event_callback_user_data_ = NULL; |
+ Post(BROWSER, PpapiHostMsg_Talk_StopRemoting()); |
+} |
+ |
+void TalkResource::OnReplyReceived(const ResourceMessageReplyParams& params, |
+ const IPC::Message& msg) { |
+ IPC_BEGIN_MESSAGE_MAP(TalkResource, msg) |
+ PPAPI_DISPATCH_PLUGIN_RESOURCE_CALL( |
+ PpapiPluginMsg_Talk_NotifyEvent, |
+ OnNotifyEvent) |
+ PPAPI_DISPATCH_PLUGIN_RESOURCE_CALL_UNHANDLED( |
+ PluginResource::OnReplyReceived(params, msg)) |
+ IPC_END_MESSAGE_MAP() |
+} |
+ |
+void TalkResource::OnNotifyEvent(const ResourceMessageReplyParams& params, |
+ PP_TalkEvent event) { |
+ if (event_callback_ != NULL) |
+ event_callback_(event_callback_user_data_, event); |
+} |
+ |
+void TalkResource::OnCallCompleted(const ResourceMessageReplyParams& params) { |
callback_->Run(params.result()); |
} |