diff options
author | ahutter@chromium.org <ahutter@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-16 05:15:18 +0000 |
---|---|---|
committer | ahutter@chromium.org <ahutter@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-16 05:15:18 +0000 |
commit | 56cb9ea4d5c4d3058cdc22622f1de5c28682f615 (patch) | |
tree | e4042547c9eedefae51f1587a399b340f99b103c /components/autofill/browser/wallet/wallet_client.cc | |
parent | 125abb32ec2957e070e5c6315b52a1697580b7ed (diff) | |
download | chromium_src-56cb9ea4d5c4d3058cdc22622f1de5c28682f615.zip chromium_src-56cb9ea4d5c4d3058cdc22622f1de5c28682f615.tar.gz chromium_src-56cb9ea4d5c4d3058cdc22622f1de5c28682f615.tar.bz2 |
Using error returns from Online Wallet
BUG=164410
Review URL: https://chromiumcodereview.appspot.com/12545037
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188540 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/autofill/browser/wallet/wallet_client.cc')
-rw-r--r-- | components/autofill/browser/wallet/wallet_client.cc | 67 |
1 files changed, 60 insertions, 7 deletions
diff --git a/components/autofill/browser/wallet/wallet_client.cc b/components/autofill/browser/wallet/wallet_client.cc index 9683eed..5df8ab4 100644 --- a/components/autofill/browser/wallet/wallet_client.cc +++ b/components/autofill/browser/wallet/wallet_client.cc @@ -70,6 +70,26 @@ std::string RiskCapabilityToString( return "NOT_POSSIBLE"; } +WalletClient::ErrorType StringToErrorType(const std::string& error_type) { + std::string trimmed; + TrimWhitespaceASCII(error_type, + TRIM_ALL, + &trimmed); + if (LowerCaseEqualsASCII(trimmed, "buyer_account_error")) + return WalletClient::BUYER_ACCOUNT_ERROR; + if (LowerCaseEqualsASCII(trimmed, "internal_error")) + return WalletClient::INTERNAL_ERROR; + if (LowerCaseEqualsASCII(trimmed, "invalid_params")) + return WalletClient::INVALID_PARAMS; + if (LowerCaseEqualsASCII(trimmed, "service_unavailable")) + return WalletClient::SERVICE_UNAVAILABLE; + if (LowerCaseEqualsASCII(trimmed, "spending_limit_exceeded")) + return WalletClient::SPENDING_LIMIT_EXCEEDED; + if (LowerCaseEqualsASCII(trimmed, "unsupported_api_version")) + return WalletClient::UNSUPPORTED_API_VERSION; + return WalletClient::UNKNOWN_ERROR; +} + // Gets and parses required actions from a SaveToWallet response. Returns // false if any unknown required actions are seen and true otherwise. void GetRequiredActionsForSaveToWallet( @@ -94,6 +114,33 @@ void GetRequiredActionsForSaveToWallet( } } +// Converts the |error_type| to the corresponding value from the stable UMA +// metric enumeration. +AutofillMetrics::WalletErrorMetric ErrorTypeToUmaMetric( + WalletClient::ErrorType error_type) { + switch (error_type) { + case WalletClient::BAD_REQUEST: + return AutofillMetrics::WALLET_BAD_REQUEST; + case WalletClient::BUYER_ACCOUNT_ERROR: + return AutofillMetrics::WALLET_BUYER_ACCOUNT_ERROR; + case WalletClient::INTERNAL_ERROR: + return AutofillMetrics::WALLET_INTERNAL_ERROR; + case WalletClient::INVALID_PARAMS: + return AutofillMetrics::WALLET_INVALID_PARAMS; + case WalletClient::SERVICE_UNAVAILABLE: + return AutofillMetrics::WALLET_SERVICE_UNAVAILABLE; + case WalletClient::SPENDING_LIMIT_EXCEEDED: + return AutofillMetrics::WALLET_SPENDING_LIMIT_EXCEEDED; + case WalletClient::UNSUPPORTED_API_VERSION: + return AutofillMetrics::WALLET_UNSUPPORTED_API_VERSION; + case WalletClient::UNKNOWN_ERROR: + return AutofillMetrics::WALLET_UNKNOWN_ERROR; + } + + NOTREACHED(); + return AutofillMetrics::WALLET_UNKNOWN_ERROR; +} + // Converts the |required_action| to the corresponding value from the stable UMA // metric enumeration. AutofillMetrics::WalletRequiredActionMetric RequiredActionToUmaMetric( @@ -133,6 +180,7 @@ const char kApiKeyKey[] = "api_key"; const char kAuthResultKey[] = "auth_result"; const char kCartKey[] = "cart"; const char kEncryptedOtpKey[] = "encrypted_otp"; +const char kErrorTypeKey[] = "wallet_error.error_type"; const char kFeatureKey[] = "feature"; const char kGoogleTransactionIdKey[] = "google_transaction_id"; const char kInstrumentIdKey[] = "instrument_id"; @@ -529,7 +577,7 @@ void WalletClient::OnURLFetchComplete( // HTTP_BAD_REQUEST means the arguments are invalid. No point retrying. case net::HTTP_BAD_REQUEST: { request_type_ = NO_PENDING_REQUEST; - HandleWalletError(); + HandleWalletError(WalletClient::BAD_REQUEST); return; } // HTTP_OK holds a valid response and HTTP_INTERNAL_SERVER_ERROR holds an @@ -544,9 +592,14 @@ void WalletClient::OnURLFetchComplete( } if (response_code == net::HTTP_INTERNAL_SERVER_ERROR) { request_type_ = NO_PENDING_REQUEST; - // TODO(ahutter): Do something with the response. See - // http://crbug.com/164410. - HandleWalletError(); + + std::string error_type; + if (!response_dict->GetString(kErrorTypeKey, &error_type)) { + HandleWalletError(WalletClient::UNKNOWN_ERROR); + return; + } + + HandleWalletError(StringToErrorType(error_type)); return; } break; @@ -712,10 +765,10 @@ void WalletClient::HandleNetworkError(int response_code) { delegate_->GetDialogType(), AutofillMetrics::WALLET_NETWORK_ERROR); } -void WalletClient::HandleWalletError() { - delegate_->OnWalletError(); +void WalletClient::HandleWalletError(WalletClient::ErrorType error_type) { + delegate_->OnWalletError(error_type); delegate_->GetMetricLogger().LogWalletErrorMetric( - delegate_->GetDialogType(), AutofillMetrics::WALLET_FATAL_ERROR); + delegate_->GetDialogType(), ErrorTypeToUmaMetric(error_type)); } void WalletClient::OnDidEncryptOneTimePad( |