| 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 "content/renderer/pepper/pepper_in_process_router.h" | 5 #include "content/renderer/pepper/pepper_in_process_router.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "content/public/renderer/render_thread.h" | 9 #include "content/public/renderer/render_thread.h" |
| 10 #include "content/renderer/pepper/renderer_ppapi_host_impl.h" | 10 #include "content/renderer/pepper/renderer_ppapi_host_impl.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 virtual ~Channel() {} | 27 virtual ~Channel() {} |
| 28 | 28 |
| 29 virtual bool Send(IPC::Message* message) OVERRIDE { | 29 virtual bool Send(IPC::Message* message) OVERRIDE { |
| 30 return callback_.Run(message); | 30 return callback_.Run(message); |
| 31 } | 31 } |
| 32 | 32 |
| 33 private: | 33 private: |
| 34 base::Callback<bool(IPC::Message*)> callback_; | 34 base::Callback<bool(IPC::Message*)> callback_; |
| 35 }; | 35 }; |
| 36 | 36 |
| 37 PepperInProcessRouter::PepperInProcessRouter( | 37 PepperInProcessRouter::PepperInProcessRouter(RendererPpapiHostImpl* host_impl) |
| 38 RendererPpapiHostImpl* host_impl) | |
| 39 : host_impl_(host_impl), | 38 : host_impl_(host_impl), |
| 40 pending_message_id_(0), | 39 pending_message_id_(0), |
| 41 reply_result_(false), | 40 reply_result_(false), |
| 42 weak_factory_(this) { | 41 weak_factory_(this) { |
| 43 browser_channel_.reset( | 42 browser_channel_.reset(new Channel(base::Bind( |
| 44 new Channel(base::Bind(&PepperInProcessRouter::SendToBrowser, | 43 &PepperInProcessRouter::SendToBrowser, base::Unretained(this)))); |
| 45 base::Unretained(this)))); | 44 host_to_plugin_router_.reset(new Channel(base::Bind( |
| 46 host_to_plugin_router_.reset( | 45 &PepperInProcessRouter::SendToPlugin, base::Unretained(this)))); |
| 47 new Channel(base::Bind(&PepperInProcessRouter::SendToPlugin, | 46 plugin_to_host_router_.reset(new Channel( |
| 48 base::Unretained(this)))); | 47 base::Bind(&PepperInProcessRouter::SendToHost, base::Unretained(this)))); |
| 49 plugin_to_host_router_.reset( | |
| 50 new Channel(base::Bind(&PepperInProcessRouter::SendToHost, | |
| 51 base::Unretained(this)))); | |
| 52 } | 48 } |
| 53 | 49 |
| 54 PepperInProcessRouter::~PepperInProcessRouter() { | 50 PepperInProcessRouter::~PepperInProcessRouter() {} |
| 55 } | |
| 56 | 51 |
| 57 IPC::Sender* PepperInProcessRouter::GetPluginToRendererSender() { | 52 IPC::Sender* PepperInProcessRouter::GetPluginToRendererSender() { |
| 58 return plugin_to_host_router_.get(); | 53 return plugin_to_host_router_.get(); |
| 59 } | 54 } |
| 60 | 55 |
| 61 IPC::Sender* PepperInProcessRouter::GetRendererToPluginSender() { | 56 IPC::Sender* PepperInProcessRouter::GetRendererToPluginSender() { |
| 62 return host_to_plugin_router_.get(); | 57 return host_to_plugin_router_.get(); |
| 63 } | 58 } |
| 64 | 59 |
| 65 ppapi::proxy::Connection PepperInProcessRouter::GetPluginConnection( | 60 ppapi::proxy::Connection PepperInProcessRouter::GetPluginConnection( |
| 66 PP_Instance instance) { | 61 PP_Instance instance) { |
| 67 int routing_id = 0; | 62 int routing_id = 0; |
| 68 RenderFrame* frame = host_impl_->GetRenderFrameForInstance(instance); | 63 RenderFrame* frame = host_impl_->GetRenderFrameForInstance(instance); |
| 69 if (frame) | 64 if (frame) |
| 70 routing_id = frame->GetRoutingID(); | 65 routing_id = frame->GetRoutingID(); |
| 71 return ppapi::proxy::Connection(browser_channel_.get(), | 66 return ppapi::proxy::Connection( |
| 72 plugin_to_host_router_.get(), | 67 browser_channel_.get(), plugin_to_host_router_.get(), routing_id); |
| 73 routing_id); | |
| 74 } | 68 } |
| 75 | 69 |
| 76 // static | 70 // static |
| 77 bool PepperInProcessRouter::OnPluginMsgReceived(const IPC::Message& msg) { | 71 bool PepperInProcessRouter::OnPluginMsgReceived(const IPC::Message& msg) { |
| 78 // Emulate the proxy by dispatching the relevant message here. | 72 // Emulate the proxy by dispatching the relevant message here. |
| 79 ppapi::proxy::ResourceMessageReplyParams reply_params; | 73 ppapi::proxy::ResourceMessageReplyParams reply_params; |
| 80 IPC::Message nested_msg; | 74 IPC::Message nested_msg; |
| 81 | 75 |
| 82 if (msg.type() == PpapiPluginMsg_ResourceReply::ID) { | 76 if (msg.type() == PpapiPluginMsg_ResourceReply::ID) { |
| 83 // Resource reply from the renderer (no routing id). | 77 // Resource reply from the renderer (no routing id). |
| 84 if (!UnpackMessage<PpapiPluginMsg_ResourceReply>(msg, &reply_params, | 78 if (!UnpackMessage<PpapiPluginMsg_ResourceReply>( |
| 85 &nested_msg)) { | 79 msg, &reply_params, &nested_msg)) { |
| 86 NOTREACHED(); | 80 NOTREACHED(); |
| 87 return false; | 81 return false; |
| 88 } | 82 } |
| 89 } else if (msg.type() == PpapiHostMsg_InProcessResourceReply::ID) { | 83 } else if (msg.type() == PpapiHostMsg_InProcessResourceReply::ID) { |
| 90 // Resource reply from the browser (has a routing id). | 84 // Resource reply from the browser (has a routing id). |
| 91 if (!UnpackMessage<PpapiHostMsg_InProcessResourceReply>(msg, &reply_params, | 85 if (!UnpackMessage<PpapiHostMsg_InProcessResourceReply>( |
| 92 &nested_msg)) { | 86 msg, &reply_params, &nested_msg)) { |
| 93 NOTREACHED(); | 87 NOTREACHED(); |
| 94 return false; | 88 return false; |
| 95 } | 89 } |
| 96 } else { | 90 } else { |
| 97 return false; | 91 return false; |
| 98 } | 92 } |
| 99 ppapi::Resource* resource = | 93 ppapi::Resource* resource = |
| 100 ppapi::PpapiGlobals::Get()->GetResourceTracker()->GetResource( | 94 ppapi::PpapiGlobals::Get()->GetResourceTracker()->GetResource( |
| 101 reply_params.pp_resource()); | 95 reply_params.pp_resource()); |
| 102 // If the resource doesn't exist, it may have been destroyed so just ignore | 96 // If the resource doesn't exist, it may have been destroyed so just ignore |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 void PepperInProcessRouter::DispatchHostMsg(IPC::Message* msg) { | 158 void PepperInProcessRouter::DispatchHostMsg(IPC::Message* msg) { |
| 165 bool handled = host_impl_->GetPpapiHost()->OnMessageReceived(*msg); | 159 bool handled = host_impl_->GetPpapiHost()->OnMessageReceived(*msg); |
| 166 DCHECK(handled); | 160 DCHECK(handled); |
| 167 } | 161 } |
| 168 | 162 |
| 169 void PepperInProcessRouter::DispatchPluginMsg(IPC::Message* msg) { | 163 void PepperInProcessRouter::DispatchPluginMsg(IPC::Message* msg) { |
| 170 bool handled = OnPluginMsgReceived(*msg); | 164 bool handled = OnPluginMsgReceived(*msg); |
| 171 DCHECK(handled); | 165 DCHECK(handled); |
| 172 } | 166 } |
| 173 | 167 |
| 174 bool PepperInProcessRouter::SendToBrowser(IPC::Message *msg) { | 168 bool PepperInProcessRouter::SendToBrowser(IPC::Message* msg) { |
| 175 return RenderThread::Get()->Send(msg); | 169 return RenderThread::Get()->Send(msg); |
| 176 } | 170 } |
| 177 | 171 |
| 178 } // namespace content | 172 } // namespace content |
| OLD | NEW |