signin_manager_android.cc revision 9ab5563a3196760eb381d102cbb2bc0f7abc6a50
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" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/android/scoped_java_ref.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind_helpers.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/browser_process.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/profiles/profile_manager.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/signin/signin_manager.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/signin/signin_manager_factory.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/pref_names.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "jni/SigninManager_jni.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/browser_policy_connector.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/cloud_policy_client.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/user_policy_signin_service_android.h" 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" 249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "google_apis/gaia/gaia_auth_util.h" 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj) 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : profile_(NULL) { 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.Reset(env, obj); 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(g_browser_process); 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(g_browser_process->profile_manager()); 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch profile_ = g_browser_process->profile_manager()->GetDefaultProfile(); 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(profile_); 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSigninManagerAndroid::~SigninManagerAndroid() {} 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::CheckPolicyBeforeSignIn(JNIEnv* env, 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring username) { 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch username_ = base::android::ConvertJavaStringToUTF8(env, username); 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninService* service = 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service->RegisterPolicyClient( 469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, username), 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&SigninManagerAndroid::OnPolicyRegisterDone, 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Unretained(this))); 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This shouldn't be called when ShouldLoadPolicyForUser() is false. 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ScopedJavaLocalRef<jstring> domain; 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj(), 559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.obj()); 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::FetchPolicyBeforeSignIn(JNIEnv* env, jobject obj) { 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (cloud_policy_client_) { 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninService* service = 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service->FetchPolicyForSignedInUser( 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cloud_policy_client_.Pass(), 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&SigninManagerAndroid::OnPolicyFetchDone, 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Unretained(this))); 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This shouldn't be called when ShouldLoadPolicyForUser() is false, or when 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // CheckPolicyBeforeSignIn() failed. 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyFetchedBeforeSignIn(env, 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj()); 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnSignInCompleted(JNIEnv* env, 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring username) { 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted( 829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, username)); 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::SignOut(JNIEnv* env, jobject obj) { 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerFactory::GetForProfile(profile_)->SignOut(); 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyRegisterDone( 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<policy::CloudPolicyClient> client) { 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cloud_policy_client_ = client.Pass(); 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch JNIEnv* env = base::android::AttachCurrentThread(); 969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ScopedJavaLocalRef<jstring> domain; 979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (cloud_policy_client_) { 989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DCHECK(!username_.empty()); 999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.Reset( 1009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertUTF8ToJavaString( 1019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch env, gaia::ExtractDomainName(username_))); 1029ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } else { 1039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch username_.clear(); 1049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 1059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch java_signin_manager_.obj(), 1089ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch domain.obj()); 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SigninManagerAndroid::OnPolicyFetchDone(bool success) { 1129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Java_SigninManager_onPolicyFetchedBeforeSignIn( 1139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::AttachCurrentThread(), 1149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch java_signin_manager_.obj()); 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstatic int Init(JNIEnv* env, jobject obj) { 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SigninManagerAndroid* signin_manager_android = 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new SigninManagerAndroid(env, obj); 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return reinterpret_cast<jint>(signin_manager_android); 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstatic jboolean ShouldLoadPolicyForUser(JNIEnv* env, 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jobject obj, 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jstring j_username) { 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY) 1299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch std::string username = 1309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::android::ConvertJavaStringToUTF8(env, j_username); 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return !policy::BrowserPolicyConnector::IsNonEnterpriseUser(username); 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return false; 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// static 1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool SigninManagerAndroid::Register(JNIEnv* env) { 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return RegisterNativesImpl(env); 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 141