New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 735184 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Aug 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 1
Type: Bug



Sign in to add a comment

"supported_origins" in payment method manifest.

Project Member Reported by rouslan@chromium.org, Jun 20 2017

Issue description

Need to parse and use the "supported_origins" value in the manifest.
 
Components: -UI>Browser>Autofill>Payments UI>Browser>Payments
Project Member

Comment 2 by bugdroid1@chromium.org, Jun 27 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/eb04efa548c78d5f7d427beb4440829598d10f6c

commit eb04efa548c78d5f7d427beb4440829598d10f6c
Author: Rouslan Solomakhin <rouslan@chromium.org>
Date: Tue Jun 27 16:46:50 2017

Parse "supported_origins" in web payment manifest.

If present, a valid "supported_origins" field in web payment manifest
can be either the string "*" or a list of origins. The field is not yet
used in this patch.

Spec:
https://w3c.github.io/payment-method-manifest/

Design doc:
https://docs.google.com/document/d/1izV4uC-tiRJG3JLooqY3YRLU22tYOsLTNq0P_InPJeE

Bonus: At the request of multiple payment app developers, this patch
adds logging statements for easier debugging of the reasons why a
manifest may not be accepted by the parser.

Bug:  735184 
Change-Id: I6e7a64ebeb2b9cd6a6f0a44077874e6417b229bd
Reviewed-on: https://chromium-review.googlesource.com/541520
Reviewed-by: Mathieu Perreault <mathp@chromium.org>
Reviewed-by: Chris Palmer <palmer@chromium.org>
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#482650}
[add] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/chrome/browser/payments/payment_manifest_parser_host_browsertest.cc
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/chrome/test/BUILD.gn
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/content/android/payment_manifest_parser_android.cc
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/content/payment_manifest_parser_host.cc
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/content/payment_manifest_parser_host.h
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/content/utility/fingerprint_parser.cc
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/content/utility/payment_manifest_parser.cc
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/content/utility/payment_manifest_parser.h
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/content/utility/payment_manifest_parser_unittest.cc
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/mojom/BUILD.gn
[modify] https://crrev.com/eb04efa548c78d5f7d427beb4440829598d10f6c/components/payments/mojom/payment_manifest_parser.mojom

Project Member

Comment 4 by bugdroid1@chromium.org, Jul 7 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/52eef8e8745509fabafda6c2bb3387608054203b

commit 52eef8e8745509fabafda6c2bb3387608054203b
Author: Rouslan Solomakhin <rouslan@chromium.org>
Date: Fri Jul 07 18:39:51 2017

Owned and shared payment manifest downloader.

Instead of creating short-lived, self-deleting downloader objects for
payment method manifests, use a single instance of the downloader that
is owned by PaymentRequest. This reduces complexity of the JNI shim,
reduces resource utilization, and makes the code more readable and
stable. At long last, this patch adds integration tests that stress the
full manifest download stack on Android.

Bug:  735184 
Change-Id: I64c64a275ee873f2546cdc89274ab37780582571
Reviewed-on: https://chromium-review.googlesource.com/559730
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: Ganggui Tang <gogerald@chromium.org>
Cr-Commit-Position: refs/heads/master@{#484997}
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFactory.java
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/android/java_sources.gni
[add] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentManifestDownloaderTest.java
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java
[add] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/test/data/payments/app.json
[add] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/test/data/payments/payment-manifest.json
[add] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/test/data/payments/webpay
[add] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/chrome/test/data/payments/webpay.mock-http-headers
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentManifestDownloader.java
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/android/payment_manifest_downloader_android.cc
[add] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/android/payment_manifest_downloader_android.h
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/android/payment_manifest_parser_android.cc
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/android/payment_manifest_parser_android.h
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/payment_manifest_downloader.cc
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/payment_manifest_downloader.h
[modify] https://crrev.com/52eef8e8745509fabafda6c2bb3387608054203b/components/payments/content/payment_manifest_downloader_unittest.cc

Labels: -M-61 M-62
Patches https://crrev.com/e9d960212bc9b4d4205fea5ada09c260df988c91 and https://crrev.com/806e5e858c78d8df7fb3af1c2d288977cf9781a3 should have really been associated with this bug report.
Project Member

Comment 7 by bugdroid1@chromium.org, Jul 25 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d

commit ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d
Author: Rouslan Solomakhin <rouslan@chromium.org>
Date: Tue Jul 25 02:09:09 2017

[Payments] All supported origins.

If a payment method contains "supported_origins": "*", then any app can
claim support.

Bug:  735184 
Change-Id: I0d028c83f85ca07ece176e63bdac8d525f0b7223
Reviewed-on: https://chromium-review.googlesource.com/581888
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: Ganggui Tang <gogerald@chromium.org>
Cr-Commit-Position: refs/heads/master@{#489186}
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/chrome/android/java/src/org/chromium/chrome/browser/payments/PackageManagerDelegate.java
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentManifestVerifier.java
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/chrome/android/javatests/src/org/chromium/chrome/browser/payments/MockPackageManagerDelegate.java
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentManifestDownloaderTest.java
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/components/test/data/payments/alicepay.com/payment-manifest.json
[modify] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/components/test/data/payments/bobpay.com/payment-manifest.json
[add] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/components/test/data/payments/frankpay.com/payment-manifest.json
[add] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/components/test/data/payments/frankpay.com/webpay
[add] https://crrev.com/ab3c53b4f6c6bc75aa44d35d081993349b0a6c5d/components/test/data/payments/frankpay.com/webpay.mock-http-headers

Project Member

Comment 8 by bugdroid1@chromium.org, Aug 1 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32

commit be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32
Author: Rouslan Solomakhin <rouslan@chromium.org>
Date: Tue Aug 01 18:27:22 2017

[Payments] Supported origins.

If a payment method manifest contains "supported_origins":
["https://alicepay.com"], then all apps from "https://alicepay.com" with
valid signatures can claim support. These apps must match the package
name, minimum version, and SHA256 certificate fingerprint of the web app
manifest from "https://alicepay.com", which is linked as
"default_applications" from a payment method that has
"https://alicepay.com" origin.

Bug:  735184 
Change-Id: I1abdca115434769e75570dd8569facf497b6ef65
Reviewed-on: https://chromium-review.googlesource.com/585171
Reviewed-by: Ganggui Tang <gogerald@chromium.org>
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491059}
[modify] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
[modify] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentManifestVerifier.java
[modify] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentManifestWebDataService.java
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/java/src/org/chromium/chrome/browser/payments/UriUtils.java
[modify] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/java_sources.gni
[modify] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
[modify] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
[modify] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/georgepay.com/payment-manifest.json
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/georgepay.com/webpay
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/georgepay.com/webpay.mock-http-headers
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/henrypay.com/app.json
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/henrypay.com/payment-manifest.json
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/henrypay.com/webpay
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/henrypay.com/webpay.mock-http-headers
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/ikepay.com/app.json
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/ikepay.com/payment-manifest.json
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/ikepay.com/webpay
[add] https://crrev.com/be2ad6c6b68386e5a8c6c3615dff5d26a4a6bf32/components/test/data/payments/ikepay.com/webpay.mock-http-headers

Project Member

Comment 9 by bugdroid1@chromium.org, Aug 4 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c00100dc25d5ca4a2ca0da89cdb46547663897d3

commit c00100dc25d5ca4a2ca0da89cdb46547663897d3
Author: Rouslan Solomakhin <rouslan@chromium.org>
Date: Fri Aug 04 13:39:41 2017

[Payments] Allow apps without default method name.

Before this patch, if a payment app did not have its own default payment
method name, but only supported other non-default payment methods, then
Chrome would filter it out. This unnecessarily constrained some payment
apps to select one payment method to be the default, which is not always
the case. This patch relaxes this requirement.

After this patch, if a payment app does not have its own default payment
method name, then Chrome checks its non-default payment methods as well.

Bug:  735184 
Change-Id: I6604c60aad4efa963120f4c66d505ab7e31bf94f
Reviewed-on: https://chromium-review.googlesource.com/600733
Reviewed-by: Ganggui Tang <gogerald@chromium.org>
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#492012}
[modify] https://crrev.com/c00100dc25d5ca4a2ca0da89cdb46547663897d3/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
[modify] https://crrev.com/c00100dc25d5ca4a2ca0da89cdb46547663897d3/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java

Project Member

Comment 10 by bugdroid1@chromium.org, Aug 4 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9ecac9b13f80be30e6dc4a10405129d35a4380f3

commit 9ecac9b13f80be30e6dc4a10405129d35a4380f3
Author: Rouslan Solomakhin <rouslan@chromium.org>
Date: Fri Aug 04 19:02:47 2017

[Payments] Ignore supported methods that match the default method.

Before this patch, an Android payment app that specifies their default
payment method (e.g., "https://bobpay.xyz/webpay") also in their list of
supported non-default methods would cause Chrome to attempt to verify
that https://bobpay.xyz/webpay/payment-method.json contains
"supported_origins": ["https://bobpay.xyz"] statement, which is
redundant and would not be typically found in a payment method manifest.
Because the cached payment method manifest would never contain such
statement, the cache would always be judged to be stale and thus would
be ignored. This resulted in slowness of bringing up the Payment Request
UI, as Chrome was re-downloading the payment method manifest instead of
using the one in cache.

Because Android payment app developers may decide to place the default
payment method name into the list of supported non-default payment
method names, the most robust solution is to ignore the non-default
supported payment method name if it's also the default payment method
name of the Android payment app in question.

After this patch, Chrome does not attempt to verify that
https://bobpay.xyz/webpay/payment-method.json contains
"supported_origins": ["https://bobpay.xyz"] statement, even if an
Android payment app with default payment method name
"https://bobpay.xyz/webpay" also places this method name in the list of
supported non-default payment method names. The cache is now not judged
stale in this situation, allowing Chrome to use the cache to quickly
bring up the Payment Request UI.

Bug:  735184 
Change-Id: Ie39a8c9e831e4431fb53f17425e8181604987394
Reviewed-on: https://chromium-review.googlesource.com/602371
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: Ganggui Tang <gogerald@chromium.org>
Cr-Commit-Position: refs/heads/master@{#492090}
[modify] https://crrev.com/9ecac9b13f80be30e6dc4a10405129d35a4380f3/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java

Cc: rob.buis@chromium.org
FYI
Status: Fixed (was: Started)
Project Member

Comment 13 by bugdroid1@chromium.org, Sep 18 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/bb7b57a0119bbd501cdc2b23d151320d1977f015

commit bb7b57a0119bbd501cdc2b23d151320d1977f015
Author: Rouslan Solomakhin <rouslan@chromium.org>
Date: Mon Sep 18 22:28:55 2017

[Payments] Prohibit empty strings in method manifest.

Bug:  735184 
Change-Id: I77509c18295cf391730dd704ab25b2b4b84aecea
Reviewed-on: https://chromium-review.googlesource.com/671032
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: Yuzhu Shen <yzshen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502697}
[modify] https://crrev.com/bb7b57a0119bbd501cdc2b23d151320d1977f015/components/payments/content/utility/payment_manifest_parser.cc
[modify] https://crrev.com/bb7b57a0119bbd501cdc2b23d151320d1977f015/components/payments/core/payment_manifest_downloader.cc

Sign in to add a comment