blob: eba0efb418d15e812d12094e5d3bf4f74a260202 [file] [log] [blame]
// Copyright 2014 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.
#ifndef COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_CLIENT_H_
#define COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_CLIENT_H_
#include <memory>
#include "base/callback.h"
#include "base/callback_list.h"
#include "base/time/time.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/signin/core/browser/account_info.h"
#include "components/signin/core/browser/profile_management_switches.h"
#include "components/signin/core/browser/signin_metrics.h"
#include "components/signin/core/browser/webdata/token_web_data.h"
#include "google_apis/gaia/gaia_auth_fetcher.h"
#include "net/cookies/cookie_change_dispatcher.h"
#include "url/gurl.h"
class PrefService;
class TokenWebData;
namespace content_settings {
class Observer;
}
namespace net {
class URLRequestContextGetter;
}
// An interface that needs to be supplied to the Signin component by its
// embedder.
class SigninClient : public KeyedService {
public:
// The subcription for cookie changed notifications.
class CookieChangeSubscription {
public:
virtual ~CookieChangeSubscription() = default;
};
~SigninClient() override = default;
// If |for_ephemeral| is true, special kind of device ID for ephemeral users
// is generated.
static std::string GenerateSigninScopedDeviceID(bool for_ephemeral);
// Sign out.
void SignOut();
// Call when done local initialization and SigninClient can initiate any work
// it has to do that may require other components (like ProfileManager) to be
// available.
virtual void DoFinalInit() = 0;
// Gets the preferences associated with the client.
virtual PrefService* GetPrefs() = 0;
// Gets the TokenWebData instance associated with the client.
virtual scoped_refptr<TokenWebData> GetDatabase() = 0;
// Returns whether it is possible to revoke credentials.
virtual bool CanRevokeCredentials() = 0;
// Returns device id that is scoped to single signin. This device id will be
// regenerated if user signs out and signs back in.
// When refresh token is requested for this user it will be annotated with
// this device id.
virtual std::string GetSigninScopedDeviceId() = 0;
// Returns the URL request context information associated with the client.
virtual net::URLRequestContextGetter* GetURLRequestContext() = 0;
// Returns whether the user's credentials should be merged into the cookie
// jar on signin completion.
virtual bool ShouldMergeSigninCredentialsIntoCookieJar() = 0;
// Returns a string containing the version info of the product in which the
// Signin component is being used.
virtual std::string GetProductVersion() = 0;
// Adds a callback to be called each time a cookie for |url| with name |name|
// changes.
// Note that |callback| will always be called on the thread that
// |AddCookieChangeCallback| was called on.
virtual std::unique_ptr<CookieChangeSubscription> AddCookieChangeCallback(
const GURL& url,
const std::string& name,
net::CookieChangeCallback callback) = 0;
// Called after Google signin has succeeded.
virtual void OnSignedIn(const std::string& account_id,
const std::string& gaia_id,
const std::string& username,
const std::string& password) {}
// Called after Google signin has succeeded and GetUserInfo has returned.
virtual void PostSignedIn(const std::string& account_id,
const std::string& username,
const std::string& password) {}
// Called before Google signout started, call |sign_out| to start the sign out
// process.
virtual void PreSignOut(const base::Callback<void()>& sign_out,
signin_metrics::ProfileSignout signout_source_metric);
// Called before calling the GAIA logout endpoint.
// For iOS, cookies should be cleaned up.
virtual void PreGaiaLogout(base::OnceClosure callback);
virtual bool IsFirstRun() const = 0;
virtual base::Time GetInstallDate() = 0;
// Returns true if GAIA cookies are allowed in the content area.
virtual bool AreSigninCookiesAllowed() = 0;
// Adds an observer to listen for changes to the state of sign in cookie
// settings.
virtual void AddContentSettingsObserver(
content_settings::Observer* observer) = 0;
virtual void RemoveContentSettingsObserver(
content_settings::Observer* observer) = 0;
// Execute |callback| if and when there is a network connection.
virtual void DelayNetworkCall(const base::Closure& callback) = 0;
// Creates a new platform-specific GaiaAuthFetcher.
virtual std::unique_ptr<GaiaAuthFetcher> CreateGaiaAuthFetcher(
GaiaAuthConsumer* consumer,
const std::string& source,
net::URLRequestContextGetter* getter) = 0;
// Called once the credentials has been copied to another SigninManager.
virtual void AfterCredentialsCopied() {}
// Schedules migration to happen at next startup.
virtual void SetReadyForDiceMigration(bool is_ready) {}
protected:
// Returns device id that is scoped to single signin.
// Stores the ID in the kGoogleServicesSigninScopedDeviceId pref.
std::string GetOrCreateScopedDeviceIdPref(PrefService* prefs);
private:
// Perform Chrome-specific sign out. This happens when user signs out or about
// to sign in.
// This method should not be called from the outside of SigninClient. External
// callers must use SignOut() instead.
virtual void OnSignedOut() = 0;
};
#endif // COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_CLIENT_H_