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" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/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" 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/signin/core/browser/signin_metrics.h" 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h" 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "jni/SigninManager_jni.h" 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_policy_signin_service_mobile.h" 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/browser/browser_policy_connector.h" 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_core.h" 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_store.h" 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "google_apis/gaia/gaia_auth_util.h" 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace { 43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// A BrowsingDataRemover::Observer that clears all Profile data and then 45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// invokes a callback and deletes itself. 46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass ProfileDataRemover : public BrowsingDataRemover::Observer { 47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public: 48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ProfileDataRemover(Profile* profile, const base::Closure& callback) 49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : callback_(callback), 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch origin_loop_(base::MessageLoopProxy::current()), 51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_(BrowsingDataRemover::CreateForUnboundedRange(profile)) { 52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_->AddObserver(this); 53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_->Remove(BrowsingDataRemover::REMOVE_ALL, BrowsingDataHelper::ALL); 54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~ProfileDataRemover() {} 57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual void OnBrowsingDataRemoverDone() OVERRIDE { 59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch remover_->RemoveObserver(this); 60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch origin_loop_->PostTask(FROM_HERE, callback_); 61558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch origin_loop_->DeleteSoon(FROM_HERE, this); 62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 63558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch private: 65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::Closure callback_; 66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_refptr<base::MessageLoopProxy> origin_loop_; 67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BrowsingDataRemover* remover_; 68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DISALLOW_COPY_AND_ASSIGN(ProfileDataRemover); 70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}; 71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 72558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} // namespace 73558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj) 75558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : profile_(NULL), 76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_(this) { 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.Reset(env, obj); 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_ = ProfileManager::GetActiveUserProfile(); 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(profile_); 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pref_change_registrar_.Init(profile_->GetPrefs()); 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pref_change_registrar_.Add( 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kSigninAllowed, 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Bind(&SigninManagerAndroid::OnSigninAllowedPrefChanged, 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Unretained(this))); 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::~SigninManagerAndroid() {} 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::CheckPolicyBeforeSignIn(JNIEnv* env, 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring username) { 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 939ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch username_ = base::android::ConvertJavaStringToUTF8(env, username); 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninService* service = 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service->RegisterForPolicy( 979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, username), 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&SigninManagerAndroid::OnPolicyRegisterDone, 99558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_.GetWeakPtr())); 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This shouldn't be called when ShouldLoadPolicyForUser() is false. 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 103558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ScopedJavaLocalRef<jstring> domain; 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj(), 1069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.obj()); 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::FetchPolicyBeforeSignIn(JNIEnv* env, jobject obj) { 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!dm_token_.empty()) { 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninService* service = 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service->FetchPolicyForSignedInUser( 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) username_, 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dm_token_, 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) client_id_, 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_->GetRequestContext(), 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&SigninManagerAndroid::OnPolicyFetchDone, 121558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_.GetWeakPtr())); 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dm_token_.clear(); 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) client_id_.clear(); 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This shouldn't be called when ShouldLoadPolicyForUser() is false, or when 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // CheckPolicyBeforeSignIn() failed. 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyFetchedBeforeSignIn(env, 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj()); 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnSignInCompleted(JNIEnv* env, 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring username) { 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted( 1389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, username)); 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::SignOut(JNIEnv* env, jobject obj) { 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SigninManagerFactory::GetForProfile(profile_)->SignOut( 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS); 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 146558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochbase::android::ScopedJavaLocalRef<jstring> 147558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochSigninManagerAndroid::GetManagementDomain(JNIEnv* env, jobject obj) { 148558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ScopedJavaLocalRef<jstring> domain; 149558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 150558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 151558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch policy::UserCloudPolicyManager* manager = 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) policy::UserCloudPolicyManagerFactory::GetForBrowserContext(profile_); 153558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch policy::CloudPolicyStore* store = manager->core()->store(); 154558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 155558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (store && store->is_managed() && store->policy()->has_username()) { 156558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch domain.Reset( 157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ConvertUTF8ToJavaString( 158558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch env, gaia::ExtractDomainName(store->policy()->username()))); 159558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 160558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 161558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 162558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return domain; 163558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 164558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 165558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid SigninManagerAndroid::WipeProfileData(JNIEnv* env, jobject obj) { 166558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // The ProfileDataRemover deletes itself once done. 167558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new ProfileDataRemover( 168558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch profile_, 169558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone, 170558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch weak_factory_.GetWeakPtr())); 171558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 172558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyRegisterDone( 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& dm_token, 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& client_id) { 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dm_token_ = dm_token; 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) client_id_ = client_id; 1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch JNIEnv* env = base::android::AttachCurrentThread(); 182558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::android::ScopedJavaLocalRef<jstring> domain; 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!dm_token_.empty()) { 1849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DCHECK(!username_.empty()); 1859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.Reset( 1869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertUTF8ToJavaString( 1879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch env, gaia::ExtractDomainName(username_))); 1889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } else { 1899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch username_.clear(); 1909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 1919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 1937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj(), 1949ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.obj()); 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyFetchDone(bool success) { 1989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Java_SigninManager_onPolicyFetchedBeforeSignIn( 1999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::AttachCurrentThread(), 2009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch java_signin_manager_.obj()); 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 205558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid SigninManagerAndroid::OnBrowsingDataRemoverDone() { 206558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) model->RemoveAllUserBookmarks(); 208558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 209558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // All the Profile data has been wiped. Clear the last signed in username as 210558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // well, so that the next signin doesn't trigger the acount change dialog. 2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ClearLastSignedInUser(); 212558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 213558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch Java_SigninManager_onProfileDataWiped(base::android::AttachCurrentThread(), 214558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch java_signin_manager_.obj()); 215558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 216558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid SigninManagerAndroid::ClearLastSignedInUser(JNIEnv* env, jobject obj) { 2185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ClearLastSignedInUser(); 2195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid SigninManagerAndroid::ClearLastSignedInUser() { 2225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profile_->GetPrefs()->ClearPref(prefs::kGoogleServicesLastUsername); 2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SigninManagerAndroid::MergeSessionCompleted( 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& account_id, 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GoogleServiceAuthError& error) { 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_->RemoveObserver(this); 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_.reset(); 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void SigninManagerAndroid::LogInSignedInUser(JNIEnv* env, jobject obj) { 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerBase* signin_manager = 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerFactory::GetForProfile(profile_); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (switches::IsNewProfileManagement()) { 236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // New Mirror code path that just fires the events and let the 237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Account Reconcilor handles everything. 238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AndroidProfileOAuth2TokenService* token_service = 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile( 240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_); 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& primary_acct = 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signin_manager->GetAuthenticatedAccountId(); 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service->ValidateAccounts(primary_acct, true); 244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DVLOG(1) << "SigninManagerAndroid::LogInSignedInUser " 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " Manually calling MergeSessionHelper"; 248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Old code path that doesn't depend on the new Account Reconcilor. 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // We manually login. 250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileOAuth2TokenService* token_service = 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_.reset(new MergeSessionHelper( 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) token_service, profile_->GetRequestContext(), this)); 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) merge_session_helper_->LogIn(signin_manager->GetAuthenticatedAccountId()); 256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 2573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)jboolean SigninManagerAndroid::IsSigninAllowedByPolicy(JNIEnv* env, 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) jobject obj) { 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return SigninManagerFactory::GetForProfile(profile_)->IsSigninAllowed(); 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninManagerAndroid::OnSigninAllowedPrefChanged() { 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Java_SigninManager_onSigninAllowedByPolicyChanged( 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::android::AttachCurrentThread(), java_signin_manager_.obj(), 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile_)->IsSigninAllowed()); 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static jlong Init(JNIEnv* env, jobject obj) { 2717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerAndroid* signin_manager_android = 2727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new SigninManagerAndroid(env, obj); 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return reinterpret_cast<intptr_t>(signin_manager_android); 2747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstatic jboolean ShouldLoadPolicyForUser(JNIEnv* env, 2777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 2787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring j_username) { 2797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 2809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch std::string username = 2819ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, j_username); 2827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return !policy::BrowserPolicyConnector::IsNonEnterpriseUser(username); 2837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else 2847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 2857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstatic jboolean IsNewProfileManagementEnabled(JNIEnv* env, jclass clazz) { 289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return switches::IsNewProfileManagement(); 290effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 291effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// static 2937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool SigninManagerAndroid::Register(JNIEnv* env) { 2947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return RegisterNativesImpl(env); 2957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 296