| Index: content/browser/renderer_host/pepper/browser_ppapi_host_impl.h
|
| ===================================================================
|
| --- content/browser/renderer_host/pepper/browser_ppapi_host_impl.h (revision 166155)
|
| +++ content/browser/renderer_host/pepper/browser_ppapi_host_impl.h (working copy)
|
| @@ -15,25 +15,17 @@
|
| #include "ipc/ipc_channel_proxy.h"
|
| #include "ppapi/host/ppapi_host.h"
|
|
|
| -namespace IPC {
|
| -class Sender;
|
| -}
|
| -
|
| namespace content {
|
|
|
| -class CONTENT_EXPORT BrowserPpapiHostImpl
|
| - : public BrowserPpapiHost,
|
| - public IPC::ChannelProxy::MessageFilter {
|
| +class CONTENT_EXPORT BrowserPpapiHostImpl : public BrowserPpapiHost {
|
| public:
|
| // The creator is responsible for calling set_plugin_process_handle as soon
|
| // as it is known (we start the process asynchronously so it won't be known
|
| // when this object is created).
|
| BrowserPpapiHostImpl(IPC::Sender* sender,
|
| const ppapi::PpapiPermissions& permissions);
|
| + virtual ~BrowserPpapiHostImpl();
|
|
|
| - // IPC::ChannelProxy::MessageFilter.
|
| - virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
|
| -
|
| // BrowserPpapiHost.
|
| virtual ppapi::host::PpapiHost* GetPpapiHost() OVERRIDE;
|
| virtual base::ProcessHandle GetPluginProcessHandle() const OVERRIDE;
|
| @@ -54,6 +46,10 @@
|
| int render_view_id);
|
| void DeleteInstanceForView(PP_Instance instance);
|
|
|
| + scoped_refptr<IPC::ChannelProxy::MessageFilter> message_filter() {
|
| + return message_filter_;
|
| + }
|
| +
|
| private:
|
| friend class BrowserPpapiHostTest;
|
|
|
| @@ -63,8 +59,24 @@
|
| };
|
| typedef std::map<PP_Instance, RenderViewIDs> InstanceToViewMap;
|
|
|
| - virtual ~BrowserPpapiHostImpl();
|
| + // Implementing MessageFilter on BrowserPpapiHostImpl makes it ref-counted,
|
| + // preventing us from returning these to embedders without holding a
|
| + // reference. To avoid that, define a message filter object.
|
| + class HostMessageFilter : public IPC::ChannelProxy::MessageFilter {
|
| + public:
|
| + explicit HostMessageFilter(ppapi::host::PpapiHost* ppapi_host)
|
| + : ppapi_host_(ppapi_host) {}
|
| + // IPC::ChannelProxy::MessageFilter.
|
| + virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
|
|
|
| + void OnHostDestroyed();
|
| +
|
| + private:
|
| + virtual ~HostMessageFilter() {}
|
| +
|
| + ppapi::host::PpapiHost* ppapi_host_;
|
| + };
|
| +
|
| ppapi::host::PpapiHost ppapi_host_;
|
| base::ProcessHandle plugin_process_handle_;
|
|
|
| @@ -72,6 +84,8 @@
|
| // RenderProcess/RenderView IDs.
|
| InstanceToViewMap instance_to_view_;
|
|
|
| + scoped_refptr<HostMessageFilter> message_filter_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(BrowserPpapiHostImpl);
|
| };
|
|
|
|
|