Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chrome / android / javatests / src / org / chromium / chrome / browser / autofill / MockAutofillDialogController.java
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.autofill;
6
7 import junit.framework.Assert;
8
9 import org.chromium.base.ThreadUtils;
10 import org.chromium.chrome.browser.autofill.AutofillDialogControllerAndroid.AutofillDialog;
11 import org.chromium.chrome.browser.autofill.AutofillDialogControllerAndroid.AutofillDialogDelegate;
12 import org.chromium.chrome.browser.autofill.AutofillDialogControllerAndroid.AutofillDialogFactory;
13 import org.chromium.ui.base.WindowAndroid;
14
15 /**
16  * Mock of the AutofillDialog that returns a predefined set of values.
17 */
18 public class MockAutofillDialogController implements AutofillDialog {
19     private final AutofillDialogResult.ResultWallet mResult;
20     private final boolean mLastUsedChoiceIsAutofill;
21     private final String mLastUsedAccountName;
22     private final String mGuidDefaultBilling;
23     private final String mGuidDefaultShipping;
24     private final String mGuidDefaultCard;
25
26     private AutofillDialogDelegate mDelegate;
27
28     /**
29      * Installs the mock AutofillDialog implementation.
30      */
31     public static void installMockFactory(
32             final long delayMillis,
33             final AutofillDialogResult.ResultWallet result,
34             final boolean lastUsedChoiceIsAutofill,
35             final String lastUsedAccountName,
36             final String guidDefaultBilling,
37             final String guidDefaultShipping,
38             final String guidDefaultCard,
39             final boolean shouldRequestFullBilling,
40             final boolean shouldRequestShipping,
41             final boolean shouldRequestPhoneNumbers) {
42         AutofillDialogControllerAndroid.setDialogFactory(new AutofillDialogFactory() {
43             @Override
44             public AutofillDialog createDialog(
45                     final AutofillDialogDelegate delegate,
46                     final WindowAndroid windowAndroid,
47                     final boolean requestFullBillingAddress,
48                     final boolean requestShippingAddress,
49                     final boolean requestPhoneNumbers,
50                     final boolean incognitoMode,
51                     final boolean initialChoiceIsAutofill,
52                     final String initialWalletAccountName,
53                     final String initialBillingGuid,
54                     final String initialShippingGuid,
55                     final String initialCardGuid,
56                     final String merchantDomain,
57                     final String[] shippingCountries,
58                     final String[] creditCardTypes) {
59                 Assert.assertEquals("Full billing details flag doesn't match",
60                         shouldRequestFullBilling, requestFullBillingAddress);
61                 Assert.assertEquals("Shipping details flag doesn't match",
62                         shouldRequestShipping, requestShippingAddress);
63                 Assert.assertEquals("Phone numbers flag doesn't match",
64                         shouldRequestPhoneNumbers, requestPhoneNumbers);
65                 return new MockAutofillDialogController(
66                         delegate,
67                         delayMillis,
68                         result,
69                         lastUsedChoiceIsAutofill,
70                         lastUsedAccountName,
71                         guidDefaultBilling,
72                         guidDefaultShipping,
73                         guidDefaultCard,
74                         windowAndroid,
75                         requestFullBillingAddress, requestShippingAddress,
76                         requestPhoneNumbers,
77                         incognitoMode,
78                         initialChoiceIsAutofill, initialWalletAccountName,
79                         initialBillingGuid, initialShippingGuid, initialCardGuid,
80                         merchantDomain,
81                         shippingCountries,
82                         creditCardTypes);
83             }
84         });
85     }
86
87     private MockAutofillDialogController(
88             final AutofillDialogControllerAndroid.AutofillDialogDelegate delegate,
89             final long delayMillis,
90             final AutofillDialogResult.ResultWallet result,
91             final boolean lastUsedChoiceIsAutofill,
92             final String lastUsedAccountName,
93             final String guidDefaultBilling,
94             final String guidDefaultShipping,
95             final String guidDefaultCard,
96             final WindowAndroid windowAndroid,
97             final boolean requestFullBillingAddress, final boolean requestShippingAddress,
98             final boolean requestPhoneNumbers,
99             final boolean incognitoMode,
100             final boolean initialChoiceIsAutofill, final String initialWalletAccountName,
101             final String initialBillingGuid, final String initialShippingGuid,
102             final String initialCardGuid,
103             final String merchantDomain,
104             final String[] shippingCountries,
105             final String[] creditCardTypes) {
106         mDelegate = delegate;
107         mResult = result;
108         mLastUsedChoiceIsAutofill = lastUsedChoiceIsAutofill;
109         mLastUsedAccountName = lastUsedAccountName;
110         mGuidDefaultBilling = guidDefaultBilling;
111         mGuidDefaultShipping = guidDefaultShipping;
112         mGuidDefaultCard = guidDefaultCard;
113         ThreadUtils.postOnUiThreadDelayed(new Runnable() {
114             @Override
115             public void run() {
116                 triggerResultCallback();
117             }
118         }, delayMillis);
119     }
120
121     // AutofillDialog implementation:
122
123     @Override
124     public void onDestroy() {
125         mDelegate = null;
126     }
127
128     public void triggerResultCallback() {
129         if (mDelegate == null) return;
130
131         if (mResult == null) {
132             mDelegate.dialogCancel();
133             return;
134         }
135
136         mDelegate.dialogContinue(
137                 mResult,
138                 mLastUsedChoiceIsAutofill, mLastUsedAccountName,
139                 mGuidDefaultBilling, mGuidDefaultShipping, mGuidDefaultCard);
140     }
141 }