Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java

Issue 2770193003: Implement request id in PaymentDetailsInit (Closed)
Patch Set: Rebase once more since mojom file moved Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentInstrument.java » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.payments; 5 package org.chromium.chrome.browser.payments;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.content.ComponentName; 8 import android.content.ComponentName;
9 import android.content.Context; 9 import android.content.Context;
10 import android.content.DialogInterface; 10 import android.content.DialogInterface;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 extends PaymentInstrument implements PaymentApp, WindowAndroid.IntentCal lback { 49 extends PaymentInstrument implements PaymentApp, WindowAndroid.IntentCal lback {
50 /** The action name for the Pay Intent. */ 50 /** The action name for the Pay Intent. */
51 public static final String ACTION_PAY = "org.chromium.intent.action.PAY"; 51 public static final String ACTION_PAY = "org.chromium.intent.action.PAY";
52 52
53 /** The maximum number of milliseconds to wait for a response from a READY_T O_PAY service. */ 53 /** The maximum number of milliseconds to wait for a response from a READY_T O_PAY service. */
54 private static final long READY_TO_PAY_TIMEOUT_MS = 400; 54 private static final long READY_TO_PAY_TIMEOUT_MS = 400;
55 55
56 /** The maximum number of milliseconds to wait for a connection to READY_TO_ PAY service. */ 56 /** The maximum number of milliseconds to wait for a connection to READY_TO_ PAY service. */
57 private static final long SERVICE_CONNECTION_TIMEOUT_MS = 1000; 57 private static final long SERVICE_CONNECTION_TIMEOUT_MS = 1000;
58 58
59 private static final String EXTRA_ID = "id";
59 private static final String EXTRA_MERCHANT_NAME = "merchantName"; 60 private static final String EXTRA_MERCHANT_NAME = "merchantName";
60 private static final String EXTRA_METHOD_NAME = "methodName"; 61 private static final String EXTRA_METHOD_NAME = "methodName";
61 private static final String EXTRA_METHOD_NAMES = "methodNames"; 62 private static final String EXTRA_METHOD_NAMES = "methodNames";
62 private static final String EXTRA_DATA = "data"; 63 private static final String EXTRA_DATA = "data";
63 private static final String EXTRA_ORIGIN = "origin"; 64 private static final String EXTRA_ORIGIN = "origin";
64 private static final String EXTRA_IFRAME_ORIGIN = "iframeOrigin"; 65 private static final String EXTRA_IFRAME_ORIGIN = "iframeOrigin";
65 private static final String EXTRA_DATA_MAP = "dataMap"; 66 private static final String EXTRA_DATA_MAP = "dataMap";
66 private static final String EXTRA_DETAILS = "details"; 67 private static final String EXTRA_DETAILS = "details";
67 private static final String EXTRA_INSTRUMENT_DETAILS = "instrumentDetails"; 68 private static final String EXTRA_INSTRUMENT_DETAILS = "instrumentDetails";
68 private static final String EXTRA_CERTIFICATE_CHAIN = "certificateChain"; 69 private static final String EXTRA_CERTIFICATE_CHAIN = "certificateChain";
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 respondToGetInstrumentsQuery(null); 140 respondToGetInstrumentsQuery(null);
140 } else { 141 } else {
141 sendIsReadyToPayIntentToPaymentApp(isReadyToPayService); 142 sendIsReadyToPayIntentToPaymentApp(isReadyToPayService);
142 } 143 }
143 } 144 }
144 145
145 @Override 146 @Override
146 public void onServiceDisconnected(ComponentName name) {} 147 public void onServiceDisconnected(ComponentName name) {}
147 }; 148 };
148 149
149 mIsReadyToPayIntent.putExtras(buildExtras( 150 mIsReadyToPayIntent.putExtras(buildExtras(null, null, origin, iframeOrig in,
150 null, origin, iframeOrigin, certificateChain, methodDataMap, nul l, null, null)); 151 certificateChain, methodDataMap, null, null, null));
151 try { 152 try {
152 if (!ContextUtils.getApplicationContext().bindService( 153 if (!ContextUtils.getApplicationContext().bindService(
153 mIsReadyToPayIntent, mServiceConnection, Context.BIND_AU TO_CREATE)) { 154 mIsReadyToPayIntent, mServiceConnection, Context.BIND_AU TO_CREATE)) {
154 respondToGetInstrumentsQuery(null); 155 respondToGetInstrumentsQuery(null);
155 return; 156 return;
156 } 157 }
157 } catch (SecurityException e) { 158 } catch (SecurityException e) {
158 respondToGetInstrumentsQuery(null); 159 respondToGetInstrumentsQuery(null);
159 return; 160 return;
160 } 161 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 public Set<String> getAppMethodNames() { 237 public Set<String> getAppMethodNames() {
237 return Collections.unmodifiableSet(mMethodNames); 238 return Collections.unmodifiableSet(mMethodNames);
238 } 239 }
239 240
240 @Override 241 @Override
241 public Set<String> getInstrumentMethodNames() { 242 public Set<String> getInstrumentMethodNames() {
242 return getAppMethodNames(); 243 return getAppMethodNames();
243 } 244 }
244 245
245 @Override 246 @Override
246 public void invokePaymentApp(final String merchantName, final String origin, 247 public void invokePaymentApp(final String id, final String merchantName, fin al String origin,
247 final String iframeOrigin, final byte[][] certificateChain, 248 final String iframeOrigin, final byte[][] certificateChain,
248 final Map<String, PaymentMethodData> methodDataMap, final PaymentIte m total, 249 final Map<String, PaymentMethodData> methodDataMap, final PaymentIte m total,
249 final List<PaymentItem> displayItems, 250 final List<PaymentItem> displayItems,
250 final Map<String, PaymentDetailsModifier> modifiers, 251 final Map<String, PaymentDetailsModifier> modifiers,
251 InstrumentDetailsCallback callback) { 252 InstrumentDetailsCallback callback) {
252 mInstrumentDetailsCallback = callback; 253 mInstrumentDetailsCallback = callback;
253 254
254 if (!mIsIncognito) { 255 if (!mIsIncognito) {
255 launchPaymentApp(merchantName, origin, iframeOrigin, certificateChai n, methodDataMap, 256 launchPaymentApp(id, merchantName, origin, iframeOrigin, certificate Chain,
256 total, displayItems, modifiers); 257 methodDataMap, total, displayItems, modifiers);
257 return; 258 return;
258 } 259 }
259 260
260 ChromeActivity activity = ChromeActivity.fromWebContents(mWebContents); 261 ChromeActivity activity = ChromeActivity.fromWebContents(mWebContents);
261 if (activity == null) { 262 if (activity == null) {
262 notifyErrorInvokingPaymentApp(); 263 notifyErrorInvokingPaymentApp();
263 return; 264 return;
264 } 265 }
265 266
266 new AlertDialog.Builder(activity, R.style.AlertDialogTheme) 267 new AlertDialog.Builder(activity, R.style.AlertDialogTheme)
267 .setTitle(R.string.external_app_leave_incognito_warning_title) 268 .setTitle(R.string.external_app_leave_incognito_warning_title)
268 .setMessage(R.string.external_payment_app_leave_incognito_warnin g) 269 .setMessage(R.string.external_payment_app_leave_incognito_warnin g)
269 .setPositiveButton(R.string.ok, 270 .setPositiveButton(R.string.ok,
270 new OnClickListener() { 271 new OnClickListener() {
271 @Override 272 @Override
272 public void onClick(DialogInterface dialog, int whic h) { 273 public void onClick(DialogInterface dialog, int whic h) {
273 launchPaymentApp(merchantName, origin, iframeOri gin, 274 launchPaymentApp(id, merchantName, origin, ifram eOrigin,
274 certificateChain, methodDataMap, total, displayItems, 275 certificateChain, methodDataMap, total, displayItems,
275 modifiers); 276 modifiers);
276 } 277 }
277 }) 278 })
278 .setNegativeButton(R.string.cancel, 279 .setNegativeButton(R.string.cancel,
279 new OnClickListener() { 280 new OnClickListener() {
280 @Override 281 @Override
281 public void onClick(DialogInterface dialog, int whic h) { 282 public void onClick(DialogInterface dialog, int whic h) {
282 notifyErrorInvokingPaymentApp(); 283 notifyErrorInvokingPaymentApp();
283 } 284 }
284 }) 285 })
285 .setOnCancelListener(new OnCancelListener() { 286 .setOnCancelListener(new OnCancelListener() {
286 @Override 287 @Override
287 public void onCancel(DialogInterface dialog) { 288 public void onCancel(DialogInterface dialog) {
288 notifyErrorInvokingPaymentApp(); 289 notifyErrorInvokingPaymentApp();
289 } 290 }
290 }) 291 })
291 .show(); 292 .show();
292 } 293 }
293 294
294 private void launchPaymentApp(String merchantName, String origin, String ifr ameOrigin, 295 private void launchPaymentApp(String id, String merchantName, String origin,
295 byte[][] certificateChain, Map<String, PaymentMethodData> methodData Map, 296 String iframeOrigin, byte[][] certificateChain,
296 PaymentItem total, List<PaymentItem> displayItems, 297 Map<String, PaymentMethodData> methodDataMap, PaymentItem total,
297 Map<String, PaymentDetailsModifier> modifiers) { 298 List<PaymentItem> displayItems, Map<String, PaymentDetailsModifier> modifiers) {
298 assert mMethodNames.containsAll(methodDataMap.keySet()); 299 assert mMethodNames.containsAll(methodDataMap.keySet());
299 assert mInstrumentDetailsCallback != null; 300 assert mInstrumentDetailsCallback != null;
300 301
301 if (mWebContents.isDestroyed()) { 302 if (mWebContents.isDestroyed()) {
302 notifyErrorInvokingPaymentApp(); 303 notifyErrorInvokingPaymentApp();
303 return; 304 return;
304 } 305 }
305 306
306 WindowAndroid window = mWebContents.getTopLevelNativeWindow(); 307 WindowAndroid window = mWebContents.getTopLevelNativeWindow();
307 if (window == null) { 308 if (window == null) {
308 notifyErrorInvokingPaymentApp(); 309 notifyErrorInvokingPaymentApp();
309 return; 310 return;
310 } 311 }
311 312
312 mPayIntent.putExtras(buildExtras(merchantName, origin, iframeOrigin, cer tificateChain, 313 mPayIntent.putExtras(buildExtras(id, merchantName, origin, iframeOrigin, certificateChain,
313 methodDataMap, total, displayItems, modifiers)); 314 methodDataMap, total, displayItems, modifiers));
314 if (!window.showIntent(mPayIntent, this, R.string.payments_android_app_e rror)) { 315 if (!window.showIntent(mPayIntent, this, R.string.payments_android_app_e rror)) {
315 notifyErrorInvokingPaymentApp(); 316 notifyErrorInvokingPaymentApp();
316 } 317 }
317 } 318 }
318 319
319 private static Bundle buildExtras(@Nullable String merchantName, String orig in, 320 private static Bundle buildExtras(@Nullable String id, @Nullable String merc hantName,
320 String iframeOrigin, @Nullable byte[][] certificateChain, 321 String origin, String iframeOrigin, @Nullable byte[][] certificateCh ain,
321 Map<String, PaymentMethodData> methodDataMap, @Nullable PaymentItem total, 322 Map<String, PaymentMethodData> methodDataMap, @Nullable PaymentItem total,
322 @Nullable List<PaymentItem> displayItems, 323 @Nullable List<PaymentItem> displayItems,
323 @Nullable Map<String, PaymentDetailsModifier> modifiers) { 324 @Nullable Map<String, PaymentDetailsModifier> modifiers) {
324 Bundle extras = new Bundle(); 325 Bundle extras = new Bundle();
325 326
327 if (id != null) extras.putString(EXTRA_ID, id);
326 if (merchantName != null) extras.putString(EXTRA_MERCHANT_NAME, merchant Name); 328 if (merchantName != null) extras.putString(EXTRA_MERCHANT_NAME, merchant Name);
327 extras.putString(EXTRA_ORIGIN, origin); 329 extras.putString(EXTRA_ORIGIN, origin);
328 extras.putString(EXTRA_IFRAME_ORIGIN, iframeOrigin); 330 extras.putString(EXTRA_IFRAME_ORIGIN, iframeOrigin);
329 331
330 if (certificateChain != null && certificateChain.length > 0) { 332 if (certificateChain != null && certificateChain.length > 0) {
331 extras.putParcelableArray( 333 extras.putParcelableArray(
332 EXTRA_CERTIFICATE_CHAIN, buildCertificateChain(certificateCh ain)); 334 EXTRA_CERTIFICATE_CHAIN, buildCertificateChain(certificateCh ain));
333 } 335 }
334 336
335 // Deprecated: 337 // Deprecated:
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 mInstrumentDetailsCallback.onInstrumentDetailsReady( 435 mInstrumentDetailsCallback.onInstrumentDetailsReady(
434 data.getExtras().getString(EXTRA_METHOD_NAME), 436 data.getExtras().getString(EXTRA_METHOD_NAME),
435 data.getExtras().getString(EXTRA_INSTRUMENT_DETAILS)); 437 data.getExtras().getString(EXTRA_INSTRUMENT_DETAILS));
436 } 438 }
437 mInstrumentDetailsCallback = null; 439 mInstrumentDetailsCallback = null;
438 } 440 }
439 441
440 @Override 442 @Override
441 public void dismissInstrument() {} 443 public void dismissInstrument() {}
442 } 444 }
OLDNEW
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentInstrument.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698