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