signin_manager_android.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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 3// found in the LICENSE file. 4 5#include "chrome/browser/android/signin/signin_manager_android.h" 6 7#include "base/android/jni_android.h" 8#include "base/android/jni_string.h" 9#include "base/bind.h" 10#include "base/bind_helpers.h" 11#include "chrome/browser/browser_process.h" 12#include "chrome/browser/profiles/profile_manager.h" 13#include "chrome/browser/signin/signin_manager.h" 14#include "chrome/browser/signin/signin_manager_factory.h" 15#include "chrome/common/pref_names.h" 16#include "jni/SigninManager_jni.h" 17 18#if defined(ENABLE_CONFIGURATION_POLICY) 19#include "chrome/browser/policy/browser_policy_connector.h" 20#include "chrome/browser/policy/cloud/cloud_policy_client.h" 21#include "chrome/browser/policy/cloud/user_policy_signin_service_android.h" 22#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" 23#endif 24 25using base::android::ConvertJavaStringToUTF8; 26 27SigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj) 28 : profile_(NULL) { 29 java_signin_manager_.Reset(env, obj); 30 DCHECK(g_browser_process); 31 DCHECK(g_browser_process->profile_manager()); 32 profile_ = g_browser_process->profile_manager()->GetDefaultProfile(); 33 DCHECK(profile_); 34} 35 36SigninManagerAndroid::~SigninManagerAndroid() {} 37 38void SigninManagerAndroid::CheckPolicyBeforeSignIn(JNIEnv* env, 39 jobject obj, 40 jstring username) { 41#if defined(ENABLE_CONFIGURATION_POLICY) 42 policy::UserPolicySigninService* service = 43 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 44 service->RegisterPolicyClient( 45 ConvertJavaStringToUTF8(env, username), 46 base::Bind(&SigninManagerAndroid::OnPolicyRegisterDone, 47 base::Unretained(this))); 48#else 49 // This shouldn't be called when ShouldLoadPolicyForUser() is false. 50 NOTREACHED(); 51 const jboolean has_policy_management = false; 52 Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 53 java_signin_manager_.obj(), 54 has_policy_management); 55#endif 56} 57 58void SigninManagerAndroid::FetchPolicyBeforeSignIn(JNIEnv* env, jobject obj) { 59#if defined(ENABLE_CONFIGURATION_POLICY) 60 if (cloud_policy_client_) { 61 policy::UserPolicySigninService* service = 62 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 63 service->FetchPolicyForSignedInUser( 64 cloud_policy_client_.Pass(), 65 base::Bind(&SigninManagerAndroid::OnPolicyFetchDone, 66 base::Unretained(this))); 67 return; 68 } 69#endif 70 // This shouldn't be called when ShouldLoadPolicyForUser() is false, or when 71 // CheckPolicyBeforeSignIn() failed. 72 NOTREACHED(); 73 Java_SigninManager_onPolicyFetchedBeforeSignIn(env, 74 java_signin_manager_.obj()); 75} 76 77void SigninManagerAndroid::OnSignInCompleted(JNIEnv* env, 78 jobject obj, 79 jstring username) { 80 SigninManagerFactory::GetForProfile(profile_)->OnExternalSigninCompleted( 81 ConvertJavaStringToUTF8(env, username)); 82} 83 84void SigninManagerAndroid::SignOut(JNIEnv* env, jobject obj) { 85 SigninManagerFactory::GetForProfile(profile_)->SignOut(); 86} 87 88#if defined(ENABLE_CONFIGURATION_POLICY) 89 90void SigninManagerAndroid::OnPolicyRegisterDone( 91 scoped_ptr<policy::CloudPolicyClient> client) { 92 cloud_policy_client_ = client.Pass(); 93 94 JNIEnv* env = base::android::AttachCurrentThread(); 95 const jboolean has_policy_management = !!cloud_policy_client_; 96 Java_SigninManager_onPolicyCheckedBeforeSignIn(env, 97 java_signin_manager_.obj(), 98 has_policy_management); 99} 100 101void SigninManagerAndroid::OnPolicyFetchDone(bool success) { 102 JNIEnv* env = base::android::AttachCurrentThread(); 103 Java_SigninManager_onPolicyFetchedBeforeSignIn(env, 104 java_signin_manager_.obj()); 105} 106 107#endif 108 109static int Init(JNIEnv* env, jobject obj) { 110 SigninManagerAndroid* signin_manager_android = 111 new SigninManagerAndroid(env, obj); 112 return reinterpret_cast<jint>(signin_manager_android); 113} 114 115static jboolean ShouldLoadPolicyForUser(JNIEnv* env, 116 jobject obj, 117 jstring j_username) { 118#if defined(ENABLE_CONFIGURATION_POLICY) 119 std::string username = ConvertJavaStringToUTF8(env, j_username); 120 return !policy::BrowserPolicyConnector::IsNonEnterpriseUser(username); 121#else 122 return false; 123#endif 124} 125 126// static 127bool SigninManagerAndroid::Register(JNIEnv* env) { 128 return RegisterNativesImpl(env); 129} 130