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

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

DEFINITIONS

This source file includes following definitions.
  1. getUrl
  2. getUserName
  3. createSavedPasswordEntry
  4. passwordListAvailable
  5. passwordExceptionListAvailable
  6. passwordListAvailable
  7. passwordExceptionListAvailable
  8. addObserver
  9. removeObserver
  10. updatePasswordLists
  11. getSavedPasswordEntry
  12. getSavedPasswordException
  13. removeSavedPasswordEntry
  14. removeSavedPasswordException
  15. destroy
  16. nativeInit
  17. nativeUpdatePasswordLists
  18. nativeGetSavedPasswordEntry
  19. nativeGetSavedPasswordException
  20. nativeHandleRemoveSavedPasswordEntry
  21. nativeHandleRemoveSavedPasswordException
  22. nativeDestroy

// Copyright 2013 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.base.ObserverList;

/**
 * Class for retrieving passwords and password exceptions (websites for which Chrome should not save
 * password) from native code.
 */
public final class PasswordUIView {

    /**
     * Class representing information about a saved password entry.
     */
    public static final class SavedPasswordEntry {
        private final String mUrl;
        private final String mName;

        private SavedPasswordEntry(String url, String name) {
            mUrl = url;
            mName = name;
        }

        public String getUrl() {
            return mUrl;
        }

        public String getUserName() {
            return mName;
        }
    }

    @CalledByNative
    private static SavedPasswordEntry createSavedPasswordEntry(String url, String name) {
        return new SavedPasswordEntry(url, name);
    }

    /**
     * Interface which client can use to listen to changes to password and password exception lists.
     * Clients can register and unregister themselves with addObserver and removeObserver.
     */
    public interface PasswordListObserver {
        /**
         * Called when passwords list is updated.
         * @param count Number of entries in the password list.
         */
        void passwordListAvailable(int count);

        /**
         * Called when password exceptions list is updated.
         * @param count Number of entries in the password exception list.
         */
        void passwordExceptionListAvailable(int count);
    }

    private ObserverList<PasswordListObserver> mObservers =
            new ObserverList<PasswordListObserver>();

    // Pointer to native implementation, set to 0 in destroy().
    private long mNativePasswordUIViewAndroid;

    /**
     * Constructor creates the native object as well. Callers should call destroy() after usage.
     */
    public PasswordUIView() {
        mNativePasswordUIViewAndroid = nativeInit();
    }

    @CalledByNative
    private void passwordListAvailable(int count) {
        for (PasswordListObserver observer : mObservers) {
            observer.passwordListAvailable(count);
        }
    }

    @CalledByNative
    private void passwordExceptionListAvailable(int count) {
        for (PasswordListObserver observer : mObservers) {
            observer.passwordExceptionListAvailable(count);
        }
    }

    public void addObserver(PasswordListObserver observer) {
        mObservers.addObserver(observer);
    }

    public void removeObserver(PasswordListObserver observer) {
        mObservers.removeObserver(observer);
    }

    /**
     * Calls native to refresh password and exception lists. Observers are notified when fetch to
     * passwords is complete.
     */
    public void updatePasswordLists() {
        nativeUpdatePasswordLists(mNativePasswordUIViewAndroid);
    }

    /**
     * Get the saved password entry at index.
     *
     * @param index Index of Password.
     * @return SavedPasswordEntry at index.
     */
    public SavedPasswordEntry getSavedPasswordEntry(int index) {
        return nativeGetSavedPasswordEntry(mNativePasswordUIViewAndroid, index);
    }

    /**
     * Get saved password exception at index.
     *
     * @param index of exception
     * @return Origin of password exception.
     */
    public String getSavedPasswordException(int index) {
        return nativeGetSavedPasswordException(mNativePasswordUIViewAndroid, index);
    }

    /**
     * Remove saved password entry at index.
     *
     * @param index of password entry to remove.
     */
    public void removeSavedPasswordEntry(int index) {
        nativeHandleRemoveSavedPasswordEntry(mNativePasswordUIViewAndroid, index);
    }

    /**
     * Remove saved exception entry at index.
     *
     * @param index of exception entry.
     */
    public void removeSavedPasswordException(int index) {
        nativeHandleRemoveSavedPasswordException(mNativePasswordUIViewAndroid, index);
    }

    /**
     * Destroy the native object.
     */
    public void destroy() {
        if (mNativePasswordUIViewAndroid != 0) {
            nativeDestroy(mNativePasswordUIViewAndroid);
            mNativePasswordUIViewAndroid = 0;
        }
        mObservers.clear();
    }

    private native long nativeInit();

    private native void nativeUpdatePasswordLists(long nativePasswordUIViewAndroid);

    private native SavedPasswordEntry nativeGetSavedPasswordEntry(
            long nativePasswordUIViewAndroid,
            int index);

    private native String nativeGetSavedPasswordException(long nativePasswordUIViewAndroid,
            int index);

    private native void nativeHandleRemoveSavedPasswordEntry(
            long nativePasswordUIViewAndroid,
            int index);

    private native void nativeHandleRemoveSavedPasswordException(
            long nativePasswordUIViewAndroid,
            int index);

    private native void nativeDestroy(long nativePasswordUIViewAndroid);

}

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