Chromium Code Reviews| 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..a298c27cbdcba1773a1abd0d23ff41137b878277 |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeHttpAuthHandler.java |
| @@ -0,0 +1,129 @@ |
| +// 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; |
| +import org.chromium.content.browser.ContentHttpAuthHandler; |
| + |
| +/** |
| + * 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 implements ContentHttpAuthHandler { |
| + 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: |
|
Yaron
2012/08/02 20:50:24
Nit: odd comment style. Please fix.
|
| + // * 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 |
| + // --------------------------------------------- |
| + |
| + public static interface AutofillObserver { |
|
Yaron
2012/08/02 20:50:24
You should document this interface better. It seem
|
| + 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, |
|
Yaron
2012/08/02 20:50:24
Nit: sort
|
| + String username, String password); |
| + private native void nativeCancelAuth(int nativeChromeHttpAuthHandler); |
| + private native String nativeGetMessageTitle(int nativeChromeHttpAuthHandler); |
| + private native String nativeGetMessageBody(int nativeChromeHttpAuthHandler); |
| + private native String nativeGetUsernameLabelText(int nativeChromeHttpAuthHandler); |
| + private native String nativeGetPasswordLabelText(int nativeChromeHttpAuthHandler); |
| + private native String nativeGetOkButtonText(int nativeChromeHttpAuthHandler); |
| + private native String nativeGetCancelButtonText(int nativeChromeHttpAuthHandler); |
| +} |