| Index: components/autofill/content/browser/wallet/wallet_client.cc
|
| diff --git a/components/autofill/content/browser/wallet/wallet_client.cc b/components/autofill/content/browser/wallet/wallet_client.cc
|
| index 093791300107890af58690fd7203c819f25b8c80..3e628c0b5f5706e656db3531efc942e0949e27d9 100644
|
| --- a/components/autofill/content/browser/wallet/wallet_client.cc
|
| +++ b/components/autofill/content/browser/wallet/wallet_client.cc
|
| @@ -578,9 +578,20 @@ void WalletClient::OnURLFetchComplete(
|
| HandleWalletError(BAD_REQUEST);
|
| return;
|
| }
|
| - // HTTP_OK holds a valid response and HTTP_INTERNAL_SERVER_ERROR holds an
|
| - // error code and message for the user.
|
| - case net::HTTP_OK:
|
| +
|
| + // Valid response.
|
| + case net::HTTP_OK: {
|
| + scoped_ptr<base::Value> message_value(base::JSONReader::Read(data));
|
| + if (message_value.get() &&
|
| + message_value->IsType(base::Value::TYPE_DICTIONARY)) {
|
| + response_dict.reset(
|
| + static_cast<base::DictionaryValue*>(message_value.release()));
|
| + }
|
| + break;
|
| + }
|
| +
|
| + // Response contains an error to show the user.
|
| + case net::HTTP_FORBIDDEN:
|
| case net::HTTP_INTERNAL_SERVER_ERROR: {
|
| scoped_ptr<base::Value> message_value(base::JSONReader::Read(data));
|
| if (message_value.get() &&
|
| @@ -588,35 +599,32 @@ void WalletClient::OnURLFetchComplete(
|
| response_dict.reset(
|
| static_cast<base::DictionaryValue*>(message_value.release()));
|
| }
|
| - if (response_code == net::HTTP_INTERNAL_SERVER_ERROR) {
|
| - request_type_ = NO_REQUEST;
|
|
|
| - std::string error_type_string;
|
| - if (!response_dict->GetString(kErrorTypeKey, &error_type_string)) {
|
| - HandleWalletError(UNKNOWN_ERROR);
|
| - return;
|
| - }
|
| - WalletClient::ErrorType error_type =
|
| - StringToErrorType(error_type_string);
|
| - if (error_type == BUYER_ACCOUNT_ERROR) {
|
| - // If the error_type is |BUYER_ACCOUNT_ERROR|, then
|
| - // message_type_for_buyer field contains more specific information
|
| - // about the error.
|
| - std::string message_type_for_buyer_string;
|
| - if (response_dict->GetString(kMessageTypeForBuyerKey,
|
| - &message_type_for_buyer_string)) {
|
| - error_type = BuyerErrorStringToErrorType(
|
| - message_type_for_buyer_string);
|
| - }
|
| - }
|
| + request_type_ = NO_REQUEST;
|
|
|
| - HandleWalletError(error_type);
|
| + std::string error_type_string;
|
| + if (!response_dict->GetString(kErrorTypeKey, &error_type_string)) {
|
| + HandleWalletError(UNKNOWN_ERROR);
|
| return;
|
| }
|
| - break;
|
| + WalletClient::ErrorType error_type = StringToErrorType(error_type_string);
|
| + if (error_type == BUYER_ACCOUNT_ERROR) {
|
| + // If the error_type is |BUYER_ACCOUNT_ERROR|, then
|
| + // message_type_for_buyer field contains more specific information
|
| + // about the error.
|
| + std::string message_type_for_buyer_string;
|
| + if (response_dict->GetString(kMessageTypeForBuyerKey,
|
| + &message_type_for_buyer_string)) {
|
| + error_type =
|
| + BuyerErrorStringToErrorType(message_type_for_buyer_string);
|
| + }
|
| + }
|
| +
|
| + HandleWalletError(error_type);
|
| + return;
|
| }
|
|
|
| - // Anything else is an error.
|
| + // Handle anything else as a generic error.
|
| default:
|
| request_type_ = NO_REQUEST;
|
| HandleWalletError(NETWORK_ERROR);
|
|
|