diff options
author | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-26 11:43:07 +0000 |
---|---|---|
committer | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-26 11:43:07 +0000 |
commit | bf6bdef431d0f5ae1af407e68988f8697e213052 (patch) | |
tree | 88ca8aa9ff1ba8a68824a2bb2e9eff02e0b05e55 /ppapi | |
parent | a1d076eef3be6ab74325d3d5ab30a267a1c9cc9a (diff) | |
download | chromium_src-bf6bdef431d0f5ae1af407e68988f8697e213052.zip chromium_src-bf6bdef431d0f5ae1af407e68988f8697e213052.tar.gz chromium_src-bf6bdef431d0f5ae1af407e68988f8697e213052.tar.bz2 |
Pepper: Fix channel init in ProxyChannel.
Previously, there was no way to savely add filters to the underlying
SyncChannel in a ProxyChannel safely.
This change splits channel initialization into two methods so there's a clear
step where filters may be added safely.
BUG=343768
Review URL: https://codereview.chromium.org/179743005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@253408 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/proxy/broker_dispatcher.cc | 5 | ||||
-rw-r--r-- | ppapi/proxy/host_dispatcher.cc | 5 | ||||
-rw-r--r-- | ppapi/proxy/plugin_dispatcher.cc | 5 | ||||
-rw-r--r-- | ppapi/proxy/proxy_channel.cc | 17 | ||||
-rw-r--r-- | ppapi/proxy/proxy_channel.h | 19 |
5 files changed, 26 insertions, 25 deletions
diff --git a/ppapi/proxy/broker_dispatcher.cc b/ppapi/proxy/broker_dispatcher.cc index 7187852..6095679 100644 --- a/ppapi/proxy/broker_dispatcher.cc +++ b/ppapi/proxy/broker_dispatcher.cc @@ -24,8 +24,9 @@ bool BrokerDispatcher::InitBrokerWithChannel( base::ProcessId peer_pid, const IPC::ChannelHandle& channel_handle, bool is_client) { - return ProxyChannel::InitWithChannel(delegate, peer_pid, channel_handle, - is_client); + InitWithChannel(delegate, peer_pid); + ConnectChannel(channel_handle, is_client); + return true; } bool BrokerDispatcher::OnMessageReceived(const IPC::Message& msg) { diff --git a/ppapi/proxy/host_dispatcher.cc b/ppapi/proxy/host_dispatcher.cc index cea7ab3..691f424 100644 --- a/ppapi/proxy/host_dispatcher.cc +++ b/ppapi/proxy/host_dispatcher.cc @@ -91,10 +91,9 @@ bool HostDispatcher::InitHostWithChannel( const IPC::ChannelHandle& channel_handle, bool is_client, const ppapi::Preferences& preferences) { - if (!Dispatcher::InitWithChannel(delegate, peer_pid, channel_handle, - is_client)) - return false; + InitWithChannel(delegate, peer_pid); AddIOThreadMessageFilter(sync_status_.get()); + ConnectChannel(channel_handle, is_client); Send(new PpapiMsg_SetPreferences(preferences)); return true; diff --git a/ppapi/proxy/plugin_dispatcher.cc b/ppapi/proxy/plugin_dispatcher.cc index 6cd0ab4..f99ec9e 100644 --- a/ppapi/proxy/plugin_dispatcher.cc +++ b/ppapi/proxy/plugin_dispatcher.cc @@ -161,9 +161,7 @@ bool PluginDispatcher::InitPluginWithChannel( base::ProcessId peer_pid, const IPC::ChannelHandle& channel_handle, bool is_client) { - if (!Dispatcher::InitWithChannel(delegate, peer_pid, channel_handle, - is_client)) - return false; + InitWithChannel(delegate, peer_pid); plugin_delegate_ = delegate; plugin_dispatcher_id_ = plugin_delegate_->Register(this); @@ -176,6 +174,7 @@ bool PluginDispatcher::InitPluginWithChannel( new PluginMessageFilter( delegate->GetGloballySeenInstanceIDSet(), PluginGlobals::Get()->resource_reply_thread_registrar())); + ConnectChannel(channel_handle, is_client); return true; } diff --git a/ppapi/proxy/proxy_channel.cc b/ppapi/proxy/proxy_channel.cc index b7f8a82..1623401 100644 --- a/ppapi/proxy/proxy_channel.cc +++ b/ppapi/proxy/proxy_channel.cc @@ -25,18 +25,19 @@ ProxyChannel::~ProxyChannel() { DVLOG(1) << "ProxyChannel::~ProxyChannel()"; } -bool ProxyChannel::InitWithChannel(Delegate* delegate, - base::ProcessId peer_pid, - const IPC::ChannelHandle& channel_handle, - bool is_client) { +void ProxyChannel::InitWithChannel(Delegate* delegate, + base::ProcessId peer_pid) { delegate_ = delegate; peer_pid_ = peer_pid; + channel_.reset(new IPC::SyncChannel(this, delegate->GetIPCMessageLoop(), + delegate->GetShutdownEvent())); +} + +void ProxyChannel::ConnectChannel(const IPC::ChannelHandle& channel_handle, + bool is_client) { IPC::Channel::Mode mode = is_client ? IPC::Channel::MODE_CLIENT : IPC::Channel::MODE_SERVER; - channel_.reset(new IPC::SyncChannel(channel_handle, mode, this, - delegate->GetIPCMessageLoop(), true, - delegate->GetShutdownEvent())); - return true; + channel_->Init(channel_handle, mode, true); } void ProxyChannel::InitWithTestSink(IPC::TestSink* test_sink) { diff --git a/ppapi/proxy/proxy_channel.h b/ppapi/proxy/proxy_channel.h index 6c9f1f6..64b8a77 100644 --- a/ppapi/proxy/proxy_channel.h +++ b/ppapi/proxy/proxy_channel.h @@ -53,10 +53,10 @@ class PPAPI_PROXY_EXPORT ProxyChannel virtual ~ProxyChannel(); - // Alternative to InitWithChannel() for unit tests that want to send all - // messages sent via this channel to the given test sink. The test sink - // must outlive this class. In this case, the peer PID will be the current - // process ID. + // Alternative to InitWithChannel()/ConnectChannel() for unit tests that want + // to send all messages sent via this channel to the given test sink. The + // test sink must outlive this class. In this case, the peer PID will be the + // current process ID. void InitWithTestSink(IPC::TestSink* test_sink); // Shares a file handle (HANDLE / file descriptor) with the remote side. It @@ -87,13 +87,14 @@ class PPAPI_PROXY_EXPORT ProxyChannel protected: explicit ProxyChannel(); - // You must call this function before anything else. Returns true on success. + // You must call this function before anything else. // The delegate pointer must outlive this class, ownership is not // transferred. - virtual bool InitWithChannel(Delegate* delegate, - base::ProcessId peer_pid, - const IPC::ChannelHandle& channel_handle, - bool is_client); + void InitWithChannel(Delegate* delegate, base::ProcessId peer_pid); + + // You must call this function after InitWithChannel(), and after adding any + // desired filters to the underlying channel, but before anything else. + void ConnectChannel(const IPC::ChannelHandle& channel_handle, bool is_client); ProxyChannel::Delegate* delegate() const { return delegate_; |