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 |