Home | History | Annotate | Download | only in native
      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 "android_webview/native/aw_http_auth_handler.h"
      6 
      7 #include "android_webview/browser/aw_login_delegate.h"
      8 #include "android_webview/native/aw_contents.h"
      9 #include "base/android/jni_android.h"
     10 #include "base/android/jni_string.h"
     11 #include "content/public/browser/browser_thread.h"
     12 #include "jni/AwHttpAuthHandler_jni.h"
     13 #include "net/base/auth.h"
     14 #include "content/public/browser/web_contents.h"
     15 
     16 using base::android::ConvertJavaStringToUTF16;
     17 
     18 namespace android_webview {
     19 
     20 AwHttpAuthHandler::AwHttpAuthHandler(AwLoginDelegate* login_delegate,
     21                                      net::AuthChallengeInfo* auth_info,
     22                                      bool first_auth_attempt)
     23     : login_delegate_(login_delegate),
     24       host_(auth_info->challenger.host()),
     25       realm_(auth_info->realm) {
     26   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     27   JNIEnv* env = base::android::AttachCurrentThread();
     28   http_auth_handler_.Reset(
     29       Java_AwHttpAuthHandler_create(
     30           env, reinterpret_cast<intptr_t>(this), first_auth_attempt));
     31 }
     32 
     33 AwHttpAuthHandler:: ~AwHttpAuthHandler() {
     34   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     35   Java_AwHttpAuthHandler_handlerDestroyed(base::android::AttachCurrentThread(),
     36                                           http_auth_handler_.obj());
     37 }
     38 
     39 void AwHttpAuthHandler::Proceed(JNIEnv* env,
     40                                 jobject obj,
     41                                 jstring user,
     42                                 jstring password) {
     43   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     44   if (login_delegate_.get()) {
     45     login_delegate_->Proceed(ConvertJavaStringToUTF16(env, user),
     46                              ConvertJavaStringToUTF16(env, password));
     47     login_delegate_ = NULL;
     48   }
     49 }
     50 
     51 void AwHttpAuthHandler::Cancel(JNIEnv* env, jobject obj) {
     52   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     53   if (login_delegate_.get()) {
     54     login_delegate_->Cancel();
     55     login_delegate_ = NULL;
     56   }
     57 }
     58 
     59 bool AwHttpAuthHandler::HandleOnUIThread(content::WebContents* web_contents) {
     60   DCHECK(web_contents);
     61   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     62   AwContents* aw_contents = AwContents::FromWebContents(web_contents);
     63 
     64   return aw_contents->OnReceivedHttpAuthRequest(http_auth_handler_, host_,
     65                                                 realm_);
     66 }
     67 
     68 // static
     69 AwHttpAuthHandlerBase* AwHttpAuthHandlerBase::Create(
     70     AwLoginDelegate* login_delegate,
     71     net::AuthChallengeInfo* auth_info,
     72     bool first_auth_attempt) {
     73   return new AwHttpAuthHandler(login_delegate, auth_info, first_auth_attempt);
     74 }
     75 
     76 bool RegisterAwHttpAuthHandler(JNIEnv* env) {
     77   return RegisterNativesImpl(env);
     78 }
     79 
     80 }  // namespace android_webview
     81