summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy
diff options
context:
space:
mode:
authordmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-27 23:54:15 +0000
committerdmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-27 23:54:15 +0000
commitf7b7eb7ce467bc53247d891bd2a330510ed5a101 (patch)
tree63795fb3a4f5f6f5d12900616b8dadab888ff3dd /ppapi/proxy
parent44d8e4f769dc512fa204f170b8b99933e5cced71 (diff)
downloadchromium_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.cc5
-rw-r--r--ppapi/proxy/host_dispatcher.cc5
-rw-r--r--ppapi/proxy/plugin_dispatcher.cc5
-rw-r--r--ppapi/proxy/proxy_channel.cc17
-rw-r--r--ppapi/proxy/proxy_channel.h19
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_;