Commit 487f0f4e authored by Mario Sanchez Prada's avatar Mario Sanchez Prada Committed by Commit Bot

Migrate SigninManagerAndroid to the IdentityManager

Move away from SigninManager[Base] in favor of the IdentityManager
for every single API call except for OnExternalSigninCompleted(),
which hasn't got mapped yet to the IdentityManager (crbug.com/889902).

Bug: 882464
Change-Id: I68c8b4845caaed59dd9b2650da977fac74be06b4
Reviewed-on: https://chromium-review.googlesource.com/c/1333390
Commit-Queue: Mario Sanchez Prada <mario@igalia.com>
Reviewed-by: default avatarColin Blundell <blundell@chromium.org>
Reviewed-by: default avatarGanggui Tang <gogerald@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608059}
parent b3ce1805
......@@ -2561,6 +2561,7 @@ jumbo_split_static_library("browser") {
"//rlz:rlz_utils",
"//sandbox",
"//sandbox:sandbox_buildflags",
"//services/identity/public/cpp",
"//services/proxy_resolver:lib",
"//third_party/android_opengl/etc1",
"//third_party/android_tools:cpu_features",
......
......@@ -26,6 +26,7 @@
#include "chrome/browser/policy/cloud/user_policy_signin_service_mobile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/signin/account_tracker_service_factory.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "chrome/browser/signin/oauth2_token_service_delegate_android.h"
#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
#include "chrome/browser/signin/signin_manager_factory.h"
......@@ -40,7 +41,6 @@
#include "components/signin/core/browser/account_consistency_method.h"
#include "components/signin/core/browser/account_tracker_service.h"
#include "components/signin/core/browser/profile_oauth2_token_service.h"
#include "components/signin/core/browser/signin_manager.h"
#include "components/signin/core/browser/signin_metrics.h"
#include "components/signin/core/browser/signin_pref_names.h"
#include "content/public/browser/browsing_data_filter_builder.h"
......@@ -141,7 +141,7 @@ SigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj)
java_signin_manager_.Reset(env, obj);
profile_ = ProfileManager::GetActiveUserProfile();
DCHECK(profile_);
SigninManagerFactory::GetForProfile(profile_)->AddObserver(this);
IdentityManagerFactory::GetForProfile(profile_)->AddObserver(this);
pref_change_registrar_.Init(profile_->GetPrefs());
pref_change_registrar_.Add(
prefs::kSigninAllowed,
......@@ -149,7 +149,9 @@ SigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj)
base::Unretained(this)));
}
SigninManagerAndroid::~SigninManagerAndroid() {}
SigninManagerAndroid::~SigninManagerAndroid() {
IdentityManagerFactory::GetForProfile(profile_)->RemoveObserver(this);
}
void SigninManagerAndroid::CheckPolicyBeforeSignIn(
JNIEnv* env,
......@@ -207,6 +209,9 @@ void SigninManagerAndroid::OnSignInCompleted(
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& username) {
DVLOG(1) << "SigninManagerAndroid::OnSignInCompleted";
// TODO(crbug.com/889902): Migrate to IdentityManager once there's an
// API mapping for SigninManager::OnExternalSigninCompleted().
SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted(
base::android::ConvertJavaStringToUTF8(env, username));
}
......@@ -214,7 +219,8 @@ void SigninManagerAndroid::OnSignInCompleted(
void SigninManagerAndroid::SignOut(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jint signoutReason) {
SigninManagerFactory::GetForProfile(profile_)->SignOut(
IdentityManagerFactory::GetForProfile(profile_)->ClearPrimaryAccount(
identity::IdentityManager::ClearAccountTokensAction::kDefault,
static_cast<signin_metrics::ProfileSignout>(signoutReason),
// Always use IGNORE_METRIC for the profile deletion argument. Chrome
// Android has just a single-profile which is never deleted upon
......@@ -294,13 +300,13 @@ void SigninManagerAndroid::ClearLastSignedInUser(
void SigninManagerAndroid::LogInSignedInUser(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
SigninManagerBase* signin_manager =
SigninManagerFactory::GetForProfile(profile_);
identity::IdentityManager* identity_manager =
IdentityManagerFactory::GetForProfile(profile_);
// With the account consistency enabled let the account Reconcilor handles
// everything.
ProfileOAuth2TokenService* token_service =
ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
const std::string& primary_acct = signin_manager->GetAuthenticatedAccountId();
const std::string& primary_acct = identity_manager->GetPrimaryAccountId();
static_cast<OAuth2TokenServiceDelegateAndroid*>(token_service->GetDelegate())
->ValidateAccounts(primary_acct, true);
......@@ -309,7 +315,7 @@ void SigninManagerAndroid::LogInSignedInUser(JNIEnv* env,
jboolean SigninManagerAndroid::IsSigninAllowedByPolicy(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return SigninManagerFactory::GetForProfile(profile_)->IsSigninAllowed();
return profile_->GetPrefs()->GetBoolean(prefs::kSigninAllowed);
}
jboolean SigninManagerAndroid::IsForceSigninEnabled(
......@@ -323,17 +329,11 @@ jboolean SigninManagerAndroid::IsForceSigninEnabled(
jboolean SigninManagerAndroid::IsSignedInOnNative(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated();
return IdentityManagerFactory::GetForProfile(profile_)->HasPrimaryAccount();
}
void SigninManagerAndroid::GoogleSigninFailed(
const GoogleServiceAuthError& error) {}
void SigninManagerAndroid::GoogleSigninSucceeded(const std::string& account_id,
const std::string& username) {}
void SigninManagerAndroid::GoogleSignedOut(const std::string& account_id,
const std::string& username) {
void SigninManagerAndroid::OnPrimaryAccountCleared(
const AccountInfo& previous_primary_account_info) {
DCHECK(thread_checker_.CalledOnValidThread());
Java_SigninManager_onNativeSignOut(base::android::AttachCurrentThread(),
java_signin_manager_);
......@@ -342,7 +342,7 @@ void SigninManagerAndroid::GoogleSignedOut(const std::string& account_id,
void SigninManagerAndroid::OnSigninAllowedPrefChanged() {
Java_SigninManager_onSigninAllowedByPolicyChanged(
base::android::AttachCurrentThread(), java_signin_manager_,
SigninManagerFactory::GetForProfile(profile_)->IsSigninAllowed());
profile_->GetPrefs()->GetBoolean(prefs::kSigninAllowed));
}
// static
......
......@@ -13,19 +13,19 @@
#include "base/memory/weak_ptr.h"
#include "base/threading/thread_checker.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/signin/core/browser/signin_manager_base.h"
#include "services/identity/public/cpp/identity_manager.h"
class Profile;
// Android wrapper of the SigninManager which provides access from the Java
// layer. Note that on Android, there's only a single profile, and therefore
// a single instance of this wrapper. The name of the Java class is
// SigninManager.
// This class should only be accessed from the UI thread.
// Android wrapper of Chrome's C++ identity management code which provides
// access from the Java layer. Note that on Android, there's only a single
// profile, and therefore a single instance of this wrapper. The name of the
// Java class is SigninManager. This class should only be accessed from the UI
// thread.
//
// This class implements parts of the sign-in flow, to make sure that policy
// is available before sign-in completes.
class SigninManagerAndroid : public SigninManagerBase::Observer {
class SigninManagerAndroid : public identity::IdentityManager::Observer {
public:
SigninManagerAndroid(JNIEnv* env, jobject obj);
......@@ -80,12 +80,9 @@ class SigninManagerAndroid : public SigninManagerBase::Observer {
jboolean IsSignedInOnNative(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// SigninManagerBase::Observer implementation.
void GoogleSigninFailed(const GoogleServiceAuthError& error) override;
void GoogleSigninSucceeded(const std::string& account_id,
const std::string& username) override;
void GoogleSignedOut(const std::string& account_id,
const std::string& username) override;
// identity::IdentityManager::Observer implementation.
void OnPrimaryAccountCleared(
const AccountInfo& previous_primary_account_info) override;
private:
friend class SigninManagerAndroidTest;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment