diff options
author | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-27 23:54:15 +0000 |
---|---|---|
committer | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-27 23:54:15 +0000 |
commit | f7b7eb7ce467bc53247d891bd2a330510ed5a101 (patch) | |
tree | 63795fb3a4f5f6f5d12900616b8dadab888ff3dd /ppapi/proxy | |
parent | 44d8e4f769dc512fa204f170b8b99933e5cced71 (diff) | |
download | chromium_src-f7b7eb7ce467bc53247d891bd2a330510ed5a101.zip chromium_src-f7b7eb7ce467bc53247d891bd2a330510ed5a101.tar.gz chromium_src-f7b7eb7ce467bc53247d891bd2a330510ed5a101.tar.bz2 |
Revert "Pepper: Fix channel init in ProxyChannel."
This reverts:
https://src.chromium.org/viewvc/chrome?view=rev&revision=253408
because it introduces a data race. See:
https://code.google.com/p/chromium/issues/detail?id=244383
This CL might still be a good change, but there will need to
be changes to IPC::ChannelProxy first.
BUG=343768
TBR=teravest
Review URL: https://codereview.chromium.org/179873019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@253978 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/proxy')
-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, 25 insertions, 26 deletions
diff --git a/ppapi/proxy/broker_dispatcher.cc b/ppapi/proxy/broker_dispatcher.cc index 6095679..7187852 100644 --- a/ppapi/proxy/broker_dispatcher.cc +++ b/ppapi/proxy/broker_dispatcher.cc @@ -24,9 +24,8 @@ bool BrokerDispatcher::InitBrokerWithChannel( base::ProcessId peer_pid, const IPC::ChannelHandle& channel_handle, bool is_client) { - InitWithChannel(delegate, peer_pid); - ConnectChannel(channel_handle, is_client); - return true; + return ProxyChannel::InitWithChannel(delegate, peer_pid, channel_handle, + is_client); } bool BrokerDispatcher::OnMessageReceived(const IPC::Message& msg) { diff --git a/ppapi/proxy/host_dispatcher.cc b/ppapi/proxy/host_dispatcher.cc index 3dfa25a..8f3833f 100644 --- a/ppapi/proxy/host_dispatcher.cc +++ b/ppapi/proxy/host_dispatcher.cc @@ -91,9 +91,10 @@ bool HostDispatcher::InitHostWithChannel( const IPC::ChannelHandle& channel_handle, bool is_client, const ppapi::Preferences& preferences) { - InitWithChannel(delegate, peer_pid); + if (!Dispatcher::InitWithChannel(delegate, peer_pid, channel_handle, + is_client)) + return false; 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 f99ec9e..6cd0ab4 100644 --- a/ppapi/proxy/plugin_dispatcher.cc +++ b/ppapi/proxy/plugin_dispatcher.cc @@ -161,7 +161,9 @@ bool PluginDispatcher::InitPluginWithChannel( base::ProcessId peer_pid, const IPC::ChannelHandle& channel_handle, bool is_client) { - InitWithChannel(delegate, peer_pid); + if (!Dispatcher::InitWithChannel(delegate, peer_pid, channel_handle, + is_client)) + return false; plugin_delegate_ = delegate; plugin_dispatcher_id_ = plugin_delegate_->Register(this); @@ -174,7 +176,6 @@ 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 1623401..b7f8a82 100644 --- a/ppapi/proxy/proxy_channel.cc +++ b/ppapi/proxy/proxy_channel.cc @@ -25,19 +25,18 @@ ProxyChannel::~ProxyChannel() { DVLOG(1) << "ProxyChannel::~ProxyChannel()"; } -void ProxyChannel::InitWithChannel(Delegate* delegate, - base::ProcessId peer_pid) { +bool ProxyChannel::InitWithChannel(Delegate* delegate, + base::ProcessId peer_pid, + const IPC::ChannelHandle& channel_handle, + bool is_client) { 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_->Init(channel_handle, mode, true); + channel_.reset(new IPC::SyncChannel(channel_handle, mode, this, + delegate->GetIPCMessageLoop(), true, + delegate->GetShutdownEvent())); + return true; } void ProxyChannel::InitWithTestSink(IPC::TestSink* test_sink) { diff --git a/ppapi/proxy/proxy_channel.h b/ppapi/proxy/proxy_channel.h index 64b8a77..6c9f1f6 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()/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. + // 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. void InitWithTestSink(IPC::TestSink* test_sink); // Shares a file handle (HANDLE / file descriptor) with the remote side. It @@ -87,14 +87,13 @@ class PPAPI_PROXY_EXPORT ProxyChannel protected: explicit ProxyChannel(); - // You must call this function before anything else. + // You must call this function before anything else. Returns true on success. // The delegate pointer must outlive this class, ownership is not // transferred. - 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); + virtual bool InitWithChannel(Delegate* delegate, + base::ProcessId peer_pid, + const IPC::ChannelHandle& channel_handle, + bool is_client); ProxyChannel::Delegate* delegate() const { return delegate_; |