signin_manager_android.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/android/signin/signin_manager_android.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/android/jni_android.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/android/jni_string.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind_helpers.h" 11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/memory/ref_counted.h" 12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/message_loop/message_loop_proxy.h" 13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/prefs/pref_service.h" 14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/bookmarks/bookmark_model_factory.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/browser_process.h" 16558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/browsing_data/browsing_data_helper.h" 17558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/browsing_data/browsing_data_remover.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/profiles/profile_manager.h" 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/android_profile_oauth2_token_service.h" 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/signin/signin_manager_factory.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/pref_names.h" 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "components/bookmarks/core/browser/bookmark_model.h" 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h" 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "jni/SigninManager_jni.h" 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/user_policy_signin_service_android.h" 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/browser/browser_policy_connector.h" 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_core.h" 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_store.h" 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "google_apis/gaia/gaia_auth_util.h" 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace { 42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// A BrowsingDataRemover::Observer that clears all Profile data and then 44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// invokes a callback and deletes itself. 45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass ProfileDataRemover : public BrowsingDataRemover::Observer { 46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public: 47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ProfileDataRemover(Profile* profile, const base::Closure& callback) 48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : callback_(callback), 49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch origin_loop_(base::MessageLoopProxy::current()), 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_(BrowsingDataRemover::CreateForUnboundedRange(profile)) { 51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_->AddObserver(this); 52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_->Remove(BrowsingDataRemover::REMOVE_ALL, BrowsingDataHelper::ALL); 53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~ProfileDataRemover() {} 56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual void OnBrowsingDataRemoverDone() OVERRIDE { 58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_->RemoveObserver(this); 59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch origin_loop_->PostTask(FROM_HERE, callback_); 60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch origin_loop_->DeleteSoon(FROM_HERE, this); 61558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 63558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch private: 64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::Closure callback_; 65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_refptr<base::MessageLoopProxy> origin_loop_; 66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BrowsingDataRemover* remover_; 67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DISALLOW_COPY_AND_ASSIGN(ProfileDataRemover); 69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}; 70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} // namespace 72558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj) 74558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : profile_(NULL), 75558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_(this) { 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.Reset(env, obj); 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_ = ProfileManager::GetActiveUserProfile(); 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(profile_); 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::~SigninManagerAndroid() {} 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::CheckPolicyBeforeSignIn(JNIEnv* env, 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring username) { 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch username_ = base::android::ConvertJavaStringToUTF8(env, username); 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninService* service = 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service->RegisterForPolicy( 919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, username), 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&SigninManagerAndroid::OnPolicyRegisterDone, 93558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_.GetWeakPtr())); 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This shouldn't be called when ShouldLoadPolicyForUser() is false. 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 97558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ScopedJavaLocalRef<jstring> domain; 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj(), 1009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.obj()); 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::FetchPolicyBeforeSignIn(JNIEnv* env, jobject obj) { 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!dm_token_.empty()) { 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninService* service = 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service->FetchPolicyForSignedInUser( 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) username_, 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dm_token_, 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) client_id_, 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_->GetRequestContext(), 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&SigninManagerAndroid::OnPolicyFetchDone, 115558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_.GetWeakPtr())); 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dm_token_.clear(); 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) client_id_.clear(); 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This shouldn't be called when ShouldLoadPolicyForUser() is false, or when 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // CheckPolicyBeforeSignIn() failed. 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyFetchedBeforeSignIn(env, 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj()); 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnSignInCompleted(JNIEnv* env, 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring username) { 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted( 1329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, username)); 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::SignOut(JNIEnv* env, jobject obj) { 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerFactory::GetForProfile(profile_)->SignOut(); 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 139558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochbase::android::ScopedJavaLocalRef<jstring> 140558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochSigninManagerAndroid::GetManagementDomain(JNIEnv* env, jobject obj) { 141558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ScopedJavaLocalRef<jstring> domain; 142558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 143558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 144558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch policy::UserCloudPolicyManager* manager = 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) policy::UserCloudPolicyManagerFactory::GetForBrowserContext(profile_); 146558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch policy::CloudPolicyStore* store = manager->core()->store(); 147558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 148558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (store && store->is_managed() && store->policy()->has_username()) { 149558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch domain.Reset( 150558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ConvertUTF8ToJavaString( 151558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch env, gaia::ExtractDomainName(store->policy()->username()))); 152558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 153558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 154558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 155558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return domain; 156558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 158558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid SigninManagerAndroid::WipeProfileData(JNIEnv* env, jobject obj) { 159558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // The ProfileDataRemover deletes itself once done. 160558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new ProfileDataRemover( 161558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch profile_, 162558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone, 163558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_.GetWeakPtr())); 164558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 165558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyRegisterDone( 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& dm_token, 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& client_id) { 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dm_token_ = dm_token; 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) client_id_ = client_id; 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch JNIEnv* env = base::android::AttachCurrentThread(); 175558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ScopedJavaLocalRef<jstring> domain; 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!dm_token_.empty()) { 1779ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DCHECK(!username_.empty()); 1789ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.Reset( 1799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertUTF8ToJavaString( 1809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch env, gaia::ExtractDomainName(username_))); 1819ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } else { 1829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch username_.clear(); 1839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 1849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj(), 1879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.obj()); 1887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyFetchDone(bool success) { 1919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Java_SigninManager_onPolicyFetchedBeforeSignIn( 1929ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::AttachCurrentThread(), 1939ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch java_signin_manager_.obj()); 1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 198558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid SigninManagerAndroid::OnBrowsingDataRemoverDone() { 199558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); 200558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch model->RemoveAll(); 201558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 202558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // All the Profile data has been wiped. Clear the last signed in username as 203558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // well, so that the next signin doesn't trigger the acount change dialog. 2045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ClearLastSignedInUser(); 205558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 206558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch Java_SigninManager_onProfileDataWiped(base::android::AttachCurrentThread(), 207558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch java_signin_manager_.obj()); 208558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 209558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid SigninManagerAndroid::ClearLastSignedInUser(JNIEnv* env, jobject obj) { 2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ClearLastSignedInUser(); 2125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid SigninManagerAndroid::ClearLastSignedInUser() { 2155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profile_->GetPrefs()->ClearPref(prefs::kGoogleServicesLastUsername); 2165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SigninManagerAndroid::MergeSessionCompleted( 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& account_id, 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GoogleServiceAuthError& error) { 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_->RemoveObserver(this); 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_.reset(); 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void SigninManagerAndroid::LogInSignedInUser(JNIEnv* env, jobject obj) { 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerBase* signin_manager = 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerFactory::GetForProfile(profile_); 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (switches::IsNewProfileManagement()) { 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // New Mirror code path that just fires the events and let the 230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Account Reconcilor handles everything. 231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AndroidProfileOAuth2TokenService* token_service = 232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile( 233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& primary_acct = 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signin_manager->GetAuthenticatedAccountId(); 2365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu token_service->ValidateAccounts(primary_acct); 237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DVLOG(1) << "SigninManagerAndroid::LogInSignedInUser " 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " Manually calling MergeSessionHelper"; 241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Old code path that doesn't depend on the new Account Reconcilor. 242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // We manually login. 243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileOAuth2TokenService* token_service = 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_.reset(new MergeSessionHelper( 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) token_service, profile_->GetRequestContext(), this)); 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_->LogIn(signin_manager->GetAuthenticatedAccountId()); 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 2503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static jlong Init(JNIEnv* env, jobject obj) { 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerAndroid* signin_manager_android = 2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new SigninManagerAndroid(env, obj); 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return reinterpret_cast<intptr_t>(signin_manager_android); 2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstatic jboolean ShouldLoadPolicyForUser(JNIEnv* env, 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring j_username) { 2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 2629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch std::string username = 2639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, j_username); 2647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return !policy::BrowserPolicyConnector::IsNonEnterpriseUser(username); 2657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else 2667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 2677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 270effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstatic jboolean IsNewProfileManagementEnabled(JNIEnv* env, jclass clazz) { 271effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return switches::IsNewProfileManagement(); 272effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 273effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// static 2757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool SigninManagerAndroid::Register(JNIEnv* env) { 2767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return RegisterNativesImpl(env); 2777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 278