Home | History | Annotate | Download | only in android
      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.
     18 class ChromeHttpAuthHandler {
     19  public:
     20   ChromeHttpAuthHandler(const 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   // Returns a reference to the Java land ChromeHttpAuthHandler.  This
     32   // reference must not be released, and remains valid until the native
     33   // ChromeHttpAuthHandler is destructed.
     34   jobject GetJavaObject();
     35 
     36   // Forwards the autofill data to the Java land object.
     37   void OnAutofillDataAvailable(
     38       const string16& username,
     39       const string16& password);
     40 
     41   // --------------------------------------------------------------
     42   // JNI Methods
     43   // --------------------------------------------------------------
     44 
     45   // Submits the username and password to the observer.
     46   void SetAuth(JNIEnv* env, jobject, jstring username, jstring password);
     47 
     48   // Cancels the authentication attempt of the observer.
     49   void CancelAuth(JNIEnv* env, jobject);
     50 
     51   // These functions return the strings needed to display a login form.
     52   base::android::ScopedJavaLocalRef<jstring> GetMessageTitle(
     53       JNIEnv* env, jobject);
     54   base::android::ScopedJavaLocalRef<jstring> GetMessageBody(
     55       JNIEnv* env, jobject);
     56   base::android::ScopedJavaLocalRef<jstring> GetUsernameLabelText(
     57       JNIEnv* env, jobject);
     58   base::android::ScopedJavaLocalRef<jstring> GetPasswordLabelText(
     59       JNIEnv* env, jobject);
     60   base::android::ScopedJavaLocalRef<jstring> GetOkButtonText(
     61       JNIEnv* env, jobject);
     62   base::android::ScopedJavaLocalRef<jstring> GetCancelButtonText(
     63       JNIEnv* env, jobject);
     64   // Registers the ChromeHttpAuthHandler native methods.
     65   static bool RegisterChromeHttpAuthHandler(JNIEnv* env);
     66  private:
     67   LoginHandler* observer_;
     68   base::android::ScopedJavaGlobalRef<jobject> java_chrome_http_auth_handler_;
     69   // e.g. "The server example.com:80 requires a username and password."
     70   string16 explanation_;
     71 
     72   DISALLOW_COPY_AND_ASSIGN(ChromeHttpAuthHandler);
     73 };
     74 
     75 #endif  // CHROME_BROWSER_UI_ANDROID_CHROME_HTTP_AUTH_HANDLER_H_
     76