Index: ppapi/proxy/talk_resource.cc |
diff --git a/ppapi/proxy/talk_resource.cc b/ppapi/proxy/talk_resource.cc |
index 557e30640400bf81bb4bdd2b6845376120c4677d..a00ef83b511214f91b212af2bf7b2baa51df2b15 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() { |
@@ -20,22 +23,57 @@ thunk::PPB_Talk_Private_API* TalkResource::AsPPB_Talk_Private_API() { |
return this; |
} |
-int32_t TalkResource::GetPermission(scoped_refptr<TrackedCallback> callback) { |
+int32_t TalkResource::RequestPermission( |
+ PP_TalkPermission permission, |
+ scoped_refptr<TrackedCallback> callback) { |
if (TrackedCallback::IsPending(callback_)) |
return PP_ERROR_INPROGRESS; |
callback_ = callback; |
- if (!sent_create_to_browser()) |
- SendCreate(BROWSER, PpapiHostMsg_Talk_Create()); |
- |
- Call<PpapiPluginMsg_Talk_GetPermissionReply>( |
+ Call<PpapiPluginMsg_Talk_RequestPermissionReply>( |
BROWSER, |
- PpapiHostMsg_Talk_GetPermission(), |
- base::Bind(&TalkResource::GetPermissionReply, base::Unretained(this))); |
+ PpapiHostMsg_Talk_RequestPermission(permission), |
+ base::Bind(&TalkResource::OnRequestPermissionReply, |
+ base::Unretained(this))); |
return PP_OK_COMPLETIONPENDING; |
} |
-void TalkResource::GetPermissionReply( |
+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::OnRequestPermissionReply( |
const ResourceMessageReplyParams& params) { |
callback_->Run(params.result()); |
} |