| // 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); |
| |
| } |