| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "chrome/browser/android/signin/signin_manager_android.h" | 7 #include "chrome/browser/android/signin/signin_manager_android.h" |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
| 11 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/bind_helpers.h" | 13 #include "base/bind_helpers.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" |
| 16 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
| 17 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
| 18 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 18 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 19 #include "chrome/browser/browser_process.h" | 19 #include "chrome/browser/browser_process.h" |
| 20 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 20 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
| 21 #include "chrome/browser/browsing_data/browsing_data_remover.h" | 21 #include "chrome/browser/browsing_data/browsing_data_remover.h" |
| 22 #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" | 22 #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" |
| 23 #include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" |
| 24 #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" |
| 23 #include "chrome/browser/policy/cloud/user_policy_signin_service_mobile.h" | 25 #include "chrome/browser/policy/cloud/user_policy_signin_service_mobile.h" |
| 24 #include "chrome/browser/profiles/profile_manager.h" | 26 #include "chrome/browser/profiles/profile_manager.h" |
| 25 #include "chrome/browser/signin/account_tracker_service_factory.h" | 27 #include "chrome/browser/signin/account_tracker_service_factory.h" |
| 26 #include "chrome/browser/signin/oauth2_token_service_delegate_android.h" | 28 #include "chrome/browser/signin/oauth2_token_service_delegate_android.h" |
| 27 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 29 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 28 #include "chrome/browser/signin/signin_manager_factory.h" | 30 #include "chrome/browser/signin/signin_manager_factory.h" |
| 29 #include "components/bookmarks/browser/bookmark_model.h" | 31 #include "components/bookmarks/browser/bookmark_model.h" |
| 32 #include "components/policy/core/browser/browser_policy_connector.h" |
| 33 #include "components/policy/core/common/cloud/cloud_policy_core.h" |
| 34 #include "components/policy/core/common/cloud/cloud_policy_store.h" |
| 35 #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" |
| 30 #include "components/prefs/pref_service.h" | 36 #include "components/prefs/pref_service.h" |
| 31 #include "components/signin/core/browser/account_tracker_service.h" | 37 #include "components/signin/core/browser/account_tracker_service.h" |
| 32 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 38 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| 33 #include "components/signin/core/browser/signin_manager.h" | 39 #include "components/signin/core/browser/signin_manager.h" |
| 34 #include "components/signin/core/browser/signin_metrics.h" | 40 #include "components/signin/core/browser/signin_metrics.h" |
| 35 #include "components/signin/core/common/profile_management_switches.h" | 41 #include "components/signin/core/common/profile_management_switches.h" |
| 36 #include "components/signin/core/common/signin_pref_names.h" | 42 #include "components/signin/core/common/signin_pref_names.h" |
| 43 #include "google_apis/gaia/gaia_auth_util.h" |
| 37 #include "google_apis/gaia/gaia_constants.h" | 44 #include "google_apis/gaia/gaia_constants.h" |
| 38 #include "jni/SigninManager_jni.h" | 45 #include "jni/SigninManager_jni.h" |
| 39 | |
| 40 #if defined(ENABLE_CONFIGURATION_POLICY) | |
| 41 #include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" | |
| 42 #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" | |
| 43 #include "chrome/browser/policy/cloud/user_policy_signin_service_mobile.h" | |
| 44 #include "components/policy/core/browser/browser_policy_connector.h" | |
| 45 #include "components/policy/core/common/cloud/cloud_policy_core.h" | |
| 46 #include "components/policy/core/common/cloud/cloud_policy_store.h" | |
| 47 #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" | |
| 48 #include "google_apis/gaia/gaia_auth_util.h" | |
| 49 #include "net/url_request/url_request_context_getter.h" | 46 #include "net/url_request/url_request_context_getter.h" |
| 50 #endif | |
| 51 | 47 |
| 52 using bookmarks::BookmarkModel; | 48 using bookmarks::BookmarkModel; |
| 53 | 49 |
| 54 namespace { | 50 namespace { |
| 55 | 51 |
| 56 // A BrowsingDataRemover::Observer that clears all Profile data and then | 52 // A BrowsingDataRemover::Observer that clears all Profile data and then |
| 57 // invokes a callback and deletes itself. | 53 // invokes a callback and deletes itself. |
| 58 class ProfileDataRemover : public BrowsingDataRemover::Observer { | 54 class ProfileDataRemover : public BrowsingDataRemover::Observer { |
| 59 public: | 55 public: |
| 60 ProfileDataRemover(Profile* profile, const base::Closure& callback) | 56 ProfileDataRemover(Profile* profile, const base::Closure& callback) |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 base::Bind(&SigninManagerAndroid::OnSigninAllowedPrefChanged, | 92 base::Bind(&SigninManagerAndroid::OnSigninAllowedPrefChanged, |
| 97 base::Unretained(this))); | 93 base::Unretained(this))); |
| 98 } | 94 } |
| 99 | 95 |
| 100 SigninManagerAndroid::~SigninManagerAndroid() {} | 96 SigninManagerAndroid::~SigninManagerAndroid() {} |
| 101 | 97 |
| 102 void SigninManagerAndroid::CheckPolicyBeforeSignIn( | 98 void SigninManagerAndroid::CheckPolicyBeforeSignIn( |
| 103 JNIEnv* env, | 99 JNIEnv* env, |
| 104 const JavaParamRef<jobject>& obj, | 100 const JavaParamRef<jobject>& obj, |
| 105 const JavaParamRef<jstring>& username) { | 101 const JavaParamRef<jstring>& username) { |
| 106 #if defined(ENABLE_CONFIGURATION_POLICY) | |
| 107 username_ = base::android::ConvertJavaStringToUTF8(env, username); | 102 username_ = base::android::ConvertJavaStringToUTF8(env, username); |
| 108 policy::UserPolicySigninService* service = | 103 policy::UserPolicySigninService* service = |
| 109 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); | 104 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); |
| 110 service->RegisterForPolicy( | 105 service->RegisterForPolicy( |
| 111 username_, AccountTrackerServiceFactory::GetForProfile(profile_) | 106 username_, AccountTrackerServiceFactory::GetForProfile(profile_) |
| 112 ->FindAccountInfoByEmail(username_) | 107 ->FindAccountInfoByEmail(username_) |
| 113 .account_id, | 108 .account_id, |
| 114 base::Bind(&SigninManagerAndroid::OnPolicyRegisterDone, | 109 base::Bind(&SigninManagerAndroid::OnPolicyRegisterDone, |
| 115 weak_factory_.GetWeakPtr())); | 110 weak_factory_.GetWeakPtr())); |
| 116 #else | |
| 117 // This shouldn't be called when ShouldLoadPolicyForUser() is false. | |
| 118 NOTREACHED(); | |
| 119 base::android::ScopedJavaLocalRef<jstring> domain; | |
| 120 Java_SigninManager_onPolicyCheckedBeforeSignIn(env, | |
| 121 java_signin_manager_.obj(), | |
| 122 domain.obj()); | |
| 123 #endif | |
| 124 } | 111 } |
| 125 | 112 |
| 126 void SigninManagerAndroid::FetchPolicyBeforeSignIn( | 113 void SigninManagerAndroid::FetchPolicyBeforeSignIn( |
| 127 JNIEnv* env, | 114 JNIEnv* env, |
| 128 const JavaParamRef<jobject>& obj) { | 115 const JavaParamRef<jobject>& obj) { |
| 129 #if defined(ENABLE_CONFIGURATION_POLICY) | |
| 130 if (!dm_token_.empty()) { | 116 if (!dm_token_.empty()) { |
| 131 policy::UserPolicySigninService* service = | 117 policy::UserPolicySigninService* service = |
| 132 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); | 118 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); |
| 133 service->FetchPolicyForSignedInUser( | 119 service->FetchPolicyForSignedInUser( |
| 134 username_, | 120 username_, |
| 135 dm_token_, | 121 dm_token_, |
| 136 client_id_, | 122 client_id_, |
| 137 profile_->GetRequestContext(), | 123 profile_->GetRequestContext(), |
| 138 base::Bind(&SigninManagerAndroid::OnPolicyFetchDone, | 124 base::Bind(&SigninManagerAndroid::OnPolicyFetchDone, |
| 139 weak_factory_.GetWeakPtr())); | 125 weak_factory_.GetWeakPtr())); |
| 140 dm_token_.clear(); | 126 dm_token_.clear(); |
| 141 client_id_.clear(); | 127 client_id_.clear(); |
| 142 return; | 128 return; |
| 143 } | 129 } |
| 144 #endif | 130 |
| 145 // This shouldn't be called when ShouldLoadPolicyForUser() is false, or when | 131 // This shouldn't be called when ShouldLoadPolicyForUser() is false, or when |
| 146 // CheckPolicyBeforeSignIn() failed. | 132 // CheckPolicyBeforeSignIn() failed. |
| 147 NOTREACHED(); | 133 NOTREACHED(); |
| 148 Java_SigninManager_onPolicyFetchedBeforeSignIn(env, | 134 Java_SigninManager_onPolicyFetchedBeforeSignIn(env, |
| 149 java_signin_manager_.obj()); | 135 java_signin_manager_.obj()); |
| 150 } | 136 } |
| 151 | 137 |
| 152 void SigninManagerAndroid::AbortSignIn( | 138 void SigninManagerAndroid::AbortSignIn( |
| 153 JNIEnv* env, | 139 JNIEnv* env, |
| 154 const base::android::JavaParamRef<jobject>& obj) { | 140 const base::android::JavaParamRef<jobject>& obj) { |
| 155 #if defined(ENABLE_CONFIGURATION_POLICY) | |
| 156 policy::UserPolicySigninService* service = | 141 policy::UserPolicySigninService* service = |
| 157 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); | 142 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); |
| 158 service->ShutdownUserCloudPolicyManager(); | 143 service->ShutdownUserCloudPolicyManager(); |
| 159 #endif | |
| 160 } | 144 } |
| 161 | 145 |
| 162 void SigninManagerAndroid::OnSignInCompleted( | 146 void SigninManagerAndroid::OnSignInCompleted( |
| 163 JNIEnv* env, | 147 JNIEnv* env, |
| 164 const JavaParamRef<jobject>& obj, | 148 const JavaParamRef<jobject>& obj, |
| 165 const JavaParamRef<jstring>& username) { | 149 const JavaParamRef<jstring>& username) { |
| 166 DVLOG(1) << "SigninManagerAndroid::OnSignInCompleted"; | 150 DVLOG(1) << "SigninManagerAndroid::OnSignInCompleted"; |
| 167 SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted( | 151 SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted( |
| 168 base::android::ConvertJavaStringToUTF8(env, username)); | 152 base::android::ConvertJavaStringToUTF8(env, username)); |
| 169 } | 153 } |
| 170 | 154 |
| 171 void SigninManagerAndroid::SignOut(JNIEnv* env, | 155 void SigninManagerAndroid::SignOut(JNIEnv* env, |
| 172 const JavaParamRef<jobject>& obj) { | 156 const JavaParamRef<jobject>& obj) { |
| 173 SigninManagerFactory::GetForProfile(profile_) | 157 SigninManagerFactory::GetForProfile(profile_) |
| 174 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS, | 158 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS, |
| 175 signin_metrics::SignoutDelete::IGNORE_METRIC); | 159 signin_metrics::SignoutDelete::IGNORE_METRIC); |
| 176 } | 160 } |
| 177 | 161 |
| 178 base::android::ScopedJavaLocalRef<jstring> | 162 base::android::ScopedJavaLocalRef<jstring> |
| 179 SigninManagerAndroid::GetManagementDomain(JNIEnv* env, | 163 SigninManagerAndroid::GetManagementDomain(JNIEnv* env, |
| 180 const JavaParamRef<jobject>& obj) { | 164 const JavaParamRef<jobject>& obj) { |
| 181 base::android::ScopedJavaLocalRef<jstring> domain; | 165 base::android::ScopedJavaLocalRef<jstring> domain; |
| 182 | 166 |
| 183 #if defined(ENABLE_CONFIGURATION_POLICY) | |
| 184 policy::UserCloudPolicyManager* manager = | 167 policy::UserCloudPolicyManager* manager = |
| 185 policy::UserCloudPolicyManagerFactory::GetForBrowserContext(profile_); | 168 policy::UserCloudPolicyManagerFactory::GetForBrowserContext(profile_); |
| 186 policy::CloudPolicyStore* store = manager->core()->store(); | 169 policy::CloudPolicyStore* store = manager->core()->store(); |
| 187 | 170 |
| 188 if (store && store->is_managed() && store->policy()->has_username()) { | 171 if (store && store->is_managed() && store->policy()->has_username()) { |
| 189 domain.Reset( | 172 domain.Reset( |
| 190 base::android::ConvertUTF8ToJavaString( | 173 base::android::ConvertUTF8ToJavaString( |
| 191 env, gaia::ExtractDomainName(store->policy()->username()))); | 174 env, gaia::ExtractDomainName(store->policy()->username()))); |
| 192 } | 175 } |
| 193 #endif | |
| 194 | 176 |
| 195 return domain; | 177 return domain; |
| 196 } | 178 } |
| 197 | 179 |
| 198 void SigninManagerAndroid::WipeProfileData( | 180 void SigninManagerAndroid::WipeProfileData( |
| 199 JNIEnv* env, | 181 JNIEnv* env, |
| 200 const JavaParamRef<jobject>& obj, | 182 const JavaParamRef<jobject>& obj, |
| 201 const JavaParamRef<jobject>& callback) { | 183 const JavaParamRef<jobject>& callback) { |
| 202 base::android::ScopedJavaGlobalRef<jobject> java_callback; | 184 base::android::ScopedJavaGlobalRef<jobject> java_callback; |
| 203 java_callback.Reset(env, callback); | 185 java_callback.Reset(env, callback); |
| 204 | 186 |
| 205 // The ProfileDataRemover deletes itself once done. | 187 // The ProfileDataRemover deletes itself once done. |
| 206 new ProfileDataRemover( | 188 new ProfileDataRemover( |
| 207 profile_, base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone, | 189 profile_, base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone, |
| 208 weak_factory_.GetWeakPtr(), java_callback)); | 190 weak_factory_.GetWeakPtr(), java_callback)); |
| 209 } | 191 } |
| 210 | 192 |
| 211 #if defined(ENABLE_CONFIGURATION_POLICY) | |
| 212 | |
| 213 void SigninManagerAndroid::OnPolicyRegisterDone( | 193 void SigninManagerAndroid::OnPolicyRegisterDone( |
| 214 const std::string& dm_token, | 194 const std::string& dm_token, |
| 215 const std::string& client_id) { | 195 const std::string& client_id) { |
| 216 dm_token_ = dm_token; | 196 dm_token_ = dm_token; |
| 217 client_id_ = client_id; | 197 client_id_ = client_id; |
| 218 | 198 |
| 219 JNIEnv* env = base::android::AttachCurrentThread(); | 199 JNIEnv* env = base::android::AttachCurrentThread(); |
| 220 base::android::ScopedJavaLocalRef<jstring> domain; | 200 base::android::ScopedJavaLocalRef<jstring> domain; |
| 221 if (!dm_token_.empty()) { | 201 if (!dm_token_.empty()) { |
| 222 DCHECK(!username_.empty()); | 202 DCHECK(!username_.empty()); |
| 223 domain.Reset( | 203 domain.Reset( |
| 224 base::android::ConvertUTF8ToJavaString( | 204 base::android::ConvertUTF8ToJavaString( |
| 225 env, gaia::ExtractDomainName(username_))); | 205 env, gaia::ExtractDomainName(username_))); |
| 226 } else { | 206 } else { |
| 227 username_.clear(); | 207 username_.clear(); |
| 228 } | 208 } |
| 229 | 209 |
| 230 Java_SigninManager_onPolicyCheckedBeforeSignIn(env, | 210 Java_SigninManager_onPolicyCheckedBeforeSignIn(env, |
| 231 java_signin_manager_.obj(), | 211 java_signin_manager_.obj(), |
| 232 domain.obj()); | 212 domain.obj()); |
| 233 } | 213 } |
| 234 | 214 |
| 235 void SigninManagerAndroid::OnPolicyFetchDone(bool success) { | 215 void SigninManagerAndroid::OnPolicyFetchDone(bool success) { |
| 236 Java_SigninManager_onPolicyFetchedBeforeSignIn( | 216 Java_SigninManager_onPolicyFetchedBeforeSignIn( |
| 237 base::android::AttachCurrentThread(), | 217 base::android::AttachCurrentThread(), |
| 238 java_signin_manager_.obj()); | 218 java_signin_manager_.obj()); |
| 239 } | 219 } |
| 240 | 220 |
| 241 #endif | |
| 242 | |
| 243 void SigninManagerAndroid::OnBrowsingDataRemoverDone( | 221 void SigninManagerAndroid::OnBrowsingDataRemoverDone( |
| 244 const base::android::ScopedJavaGlobalRef<jobject>& callback) { | 222 const base::android::ScopedJavaGlobalRef<jobject>& callback) { |
| 245 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); | 223 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); |
| 246 model->RemoveAllUserBookmarks(); | 224 model->RemoveAllUserBookmarks(); |
| 247 | 225 |
| 248 // All the Profile data has been wiped. Clear the last signed in username as | 226 // All the Profile data has been wiped. Clear the last signed in username as |
| 249 // well, so that the next signin doesn't trigger the acount change dialog. | 227 // well, so that the next signin doesn't trigger the acount change dialog. |
| 250 ClearLastSignedInUser(); | 228 ClearLastSignedInUser(); |
| 251 | 229 |
| 252 Java_SigninManager_onProfileDataWiped(base::android::AttachCurrentThread(), | 230 Java_SigninManager_onProfileDataWiped(base::android::AttachCurrentThread(), |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 278 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 301 SigninManagerAndroid* signin_manager_android = | 279 SigninManagerAndroid* signin_manager_android = |
| 302 new SigninManagerAndroid(env, obj); | 280 new SigninManagerAndroid(env, obj); |
| 303 return reinterpret_cast<intptr_t>(signin_manager_android); | 281 return reinterpret_cast<intptr_t>(signin_manager_android); |
| 304 } | 282 } |
| 305 | 283 |
| 306 static jboolean ShouldLoadPolicyForUser( | 284 static jboolean ShouldLoadPolicyForUser( |
| 307 JNIEnv* env, | 285 JNIEnv* env, |
| 308 const JavaParamRef<jobject>& obj, | 286 const JavaParamRef<jobject>& obj, |
| 309 const JavaParamRef<jstring>& j_username) { | 287 const JavaParamRef<jstring>& j_username) { |
| 310 #if defined(ENABLE_CONFIGURATION_POLICY) | |
| 311 std::string username = | 288 std::string username = |
| 312 base::android::ConvertJavaStringToUTF8(env, j_username); | 289 base::android::ConvertJavaStringToUTF8(env, j_username); |
| 313 return !policy::BrowserPolicyConnector::IsNonEnterpriseUser(username); | 290 return !policy::BrowserPolicyConnector::IsNonEnterpriseUser(username); |
| 314 #else | |
| 315 return false; | |
| 316 #endif | |
| 317 } | 291 } |
| 318 | 292 |
| 319 // static | 293 // static |
| 320 bool SigninManagerAndroid::Register(JNIEnv* env) { | 294 bool SigninManagerAndroid::Register(JNIEnv* env) { |
| 321 return RegisterNativesImpl(env); | 295 return RegisterNativesImpl(env); |
| 322 } | 296 } |
| OLD | NEW |