| Index: chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java
|
| index 7259a8e876413cdd3e69e2db7454b2550ea2bc90..2687a9afaea4d38689ebb22a8e2ce473e9eabc8e 100644
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java
|
| @@ -8,20 +8,21 @@ import org.chromium.base.ThreadUtils;
|
| import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
|
| import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
|
| import org.chromium.chrome.browser.autofill.PersonalDataManager.PersonalDataManagerObserver;
|
| +import org.chromium.content.browser.test.util.CallbackHelper;
|
|
|
| import java.util.List;
|
| import java.util.concurrent.Callable;
|
| import java.util.concurrent.ExecutionException;
|
| +import java.util.concurrent.TimeoutException;
|
|
|
| /**
|
| * Helper class for testing AutofillProfiles.
|
| */
|
| public class AutofillTestHelper {
|
|
|
| - private final Object mObserverNotified;
|
| + private final CallbackHelper mOnPersonalDataChangedHelper = new CallbackHelper();
|
|
|
| public AutofillTestHelper() {
|
| - mObserverNotified = new Object();
|
| registerDataObserver();
|
| }
|
|
|
| @@ -61,25 +62,27 @@ public class AutofillTestHelper {
|
| }
|
|
|
| public String setProfile(final AutofillProfile profile) throws InterruptedException,
|
| - ExecutionException {
|
| + ExecutionException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| String guid = ThreadUtils.runOnUiThreadBlocking(new Callable<String>() {
|
| @Override
|
| public String call() {
|
| return PersonalDataManager.getInstance().setProfile(profile);
|
| }
|
| });
|
| - waitForDataChanged();
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| return guid;
|
| }
|
|
|
| - void deleteProfile(final String guid) throws InterruptedException {
|
| + void deleteProfile(final String guid) throws InterruptedException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| @Override
|
| public void run() {
|
| PersonalDataManager.getInstance().deleteProfile(guid);
|
| }
|
| });
|
| - waitForDataChanged();
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| }
|
|
|
| CreditCard getCreditCard(final String guid) throws ExecutionException {
|
| @@ -118,41 +121,63 @@ public class AutofillTestHelper {
|
| }
|
|
|
| public String setCreditCard(final CreditCard card) throws InterruptedException,
|
| - ExecutionException {
|
| + ExecutionException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| String guid = ThreadUtils.runOnUiThreadBlocking(new Callable<String>() {
|
| @Override
|
| public String call() {
|
| return PersonalDataManager.getInstance().setCreditCard(card);
|
| }
|
| });
|
| - waitForDataChanged();
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| return guid;
|
| }
|
|
|
| public void addServerCreditCard(final CreditCard card)
|
| - throws InterruptedException, ExecutionException {
|
| + throws InterruptedException, ExecutionException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| @Override
|
| public void run() {
|
| PersonalDataManager.getInstance().addServerCreditCardForTest(card);
|
| }
|
| });
|
| - waitForDataChanged();
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| }
|
|
|
| - void deleteCreditCard(final String guid) throws InterruptedException {
|
| + void deleteCreditCard(final String guid) throws InterruptedException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| @Override
|
| public void run() {
|
| PersonalDataManager.getInstance().deleteCreditCard(guid);
|
| }
|
| });
|
| - waitForDataChanged();
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| + }
|
| +
|
| + /**
|
| + * Records the use of the profile associated with the specified {@code guid}.. Effectively
|
| + * increments the use count of the profile and set its use date to the current time. Also logs
|
| + * usage metrics.
|
| + *
|
| + * @param guid The GUID of the profile.
|
| + */
|
| + void recordAndLogProfileUse(final String guid) throws InterruptedException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + PersonalDataManager.getInstance().recordAndLogProfileUse(guid);
|
| + }
|
| + });
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| }
|
|
|
| /**
|
| - * Sets the use |count| and use |date| of the test profile associated with the |guid|. This
|
| - * update is not saved to disk.
|
| + * Sets the use {@code count} and use {@code date} of the test profile associated with the
|
| + * {@code guid}. This update is not saved to disk.
|
| + *
|
| * @param guid The GUID of the profile to modify.
|
| * @param count The use count to assign to the profile. It should be non-negative.
|
| * @param date The use date to assign to the profile. It represents an absolute point in
|
| @@ -161,18 +186,74 @@ public class AutofillTestHelper {
|
| * positive number.
|
| */
|
| public void setProfileUseStatsForTesting(final String guid, final int count, final long date)
|
| - throws InterruptedException {
|
| + throws InterruptedException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| @Override
|
| public void run() {
|
| PersonalDataManager.getInstance().setProfileUseStatsForTesting(guid, count, date);
|
| }
|
| });
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| }
|
|
|
| /**
|
| - * Sets the use |count| and use |date| of the test credit card associated with the |guid|. This
|
| - * update is not saved to disk.
|
| + * Get the use count of the test profile associated with the {@code guid}.
|
| + *
|
| + * @param guid The GUID of the profile to query.
|
| + * @return The non-negative use count of the profile.
|
| + */
|
| + public int getProfileUseCountForTesting(final String guid) throws InterruptedException,
|
| + ExecutionException {
|
| + return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() {
|
| + @Override
|
| + public Integer call() {
|
| + return PersonalDataManager.getInstance().getProfileUseCountForTesting(guid);
|
| + }
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Get the use date of the test profile associated with the {@code guid}.
|
| + *
|
| + * @param guid The GUID of the profile to query.
|
| + * @return A non-negative long representing the last use date of the profile. It represents an
|
| + * absolute point in coordinated universal time (UTC) represented as microseconds since
|
| + * the Windows epoch. For more details see the comment header in time.h.
|
| + */
|
| + public long getProfileUseDateForTesting(final String guid) throws InterruptedException,
|
| + ExecutionException {
|
| + return ThreadUtils.runOnUiThreadBlocking(new Callable<Long>() {
|
| + @Override
|
| + public Long call() {
|
| + return PersonalDataManager.getInstance().getProfileUseDateForTesting(guid);
|
| + }
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Records the use of the credit card associated with the specified {@code guid}. Effectively
|
| + * increments the use count of the credit card and sets its use date to the current time. Also
|
| + * logs usage metrics.
|
| + *
|
| + * @param guid The GUID of the credit card.
|
| + */
|
| + public void recordAndLogCreditCardUse(final String guid) throws InterruptedException,
|
| + TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + PersonalDataManager.getInstance().recordAndLogCreditCardUse(guid);
|
| + }
|
| + });
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| + }
|
| +
|
| + /**
|
| + * Sets the use {@code count} and use {@code date} of the test credit card associated with the
|
| + * {@code guid}. This update is not saved to disk.
|
| + *
|
| * @param guid The GUID of the credit card to modify.
|
| * @param count The use count to assign to the credit card. It should be non-negative.
|
| * @param date The use date to assign to the credit card. It represents an absolute point in
|
| @@ -180,8 +261,9 @@ public class AutofillTestHelper {
|
| * epoch. For more details see the comment header in time.h. It should always be a
|
| * positive number.
|
| */
|
| - void setCreditCardUseStatsForTesting(final String guid, final int count, final long date)
|
| - throws InterruptedException {
|
| + public void setCreditCardUseStatsForTesting(final String guid, final int count, final long date)
|
| + throws InterruptedException, TimeoutException {
|
| + int callCount = mOnPersonalDataChangedHelper.getCallCount();
|
| ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| @Override
|
| public void run() {
|
| @@ -189,6 +271,57 @@ public class AutofillTestHelper {
|
| guid, count, date);
|
| }
|
| });
|
| + mOnPersonalDataChangedHelper.waitForCallback(callCount);
|
| + }
|
| +
|
| + /**
|
| + * Get the use count of the test credit card associated with the {@code guid}.
|
| + *
|
| + * @param guid The GUID of the credit card to query.
|
| + * @return The non-negative use count of the credit card.
|
| + */
|
| + public int getCreditCardUseCountForTesting(final String guid) throws InterruptedException,
|
| + ExecutionException {
|
| + return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() {
|
| + @Override
|
| + public Integer call() {
|
| + return PersonalDataManager.getInstance().getCreditCardUseCountForTesting(guid);
|
| + }
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Get the use date of the test credit card associated with the {@code guid}.
|
| + *
|
| + * @param guid The GUID of the credit card to query.
|
| + * @return A non-negative long representing the last use date of the credit card. It represents
|
| + * an absolute point in coordinated universal time (UTC) represented as microseconds
|
| + * since the Windows epoch. For more details see the comment header in time.h.
|
| + */
|
| + public long getCreditCardUseDateForTesting(final String guid) throws InterruptedException,
|
| + ExecutionException {
|
| + return ThreadUtils.runOnUiThreadBlocking(new Callable<Long>() {
|
| + @Override
|
| + public Long call() {
|
| + return PersonalDataManager.getInstance().getCreditCardUseDateForTesting(guid);
|
| + }
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Get the current use date to be used in test to compare with credit card or profile use dates.
|
| + *
|
| + * @return A non-negative long representing the current date. It represents an absolute point in
|
| + * coordinated universal time (UTC) represented as microseconds since the Windows epoch.
|
| + * For more details see the comment header in time.h.
|
| + */
|
| + public long getCurrentDateForTesting() throws InterruptedException, ExecutionException {
|
| + return ThreadUtils.runOnUiThreadBlocking(new Callable<Long>() {
|
| + @Override
|
| + public Long call() {
|
| + return PersonalDataManager.getInstance().getCurrentDateForTesting();
|
| + }
|
| + });
|
| }
|
|
|
| private void registerDataObserver() {
|
| @@ -199,20 +332,11 @@ public class AutofillTestHelper {
|
| new PersonalDataManagerObserver() {
|
| @Override
|
| public void onPersonalDataChanged() {
|
| - synchronized (mObserverNotified) {
|
| - mObserverNotified.notifyAll();
|
| - }
|
| + mOnPersonalDataChangedHelper.notifyCalled();
|
| }
|
| }
|
| );
|
| }
|
| });
|
| }
|
| -
|
| - @SuppressWarnings("WaitNotInLoop")
|
| - public void waitForDataChanged() throws InterruptedException {
|
| - synchronized (mObserverNotified) {
|
| - mObserverNotified.wait(3000);
|
| - }
|
| - }
|
| }
|
|
|