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

Unified Diff: chrome/browser/sync/engine/auth_watcher.h

Issue 3305003: New authorization framework for sync. ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 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
Index: chrome/browser/sync/engine/auth_watcher.h
===================================================================
--- chrome/browser/sync/engine/auth_watcher.h (revision 58702)
+++ chrome/browser/sync/engine/auth_watcher.h (working copy)
@@ -1,222 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// AuthWatcher watches authentication events and user open and close
-// events and accordingly opens and closes shares.
-
-#ifndef CHROME_BROWSER_SYNC_ENGINE_AUTH_WATCHER_H_
-#define CHROME_BROWSER_SYNC_ENGINE_AUTH_WATCHER_H_
-#pragma once
-
-#include <string>
-
-#include "base/gtest_prod_util.h"
-#include "base/message_loop_proxy.h"
-#include "base/ref_counted.h"
-#include "base/scoped_ptr.h"
-#include "base/thread.h"
-#include "chrome/browser/sync/protocol/service_constants.h"
-#include "chrome/common/deprecated/event_sys.h"
-#include "chrome/common/net/gaia/gaia_authenticator.h"
-
-namespace syncable {
-struct DirectoryManagerEvent;
-class DirectoryManager;
-}
-
-namespace browser_sync {
-
-class AuthWatcher;
-class ServerConnectionManager;
-class URLFactory;
-class UserSettings;
-struct ServerConnectionEvent;
-
-struct AuthWatcherEvent {
- enum WhatHappened {
- AUTHENTICATION_ATTEMPT_START,
- AUTHWATCHER_DESTROYED,
- AUTH_RENEWED, // Currently only used in testing.
- AUTH_SUCCEEDED,
- GAIA_AUTH_FAILED,
- SERVICE_USER_NOT_SIGNED_UP,
- SERVICE_AUTH_FAILED,
- SERVICE_CONNECTION_FAILED,
- // Used in a safety check in AuthWatcher::AuthenticateWithToken()
- ILLEGAL_VALUE,
- };
- WhatHappened what_happened;
- const gaia::GaiaAuthenticator::AuthResults* auth_results;
- // use AuthWatcherEvent as its own traits type in hookups.
- typedef AuthWatcherEvent EventType;
- static inline bool IsChannelShutdownEvent(const AuthWatcherEvent& event) {
- return event.what_happened == AUTHWATCHER_DESTROYED;
- }
-
- // Used for AUTH_SUCCEEDED/AUTH_RENEWED notification.
- std::string user_email;
- // May be empty if we're only locally authenticated.
- std::string auth_token;
-
- // How was this auth attempt initiated?
- enum AuthenticationTrigger {
- USER_INITIATED = 0, // default value.
- EXPIRED_CREDENTIALS,
- };
-
- AuthenticationTrigger trigger;
-};
-
-// The mother-class of Authentication for the sync backend. Handles both gaia
-// and sync service authentication via asynchronous Authenticate* methods,
-// raising AuthWatcherEvents on success/failure. The implementation currently
-// runs its own backend thread for the actual auth processing, which means
-// the AuthWatcherEvents can be raised on a different thread than the one that
-// invoked authentication.
-class AuthWatcher : public base::RefCountedThreadSafe<AuthWatcher> {
- friend class AuthWatcherTest;
- FRIEND_TEST_ALL_PREFIXES(AuthWatcherTest, Construction);
- public:
- // Normal progression is local -> gaia -> token.
- enum Status { LOCALLY_AUTHENTICATED, GAIA_AUTHENTICATED, NOT_AUTHENTICATED };
- typedef syncable::DirectoryManagerEvent DirectoryManagerEvent;
- typedef syncable::DirectoryManager DirectoryManager;
-
- AuthWatcher(DirectoryManager* dirman,
- ServerConnectionManager* scm,
- const std::string& user_agent,
- const std::string& service_id,
- const std::string& gaia_url,
- UserSettings* user_settings,
- gaia::GaiaAuthenticator* gaia_auth);
- ~AuthWatcher();
-
- typedef EventChannel<AuthWatcherEvent, Lock> Channel;
-
- inline Channel* channel() const {
- return channel_.get();
- }
-
- // The following 3 flavors of authentication routines are asynchronous and can
- // be called from any thread.
- // If |captcha_value| is specified but |captcha_token| is not, this will
- // attempt authentication using the last observed captcha token out of
- // convenience in the common case so the token doesn't have to be plumbed
- // everywhere.
- void Authenticate(const std::string& email, const std::string& password,
- const std::string& captcha_token, const std::string& captcha_value);
-
- void Authenticate(const std::string& email, const std::string& password,
- bool persist_creds_to_disk) {
- Authenticate(email, password, "", "");
- }
-
- // Use this to update only the token of the current email address.
- void RenewAuthToken(const std::string& updated_token);
-
- // Use this version when you don't need the gaia authentication step because
- // you already have a valid LSID cookie for |gaia_email|.
- void AuthenticateWithLsid(const std::string& lsid);
-
- // Use this version when you don't need the gaia authentication step because
- // you already have a valid token for |gaia_email|.
- void AuthenticateWithToken(const std::string& gaia_email,
- const std::string& auth_token);
-
- // Joins on the backend thread. The AuthWatcher is useless after this and
- // should be destroyed.
- void Shutdown() { auth_backend_thread_.Stop(); }
-
- std::string email() const;
- syncable::DirectoryManager* dirman() const { return dirman_; }
- ServerConnectionManager* scm() const { return scm_; }
- UserSettings* settings() const { return user_settings_; }
- Status status() const { return (Status)status_; }
-
- private:
- void ClearAuthenticationData();
-
- void NotifyAuthChanged(const std::string& email,
- const std::string& auth_token,
- bool renewed);
- void HandleServerConnectionEvent(const ServerConnectionEvent& event);
-
- void SaveUserSettings(const std::string& username,
- const std::string& auth_token);
-
- MessageLoop* message_loop() { return auth_backend_thread_.message_loop(); }
-
- base::MessageLoopProxy* message_loop_proxy() {
- return loop_proxy_;
- }
-
- void DoRenewAuthToken(const std::string& updated_token);
-
- // These two helpers should only be called from the auth function.
- // Called when authentication with gaia succeeds, to save credential info.
- void PersistCredentials();
- // Called when authentication with gaia fails.
- void ProcessGaiaAuthFailure();
-
- // Just checks that the user has at least one local share cache.
- bool AuthenticateLocally(std::string email);
- // Also checks the user's password against stored password hash.
- bool AuthenticateLocally(std::string email, const std::string& password);
-
- // Sets the trigger member of the event and sends the event on channel_.
- void NotifyListeners(AuthWatcherEvent* event);
-
- inline std::string FormatAsEmailAddress(const std::string& email) const {
- std::string mail(email);
- if (email.find('@') == std::string::npos) {
- mail.push_back('@');
- // TODO(chron): Should this be done only at the UI level?
- mail.append(DEFAULT_SIGNIN_DOMAIN);
- }
- return mail;
- }
-
- // A struct to marshal various data across to the auth_backend_thread_ on
- // Authenticate() and AuthenticateWithToken calls.
- struct AuthRequest {
- std::string email;
- std::string password;
- std::string auth_token;
- std::string captcha_token;
- std::string captcha_value;
- bool persist_creds_to_disk;
- AuthWatcherEvent::AuthenticationTrigger trigger;
- };
-
- // The public interface Authenticate methods are proxies to these, which
- // can only be called from |auth_backend_thread_|.
- void DoAuthenticate(const AuthRequest& request);
- void DoAuthenticateWithLsid(const std::string& lsid);
- void DoAuthenticateWithToken(const std::string& email,
- const std::string& auth_token);
-
- // The public HandleServerConnectionEvent method proxies to this method, which
- // can only be called on |auth_backend_thread_|.
- void DoHandleServerConnectionEvent(
- const ServerConnectionEvent& event,
- const std::string& auth_token_snapshot);
-
- scoped_ptr<gaia::GaiaAuthenticator> const gaia_;
- syncable::DirectoryManager* const dirman_;
- ServerConnectionManager* const scm_;
- scoped_ptr<EventListenerHookup> connmgr_hookup_;
- Status status_;
- UserSettings* const user_settings_;
- scoped_ptr<Channel> channel_;
-
- base::Thread auth_backend_thread_;
- scoped_refptr<base::MessageLoopProxy> loop_proxy_;
-
- AuthWatcherEvent::AuthenticationTrigger current_attempt_trigger_;
- DISALLOW_COPY_AND_ASSIGN(AuthWatcher);
-};
-
-} // namespace browser_sync
-
-#endif // CHROME_BROWSER_SYNC_ENGINE_AUTH_WATCHER_H_

Powered by Google App Engine
This is Rietveld 408576698