OLD | NEW |
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/talk_resource.h" | 5 #include "ppapi/proxy/talk_resource.h" |
6 | 6 |
7 #include "ppapi/proxy/ppapi_messages.h" | 7 #include "ppapi/proxy/ppapi_messages.h" |
8 | 8 |
9 namespace ppapi { | 9 namespace ppapi { |
10 namespace proxy { | 10 namespace proxy { |
11 | 11 |
12 TalkResource::TalkResource(Connection connection, PP_Instance instance) | 12 TalkResource::TalkResource(Connection connection, PP_Instance instance) |
13 : PluginResource(connection, instance) { | 13 : PluginResource(connection, instance), |
| 14 event_callback_(NULL), |
| 15 event_callback_user_data_(NULL) { |
| 16 SendCreate(BROWSER, PpapiHostMsg_Talk_Create()); |
14 } | 17 } |
15 | 18 |
16 TalkResource::~TalkResource() { | 19 TalkResource::~TalkResource() { |
17 } | 20 } |
18 | 21 |
19 thunk::PPB_Talk_Private_API* TalkResource::AsPPB_Talk_Private_API() { | 22 thunk::PPB_Talk_Private_API* TalkResource::AsPPB_Talk_Private_API() { |
20 return this; | 23 return this; |
21 } | 24 } |
22 | 25 |
23 int32_t TalkResource::GetPermission(scoped_refptr<TrackedCallback> callback) { | 26 int32_t TalkResource::GetPermission(scoped_refptr<TrackedCallback> callback) { |
24 if (TrackedCallback::IsPending(callback_)) | 27 if (TrackedCallback::IsPending(callback_)) |
25 return PP_ERROR_INPROGRESS; | 28 return PP_ERROR_INPROGRESS; |
26 callback_ = callback; | 29 callback_ = callback; |
27 | 30 |
28 if (!sent_create_to_browser()) | |
29 SendCreate(BROWSER, PpapiHostMsg_Talk_Create()); | |
30 | |
31 Call<PpapiPluginMsg_Talk_GetPermissionReply>( | 31 Call<PpapiPluginMsg_Talk_GetPermissionReply>( |
32 BROWSER, | 32 BROWSER, |
33 PpapiHostMsg_Talk_GetPermission(), | 33 PpapiHostMsg_Talk_GetPermission(), |
34 base::Bind(&TalkResource::GetPermissionReply, base::Unretained(this))); | 34 base::Bind(&TalkResource::OnCallCompleted, base::Unretained(this))); |
35 return PP_OK_COMPLETIONPENDING; | 35 return PP_OK_COMPLETIONPENDING; |
36 } | 36 } |
37 | 37 |
38 void TalkResource::GetPermissionReply( | 38 int32_t TalkResource::GetRemotingPermission( |
39 const ResourceMessageReplyParams& params) { | 39 scoped_refptr<TrackedCallback> callback) { |
| 40 if (TrackedCallback::IsPending(callback_)) |
| 41 return PP_ERROR_INPROGRESS; |
| 42 callback_ = callback; |
| 43 |
| 44 Call<PpapiPluginMsg_Talk_GetRemotingPermissionReply>( |
| 45 BROWSER, |
| 46 PpapiHostMsg_Talk_GetRemotingPermission(), |
| 47 base::Bind(&TalkResource::OnCallCompleted, base::Unretained(this))); |
| 48 return PP_OK_COMPLETIONPENDING; |
| 49 } |
| 50 |
| 51 int32_t TalkResource::GetRemotingContinuePermission( |
| 52 scoped_refptr<TrackedCallback> callback) { |
| 53 if (TrackedCallback::IsPending(callback_)) |
| 54 return PP_ERROR_INPROGRESS; |
| 55 callback_ = callback; |
| 56 |
| 57 Call<PpapiPluginMsg_Talk_GetRemotingContinuePermissionReply>( |
| 58 BROWSER, |
| 59 PpapiHostMsg_Talk_GetRemotingContinuePermission(), |
| 60 base::Bind(&TalkResource::OnCallCompleted, base::Unretained(this))); |
| 61 return PP_OK_COMPLETIONPENDING; |
| 62 } |
| 63 |
| 64 int32_t TalkResource::StartRemoting(PP_TalkEventCallback event_callback, |
| 65 void* user_data) { |
| 66 if (event_callback_ != NULL) |
| 67 return PP_ERROR_INPROGRESS; |
| 68 |
| 69 event_callback_ = event_callback; |
| 70 event_callback_user_data_ = user_data; |
| 71 |
| 72 Post(BROWSER, PpapiHostMsg_Talk_StartRemoting()); |
| 73 return PP_OK; |
| 74 } |
| 75 |
| 76 void TalkResource::StopRemoting() { |
| 77 event_callback_ = NULL; |
| 78 event_callback_user_data_ = NULL; |
| 79 Post(BROWSER, PpapiHostMsg_Talk_StopRemoting()); |
| 80 } |
| 81 |
| 82 void TalkResource::OnReplyReceived(const ResourceMessageReplyParams& params, |
| 83 const IPC::Message& msg) { |
| 84 IPC_BEGIN_MESSAGE_MAP(TalkResource, msg) |
| 85 PPAPI_DISPATCH_PLUGIN_RESOURCE_CALL( |
| 86 PpapiPluginMsg_Talk_NotifyEvent, |
| 87 OnNotifyEvent) |
| 88 PPAPI_DISPATCH_PLUGIN_RESOURCE_CALL_UNHANDLED( |
| 89 PluginResource::OnReplyReceived(params, msg)) |
| 90 IPC_END_MESSAGE_MAP() |
| 91 } |
| 92 |
| 93 void TalkResource::OnNotifyEvent(const ResourceMessageReplyParams& params, |
| 94 PP_TalkEvent event) { |
| 95 if (event_callback_ != NULL) |
| 96 event_callback_(event_callback_user_data_, event); |
| 97 } |
| 98 |
| 99 void TalkResource::OnCallCompleted(const ResourceMessageReplyParams& params) { |
40 callback_->Run(params.result()); | 100 callback_->Run(params.result()); |
41 } | 101 } |
42 | 102 |
43 } // namespace proxy | 103 } // namespace proxy |
44 } // namespace ppapi | 104 } // namespace ppapi |
OLD | NEW |