| Index: ppapi/proxy/ppb_talk_private_proxy.cc
|
| diff --git a/ppapi/proxy/ppb_talk_private_proxy.cc b/ppapi/proxy/ppb_talk_private_proxy.cc
|
| index 52c2f3a6eda45521dd113aa5f7b0bb5f718b8d89..ee2e73011e0e63ea8a8d2e3fc8918af9a4f18c4f 100644
|
| --- a/ppapi/proxy/ppb_talk_private_proxy.cc
|
| +++ b/ppapi/proxy/ppb_talk_private_proxy.cc
|
| @@ -22,7 +22,9 @@ namespace {
|
|
|
| class Talk : public Resource, public thunk::PPB_Talk_Private_API {
|
| public:
|
| - Talk(PP_Instance instance) : Resource(OBJECT_IS_PROXY, instance) {
|
| + Talk(PP_Instance instance, int renderer_id)
|
| + : Resource(OBJECT_IS_PROXY, instance),
|
| + renderer_id_(renderer_id) {
|
| }
|
|
|
| // Resource overrides.
|
| @@ -39,12 +41,20 @@ class Talk : public Resource, public thunk::PPB_Talk_Private_API {
|
|
|
| callback_ = new TrackedCallback(this, callback);
|
|
|
| - PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser(
|
| + if (PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser(
|
| new PpapiHostMsg_PPBTalk_GetPermission(
|
| API_ID_PPB_TALK,
|
| dispatcher->plugin_dispatcher_id(),
|
| - pp_resource()));
|
| - return PP_OK_COMPLETIONPENDING;
|
| + pp_resource(),
|
| + renderer_id_)))
|
| + return PP_OK_COMPLETIONPENDING;
|
| + return PP_ERROR_FAILED;
|
| + }
|
| +
|
| + int GetRendererId() {
|
| + // Plugin side does not implement this method.
|
| + NOTREACHED();
|
| + return 0;
|
| }
|
|
|
| void GotCompletion(int32_t result) {
|
| @@ -53,6 +63,7 @@ class Talk : public Resource, public thunk::PPB_Talk_Private_API {
|
|
|
| private:
|
| scoped_refptr<TrackedCallback> callback_;
|
| + int renderer_id_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Talk);
|
| };
|
| @@ -65,7 +76,14 @@ PPB_Talk_Private_Proxy::PPB_Talk_Private_Proxy(Dispatcher* dispatcher)
|
|
|
| // static
|
| PP_Resource PPB_Talk_Private_Proxy::CreateProxyResource(PP_Instance instance) {
|
| - return (new Talk(instance))->GetReference();
|
| + PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
|
| + if (!dispatcher)
|
| + return 0;
|
| +
|
| + int renderer_id;
|
| + dispatcher->Send(new PpapiHostMsg_PPBTalk_GetRendererId(API_ID_PPB_TALK,
|
| + instance, &renderer_id));
|
| + return (new Talk(instance, renderer_id))->GetReference();
|
| }
|
|
|
| bool PPB_Talk_Private_Proxy::OnMessageReceived(const IPC::Message& msg) {
|
| @@ -73,6 +91,7 @@ bool PPB_Talk_Private_Proxy::OnMessageReceived(const IPC::Message& msg) {
|
| IPC_BEGIN_MESSAGE_MAP(PPB_Talk_Private_Proxy, msg)
|
| IPC_MESSAGE_HANDLER(PpapiMsg_PPBTalk_GetPermissionACK,
|
| OnMsgGetPermissionACK)
|
| + IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTalk_GetRendererId, OnMsgGetRendererId)
|
| IPC_MESSAGE_UNHANDLED(handled = false);
|
| IPC_END_MESSAGE_MAP();
|
| return handled;
|
| @@ -87,5 +106,17 @@ void PPB_Talk_Private_Proxy::OnMsgGetPermissionACK(uint32 /* dispatcher_id */,
|
| static_cast<Talk*>(enter.object())->GotCompletion(result);
|
| }
|
|
|
| +void PPB_Talk_Private_Proxy::OnMsgGetRendererId(PP_Instance instance,
|
| + int* renderer_id) {
|
| + thunk::EnterResourceCreation enter(instance);
|
| + if (enter.succeeded()) {
|
| + PP_Resource resource = enter.functions()->CreateTalk(instance);
|
| + thunk::EnterResourceNoLock<thunk::PPB_Talk_Private_API> enter1(
|
| + resource, false);
|
| + if (enter1.succeeded())
|
| + *renderer_id = enter1.object()->GetRendererId();
|
| + }
|
| +}
|
| +
|
| } // namespace proxy
|
| } // namespace ppapi
|
|
|