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

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

Issue 2652763007: Send site certificate chain to android payment app (Closed)
Patch Set: Actually call getCertificateChain Created 3 years, 11 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/AutofillPaymentApp.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.Intent; 10 import android.content.Intent;
11 import android.content.ServiceConnection; 11 import android.content.ServiceConnection;
12 import android.graphics.drawable.Drawable; 12 import android.graphics.drawable.Drawable;
13 import android.os.Bundle; 13 import android.os.Bundle;
14 import android.os.Handler; 14 import android.os.Handler;
15 import android.os.IBinder; 15 import android.os.IBinder;
16 import android.os.Parcelable;
16 import android.os.RemoteException; 17 import android.os.RemoteException;
17 import android.util.JsonWriter; 18 import android.util.JsonWriter;
18 19
19 import org.chromium.IsReadyToPayService; 20 import org.chromium.IsReadyToPayService;
20 import org.chromium.IsReadyToPayServiceCallback; 21 import org.chromium.IsReadyToPayServiceCallback;
21 import org.chromium.chrome.R; 22 import org.chromium.chrome.R;
22 import org.chromium.content.browser.ContentViewCore; 23 import org.chromium.content.browser.ContentViewCore;
23 import org.chromium.content_public.browser.WebContents; 24 import org.chromium.content_public.browser.WebContents;
24 import org.chromium.payments.mojom.PaymentDetailsModifier; 25 import org.chromium.payments.mojom.PaymentDetailsModifier;
25 import org.chromium.payments.mojom.PaymentItem; 26 import org.chromium.payments.mojom.PaymentItem;
(...skipping 13 matching lines...) Expand all
39 public class AndroidPaymentApp extends PaymentInstrument implements PaymentApp, 40 public class AndroidPaymentApp extends PaymentInstrument implements PaymentApp,
40 WindowAndroid.IntentCallback { 41 WindowAndroid.IntentCallback {
41 /** The action name for the Pay Intent. */ 42 /** The action name for the Pay Intent. */
42 public static final String ACTION_PAY = "org.chromium.intent.action.PAY"; 43 public static final String ACTION_PAY = "org.chromium.intent.action.PAY";
43 44
44 private static final String EXTRA_METHOD_NAME = "methodName"; 45 private static final String EXTRA_METHOD_NAME = "methodName";
45 private static final String EXTRA_DATA = "data"; 46 private static final String EXTRA_DATA = "data";
46 private static final String EXTRA_ORIGIN = "origin"; 47 private static final String EXTRA_ORIGIN = "origin";
47 private static final String EXTRA_DETAILS = "details"; 48 private static final String EXTRA_DETAILS = "details";
48 private static final String EXTRA_INSTRUMENT_DETAILS = "instrumentDetails"; 49 private static final String EXTRA_INSTRUMENT_DETAILS = "instrumentDetails";
50 private static final String EXTRA_CERTIFICATE_CHAIN = "certificateChain";
51 private static final String EXTRA_CERTIFICATE = "certificate";
49 private static final String EMPTY_JSON_DATA = "{}"; 52 private static final String EMPTY_JSON_DATA = "{}";
50 private final Handler mHandler; 53 private final Handler mHandler;
51 private final WebContents mWebContents; 54 private final WebContents mWebContents;
52 private final Intent mIsReadyToPayIntent; 55 private final Intent mIsReadyToPayIntent;
53 private final Intent mPayIntent; 56 private final Intent mPayIntent;
54 private final Set<String> mMethodNames; 57 private final Set<String> mMethodNames;
55 private IsReadyToPayService mIsReadyToPayService; 58 private IsReadyToPayService mIsReadyToPayService;
56 private InstrumentsCallback mInstrumentsCallback; 59 private InstrumentsCallback mInstrumentsCallback;
57 private InstrumentDetailsCallback mInstrumentDetailsCallback; 60 private InstrumentDetailsCallback mInstrumentDetailsCallback;
58 private final ServiceConnection mServiceConnection = new ServiceConnection() { 61 private final ServiceConnection mServiceConnection = new ServiceConnection() {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 /** @param methodName A payment method that this app supports, e.g., "https: //bobpay.com". */ 100 /** @param methodName A payment method that this app supports, e.g., "https: //bobpay.com". */
98 public void addMethodName(String methodName) { 101 public void addMethodName(String methodName) {
99 mMethodNames.add(methodName); 102 mMethodNames.add(methodName);
100 } 103 }
101 104
102 /** @param className The class name of the "is ready to pay" service in the payment app. */ 105 /** @param className The class name of the "is ready to pay" service in the payment app. */
103 public void setIsReadyToPayAction(String className) { 106 public void setIsReadyToPayAction(String className) {
104 mIsReadyToPayIntent.setClassName(mIsReadyToPayIntent.getPackage(), class Name); 107 mIsReadyToPayIntent.setClassName(mIsReadyToPayIntent.getPackage(), class Name);
105 } 108 }
106 109
110 private void addCertificateChain(Bundle extras, byte[][] certificateChain) {
111 if (certificateChain != null && certificateChain.length > 0) {
112 Parcelable[] certificateArray = new Parcelable[certificateChain.leng th];
113 for (int i = 0; i < certificateChain.length; i++) {
114 Bundle bundle = new Bundle();
115 bundle.putByteArray(EXTRA_CERTIFICATE, certificateChain[i]);
116 certificateArray[i] = bundle;
117 }
118 extras.putParcelableArray(EXTRA_CERTIFICATE_CHAIN, certificateArray) ;
119 }
120 }
121
107 @Override 122 @Override
108 public void getInstruments(Map<String, PaymentMethodData> methodData, String origin, 123 public void getInstruments(Map<String, PaymentMethodData> methodData, String origin,
109 InstrumentsCallback callback) { 124 byte[][] certificateChain, InstrumentsCallback callback) {
110 mInstrumentsCallback = callback; 125 mInstrumentsCallback = callback;
111 if (mIsReadyToPayIntent.getPackage() == null) { 126 if (mIsReadyToPayIntent.getPackage() == null) {
112 mHandler.post(new Runnable() { 127 mHandler.post(new Runnable() {
113 @Override 128 @Override
114 public void run() { 129 public void run() {
115 respondToGetInstrumentsQuery(AndroidPaymentApp.this); 130 respondToGetInstrumentsQuery(AndroidPaymentApp.this);
116 } 131 }
117 }); 132 });
118 return; 133 return;
119 } 134 }
120 Bundle extras = new Bundle(); 135 Bundle extras = new Bundle();
121 extras.putString(EXTRA_METHOD_NAME, mMethodNames.iterator().next()); 136 extras.putString(EXTRA_METHOD_NAME, mMethodNames.iterator().next());
122 extras.putString(EXTRA_ORIGIN, origin); 137 extras.putString(EXTRA_ORIGIN, origin);
123 PaymentMethodData data = methodData.get(mMethodNames.iterator().next()); 138 PaymentMethodData data = methodData.get(mMethodNames.iterator().next());
124 extras.putString(EXTRA_DATA, data == null ? EMPTY_JSON_DATA : data.strin gifiedData); 139 extras.putString(EXTRA_DATA, data == null ? EMPTY_JSON_DATA : data.strin gifiedData);
140 addCertificateChain(extras, certificateChain);
125 mIsReadyToPayIntent.putExtras(extras); 141 mIsReadyToPayIntent.putExtras(extras);
126 142
127 if (mIsReadyToPayService != null) { 143 if (mIsReadyToPayService != null) {
128 sendIsReadyToPayIntentToPaymentApp(); 144 sendIsReadyToPayIntentToPaymentApp();
129 } else { 145 } else {
130 ContentViewCore contentView = ContentViewCore.fromWebContents(mWebCo ntents); 146 ContentViewCore contentView = ContentViewCore.fromWebContents(mWebCo ntents);
131 if (contentView == null) { 147 if (contentView == null) {
132 notifyError(); 148 notifyError();
133 return; 149 return;
134 } 150 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 public Set<String> getAppMethodNames() { 211 public Set<String> getAppMethodNames() {
196 return Collections.unmodifiableSet(mMethodNames); 212 return Collections.unmodifiableSet(mMethodNames);
197 } 213 }
198 214
199 @Override 215 @Override
200 public Set<String> getInstrumentMethodNames() { 216 public Set<String> getInstrumentMethodNames() {
201 return getAppMethodNames(); 217 return getAppMethodNames();
202 } 218 }
203 219
204 @Override 220 @Override
205 public void invokePaymentApp(String merchantName, String origin, 221 public void invokePaymentApp(String merchantName, String origin, byte[][] ce rtificateChain,
206 Map<String, PaymentMethodData> methodDataMap, PaymentItem total, 222 Map<String, PaymentMethodData> methodDataMap, PaymentItem total,
207 List<PaymentItem> displayItems, Map<String, PaymentDetailsModifier> modifiers, 223 List<PaymentItem> displayItems, Map<String, PaymentDetailsModifier> modifiers,
208 InstrumentDetailsCallback callback) { 224 InstrumentDetailsCallback callback) {
209 assert !mMethodNames.isEmpty(); 225 assert !mMethodNames.isEmpty();
210 Bundle extras = new Bundle(); 226 Bundle extras = new Bundle();
211 extras.putString(EXTRA_ORIGIN, origin); 227 extras.putString(EXTRA_ORIGIN, origin);
228 addCertificateChain(extras, certificateChain);
212 229
213 String methodName = mMethodNames.iterator().next(); 230 String methodName = mMethodNames.iterator().next();
214 extras.putString(EXTRA_METHOD_NAME, methodName); 231 extras.putString(EXTRA_METHOD_NAME, methodName);
215 232
216 PaymentMethodData methodData = methodDataMap.get(methodName); 233 PaymentMethodData methodData = methodDataMap.get(methodName);
217 extras.putString( 234 extras.putString(
218 EXTRA_DATA, methodData == null ? EMPTY_JSON_DATA : methodData.st ringifiedData); 235 EXTRA_DATA, methodData == null ? EMPTY_JSON_DATA : methodData.st ringifiedData);
219 236
220 String details = serializeDetails(total, displayItems); 237 String details = serializeDetails(total, displayItems);
221 extras.putString(EXTRA_DETAILS, details == null ? EMPTY_JSON_DATA : deta ils); 238 extras.putString(EXTRA_DETAILS, details == null ? EMPTY_JSON_DATA : deta ils);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 mInstrumentDetailsCallback.onInstrumentDetailsReady( 322 mInstrumentDetailsCallback.onInstrumentDetailsReady(
306 data.getExtras().getString(EXTRA_METHOD_NAME), 323 data.getExtras().getString(EXTRA_METHOD_NAME),
307 data.getExtras().getString(EXTRA_INSTRUMENT_DETAILS)); 324 data.getExtras().getString(EXTRA_INSTRUMENT_DETAILS));
308 } 325 }
309 mInstrumentDetailsCallback = null; 326 mInstrumentDetailsCallback = null;
310 } 327 }
311 328
312 @Override 329 @Override
313 public void dismissInstrument() {} 330 public void dismissInstrument() {}
314 } 331 }
OLDNEW
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698