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

Side by Side Diff: remoting/host/chromoting_host.cc

Issue 1458323002: Simplify It2Me host shutdown (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « remoting/host/chromoting_host.h ('k') | remoting/host/chromoting_host_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "remoting/host/chromoting_host.h" 5 #include "remoting/host/chromoting_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 session_manager_(session_manager.Pass()), 72 session_manager_(session_manager.Pass()),
73 audio_task_runner_(audio_task_runner), 73 audio_task_runner_(audio_task_runner),
74 input_task_runner_(input_task_runner), 74 input_task_runner_(input_task_runner),
75 video_capture_task_runner_(video_capture_task_runner), 75 video_capture_task_runner_(video_capture_task_runner),
76 video_encode_task_runner_(video_encode_task_runner), 76 video_encode_task_runner_(video_encode_task_runner),
77 network_task_runner_(network_task_runner), 77 network_task_runner_(network_task_runner),
78 ui_task_runner_(ui_task_runner), 78 ui_task_runner_(ui_task_runner),
79 signal_strategy_(signal_strategy), 79 signal_strategy_(signal_strategy),
80 started_(false), 80 started_(false),
81 login_backoff_(&kDefaultBackoffPolicy), 81 login_backoff_(&kDefaultBackoffPolicy),
82 authenticating_client_(false),
83 reject_authenticating_client_(false),
84 enable_curtaining_(false), 82 enable_curtaining_(false),
85 weak_factory_(this) { 83 weak_factory_(this) {
86 DCHECK(network_task_runner_->BelongsToCurrentThread()); 84 DCHECK(network_task_runner_->BelongsToCurrentThread());
87 DCHECK(signal_strategy); 85 DCHECK(signal_strategy);
88 86
89 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); 87 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
90 } 88 }
91 89
92 ChromotingHost::~ChromotingHost() { 90 ChromotingHost::~ChromotingHost() {
93 DCHECK(CalledOnValidThread()); 91 DCHECK(CalledOnValidThread());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 124
127 void ChromotingHost::RemoveStatusObserver(HostStatusObserver* observer) { 125 void ChromotingHost::RemoveStatusObserver(HostStatusObserver* observer) {
128 DCHECK(CalledOnValidThread()); 126 DCHECK(CalledOnValidThread());
129 status_observers_.RemoveObserver(observer); 127 status_observers_.RemoveObserver(observer);
130 } 128 }
131 129
132 void ChromotingHost::AddExtension(scoped_ptr<HostExtension> extension) { 130 void ChromotingHost::AddExtension(scoped_ptr<HostExtension> extension) {
133 extensions_.push_back(extension.release()); 131 extensions_.push_back(extension.release());
134 } 132 }
135 133
136 void ChromotingHost::RejectAuthenticatingClient() {
137 DCHECK(authenticating_client_);
138 reject_authenticating_client_ = true;
139 }
140
141 void ChromotingHost::SetAuthenticatorFactory( 134 void ChromotingHost::SetAuthenticatorFactory(
142 scoped_ptr<protocol::AuthenticatorFactory> authenticator_factory) { 135 scoped_ptr<protocol::AuthenticatorFactory> authenticator_factory) {
143 DCHECK(CalledOnValidThread()); 136 DCHECK(CalledOnValidThread());
144 session_manager_->set_authenticator_factory(authenticator_factory.Pass()); 137 session_manager_->set_authenticator_factory(authenticator_factory.Pass());
145 } 138 }
146 139
147 void ChromotingHost::SetEnableCurtaining(bool enable) { 140 void ChromotingHost::SetEnableCurtaining(bool enable) {
148 DCHECK(network_task_runner_->BelongsToCurrentThread()); 141 DCHECK(network_task_runner_->BelongsToCurrentThread());
149 142
150 if (enable_curtaining_ == enable) 143 if (enable_curtaining_ == enable)
(...skipping 25 matching lines...) Expand all
176 // connection attempts as well as sequential ones. 169 // connection attempts as well as sequential ones.
177 if (login_backoff_.ShouldRejectRequest()) { 170 if (login_backoff_.ShouldRejectRequest()) {
178 LOG(WARNING) << "Disconnecting client " << client->client_jid() << " due to" 171 LOG(WARNING) << "Disconnecting client " << client->client_jid() << " due to"
179 " an overload of failed login attempts."; 172 " an overload of failed login attempts.";
180 client->DisconnectSession(protocol::HOST_OVERLOAD); 173 client->DisconnectSession(protocol::HOST_OVERLOAD);
181 return; 174 return;
182 } 175 }
183 login_backoff_.InformOfRequest(false); 176 login_backoff_.InformOfRequest(false);
184 } 177 }
185 178
186 bool ChromotingHost::OnSessionAuthenticated(ClientSession* client) { 179 void ChromotingHost::OnSessionAuthenticated(ClientSession* client) {
187 DCHECK(CalledOnValidThread()); 180 DCHECK(CalledOnValidThread());
188 181
189 login_backoff_.Reset(); 182 login_backoff_.Reset();
190 183
191 // Disconnect all other clients. |it| should be advanced before Disconnect() 184 // Disconnect all other clients. |it| should be advanced before Disconnect()
192 // is called to avoid it becoming invalid when the client is removed from 185 // is called to avoid it becoming invalid when the client is removed from
193 // the list. 186 // the list.
194 ClientList::iterator it = clients_.begin(); 187 ClientList::iterator it = clients_.begin();
188 base::WeakPtr<ChromotingHost> self = weak_factory_.GetWeakPtr();
195 while (it != clients_.end()) { 189 while (it != clients_.end()) {
196 ClientSession* other_client = *it++; 190 ClientSession* other_client = *it++;
197 if (other_client != client) 191 if (other_client != client) {
198 other_client->DisconnectSession(protocol::OK); 192 other_client->DisconnectSession(protocol::OK);
193
194 // Quit if the host was destroyed.
195 if (!self)
196 return;
197 }
199 } 198 }
200 199
201 // Disconnects above must have destroyed all other clients. 200 // Disconnects above must have destroyed all other clients.
202 DCHECK_EQ(clients_.size(), 1U); 201 DCHECK_EQ(clients_.size(), 1U);
203 202
204 // Notify observers that there is at least one authenticated client. 203 // Notify observers that there is at least one authenticated client.
205 const std::string& jid = client->client_jid(); 204 const std::string& jid = client->client_jid();
206 205
207 reject_authenticating_client_ = false;
208
209 authenticating_client_ = true;
210 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_, 206 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_,
211 OnClientAuthenticated(jid)); 207 OnClientAuthenticated(jid));
212 authenticating_client_ = false;
213
214 return !reject_authenticating_client_;
215 } 208 }
216 209
217 void ChromotingHost::OnSessionChannelsConnected(ClientSession* client) { 210 void ChromotingHost::OnSessionChannelsConnected(ClientSession* client) {
218 DCHECK(CalledOnValidThread()); 211 DCHECK(CalledOnValidThread());
219 212
220 // Notify observers. 213 // Notify observers.
221 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_, 214 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_,
222 OnClientConnected(client->client_jid())); 215 OnClientConnected(client->client_jid()));
223 } 216 }
224 217
225 void ChromotingHost::OnSessionAuthenticationFailed(ClientSession* client) { 218 void ChromotingHost::OnSessionAuthenticationFailed(ClientSession* client) {
226 DCHECK(CalledOnValidThread()); 219 DCHECK(CalledOnValidThread());
227 220
228 // Notify observers. 221 // Notify observers.
229 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_, 222 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_,
230 OnAccessDenied(client->client_jid())); 223 OnAccessDenied(client->client_jid()));
231 } 224 }
232 225
233 void ChromotingHost::OnSessionClosed(ClientSession* client) { 226 void ChromotingHost::OnSessionClosed(ClientSession* client) {
234 DCHECK(CalledOnValidThread()); 227 DCHECK(CalledOnValidThread());
235 228
236 ClientList::iterator it = std::find(clients_.begin(), clients_.end(), client); 229 ClientList::iterator it = std::find(clients_.begin(), clients_.end(), client);
237 CHECK(it != clients_.end()); 230 CHECK(it != clients_.end());
238 231
239 if (client->is_authenticated()) { 232 bool was_authenticated = client->is_authenticated();
240 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_, 233 std::string jid = client->client_jid();
241 OnClientDisconnected(client->client_jid()));
242 }
243
244 clients_.erase(it); 234 clients_.erase(it);
245 delete client; 235 delete client;
236
237 if (was_authenticated) {
238 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_,
239 OnClientDisconnected(jid));
240 }
246 } 241 }
247 242
248 void ChromotingHost::OnSessionRouteChange( 243 void ChromotingHost::OnSessionRouteChange(
249 ClientSession* session, 244 ClientSession* session,
250 const std::string& channel_name, 245 const std::string& channel_name,
251 const protocol::TransportRoute& route) { 246 const protocol::TransportRoute& route) {
252 DCHECK(CalledOnValidThread()); 247 DCHECK(CalledOnValidThread());
253 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_, 248 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_,
254 OnClientRouteChange(session->client_jid(), channel_name, 249 OnClientRouteChange(session->client_jid(), channel_name,
255 route)); 250 route));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 DCHECK(CalledOnValidThread()); 301 DCHECK(CalledOnValidThread());
307 302
308 while (!clients_.empty()) { 303 while (!clients_.empty()) {
309 size_t size = clients_.size(); 304 size_t size = clients_.size();
310 clients_.front()->DisconnectSession(protocol::OK); 305 clients_.front()->DisconnectSession(protocol::OK);
311 CHECK_EQ(clients_.size(), size - 1); 306 CHECK_EQ(clients_.size(), size - 1);
312 } 307 }
313 } 308 }
314 309
315 } // namespace remoting 310 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/chromoting_host.h ('k') | remoting/host/chromoting_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698