| Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeHttpAuthHandler.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeHttpAuthHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeHttpAuthHandler.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aa0203f6047847f59785484f8ff1a1ce199f2b8d
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeHttpAuthHandler.java
|
| @@ -0,0 +1,134 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser;
|
| +
|
| +import org.chromium.base.CalledByNative;
|
| +
|
| +/**
|
| + * Represents an HTTP authentication request to be handled by the UI.
|
| + * The request can be fulfilled or canceled using setAuth() or cancelAuth().
|
| + * This class also provides strings for building a login form.
|
| + *
|
| + * Note: this class supercedes android.webkit.HttpAuthHandler, but does not
|
| + * extend HttpAuthHandler due to the private access of HttpAuthHandler's
|
| + * constructor.
|
| + */
|
| +public class ChromeHttpAuthHandler {
|
| + private final int mNativeChromeHttpAuthHandler;
|
| + private AutofillObserver mAutofillObserver;
|
| + private String mAutofillUsername;
|
| + private String mAutofillPassword;
|
| +
|
| + private ChromeHttpAuthHandler(int nativeChromeHttpAuthHandler) {
|
| + assert nativeChromeHttpAuthHandler != 0;
|
| + mNativeChromeHttpAuthHandler = nativeChromeHttpAuthHandler;
|
| + }
|
| +
|
| + @CalledByNative
|
| + private static ChromeHttpAuthHandler create(int nativeChromeHttpAuthHandler) {
|
| + return new ChromeHttpAuthHandler(nativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + // ---------------------------------------------
|
| + // HttpAuthHandler methods
|
| + // ---------------------------------------------
|
| +
|
| + // Note on legacy useHttpAuthUsernamePassword() method:
|
| + // For reference, the existing WebView (when using the chromium stack) returns true here
|
| + // iff this is the first auth challenge attempt for this connection.
|
| + // (see WebUrlLoaderClient::authRequired call to didReceiveAuthenticationChallenge)
|
| + // In ChromeHttpAuthHandler this mechanism is superseded by the
|
| + // AutofillObserver.onAutofillDataAvailable mechanism below, however the legacy WebView
|
| + // implementation will need to handle the API mismatch between the legacy
|
| + // WebView.getHttpAuthUsernamePassword synchronous call and the credentials arriving
|
| + // asynchronously in onAutofillDataAvailable.
|
| +
|
| + /**
|
| + * Cancel the authorization request.
|
| + */
|
| + public void cancel() {
|
| + nativeCancelAuth(mNativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + /**
|
| + * Proceed with the authorization with the given credentials.
|
| + */
|
| + public void proceed(String username, String password) {
|
| + nativeSetAuth(mNativeChromeHttpAuthHandler, username, password);
|
| + }
|
| +
|
| + public String getMessageTitle() {
|
| + return nativeGetMessageTitle(mNativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + public String getMessageBody() {
|
| + return nativeGetMessageBody(mNativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + public String getUsernameLabelText() {
|
| + return nativeGetUsernameLabelText(mNativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + public String getPasswordLabelText() {
|
| + return nativeGetPasswordLabelText(mNativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + public String getOkButtonText() {
|
| + return nativeGetOkButtonText(mNativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + public String getCancelButtonText() {
|
| + return nativeGetCancelButtonText(mNativeChromeHttpAuthHandler);
|
| + }
|
| +
|
| + // ---------------------------------------------
|
| + // Autofill-related
|
| + // ---------------------------------------------
|
| +
|
| + /**
|
| + * This is a public interface that will act as a hook for providing login data using
|
| + * autofill. When the observer is set, {@link ChromeHttpAuthhandler}'s
|
| + * onAutofillDataAvailable callback can be used by the observer to fill out necessary
|
| + * login information.
|
| + */
|
| + public static interface AutofillObserver {
|
| + public void onAutofillDataAvailable(String username, String password);
|
| + }
|
| +
|
| + /**
|
| + * Register for onAutofillDataAvailable callbacks. |observer| can be null,
|
| + * in which case no callback is made.
|
| + */
|
| + public void setAutofillObserver(AutofillObserver observer) {
|
| + mAutofillObserver = observer;
|
| + // In case the autofill data arrives before the observer is set.
|
| + if (mAutofillUsername != null && mAutofillPassword != null) {
|
| + mAutofillObserver.onAutofillDataAvailable(mAutofillUsername, mAutofillPassword);
|
| + }
|
| + }
|
| +
|
| + @CalledByNative
|
| + private void onAutofillDataAvailable(String username, String password) {
|
| + mAutofillUsername = username;
|
| + mAutofillPassword = password;
|
| + if (mAutofillObserver != null) {
|
| + mAutofillObserver.onAutofillDataAvailable(username, password);
|
| + }
|
| + }
|
| +
|
| + // ---------------------------------------------
|
| + // Native side calls
|
| + // ---------------------------------------------
|
| +
|
| + private native void nativeSetAuth(int nativeChromeHttpAuthHandler,
|
| + String username, String password);
|
| + private native void nativeCancelAuth(int nativeChromeHttpAuthHandler);
|
| + private native String nativeGetCancelButtonText(int nativeChromeHttpAuthHandler);
|
| + private native String nativeGetMessageTitle(int nativeChromeHttpAuthHandler);
|
| + private native String nativeGetMessageBody(int nativeChromeHttpAuthHandler);
|
| + private native String nativeGetPasswordLabelText(int nativeChromeHttpAuthHandler);
|
| + private native String nativeGetOkButtonText(int nativeChromeHttpAuthHandler);
|
| + private native String nativeGetUsernameLabelText(int nativeChromeHttpAuthHandler);
|
| +}
|
|
|