Index: components/autofill/content/browser/wallet/wallet_client.h |
diff --git a/components/autofill/content/browser/wallet/wallet_client.h b/components/autofill/content/browser/wallet/wallet_client.h |
deleted file mode 100644 |
index e786e99c9030d1fda593003e43ee4fe35ddc6ef9..0000000000000000000000000000000000000000 |
--- a/components/autofill/content/browser/wallet/wallet_client.h |
+++ /dev/null |
@@ -1,272 +0,0 @@ |
-// Copyright 2013 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_AUTOFILL_CONTENT_BROWSER_WALLET_WALLET_CLIENT_H_ |
-#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_WALLET_CLIENT_H_ |
- |
-#include <queue> |
-#include <string> |
-#include <vector> |
- |
-#include "base/callback.h" // For base::Closure. |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/time/time.h" |
-#include "base/values.h" |
-#include "components/autofill/content/browser/wallet/full_wallet.h" |
-#include "components/autofill/content/browser/wallet/wallet_items.h" |
-#include "components/autofill/core/browser/autofill_client.h" |
-#include "components/autofill/core/browser/autofill_metrics.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
-#include "testing/gtest/include/gtest/gtest_prod.h" |
-#include "url/gurl.h" |
- |
-namespace net { |
-class URLFetcher; |
-class URLRequestContextGetter; |
-} |
- |
-namespace autofill { |
-namespace wallet { |
- |
-class Address; |
-class FullWallet; |
-class Instrument; |
-class WalletClientDelegate; |
- |
-// WalletClient is responsible for making calls to the Online Wallet backend on |
-// the user's behalf. The normal flow for using this class is as follows: |
-// 1) GetWalletItems should be called to retrieve the user's Wallet. |
-// a) If the user does not have a Wallet, they must AcceptLegalDocuments and |
-// SaveToWallet to set up their account before continuing. |
-// b) If the user has not accepted the most recent legal documents for |
-// Wallet, they must AcceptLegalDocuments. |
-// 2) The user then chooses what instrument and shipping address to use for the |
-// current transaction. |
-// a) If they choose an instrument with a zip code only address, the billing |
-// address will need to be updated using SaveToWallet. |
-// b) The user may also choose to add a new instrument or address using |
-// SaveToWallet. |
-// 3) Once the user has selected the backing instrument and shipping address |
-// for this transaction, a FullWallet with the fronting card is generated |
-// using GetFullWallet. |
-// a) GetFullWallet may return a Risk challenge for the user. In that case, |
-// the user will need to verify who they are by authenticating their |
-// chosen backing instrument through AuthenticateInstrument |
-// |
-// WalletClient is designed so only one request to Online Wallet can be outgoing |
-// at any one time. If |HasRequestInProgress()| is true while calling e.g. |
-// GetWalletItems(), the request will be queued and started later. Queued |
-// requests start in the order they were received. |
- |
-class WalletClient : public net::URLFetcherDelegate { |
- public: |
- // The Risk challenges supported by users of WalletClient. |
- enum RiskCapability { |
- RELOGIN, |
- VERIFY_CVC, |
- }; |
- |
- // The type of error returned by Online Wallet. |
- enum ErrorType { |
- // Errors to display to users ---------------------------------------------- |
- BUYER_ACCOUNT_ERROR, // Risk deny, unsupported country, or |
- // account closed. |
- BUYER_LEGAL_ADDRESS_NOT_SUPPORTED, // User's Buyer Legal Address is |
- // unsupported by Online Wallet. |
- UNVERIFIED_KNOW_YOUR_CUSTOMER_STATUS, // User's "know your customer" KYC |
- // state is not verified (either |
- // KYC_REFER or KYC_FAIL). |
- UNSUPPORTED_MERCHANT, // Merchant is blacklisted due to |
- // compliance violation. |
- SPENDING_LIMIT_EXCEEDED, // The desired transaction amount was |
- // over Wallet's limit. |
- |
- // API errors -------------------------------------------------------------- |
- // Request was very malformed or sent to the wrong endpoint. |
- BAD_REQUEST, |
- // API call had missing or invalid parameters. |
- INVALID_PARAMS, |
- // The server API version of the request is no longer supported. |
- UNSUPPORTED_API_VERSION, |
- // The user agent is not supported or a bad Google API key was provided. |
- UNSUPPORTED_USER_AGENT_OR_API_KEY, |
- |
- // Server errors ----------------------------------------------------------- |
- INTERNAL_ERROR, // Unknown server side error. |
- SERVICE_UNAVAILABLE, // Online Wallet is down. |
- |
- // Other errors ------------------------------------------------------------ |
- MALFORMED_RESPONSE, // The response from Wallet was malformed. |
- NETWORK_ERROR, // The response code of the server was something |
- // other than a 200 or 400. |
- |
- UNKNOWN_ERROR, // Catch all error type. |
- }; |
- |
- struct FullWalletRequest { |
- public: |
- FullWalletRequest(const std::string& instrument_id, |
- const std::string& address_id, |
- const std::string& google_transaction_id, |
- const std::vector<RiskCapability> risk_capabilities, |
- bool new_wallet_user); |
- ~FullWalletRequest(); |
- |
- // The ID of the backing instrument. Should have been selected by the user |
- // in some UI. |
- std::string instrument_id; |
- |
- // The ID of the shipping address. Should have been selected by the user |
- // in some UI. |
- std::string address_id; |
- |
- // The transaction ID from GetWalletItems. |
- std::string google_transaction_id; |
- |
- // The Risk challenges supported by the user of WalletClient |
- std::vector<RiskCapability> risk_capabilities; |
- |
- // True if the user does not have Wallet profile. |
- bool new_wallet_user; |
- |
- private: |
- DISALLOW_ASSIGN(FullWalletRequest); |
- }; |
- |
- // |context_getter| is reference counted so it has no lifetime or ownership |
- // requirements. |delegate| must outlive |this|. |source_url| is the url |
- // of the merchant page. |
- WalletClient(net::URLRequestContextGetter* context_getter, |
- WalletClientDelegate* delegate, |
- const GURL& source_url); |
- |
- ~WalletClient() override; |
- |
- // GetWalletItems retrieves the user's online wallet. The WalletItems |
- // returned may require additional action such as presenting legal documents |
- // to the user to be accepted. |
- virtual void GetWalletItems(const base::string16& amount, |
- const base::string16& currency); |
- |
- // The GetWalletItems call to the Online Wallet backend may require the user |
- // to accept various legal documents before a FullWallet can be generated. |
- // The |google_transaction_id| is provided in the response to the |
- // GetWalletItems call. If |documents| are empty, |delegate_| will not receive |
- // a corresponding |OnDidAcceptLegalDocuments()| call. |
- virtual void AcceptLegalDocuments( |
- const std::vector<WalletItems::LegalDocument*>& documents, |
- const std::string& google_transaction_id); |
- |
- // Authenticates that |card_verification_number| is for the backing instrument |
- // with |instrument_id|. |obfuscated_gaia_id| is used as a key when escrowing |
- // |card_verification_number|. |delegate_| is notified when the request is |
- // complete. Used to respond to Risk challenges. |
- virtual void AuthenticateInstrument( |
- const std::string& instrument_id, |
- const std::string& card_verification_number); |
- |
- // GetFullWallet retrieves the a FullWallet for the user. |
- virtual void GetFullWallet(const FullWalletRequest& full_wallet_request); |
- |
- // Saves the data in |instrument| and/or |address| to Wallet. |instrument| |
- // does not have to be complete if it's being used to update an existing |
- // instrument, like in the case of expiration date or address only updates. |
- // |reference_instrument| and |reference_address| are the original instrument |
- // and address to be updated on the server (and should be NULL if |instrument| |
- // or |address| are new data). |
- virtual void SaveToWallet( |
- scoped_ptr<Instrument> instrument, |
- scoped_ptr<Address> address, |
- const WalletItems::MaskedInstrument* reference_instrument, |
- const Address* reference_address); |
- |
- bool HasRequestInProgress() const; |
- |
- // Cancels and clears the current |request_|. |
- void CancelRequest(); |
- |
- // Sets the user index and cancels any pending requests. |
- void SetUserIndex(size_t user_index); |
- size_t user_index() const { return user_index_; } |
- |
- private: |
- FRIEND_TEST_ALL_PREFIXES(WalletClientTest, PendingRequest); |
- FRIEND_TEST_ALL_PREFIXES(WalletClientTest, CancelRequests); |
- |
- enum RequestType { |
- NO_REQUEST, |
- ACCEPT_LEGAL_DOCUMENTS, |
- AUTHENTICATE_INSTRUMENT, |
- GET_FULL_WALLET, |
- GET_WALLET_ITEMS, |
- SAVE_TO_WALLET, |
- }; |
- |
- // Like AcceptLegalDocuments, but takes a vector of document ids. |
- void DoAcceptLegalDocuments( |
- const std::vector<std::string>& document_ids, |
- const std::string& google_transaction_id); |
- |
- // Posts |post_body| to |url| with content type |mime_type| and notifies |
- // |delegate_| when the request is complete. |
- void MakeWalletRequest(const GURL& url, |
- const std::string& post_body, |
- const std::string& mime_type, |
- RequestType request_type); |
- |
- // Performs bookkeeping tasks for any invalid requests. |
- void HandleMalformedResponse(RequestType request_type, |
- net::URLFetcher* request); |
- void HandleNetworkError(int response_code); |
- void HandleWalletError(ErrorType error_type); |
- |
- // net::URLFetcherDelegate: |
- void OnURLFetchComplete(const net::URLFetcher* source) override; |
- |
- // Logs an UMA metric for each of the |required_actions|. |
- void LogRequiredActions( |
- const std::vector<RequiredAction>& required_actions) const; |
- |
- // Converts |request_type| to an UMA metric. |
- AutofillMetrics::WalletApiCallMetric RequestTypeToUmaMetric( |
- RequestType request_type) const; |
- |
- // The context for the request. Ensures the gdToken cookie is set as a header |
- // in the requests to Online Wallet if it is present. |
- scoped_refptr<net::URLRequestContextGetter> context_getter_; |
- |
- // Observer class that has its various On* methods called based on the results |
- // of a request to Online Wallet. |
- WalletClientDelegate* const delegate_; // must outlive |this|. |
- |
- // The index of the user account we're making requests for. The index is into |
- // GAIA's list of signed in users. |
- size_t user_index_; |
- |
- // The URL of the page we're making requests on behalf of. |
- GURL source_url_; |
- |
- // The current request object. |
- scoped_ptr<net::URLFetcher> request_; |
- |
- // The type of the current request. Must be NO_REQUEST for a request |
- // to be initiated as only one request may be running at a given time. |
- RequestType request_type_; |
- |
- // The one time pad used for GetFullWallet encryption. |
- std::vector<uint8> one_time_pad_; |
- |
- // When the current request started. Used to track client side latency. |
- base::Time request_started_timestamp_; |
- |
- base::WeakPtrFactory<WalletClient> weak_ptr_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WalletClient); |
-}; |
- |
-} // namespace wallet |
-} // namespace autofill |
- |
-#endif // COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_WALLET_CLIENT_H_ |