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

Unified Diff: chrome/browser/chromeos/login/login_utils.cc

Issue 7850003: Fixed sync re-activation when the device comes online after offline login. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/login/user_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/login/login_utils.cc
===================================================================
--- chrome/browser/chromeos/login/login_utils.cc (revision 99948)
+++ chrome/browser/chromeos/login/login_utils.cc (working copy)
@@ -192,9 +192,11 @@
const std::string& auth) OVERRIDE {
GaiaAuthConsumer::ClientLoginResult credentials(sid,
lsid, auth, std::string());
+ UserManager::Get()->set_offline_login(false);
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
new StartSyncOnUIThreadTask(credentials));
}
+
virtual void OnOAuthLoginFailure(
const GoogleServiceAuthError& error) OVERRIDE {
LOG(WARNING) << "Failed to verify OAuth1 access tokens,"
@@ -205,6 +207,8 @@
if (error.state() != GoogleServiceAuthError::CONNECTION_FAILED) {
UserManager::Get()->SaveUserOAuthStatus(username_,
UserManager::OAUTH_TOKEN_STATUS_INVALID);
+ } else {
+ UserManager::Get()->set_offline_login(true);
}
}
@@ -267,7 +271,8 @@
class LoginUtilsImpl : public LoginUtils,
public ProfileManagerObserver,
- public GaiaOAuthConsumer {
+ public GaiaOAuthConsumer,
+ public net::NetworkChangeNotifier::OnlineStateObserver {
public:
LoginUtilsImpl()
: background_view_(NULL),
@@ -275,8 +280,13 @@
using_oauth_(false),
has_cookies_(false),
delegate_(NULL) {
+ net::NetworkChangeNotifier::AddOnlineStateObserver(this);
}
+ virtual ~LoginUtilsImpl() {
+ net::NetworkChangeNotifier::RemoveOnlineStateObserver(this);
+ }
+
virtual void PrepareProfile(
const std::string& username,
const std::string& password,
@@ -348,6 +358,9 @@
virtual void OnOAuthGetAccessTokenFailure(
const GoogleServiceAuthError& error) OVERRIDE;
+ // net::NetworkChangeNotifier::OnlineStateObserver overrides.
+ virtual void OnOnlineStateChanged(bool online) OVERRIDE;
+
protected:
virtual std::string GetOffTheRecordCommandLine(
const GURL& start_url,
@@ -933,6 +946,7 @@
if (!encoded_token.length() || !encoded_secret.length())
return false;
+ DCHECK(authenticator_.get());
std::string decoded_token = authenticator_->DecryptToken(encoded_token);
std::string decoded_secret = authenticator_->DecryptToken(encoded_secret);
if (!decoded_token.length() || !decoded_secret.length()) {
@@ -1017,6 +1031,22 @@
LOG(WARNING) << "Failed fetching OAuth v1 token, error: " << error.state();
}
+void LoginUtilsImpl::OnOnlineStateChanged(bool online) {
+ // If we come online for the first time after successful offline login,
+ // we need to kick of OAuth token verification process again.
+ if (UserManager::Get()->user_is_logged_in() &&
+ UserManager::Get()->offline_login() && online) {
+ if (!authenticator_.get())
+ CreateAuthenticator(NULL);
+ std::string oauth1_token;
+ std::string oauth1_secret;
+ Profile* user_profile = ProfileManager::GetDefaultProfile();
+ if (ReadOAuth1AccessToken(user_profile, &oauth1_token, &oauth1_secret))
+ VerifyOAuth1AccessToken(user_profile, oauth1_token, oauth1_secret);
+ authenticator_ = NULL;
+ }
+}
+
LoginUtils* LoginUtils::Get() {
return LoginUtilsWrapper::GetInstance()->get();
}
« no previous file with comments | « no previous file | chrome/browser/chromeos/login/user_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698