• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
AwHttpAuthHandler(AwLoginDelegate * login_delegate,net::AuthChallengeInfo * auth_info,bool first_auth_attempt)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 
~AwHttpAuthHandler()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 
Proceed(JNIEnv * env,jobject obj,jstring user,jstring password)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 
Cancel(JNIEnv * env,jobject obj)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 
HandleOnUIThread(content::WebContents * web_contents)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
Create(AwLoginDelegate * login_delegate,net::AuthChallengeInfo * auth_info,bool first_auth_attempt)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 
RegisterAwHttpAuthHandler(JNIEnv * env)76 bool RegisterAwHttpAuthHandler(JNIEnv* env) {
77   return RegisterNativesImpl(env);
78 }
79 
80 }  // namespace android_webview
81