| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.Context; | 8 import android.content.Context; |
| 9 import android.content.Intent; | 9 import android.content.Intent; |
| 10 import android.graphics.Bitmap; | 10 import android.graphics.Bitmap; |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 public void didSelectTab(Tab tab, TabSelectionType type, int lastId) { | 245 public void didSelectTab(Tab tab, TabSelectionType type, int lastId) { |
| 246 if (tab == null || tab.getId() != lastId) onDismiss(); | 246 if (tab == null || tab.getId() != lastId) onDismiss(); |
| 247 } | 247 } |
| 248 }; | 248 }; |
| 249 | 249 |
| 250 private final Handler mHandler = new Handler(); | 250 private final Handler mHandler = new Handler(); |
| 251 private final RenderFrameHost mRenderFrameHost; | 251 private final RenderFrameHost mRenderFrameHost; |
| 252 private final WebContents mWebContents; | 252 private final WebContents mWebContents; |
| 253 private final String mSchemelessOriginForPaymentApp; | 253 private final String mSchemelessOriginForPaymentApp; |
| 254 private final String mOriginForDisplay; | 254 private final String mOriginForDisplay; |
| 255 private final String mSchemelessIFrameOriginForPaymentApp; |
| 255 private final String mMerchantName; | 256 private final String mMerchantName; |
| 256 private final byte[][] mCertificateChain; | 257 private final byte[][] mCertificateChain; |
| 257 private final AddressEditor mAddressEditor; | 258 private final AddressEditor mAddressEditor; |
| 258 private final CardEditor mCardEditor; | 259 private final CardEditor mCardEditor; |
| 259 private final PaymentRequestJourneyLogger mJourneyLogger = new PaymentReques
tJourneyLogger(); | 260 private final PaymentRequestJourneyLogger mJourneyLogger = new PaymentReques
tJourneyLogger(); |
| 260 | 261 |
| 261 private PaymentRequestClient mClient; | 262 private PaymentRequestClient mClient; |
| 262 private boolean mIsCurrentPaymentRequestShowing; | 263 private boolean mIsCurrentPaymentRequestShowing; |
| 263 | 264 |
| 264 /** | 265 /** |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 | 348 |
| 348 /** | 349 /** |
| 349 * Builds the PaymentRequest service implementation. | 350 * Builds the PaymentRequest service implementation. |
| 350 * | 351 * |
| 351 * @param webContents The web contents that have invoked the PaymentRequest
API. | 352 * @param webContents The web contents that have invoked the PaymentRequest
API. |
| 352 */ | 353 */ |
| 353 public PaymentRequestImpl(RenderFrameHost renderFrameHost) { | 354 public PaymentRequestImpl(RenderFrameHost renderFrameHost) { |
| 354 assert renderFrameHost != null; | 355 assert renderFrameHost != null; |
| 355 | 356 |
| 356 mRenderFrameHost = renderFrameHost; | 357 mRenderFrameHost = renderFrameHost; |
| 358 |
| 357 mWebContents = WebContentsStatics.fromRenderFrameHost(renderFrameHost); | 359 mWebContents = WebContentsStatics.fromRenderFrameHost(renderFrameHost); |
| 358 | 360 |
| 359 mSchemelessOriginForPaymentApp = UrlFormatter.formatUrlForSecurityDispla
y( | 361 mSchemelessOriginForPaymentApp = UrlFormatter.formatUrlForSecurityDispla
y( |
| 360 mWebContents.getLastCommittedUrl(), false /* omit scheme for pay
ment apps. */); | 362 mWebContents.getLastCommittedUrl(), false /* omit scheme for pay
ment apps. */); |
| 361 | 363 |
| 362 mOriginForDisplay = UrlFormatter.formatUrlForSecurityDisplay( | 364 mOriginForDisplay = UrlFormatter.formatUrlForSecurityDisplay( |
| 363 mWebContents.getLastCommittedUrl(), true /* include scheme in di
splay */); | 365 mWebContents.getLastCommittedUrl(), true /* include scheme in di
splay */); |
| 364 | 366 |
| 367 mSchemelessIFrameOriginForPaymentApp = UrlFormatter.formatUrlForSecurity
Display( |
| 368 mRenderFrameHost.getLastCommittedURL(), false /* omit scheme for
payment apps. */); |
| 369 |
| 365 mMerchantName = mWebContents.getTitle(); | 370 mMerchantName = mWebContents.getTitle(); |
| 366 | 371 |
| 367 mCertificateChain = CertificateChainHelper.getCertificateChain(mWebConte
nts); | 372 mCertificateChain = CertificateChainHelper.getCertificateChain(mWebConte
nts); |
| 368 | 373 |
| 369 mApps = new ArrayList<>(); | 374 mApps = new ArrayList<>(); |
| 370 | 375 |
| 371 mAddressEditor = new AddressEditor(); | 376 mAddressEditor = new AddressEditor(); |
| 372 mCardEditor = new CardEditor(mWebContents, mAddressEditor, sObserverForT
est); | 377 mCardEditor = new CardEditor(mWebContents, mAddressEditor, sObserverForT
est); |
| 373 | 378 |
| 374 if (sCanMakePaymentQueries == null) sCanMakePaymentQueries = new ArrayMa
p<>(); | 379 if (sCanMakePaymentQueries == null) sCanMakePaymentQueries = new ArrayMa
p<>(); |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 query.notifyObserversOfResponse(false); | 650 query.notifyObserversOfResponse(false); |
| 646 } | 651 } |
| 647 } | 652 } |
| 648 | 653 |
| 649 if (disconnectIfNoPaymentMethodsSupported()) return; | 654 if (disconnectIfNoPaymentMethodsSupported()) return; |
| 650 | 655 |
| 651 // Query instruments after mMerchantSupportsAutofillPaymentInstruments h
as been initialized, | 656 // Query instruments after mMerchantSupportsAutofillPaymentInstruments h
as been initialized, |
| 652 // so a fast response from a non-autofill payment app at the front of th
e app list does not | 657 // so a fast response from a non-autofill payment app at the front of th
e app list does not |
| 653 // cause NOT_SUPPORTED payment rejection. | 658 // cause NOT_SUPPORTED payment rejection. |
| 654 for (Map.Entry<PaymentApp, Map<String, PaymentMethodData>> q : queryApps
.entrySet()) { | 659 for (Map.Entry<PaymentApp, Map<String, PaymentMethodData>> q : queryApps
.entrySet()) { |
| 655 q.getKey().getInstruments( | 660 q.getKey().getInstruments(q.getValue(), mSchemelessOriginForPaymentA
pp, |
| 656 q.getValue(), mSchemelessOriginForPaymentApp, mCertificateCh
ain, this); | 661 mSchemelessIFrameOriginForPaymentApp, mCertificateChain, thi
s); |
| 657 } | 662 } |
| 658 } | 663 } |
| 659 | 664 |
| 660 /** Filter out merchant method data that's not relevant to a payment app. Ca
n return null. */ | 665 /** Filter out merchant method data that's not relevant to a payment app. Ca
n return null. */ |
| 661 private static Map<String, PaymentMethodData> filterMerchantMethodData( | 666 private static Map<String, PaymentMethodData> filterMerchantMethodData( |
| 662 Map<String, PaymentMethodData> merchantMethodData, Set<String> appMe
thods) { | 667 Map<String, PaymentMethodData> merchantMethodData, Set<String> appMe
thods) { |
| 663 Map<String, PaymentMethodData> result = null; | 668 Map<String, PaymentMethodData> result = null; |
| 664 for (String method : appMethods) { | 669 for (String method : appMethods) { |
| 665 if (merchantMethodData.containsKey(method)) { | 670 if (merchantMethodData.containsKey(method)) { |
| 666 if (result == null) result = new ArrayMap<>(); | 671 if (result == null) result = new ArrayMap<>(); |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1168 for (String instrumentMethodName : instrument.getInstrumentMethodNames()
) { | 1173 for (String instrumentMethodName : instrument.getInstrumentMethodNames()
) { |
| 1169 if (mMethodData.containsKey(instrumentMethodName)) { | 1174 if (mMethodData.containsKey(instrumentMethodName)) { |
| 1170 methodData.put(instrumentMethodName, mMethodData.get(instrumentM
ethodName)); | 1175 methodData.put(instrumentMethodName, mMethodData.get(instrumentM
ethodName)); |
| 1171 } | 1176 } |
| 1172 if (mModifiers != null && mModifiers.containsKey(instrumentMethodNam
e)) { | 1177 if (mModifiers != null && mModifiers.containsKey(instrumentMethodNam
e)) { |
| 1173 modifiers.put(instrumentMethodName, mModifiers.get(instrumentMet
hodName)); | 1178 modifiers.put(instrumentMethodName, mModifiers.get(instrumentMet
hodName)); |
| 1174 } | 1179 } |
| 1175 } | 1180 } |
| 1176 | 1181 |
| 1177 instrument.invokePaymentApp(mMerchantName, mSchemelessOriginForPaymentAp
p, | 1182 instrument.invokePaymentApp(mMerchantName, mSchemelessOriginForPaymentAp
p, |
| 1178 mCertificateChain, Collections.unmodifiableMap(methodData), mRaw
Total, | 1183 mSchemelessIFrameOriginForPaymentApp, mCertificateChain, |
| 1179 mRawLineItems, Collections.unmodifiableMap(modifiers), this); | 1184 Collections.unmodifiableMap(methodData), mRawTotal, mRawLineItem
s, |
| 1185 Collections.unmodifiableMap(modifiers), this); |
| 1180 | 1186 |
| 1181 recordSuccessFunnelHistograms("PayClicked"); | 1187 recordSuccessFunnelHistograms("PayClicked"); |
| 1182 return !(instrument instanceof AutofillPaymentInstrument); | 1188 return !(instrument instanceof AutofillPaymentInstrument); |
| 1183 } | 1189 } |
| 1184 | 1190 |
| 1185 @Override | 1191 @Override |
| 1186 public void onDismiss() { | 1192 public void onDismiss() { |
| 1187 disconnectFromClientWithDebugMessage("Dialog dismissed"); | 1193 disconnectFromClientWithDebugMessage("Dialog dismissed"); |
| 1188 recordAbortReasonHistogram(PaymentRequestMetrics.ABORT_REASON_ABORTED_BY
_USER); | 1194 recordAbortReasonHistogram(PaymentRequestMetrics.ABORT_REASON_ABORTED_BY
_USER); |
| 1189 } | 1195 } |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1662 | 1668 |
| 1663 /** | 1669 /** |
| 1664 * The frecency score is calculated according to use count and last use date
. The formula is | 1670 * The frecency score is calculated according to use count and last use date
. The formula is |
| 1665 * the same as the one used in GetFrecencyScore in autofill_data_model.cc. | 1671 * the same as the one used in GetFrecencyScore in autofill_data_model.cc. |
| 1666 */ | 1672 */ |
| 1667 private static final double getFrecencyScore(int count, long date) { | 1673 private static final double getFrecencyScore(int count, long date) { |
| 1668 long currentTime = System.currentTimeMillis(); | 1674 long currentTime = System.currentTimeMillis(); |
| 1669 return -Math.log((currentTime - date) / (24 * 60 * 60 * 1000) + 2) / Mat
h.log(count + 2); | 1675 return -Math.log((currentTime - date) / (24 * 60 * 60 * 1000) + 2) / Mat
h.log(count + 2); |
| 1670 } | 1676 } |
| 1671 } | 1677 } |
| OLD | NEW |