| Index: content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc
|
| ===================================================================
|
| --- content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc (revision 166155)
|
| +++ content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc (working copy)
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
|
| +#include "content/browser/renderer_host/pepper/pepper_message_filter.h"
|
|
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/render_view_host.h"
|
| @@ -10,30 +11,43 @@
|
|
|
| namespace content {
|
|
|
| +// static
|
| +BrowserPpapiHost* BrowserPpapiHost::CreateExternalPluginProcess(
|
| + IPC::Sender* sender,
|
| + ppapi::PpapiPermissions permissions,
|
| + base::ProcessHandle plugin_child_process,
|
| + IPC::ChannelProxy* channel,
|
| + net::HostResolver* host_resolver,
|
| + int render_process_id,
|
| + int render_view_id) {
|
| + BrowserPpapiHostImpl* browser_ppapi_host =
|
| + new BrowserPpapiHostImpl(sender, permissions);
|
| + browser_ppapi_host->set_plugin_process_handle(plugin_child_process);
|
| +
|
| + channel->AddFilter(
|
| + new PepperMessageFilter(PepperMessageFilter::NACL,
|
| + host_resolver,
|
| + render_process_id,
|
| + render_view_id));
|
| +
|
| + return browser_ppapi_host;
|
| +}
|
| +
|
| BrowserPpapiHostImpl::BrowserPpapiHostImpl(
|
| IPC::Sender* sender,
|
| const ppapi::PpapiPermissions& permissions)
|
| : ppapi_host_(sender, permissions),
|
| plugin_process_handle_(base::kNullProcessHandle) {
|
| + message_filter_ = new HostMessageFilter(&ppapi_host_);
|
| ppapi_host_.AddHostFactoryFilter(scoped_ptr<ppapi::host::HostFactory>(
|
| new ContentBrowserPepperHostFactory(this)));
|
| }
|
|
|
| BrowserPpapiHostImpl::~BrowserPpapiHostImpl() {
|
| + // Notify the filter so it won't foward messages to us.
|
| + message_filter_->OnHostDestroyed();
|
| }
|
|
|
| -bool BrowserPpapiHostImpl::OnMessageReceived(const IPC::Message& msg) {
|
| - /* TODO(brettw) when we add messages, here, the code should look like this:
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(BrowserPpapiHostImpl, msg)
|
| - // Add necessary message handlers here.
|
| - IPC_MESSAGE_UNHANDLED(handled = ppapi_host_.OnMessageReceived(msg))
|
| - IPC_END_MESSAGE_MAP();
|
| - return handled;
|
| - */
|
| - return ppapi_host_.OnMessageReceived(msg);
|
| -}
|
| -
|
| ppapi::host::PpapiHost* BrowserPpapiHostImpl::GetPpapiHost() {
|
| return &ppapi_host_;
|
| }
|
| @@ -84,4 +98,26 @@
|
| instance_to_view_.erase(found);
|
| }
|
|
|
| +bool BrowserPpapiHostImpl::HostMessageFilter::OnMessageReceived(
|
| + const IPC::Message& msg) {
|
| + // Don't forward messages if our owner object has been destroyed.
|
| + if (!ppapi_host_)
|
| + return false;
|
| +
|
| + /* TODO(brettw) when we add messages, here, the code should look like this:
|
| + bool handled = true;
|
| + IPC_BEGIN_MESSAGE_MAP(BrowserPpapiHostImpl, msg)
|
| + // Add necessary message handlers here.
|
| + IPC_MESSAGE_UNHANDLED(handled = ppapi_host_->OnMessageReceived(msg))
|
| + IPC_END_MESSAGE_MAP();
|
| + return handled;
|
| + */
|
| + return ppapi_host_->OnMessageReceived(msg);
|
| +}
|
| +
|
| +void BrowserPpapiHostImpl::HostMessageFilter::OnHostDestroyed() {
|
| + DCHECK(ppapi_host_);
|
| + ppapi_host_ = NULL;
|
| +}
|
| +
|
| } // namespace content
|
|
|