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

Side by Side Diff: chrome/common/net/notifier/communicator/login.cc

Issue 2802015: Massively simplify the NetworkChangeNotifier infrastructure:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <string> 5 #include <string>
6 6
7 #include "chrome/common/net/notifier/communicator/login.h" 7 #include "chrome/common/net/notifier/communicator/login.h"
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/time.h" 10 #include "base/time.h"
11 #include "chrome/common/net/notifier/communicator/auto_reconnect.h" 11 #include "chrome/common/net/notifier/communicator/auto_reconnect.h"
12 #include "chrome/common/net/notifier/communicator/connection_options.h" 12 #include "chrome/common/net/notifier/communicator/connection_options.h"
13 #include "chrome/common/net/notifier/communicator/login_settings.h" 13 #include "chrome/common/net/notifier/communicator/login_settings.h"
14 #include "chrome/common/net/notifier/communicator/product_info.h" 14 #include "chrome/common/net/notifier/communicator/product_info.h"
15 #include "chrome/common/net/notifier/communicator/single_login_attempt.h" 15 #include "chrome/common/net/notifier/communicator/single_login_attempt.h"
16 #include "net/base/host_port_pair.h" 16 #include "net/base/host_port_pair.h"
17 #include "net/base/network_change_notifier.h"
18 #include "talk/base/common.h" 17 #include "talk/base/common.h"
19 #include "talk/base/firewallsocketserver.h" 18 #include "talk/base/firewallsocketserver.h"
20 #include "talk/base/logging.h" 19 #include "talk/base/logging.h"
21 #include "talk/base/physicalsocketserver.h" 20 #include "talk/base/physicalsocketserver.h"
22 #include "talk/base/taskrunner.h" 21 #include "talk/base/taskrunner.h"
23 #include "talk/xmllite/xmlelement.h" 22 #include "talk/xmllite/xmlelement.h"
24 #include "talk/xmpp/asyncsocket.h" 23 #include "talk/xmpp/asyncsocket.h"
25 #include "talk/xmpp/prexmppauth.h" 24 #include "talk/xmpp/prexmppauth.h"
26 #include "talk/xmpp/xmppclient.h" 25 #include "talk/xmpp/xmppclient.h"
27 #include "talk/xmpp/xmppclientsettings.h" 26 #include "talk/xmpp/xmppclientsettings.h"
28 #include "talk/xmpp/xmppengine.h" 27 #include "talk/xmpp/xmppengine.h"
29 28
30 namespace notifier { 29 namespace notifier {
31 30
32 // Redirect valid for 5 minutes. 31 // Redirect valid for 5 minutes.
33 static const int kRedirectTimeoutMinutes = 5; 32 static const int kRedirectTimeoutMinutes = 5;
34 33
35 // Disconnect if network stays down for more than 10 seconds. 34 // Disconnect if network stays down for more than 10 seconds.
36 static const int kDisconnectionDelaySecs = 10; 35 static const int kDisconnectionDelaySecs = 10;
37 36
38 Login::Login(talk_base::TaskParent* parent, 37 Login::Login(talk_base::TaskParent* parent,
39 const buzz::XmppClientSettings& user_settings, 38 const buzz::XmppClientSettings& user_settings,
40 const ConnectionOptions& options, 39 const ConnectionOptions& options,
41 std::string lang, 40 std::string lang,
42 net::HostResolver* host_resolver, 41 net::HostResolver* host_resolver,
43 ServerInformation* server_list, 42 ServerInformation* server_list,
44 int server_count, 43 int server_count,
45 net::NetworkChangeNotifier* network_change_notifier,
46 talk_base::FirewallManager* firewall, 44 talk_base::FirewallManager* firewall,
47 bool proxy_only, 45 bool proxy_only,
48 bool previous_login_successful) 46 bool previous_login_successful)
49 : parent_(parent), 47 : parent_(parent),
50 login_settings_(new LoginSettings(user_settings, 48 login_settings_(new LoginSettings(user_settings,
51 options, 49 options,
52 lang, 50 lang,
53 host_resolver, 51 host_resolver,
54 server_list, 52 server_list,
55 server_count, 53 server_count,
56 firewall, 54 firewall,
57 proxy_only)), 55 proxy_only)),
58 network_change_notifier_(network_change_notifier),
59 single_attempt_(NULL), 56 single_attempt_(NULL),
60 successful_connection_(previous_login_successful), 57 successful_connection_(previous_login_successful),
61 state_(STATE_OPENING), 58 state_(STATE_OPENING),
62 redirect_port_(0), 59 redirect_port_(0),
63 unexpected_disconnect_occurred_(false), 60 unexpected_disconnect_occurred_(false),
64 google_host_(user_settings.host()), 61 google_host_(user_settings.host()),
65 google_user_(user_settings.user()) { 62 google_user_(user_settings.user()) {
66 DCHECK(network_change_notifier_);
67 // Hook up all the signals and observers. 63 // Hook up all the signals and observers.
68 network_change_notifier_->AddObserver(this); 64 net::NetworkChangeNotifier::AddObserver(this);
69 auto_reconnect_.SignalStartConnection.connect(this, 65 auto_reconnect_.SignalStartConnection.connect(this,
70 &Login::StartConnection); 66 &Login::StartConnection);
71 auto_reconnect_.SignalTimerStartStop.connect( 67 auto_reconnect_.SignalTimerStartStop.connect(
72 this, 68 this,
73 &Login::OnAutoReconnectTimerChange); 69 &Login::OnAutoReconnectTimerChange);
74 SignalClientStateChange.connect(&auto_reconnect_, 70 SignalClientStateChange.connect(&auto_reconnect_,
75 &AutoReconnect::OnClientStateChange); 71 &AutoReconnect::OnClientStateChange);
76 SignalIdleChange.connect(&auto_reconnect_, 72 SignalIdleChange.connect(&auto_reconnect_,
77 &AutoReconnect::set_idle); 73 &AutoReconnect::set_idle);
78 SignalPowerSuspended.connect(&auto_reconnect_, 74 SignalPowerSuspended.connect(&auto_reconnect_,
79 &AutoReconnect::OnPowerSuspend); 75 &AutoReconnect::OnPowerSuspend);
80 76
81 // Then check the initial state of the connection. 77 // Then check the initial state of the connection.
82 CheckConnection(); 78 CheckConnection();
83 } 79 }
84 80
85 // Defined so that the destructors are executed here (and the corresponding 81 // Defined so that the destructors are executed here (and the corresponding
86 // classes don't need to be included in the header file). 82 // classes don't need to be included in the header file).
87 Login::~Login() { 83 Login::~Login() {
88 if (single_attempt_) { 84 if (single_attempt_) {
89 single_attempt_->Abort(); 85 single_attempt_->Abort();
90 single_attempt_ = NULL; 86 single_attempt_ = NULL;
91 } 87 }
92 network_change_notifier_->RemoveObserver(this); 88 net::NetworkChangeNotifier::RemoveObserver(this);
93 } 89 }
94 90
95 void Login::StartConnection() { 91 void Login::StartConnection() {
96 // If there is a server redirect, use it. 92 // If there is a server redirect, use it.
97 if (base::Time::Now() < 93 if (base::Time::Now() <
98 (redirect_time_ + 94 (redirect_time_ +
99 base::TimeDelta::FromMinutes(kRedirectTimeoutMinutes))) { 95 base::TimeDelta::FromMinutes(kRedirectTimeoutMinutes))) {
100 // Override server/port with redirect values. 96 // Override server/port with redirect values.
101 DCHECK_NE(redirect_port_, 0); 97 DCHECK_NE(redirect_port_, 0);
102 net::HostPortPair server_override(redirect_server_, redirect_port_); 98 net::HostPortPair server_override(redirect_server_, redirect_port_);
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 335
340 if (single_attempt_) { 336 if (single_attempt_) {
341 single_attempt_->Abort(); 337 single_attempt_->Abort();
342 single_attempt_ = NULL; 338 single_attempt_ = NULL;
343 } 339 }
344 340
345 StartConnection(); 341 StartConnection();
346 } 342 }
347 343
348 } // namespace notifier 344 } // namespace notifier
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698