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

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

Issue 2911893003: Deprecate NonThreadSafe in remoting in favor of SequenceChecker. (Closed)
Patch Set: Created 3 years, 6 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
« no previous file with comments | « remoting/host/signaling_connector.h ('k') | remoting/host/win/rdp_client.h » ('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/signaling_connector.h" 5 #include "remoting/host/signaling_connector.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 reconnect_attempts_(0) { 53 reconnect_attempts_(0) {
54 DCHECK(!auth_failed_callback_.is_null()); 54 DCHECK(!auth_failed_callback_.is_null());
55 DCHECK(dns_blackhole_checker_.get()); 55 DCHECK(dns_blackhole_checker_.get());
56 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); 56 net::NetworkChangeNotifier::AddConnectionTypeObserver(this);
57 net::NetworkChangeNotifier::AddIPAddressObserver(this); 57 net::NetworkChangeNotifier::AddIPAddressObserver(this);
58 signal_strategy_->AddListener(this); 58 signal_strategy_->AddListener(this);
59 ScheduleTryReconnect(); 59 ScheduleTryReconnect();
60 } 60 }
61 61
62 SignalingConnector::~SignalingConnector() { 62 SignalingConnector::~SignalingConnector() {
63 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
63 signal_strategy_->RemoveListener(this); 64 signal_strategy_->RemoveListener(this);
64 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); 65 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
65 net::NetworkChangeNotifier::RemoveIPAddressObserver(this); 66 net::NetworkChangeNotifier::RemoveIPAddressObserver(this);
66 } 67 }
67 68
68 void SignalingConnector::OnSignalStrategyStateChange( 69 void SignalingConnector::OnSignalStrategyStateChange(
69 SignalStrategy::State state) { 70 SignalStrategy::State state) {
70 DCHECK(CalledOnValidThread()); 71 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
71 72
72 if (state == SignalStrategy::CONNECTED) { 73 if (state == SignalStrategy::CONNECTED) {
73 HOST_LOG << "Signaling connected. New JID: " 74 HOST_LOG << "Signaling connected. New JID: "
74 << signal_strategy_->GetLocalAddress().jid(); 75 << signal_strategy_->GetLocalAddress().jid();
75 reconnect_attempts_ = 0; 76 reconnect_attempts_ = 0;
76 } else if (state == SignalStrategy::DISCONNECTED) { 77 } else if (state == SignalStrategy::DISCONNECTED) {
77 HOST_LOG << "Signaling disconnected. error=" 78 HOST_LOG << "Signaling disconnected. error="
78 << SignalStrategyErrorToString(signal_strategy_->GetError()); 79 << SignalStrategyErrorToString(signal_strategy_->GetError());
79 reconnect_attempts_++; 80 reconnect_attempts_++;
80 81
81 if (signal_strategy_->GetError() == SignalStrategy::AUTHENTICATION_FAILED) 82 if (signal_strategy_->GetError() == SignalStrategy::AUTHENTICATION_FAILED)
82 oauth_token_getter_->InvalidateCache(); 83 oauth_token_getter_->InvalidateCache();
83 84
84 ScheduleTryReconnect(); 85 ScheduleTryReconnect();
85 } 86 }
86 } 87 }
87 88
88 bool SignalingConnector::OnSignalStrategyIncomingStanza( 89 bool SignalingConnector::OnSignalStrategyIncomingStanza(
89 const buzz::XmlElement* stanza) { 90 const buzz::XmlElement* stanza) {
90 return false; 91 return false;
91 } 92 }
92 93
93 void SignalingConnector::OnConnectionTypeChanged( 94 void SignalingConnector::OnConnectionTypeChanged(
94 net::NetworkChangeNotifier::ConnectionType type) { 95 net::NetworkChangeNotifier::ConnectionType type) {
95 DCHECK(CalledOnValidThread()); 96 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
96 if (type != net::NetworkChangeNotifier::CONNECTION_NONE && 97 if (type != net::NetworkChangeNotifier::CONNECTION_NONE &&
97 signal_strategy_->GetState() == SignalStrategy::DISCONNECTED) { 98 signal_strategy_->GetState() == SignalStrategy::DISCONNECTED) {
98 HOST_LOG << "Network state changed to online."; 99 HOST_LOG << "Network state changed to online.";
99 ResetAndTryReconnect(); 100 ResetAndTryReconnect();
100 } 101 }
101 } 102 }
102 103
103 void SignalingConnector::OnIPAddressChanged() { 104 void SignalingConnector::OnIPAddressChanged() {
104 DCHECK(CalledOnValidThread()); 105 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
105 if (signal_strategy_->GetState() == SignalStrategy::DISCONNECTED) { 106 if (signal_strategy_->GetState() == SignalStrategy::DISCONNECTED) {
106 HOST_LOG << "IP address has changed."; 107 HOST_LOG << "IP address has changed.";
107 ResetAndTryReconnect(); 108 ResetAndTryReconnect();
108 } 109 }
109 } 110 }
110 111
111 void SignalingConnector::OnAccessToken(OAuthTokenGetter::Status status, 112 void SignalingConnector::OnAccessToken(OAuthTokenGetter::Status status,
112 const std::string& user_email, 113 const std::string& user_email,
113 const std::string& access_token) { 114 const std::string& access_token) {
114 DCHECK(CalledOnValidThread()); 115 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
115 116
116 if (status == OAuthTokenGetter::AUTH_ERROR) { 117 if (status == OAuthTokenGetter::AUTH_ERROR) {
117 auth_failed_callback_.Run(); 118 auth_failed_callback_.Run();
118 return; 119 return;
119 } else if (status == OAuthTokenGetter::NETWORK_ERROR) { 120 } else if (status == OAuthTokenGetter::NETWORK_ERROR) {
120 OnNetworkError(); 121 OnNetworkError();
121 return; 122 return;
122 } 123 }
123 124
124 DCHECK_EQ(status, OAuthTokenGetter::SUCCESS); 125 DCHECK_EQ(status, OAuthTokenGetter::SUCCESS);
125 HOST_LOG << "Received user info."; 126 HOST_LOG << "Received user info.";
126 127
127 signal_strategy_->SetAuthInfo(user_email, access_token); 128 signal_strategy_->SetAuthInfo(user_email, access_token);
128 129
129 // Now that we've refreshed the token and verified that it's for the correct 130 // Now that we've refreshed the token and verified that it's for the correct
130 // user account, try to connect using the new token. 131 // user account, try to connect using the new token.
131 DCHECK_EQ(signal_strategy_->GetState(), SignalStrategy::DISCONNECTED); 132 DCHECK_EQ(signal_strategy_->GetState(), SignalStrategy::DISCONNECTED);
132 signal_strategy_->Connect(); 133 signal_strategy_->Connect();
133 } 134 }
134 135
135 void SignalingConnector::OnNetworkError() { 136 void SignalingConnector::OnNetworkError() {
136 DCHECK(CalledOnValidThread()); 137 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
137 reconnect_attempts_++; 138 reconnect_attempts_++;
138 ScheduleTryReconnect(); 139 ScheduleTryReconnect();
139 } 140 }
140 141
141 void SignalingConnector::ScheduleTryReconnect() { 142 void SignalingConnector::ScheduleTryReconnect() {
142 DCHECK(CalledOnValidThread()); 143 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
143 if (timer_.IsRunning() || net::NetworkChangeNotifier::IsOffline()) 144 if (timer_.IsRunning() || net::NetworkChangeNotifier::IsOffline())
144 return; 145 return;
145 int delay_s = std::min(1 << reconnect_attempts_, 146 int delay_s = std::min(1 << reconnect_attempts_,
146 kMaxReconnectDelaySeconds); 147 kMaxReconnectDelaySeconds);
147 timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(delay_s), 148 timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(delay_s),
148 this, &SignalingConnector::TryReconnect); 149 this, &SignalingConnector::TryReconnect);
149 } 150 }
150 151
151 void SignalingConnector::ResetAndTryReconnect() { 152 void SignalingConnector::ResetAndTryReconnect() {
152 DCHECK(CalledOnValidThread()); 153 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
153 signal_strategy_->Disconnect(); 154 signal_strategy_->Disconnect();
154 reconnect_attempts_ = 0; 155 reconnect_attempts_ = 0;
155 timer_.Stop(); 156 timer_.Stop();
156 ScheduleTryReconnect(); 157 ScheduleTryReconnect();
157 } 158 }
158 159
159 void SignalingConnector::TryReconnect() { 160 void SignalingConnector::TryReconnect() {
160 DCHECK(CalledOnValidThread()); 161 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
161 DCHECK(dns_blackhole_checker_.get()); 162 DCHECK(dns_blackhole_checker_.get());
162 163
163 // This will check if this machine is allowed to access the chromoting 164 // This will check if this machine is allowed to access the chromoting
164 // host talkgadget. 165 // host talkgadget.
165 dns_blackhole_checker_->CheckForDnsBlackhole( 166 dns_blackhole_checker_->CheckForDnsBlackhole(
166 base::Bind(&SignalingConnector::OnDnsBlackholeCheckerDone, 167 base::Bind(&SignalingConnector::OnDnsBlackholeCheckerDone,
167 base::Unretained(this))); 168 base::Unretained(this)));
168 } 169 }
169 170
170 void SignalingConnector::OnDnsBlackholeCheckerDone(bool allow) { 171 void SignalingConnector::OnDnsBlackholeCheckerDone(bool allow) {
171 DCHECK(CalledOnValidThread()); 172 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
172 173
173 // Unable to access the host talkgadget. Don't allow the connection, but 174 // Unable to access the host talkgadget. Don't allow the connection, but
174 // schedule a reconnect in case this is a transient problem rather than 175 // schedule a reconnect in case this is a transient problem rather than
175 // an outright block. 176 // an outright block.
176 if (!allow) { 177 if (!allow) {
177 reconnect_attempts_++; 178 reconnect_attempts_++;
178 HOST_LOG << "Talkgadget check failed. Scheduling reconnect. Attempt " 179 HOST_LOG << "Talkgadget check failed. Scheduling reconnect. Attempt "
179 << reconnect_attempts_; 180 << reconnect_attempts_;
180 ScheduleTryReconnect(); 181 ScheduleTryReconnect();
181 return; 182 return;
182 } 183 }
183 184
184 if (signal_strategy_->GetState() == SignalStrategy::DISCONNECTED) { 185 if (signal_strategy_->GetState() == SignalStrategy::DISCONNECTED) {
185 HOST_LOG << "Attempting to connect signaling."; 186 HOST_LOG << "Attempting to connect signaling.";
186 oauth_token_getter_->CallWithToken( 187 oauth_token_getter_->CallWithToken(
187 base::Bind(&SignalingConnector::OnAccessToken, AsWeakPtr())); 188 base::Bind(&SignalingConnector::OnAccessToken, AsWeakPtr()));
188 } 189 }
189 } 190 }
190 191
191 } // namespace remoting 192 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/signaling_connector.h ('k') | remoting/host/win/rdp_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698