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

Side by Side Diff: jingle/notifier/communicator/login.h

Issue 10545170: [Sync] Propagate XMPP auth errors to SyncNotifierObservers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix deps, win compile error Created 8 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) 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 #ifndef JINGLE_NOTIFIER_COMMUNICATOR_LOGIN_H_ 5 #ifndef JINGLE_NOTIFIER_COMMUNICATOR_LOGIN_H_
6 #define JINGLE_NOTIFIER_COMMUNICATOR_LOGIN_H_ 6 #define JINGLE_NOTIFIER_COMMUNICATOR_LOGIN_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 15 matching lines...) Expand all
26 } // namespace buzz 26 } // namespace buzz
27 27
28 namespace net { 28 namespace net {
29 class URLRequestContextGetter; 29 class URLRequestContextGetter;
30 } // namespace net 30 } // namespace net
31 31
32 namespace notifier { 32 namespace notifier {
33 33
34 class LoginSettings; 34 class LoginSettings;
35 35
36 // Workaround for MSVS 2005 bug that fails to handle inheritance from a nested 36 // Does the login, keeps it alive (with refreshing cookies and
37 // class properly if it comes directly on a base class list. 37 // reattempting login when disconnected), and figures out what actions
38 typedef SingleLoginAttempt::Delegate SingleLoginAttemptDelegate; 38 // to take on the various errors that may occur.
39
40 // Does the login, keeps it alive (with refreshing cookies and reattempting
41 // login when disconnected), figures out what actions to take on the various
42 // errors that may occur.
43 class Login : public net::NetworkChangeNotifier::IPAddressObserver, 39 class Login : public net::NetworkChangeNotifier::IPAddressObserver,
44 public SingleLoginAttemptDelegate { 40 public SingleLoginAttempt::Delegate {
45 public: 41 public:
46 class Delegate { 42 class Delegate {
47 public: 43 public:
44 // Called when a connection has been successfully established.
48 virtual void OnConnect( 45 virtual void OnConnect(
49 base::WeakPtr<buzz::XmppTaskParentInterface> base_task) = 0; 46 base::WeakPtr<buzz::XmppTaskParentInterface> base_task) = 0;
50 virtual void OnDisconnect() = 0; 47
48 // Called when there's no connection to the server but we expect
49 // it to come back come back eventually. The connection will be
50 // retried with exponential backoff.
51 virtual void OnTransientDisconnection() = 0;
52
53 // Called when the current login credentials have been rejected.
54 // The connection will still be retried with exponential backoff;
55 // it's up to the delegate to stop connecting and/or prompt for
56 // new credentials.
57 virtual void OnCredentialsRejected() = 0;
51 58
52 protected: 59 protected:
53 virtual ~Delegate() {} 60 virtual ~Delegate();
54 }; 61 };
55 62
56 // Does not take ownership of |delegate|, which must not be NULL. 63 // Does not take ownership of |delegate|, which must not be NULL.
57 Login(Delegate* delegate, 64 Login(Delegate* delegate,
58 const buzz::XmppClientSettings& user_settings, 65 const buzz::XmppClientSettings& user_settings,
59 const scoped_refptr<net::URLRequestContextGetter>& 66 const scoped_refptr<net::URLRequestContextGetter>&
60 request_context_getter, 67 request_context_getter,
61 const ServerList& servers, 68 const ServerList& servers,
62 bool try_ssltcp_first, 69 bool try_ssltcp_first,
63 const std::string& auth_mechanism); 70 const std::string& auth_mechanism);
64 virtual ~Login(); 71 virtual ~Login();
65 72
73 // Starts connecting (or forces a reconnection if we're backed off).
66 void StartConnection(); 74 void StartConnection();
67 // The updated settings only take effect the next time StartConnection 75
68 // is called. 76 // The updated settings take effect only the next time when a
77 // connection is attempted (either via reconnection or a call to
78 // StartConnection()).
69 void UpdateXmppSettings(const buzz::XmppClientSettings& user_settings); 79 void UpdateXmppSettings(const buzz::XmppClientSettings& user_settings);
70 80
71 // net::NetworkChangeNotifier::IPAddressObserver implementation. 81 // net::NetworkChangeNotifier::IPAddressObserver implementation.
72 virtual void OnIPAddressChanged() OVERRIDE; 82 virtual void OnIPAddressChanged() OVERRIDE;
73 83
74 // SingleLoginAttempt::Delegate implementation. 84 // SingleLoginAttempt::Delegate implementation.
75 virtual void OnConnect( 85 virtual void OnConnect(
76 base::WeakPtr<buzz::XmppTaskParentInterface> base_task) OVERRIDE; 86 base::WeakPtr<buzz::XmppTaskParentInterface> base_task) OVERRIDE;
77 virtual void OnNeedReconnect() OVERRIDE;
78 virtual void OnRedirect(const ServerInformation& redirect_server) OVERRIDE; 87 virtual void OnRedirect(const ServerInformation& redirect_server) OVERRIDE;
88 virtual void OnCredentialsRejected() OVERRIDE;
89 virtual void OnSettingsExhausted() OVERRIDE;
79 90
80 private: 91 private:
81 void OnLogoff(); 92 void OnLogoff();
82 93
83 // Stops any existing reconnect timer and sets an initial reconnect 94 // Stops any existing reconnect timer and sets an initial reconnect
84 // interval. 95 // interval.
85 void ResetReconnectState(); 96 void ResetReconnectState();
86 97
87 // Tries to reconnect in some point in the future. If called 98 // Tries to reconnect in some point in the future. If called
88 // repeatedly, will wait longer and longer until reconnecting. 99 // repeatedly, will wait longer and longer until reconnecting.
89 void TryReconnect(); 100 void TryReconnect();
90 101
91 // The actual function (called by |reconnect_timer_|) that does the 102 // The actual function (called by |reconnect_timer_|) that does the
92 // reconnection. 103 // reconnection.
93 void DoReconnect(); 104 void DoReconnect();
94 105
95 Delegate* const delegate_; 106 Delegate* const delegate_;
96 LoginSettings login_settings_; 107 LoginSettings login_settings_;
97 scoped_ptr<SingleLoginAttempt> single_attempt_; 108 scoped_ptr<SingleLoginAttempt> single_attempt_;
98 109
99 // reconnection state. 110 // reconnection state.
100 base::TimeDelta reconnect_interval_; 111 base::TimeDelta reconnect_interval_;
101 base::OneShotTimer<Login> reconnect_timer_; 112 base::OneShotTimer<Login> reconnect_timer_;
102 113
103 DISALLOW_COPY_AND_ASSIGN(Login); 114 DISALLOW_COPY_AND_ASSIGN(Login);
104 }; 115 };
105 116
106 // Workaround for MSVS 2005 bug that fails to handle inheritance from a nested
107 // class properly if it comes directly on a base class list.
108 typedef Login::Delegate LoginDelegate;
109
110 } // namespace notifier 117 } // namespace notifier
111 118
112 #endif // JINGLE_NOTIFIER_COMMUNICATOR_LOGIN_H_ 119 #endif // JINGLE_NOTIFIER_COMMUNICATOR_LOGIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698