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

Unified Diff: components/payments/content/android/payment_manifest_downloader.h

Issue 2645813006: Download web payment manifests. (Closed)
Patch Set: Rebase Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: components/payments/content/android/payment_manifest_downloader.h
diff --git a/components/payments/content/android/payment_manifest_downloader.h b/components/payments/content/android/payment_manifest_downloader.h
new file mode 100644
index 0000000000000000000000000000000000000000..eb02b61e28a6bec28fb3674e28ad111bf99356e3
--- /dev/null
+++ b/components/payments/content/android/payment_manifest_downloader.h
@@ -0,0 +1,98 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_H_
+#define COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_fetcher_delegate.h"
+#include "url/gurl.h"
+
+namespace net {
+class URLRequestContextGetter;
+}
+
+namespace payments {
+
+// Downloader of the payment method manifest based on the payment method name
+// that is a URL with HTTPS scheme, e.g., https://bobpay.com. The download
+// happens via two consecutive HTTP requests:
+//
+// 1) HEAD request for the payment method name. The HTTP response header is
+// parsed for Link header that points to the location of the payment method
+// manifest file. Example of a relative location:
+//
+// Link: <data/payment-manifest.json>; rel="payment-method-manifest"
+//
+// (This is relative to the payment method URL.) Example of an absolute
+// location:
+//
+// Link: <https://bobpay.com/data/payment-manifest.json>;
+// rel="payment-method-manifest"
+//
+// The absolute location must use HTTPS scheme.
+//
+// 2) GET request for the payment method manifest file.
+//
+// The downloader does not follow redirects. A download succeeds only if both
+// HTTP response codes are 200.
+class PaymentManifestDownloader : public net::URLFetcherDelegate {
+ public:
+ // The interface for receiving the result of downloading a manifest.
+ class Delegate {
+ public:
+ // Called when a manifest has been successfully downloaded.
+ virtual void OnManifestDownloadSuccess(const std::string& content) = 0;
+
+ // Called when failed to download the manifest for any reason:
+ // - HTTP response code is not 200.
+ // - HTTP response headers are absent.
+ // - HTTP response headers does not contain Link headers.
+ // - Link header does not contain rel="payment-method-manifest".
+ // - Link header does not contain a valid URL.
+ // - HTTP GET on the manifest URL returns empty content.
+ virtual void OnManifestDownloadFailure() = 0;
+
+ protected:
+ virtual ~Delegate() {}
+ };
+
+ // |delegate| should not be null and must outlive this object. |method_name|
+ // should be a valid URL that starts with "https://".
+ PaymentManifestDownloader(
+ const scoped_refptr<net::URLRequestContextGetter>& context,
+ const GURL& method_name,
+ Delegate* delegate);
+
+ ~PaymentManifestDownloader() override;
+
+ void Download();
+
+ private:
+ void InitiateDownload(const GURL& url,
+ net::URLFetcher::RequestType request_type);
+
+ // net::URLFetcherDelegate
+ void OnURLFetchComplete(const net::URLFetcher* source) override;
+
+ scoped_refptr<net::URLRequestContextGetter> context_;
+ const GURL method_name_;
+
+ // Non-owned. Never null. Outlives this object.
+ Delegate* delegate_;
+
+ bool is_downloading_http_link_header_;
+ std::unique_ptr<net::URLFetcher> fetcher_;
+
+ DISALLOW_COPY_AND_ASSIGN(PaymentManifestDownloader);
+};
+
+} // namespace payments
+
+#endif // COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_MANIFEST_DOWNLOADER_H_

Powered by Google App Engine
This is Rietveld 408576698