1 // Copyright (c) 2012 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/ui/android/chrome_http_auth_handler.h" 6 7 #include <jni.h> 8 9 #include "base/android/jni_android.h" 10 #include "base/android/jni_string.h" 11 #include "base/android/scoped_java_ref.h" 12 #include "base/logging.h" 13 #include "base/strings/string16.h" 14 #include "grit/generated_resources.h" 15 #include "jni/ChromeHttpAuthHandler_jni.h" 16 #include "ui/base/l10n/l10n_util.h" 17 18 using base::android::AttachCurrentThread; 19 using base::android::CheckException; 20 using base::android::ConvertJavaStringToUTF16; 21 using base::android::ConvertUTF16ToJavaString; 22 using base::android::ScopedJavaLocalRef; 23 24 ChromeHttpAuthHandler::ChromeHttpAuthHandler(const base::string16& explanation) 25 : observer_(NULL), 26 explanation_(explanation) { 27 } 28 29 ChromeHttpAuthHandler::~ChromeHttpAuthHandler() {} 30 31 void ChromeHttpAuthHandler::Init() { 32 DCHECK(java_chrome_http_auth_handler_.is_null()); 33 JNIEnv* env = AttachCurrentThread(); 34 java_chrome_http_auth_handler_.Reset( 35 Java_ChromeHttpAuthHandler_create(env, reinterpret_cast<intptr_t>(this))); 36 } 37 38 void ChromeHttpAuthHandler::SetObserver(LoginHandler* observer) { 39 observer_ = observer; 40 } 41 42 jobject ChromeHttpAuthHandler::GetJavaObject() { 43 return java_chrome_http_auth_handler_.obj(); 44 } 45 46 void ChromeHttpAuthHandler::OnAutofillDataAvailable( 47 const base::string16& username, 48 const base::string16& password) { 49 DCHECK(java_chrome_http_auth_handler_.obj() != NULL); 50 JNIEnv* env = base::android::AttachCurrentThread(); 51 ScopedJavaLocalRef<jstring> j_username = 52 ConvertUTF16ToJavaString(env, username); 53 ScopedJavaLocalRef<jstring> j_password = 54 ConvertUTF16ToJavaString(env, password); 55 Java_ChromeHttpAuthHandler_onAutofillDataAvailable( 56 env, java_chrome_http_auth_handler_.obj(), 57 j_username.obj(), j_password.obj()); 58 } 59 60 void ChromeHttpAuthHandler::SetAuth(JNIEnv* env, 61 jobject, 62 jstring username, 63 jstring password) { 64 if (observer_) { 65 base::string16 username16 = ConvertJavaStringToUTF16(env, username); 66 base::string16 password16 = ConvertJavaStringToUTF16(env, password); 67 observer_->SetAuth(username16, password16); 68 } 69 } 70 71 void ChromeHttpAuthHandler::CancelAuth(JNIEnv* env, jobject) { 72 if (observer_) 73 observer_->CancelAuth(); 74 } 75 76 ScopedJavaLocalRef<jstring> ChromeHttpAuthHandler::GetMessageTitle( 77 JNIEnv* env, jobject) { 78 return ConvertUTF16ToJavaString(env, 79 l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_TITLE)); 80 } 81 82 ScopedJavaLocalRef<jstring> ChromeHttpAuthHandler::GetMessageBody( 83 JNIEnv* env, jobject) { 84 return ConvertUTF16ToJavaString(env, explanation_); 85 } 86 87 ScopedJavaLocalRef<jstring> ChromeHttpAuthHandler::GetUsernameLabelText( 88 JNIEnv* env, jobject) { 89 return ConvertUTF16ToJavaString(env, 90 l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_USERNAME_FIELD)); 91 } 92 93 ScopedJavaLocalRef<jstring> ChromeHttpAuthHandler::GetPasswordLabelText( 94 JNIEnv* env, jobject) { 95 return ConvertUTF16ToJavaString(env, 96 l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_PASSWORD_FIELD)); 97 } 98 99 ScopedJavaLocalRef<jstring> ChromeHttpAuthHandler::GetOkButtonText( 100 JNIEnv* env, jobject) { 101 return ConvertUTF16ToJavaString(env, 102 l10n_util::GetStringUTF16(IDS_LOGIN_DIALOG_OK_BUTTON_LABEL)); 103 } 104 105 ScopedJavaLocalRef<jstring> ChromeHttpAuthHandler::GetCancelButtonText( 106 JNIEnv* env, jobject) { 107 return ConvertUTF16ToJavaString(env, l10n_util::GetStringUTF16(IDS_CANCEL)); 108 } 109 110 // static 111 bool ChromeHttpAuthHandler::RegisterChromeHttpAuthHandler(JNIEnv* env) { 112 return RegisterNativesImpl(env); 113 } 114