Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: ipc/mojo/ipc_channel_mojo.cc

Issue 599333002: ChannelMojo: Handle when ChannelMojo outlives ChannelMojoHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ipc/mojo/ipc_channel_mojo.h" 5 #include "ipc/mojo/ipc_channel_mojo.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "ipc/ipc_listener.h" 10 #include "ipc/ipc_listener.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 const ChannelHandle& channel_handle) { 76 const ChannelHandle& channel_handle) {
77 return make_scoped_ptr( 77 return make_scoped_ptr(
78 new MojoChannelFactory(NULL, channel_handle, Channel::MODE_CLIENT)) 78 new MojoChannelFactory(NULL, channel_handle, Channel::MODE_CLIENT))
79 .PassAs<ChannelFactory>(); 79 .PassAs<ChannelFactory>();
80 } 80 }
81 81
82 ChannelMojo::ChannelMojo(ChannelMojoHost* host, 82 ChannelMojo::ChannelMojo(ChannelMojoHost* host,
83 const ChannelHandle& handle, 83 const ChannelHandle& handle,
84 Mode mode, 84 Mode mode,
85 Listener* listener) 85 Listener* listener)
86 : host_(host), 86 : host_(host ? host->ToWeakPtr() : base::WeakPtr<ChannelMojoHost>()),
viettrungluu 2014/09/25 19:38:34 Maybe it's better to just do in the body: if (hos
Hajime Morrita 2014/09/25 22:00:03 Done.
87 mode_(mode), 87 mode_(mode),
88 listener_(listener), 88 listener_(listener),
89 peer_pid_(base::kNullProcessId), 89 peer_pid_(base::kNullProcessId),
90 weak_factory_(this) { 90 weak_factory_(this) {
91 // Create MojoBootstrap after all members are set as it touches 91 // Create MojoBootstrap after all members are set as it touches
92 // ChannelMojo from a different thread. 92 // ChannelMojo from a different thread.
93 bootstrap_ = MojoBootstrap::Create(handle, mode, this); 93 bootstrap_ = MojoBootstrap::Create(handle, mode, this);
94 if (host_) 94 if (host_)
95 host_->OnChannelCreated(this); 95 host_->OnChannelCreated(weak_factory_.GetWeakPtr());
96 } 96 }
97 97
98 ChannelMojo::~ChannelMojo() { 98 ChannelMojo::~ChannelMojo() {
99 Close(); 99 Close();
100
101 if (host_)
102 host_->OnChannelDestroyed();
103 } 100 }
104 101
105 void ChannelMojo::InitControlReader( 102 void ChannelMojo::InitControlReader(
106 mojo::embedder::ScopedPlatformHandle handle) { 103 mojo::embedder::ScopedPlatformHandle handle) {
107 DCHECK(base::MessageLoopForIO::IsCurrent()); 104 DCHECK(base::MessageLoopForIO::IsCurrent());
108 mojo::embedder::ChannelInfo* channel_info; 105 mojo::embedder::ChannelInfo* channel_info;
109 mojo::ScopedMessagePipeHandle control_pipe = 106 mojo::ScopedMessagePipeHandle control_pipe =
110 mojo::embedder::CreateChannelOnIOThread(handle.Pass(), &channel_info); 107 mojo::embedder::CreateChannelOnIOThread(handle.Pass(), &channel_info);
111 channel_info_.reset(channel_info); 108 channel_info_.reset(channel_info);
112 109
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 handles->push_back(wrapped_handle); 263 handles->push_back(wrapped_handle);
267 } 264 }
268 } 265 }
269 266
270 return MOJO_RESULT_OK; 267 return MOJO_RESULT_OK;
271 } 268 }
272 269
273 #endif // defined(OS_POSIX) && !defined(OS_NACL) 270 #endif // defined(OS_POSIX) && !defined(OS_NACL)
274 271
275 } // namespace IPC 272 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698