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#ifndef CHROME_BROWSER_UI_ANDROID_CHROME_HTTP_AUTH_HANDLER_H_ 6#define CHROME_BROWSER_UI_ANDROID_CHROME_HTTP_AUTH_HANDLER_H_ 7 8#include <jni.h> 9 10#include "base/android/scoped_java_ref.h" 11#include "base/strings/string16.h" 12#include "chrome/browser/ui/login/login_prompt.h" 13 14// This class facilitates communication between a native LoginHandler 15// and a Java land ChromeHttpAuthHandler, which is passed to a 16// ContentViewClient to allow it to respond to HTTP authentication requests 17// by, e.g., showing the user a login dialog. 18class ChromeHttpAuthHandler { 19 public: 20 explicit ChromeHttpAuthHandler(const base::string16& explanation); 21 ~ChromeHttpAuthHandler(); 22 23 // This must be called before using the object. 24 // Constructs a corresponding Java land ChromeHttpAuthHandler. 25 void Init(); 26 27 // Registers an observer to receive callbacks when SetAuth() and CancelAuth() 28 // are called. |observer| may be NULL in which case the callbacks are skipped. 29 void SetObserver(LoginHandler* observer); 30 31 // Show the dialog prompting for login credentials. 32 void ShowDialog(jobject window_android); 33 34 // Forwards the autofill data to the Java land object. 35 void OnAutofillDataAvailable( 36 const base::string16& username, 37 const base::string16& password); 38 39 // -------------------------------------------------------------- 40 // JNI Methods 41 // -------------------------------------------------------------- 42 43 // Submits the username and password to the observer. 44 void SetAuth(JNIEnv* env, jobject, jstring username, jstring password); 45 46 // Cancels the authentication attempt of the observer. 47 void CancelAuth(JNIEnv* env, jobject); 48 49 // These functions return the strings needed to display a login form. 50 base::android::ScopedJavaLocalRef<jstring> GetMessageTitle( 51 JNIEnv* env, jobject); 52 base::android::ScopedJavaLocalRef<jstring> GetMessageBody( 53 JNIEnv* env, jobject); 54 base::android::ScopedJavaLocalRef<jstring> GetUsernameLabelText( 55 JNIEnv* env, jobject); 56 base::android::ScopedJavaLocalRef<jstring> GetPasswordLabelText( 57 JNIEnv* env, jobject); 58 base::android::ScopedJavaLocalRef<jstring> GetOkButtonText( 59 JNIEnv* env, jobject); 60 base::android::ScopedJavaLocalRef<jstring> GetCancelButtonText( 61 JNIEnv* env, jobject); 62 // Registers the ChromeHttpAuthHandler native methods. 63 static bool RegisterChromeHttpAuthHandler(JNIEnv* env); 64 private: 65 LoginHandler* observer_; 66 base::android::ScopedJavaGlobalRef<jobject> java_chrome_http_auth_handler_; 67 // e.g. "The server example.com:80 requires a username and password." 68 base::string16 explanation_; 69 70 DISALLOW_COPY_AND_ASSIGN(ChromeHttpAuthHandler); 71}; 72 73#endif // CHROME_BROWSER_UI_ANDROID_CHROME_HTTP_AUTH_HANDLER_H_ 74