root/chrome/android/java/src/org/chromium/chrome/browser/ChromeHttpAuthHandler.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. create
  2. cancel
  3. proceed
  4. getMessageTitle
  5. getMessageBody
  6. getUsernameLabelText
  7. getPasswordLabelText
  8. getOkButtonText
  9. getCancelButtonText
  10. onAutofillDataAvailable
  11. setAutofillObserver
  12. onAutofillDataAvailable
  13. nativeSetAuth
  14. nativeCancelAuth
  15. nativeGetCancelButtonText
  16. nativeGetMessageTitle
  17. nativeGetMessageBody
  18. nativeGetPasswordLabelText
  19. nativeGetOkButtonText
  20. nativeGetUsernameLabelText

// Copyright 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 long mNativeChromeHttpAuthHandler;
    private AutofillObserver mAutofillObserver;
    private String mAutofillUsername;
    private String mAutofillPassword;

    private ChromeHttpAuthHandler(long nativeChromeHttpAuthHandler) {
        assert nativeChromeHttpAuthHandler != 0;
        mNativeChromeHttpAuthHandler = nativeChromeHttpAuthHandler;
    }

    @CalledByNative
    private static ChromeHttpAuthHandler create(long 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(long nativeChromeHttpAuthHandler,
            String username, String password);
    private native void nativeCancelAuth(long nativeChromeHttpAuthHandler);
    private native String nativeGetCancelButtonText(long nativeChromeHttpAuthHandler);
    private native String nativeGetMessageTitle(long nativeChromeHttpAuthHandler);
    private native String nativeGetMessageBody(long nativeChromeHttpAuthHandler);
    private native String nativeGetPasswordLabelText(long nativeChromeHttpAuthHandler);
    private native String nativeGetOkButtonText(long nativeChromeHttpAuthHandler);
    private native String nativeGetUsernameLabelText(long nativeChromeHttpAuthHandler);
}

/* [<][>][^][v][top][bottom][index][help] */