blob: 3d6080a135ecb0252893b33504a19e3cdb0082fc [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 "build/build_config.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/signin/core/browser/account_consistency_method.h"
#include "components/signin/core/browser/account_info.h"
#include "components/signin/core/browser/signin_metrics.h"
#include "google_apis/gaia/gaia_auth_fetcher.h"
#include "url/gurl.h"
class PrefService;
namespace content_settings {
class Observer;
}
namespace network {
class SharedURLLoaderFactory;
namespace mojom {
class CookieManager;
}
}
// An interface that needs to be supplied to the Signin component by its
// embedder.
class SigninClient : public KeyedService {
public:
// Argument to PreSignOut() callback, indicating client decision.
enum class SignoutDecision { ALLOW_SIGNOUT, DISALLOW_SIGNOUT };
~SigninClient() override = default;
// Perform Chrome-specific sign out. This happens when user signs out.
virtual void OnSignedOut() = 0;
// 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;
// Returns the SharedURLLoaderFactory that should be used to fetch resources
// associated with the client.
virtual scoped_refptr<network::SharedURLLoaderFactory>
GetURLLoaderFactory() = 0;
// Returns the CookieManager for the client.
virtual network::mojom::CookieManager* GetCookieManager() = 0;
// Returns a string containing the version info of the product in which the
// Signin component is being used.
virtual std::string GetProductVersion() = 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 sign-out started. Implementers must run the
// |on_signout_decision_reached|, passing a SignoutDecision to allow/disallow
// sign-out to continue. When to disallow sign-out is implementation specific.
// Sign-out is always allowed by default.
virtual void PreSignOut(
base::OnceCallback<void(SignoutDecision)> on_signout_decision_reached,
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,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) = 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) {}
};
#endif // COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_CLIENT_H_