| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/json/json_reader.h" | 5 #include "base/json/json_reader.h" |
| 6 #include "base/json/json_writer.h" | 6 #include "base/json/json_writer.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_split.h" | 11 #include "base/strings/string_split.h" |
| 12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "chrome/test/base/testing_profile.h" | 15 #include "chrome/test/base/testing_profile.h" |
| 16 #include "components/autofill/content/browser/autocheckout_steps.h" | |
| 17 #include "components/autofill/content/browser/wallet/full_wallet.h" | 16 #include "components/autofill/content/browser/wallet/full_wallet.h" |
| 18 #include "components/autofill/content/browser/wallet/instrument.h" | 17 #include "components/autofill/content/browser/wallet/instrument.h" |
| 19 #include "components/autofill/content/browser/wallet/wallet_client.h" | 18 #include "components/autofill/content/browser/wallet/wallet_client.h" |
| 20 #include "components/autofill/content/browser/wallet/wallet_client_delegate.h" | 19 #include "components/autofill/content/browser/wallet/wallet_client_delegate.h" |
| 21 #include "components/autofill/content/browser/wallet/wallet_items.h" | 20 #include "components/autofill/content/browser/wallet/wallet_items.h" |
| 22 #include "components/autofill/content/browser/wallet/wallet_test_util.h" | 21 #include "components/autofill/content/browser/wallet/wallet_test_util.h" |
| 23 #include "components/autofill/core/browser/autofill_metrics.h" | 22 #include "components/autofill/core/browser/autofill_metrics.h" |
| 24 #include "components/autofill/core/common/autocheckout_status.h" | |
| 25 #include "content/public/test/test_browser_thread_bundle.h" | 23 #include "content/public/test/test_browser_thread_bundle.h" |
| 26 #include "net/base/escape.h" | 24 #include "net/base/escape.h" |
| 27 #include "net/base/net_errors.h" | 25 #include "net/base/net_errors.h" |
| 28 #include "net/http/http_request_headers.h" | 26 #include "net/http/http_request_headers.h" |
| 29 #include "net/http/http_status_code.h" | 27 #include "net/http/http_status_code.h" |
| 30 #include "net/url_request/test_url_fetcher_factory.h" | 28 #include "net/url_request/test_url_fetcher_factory.h" |
| 31 #include "net/url_request/url_fetcher_delegate.h" | 29 #include "net/url_request/url_fetcher_delegate.h" |
| 32 #include "net/url_request/url_request_status.h" | 30 #include "net/url_request/url_request_status.h" |
| 33 #include "testing/gmock/include/gmock/gmock.h" | 31 #include "testing/gmock/include/gmock/gmock.h" |
| 34 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 "\"administrative_area_name\":\"save_admin_area_name\"," | 460 "\"administrative_area_name\":\"save_admin_area_name\"," |
| 463 "\"country_name_code\":\"US\"," | 461 "\"country_name_code\":\"US\"," |
| 464 "\"locality_name\":\"save_locality_name\"," | 462 "\"locality_name\":\"save_locality_name\"," |
| 465 "\"postal_code_number\":\"save_postal_code_number\"," | 463 "\"postal_code_number\":\"save_postal_code_number\"," |
| 466 "\"recipient_name\":\"save_recipient_name\"" | 464 "\"recipient_name\":\"save_recipient_name\"" |
| 467 "}" | 465 "}" |
| 468 "}," | 466 "}," |
| 469 "\"use_minimal_addresses\":false" | 467 "\"use_minimal_addresses\":false" |
| 470 "}"; | 468 "}"; |
| 471 | 469 |
| 472 const char kSendAutocheckoutStatusOfSuccessValidRequest[] = | |
| 473 "{" | |
| 474 "\"google_transaction_id\":\"google_transaction_id\"," | |
| 475 "\"merchant_domain\":\"https://example.com/\"," | |
| 476 "\"success\":true" | |
| 477 "}"; | |
| 478 | |
| 479 const char kSendAutocheckoutStatusWithStatisticsValidRequest[] = | |
| 480 "{" | |
| 481 "\"google_transaction_id\":\"google_transaction_id\"," | |
| 482 "\"merchant_domain\":\"https://example.com/\"," | |
| 483 "\"steps\":[{\"step_description\":\"1_AUTOCHECKOUT_STEP_SHIPPING\"" | |
| 484 ",\"time_taken\":100}]," | |
| 485 "\"success\":true" | |
| 486 "}"; | |
| 487 | |
| 488 const char kSendAutocheckoutStatusOfFailureValidRequest[] = | |
| 489 "{" | |
| 490 "\"google_transaction_id\":\"google_transaction_id\"," | |
| 491 "\"merchant_domain\":\"https://example.com/\"," | |
| 492 "\"reason\":\"CANNOT_PROCEED\"," | |
| 493 "\"success\":false" | |
| 494 "}"; | |
| 495 | |
| 496 const char kUpdateAddressValidRequest[] = | 470 const char kUpdateAddressValidRequest[] = |
| 497 "{" | 471 "{" |
| 498 "\"merchant_domain\":\"https://example.com/\"," | 472 "\"merchant_domain\":\"https://example.com/\"," |
| 499 "\"phone_number_required\":true," | 473 "\"phone_number_required\":true," |
| 500 "\"risk_params\":\"risky business\"," | 474 "\"risk_params\":\"risky business\"," |
| 501 "\"shipping_address\":" | 475 "\"shipping_address\":" |
| 502 "{" | 476 "{" |
| 503 "\"id\":\"shipping_address_id\"," | 477 "\"id\":\"shipping_address_id\"," |
| 504 "\"phone_number\":\"ship_phone_number\"," | 478 "\"phone_number\":\"ship_phone_number\"," |
| 505 "\"postal_address\":" | 479 "\"postal_address\":" |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 " \"error_detail\":\"error_detail\"," | 792 " \"error_detail\":\"error_detail\"," |
| 819 " \"message_for_user\":" | 793 " \"message_for_user\":" |
| 820 " {" | 794 " {" |
| 821 " \"text\":\"text\"," | 795 " \"text\":\"text\"," |
| 822 " \"subtext\":\"subtext\"," | 796 " \"subtext\":\"subtext\"," |
| 823 " \"details\":\"details\"" | 797 " \"details\":\"details\"" |
| 824 " }" | 798 " }" |
| 825 " }" | 799 " }" |
| 826 "}"; | 800 "}"; |
| 827 EXPECT_CALL(delegate_, OnWalletError(expected_error_type)).Times(1); | 801 EXPECT_CALL(delegate_, OnWalletError(expected_error_type)).Times(1); |
| 828 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); | 802 delegate_.ExpectLogWalletApiCallDuration( |
| 803 AutofillMetrics::GET_WALLET_ITEMS, 1); |
| 829 delegate_.ExpectBaselineMetrics(); | 804 delegate_.ExpectBaselineMetrics(); |
| 830 delegate_.ExpectWalletErrorMetric(expected_autofill_metric); | 805 delegate_.ExpectWalletErrorMetric(expected_autofill_metric); |
| 831 | 806 |
| 832 std::vector<AutocheckoutStatistic> statistics; | 807 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); |
| 833 wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, | |
| 834 GURL(kMerchantUrl), | |
| 835 statistics, | |
| 836 "google_transaction_id"); | |
| 837 std::string buyer_error; | 808 std::string buyer_error; |
| 838 if (!buyer_error_type_string.empty()) { | 809 if (!buyer_error_type_string.empty()) { |
| 839 buyer_error = base::StringPrintf("\"buyer_error_type\":\"%s\",", | 810 buyer_error = base::StringPrintf("\"buyer_error_type\":\"%s\",", |
| 840 buyer_error_type_string.c_str()); | 811 buyer_error_type_string.c_str()); |
| 841 } | 812 } |
| 842 std::string response = base::StringPrintf(kResponseTemplate, | 813 std::string response = base::StringPrintf(kResponseTemplate, |
| 843 error_type_string.c_str(), | 814 error_type_string.c_str(), |
| 844 buyer_error.c_str()); | 815 buyer_error.c_str()); |
| 845 VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, | 816 VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, |
| 846 kSendAutocheckoutStatusOfSuccessValidRequest, | 817 kGetWalletItemsValidRequest, |
| 847 response); | 818 response); |
| 848 } | 819 } |
| 849 | 820 |
| 850 protected: | 821 protected: |
| 851 content::TestBrowserThreadBundle thread_bundle_; | 822 content::TestBrowserThreadBundle thread_bundle_; |
| 852 scoped_ptr<WalletClient> wallet_client_; | 823 scoped_ptr<WalletClient> wallet_client_; |
| 853 TestingProfile browser_context_; | 824 TestingProfile browser_context_; |
| 854 MockWalletClientDelegate delegate_; | 825 MockWalletClientDelegate delegate_; |
| 855 | 826 |
| 856 private: | 827 private: |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 962 TestWalletErrorCode(test_cases[i].error_type_string, | 933 TestWalletErrorCode(test_cases[i].error_type_string, |
| 963 test_cases[i].buyer_error_type_string, | 934 test_cases[i].buyer_error_type_string, |
| 964 test_cases[i].expected_error_type, | 935 test_cases[i].expected_error_type, |
| 965 test_cases[i].expected_autofill_metric); | 936 test_cases[i].expected_autofill_metric); |
| 966 } | 937 } |
| 967 } | 938 } |
| 968 | 939 |
| 969 TEST_F(WalletClientTest, WalletErrorResponseMissing) { | 940 TEST_F(WalletClientTest, WalletErrorResponseMissing) { |
| 970 EXPECT_CALL(delegate_, OnWalletError( | 941 EXPECT_CALL(delegate_, OnWalletError( |
| 971 WalletClient::UNKNOWN_ERROR)).Times(1); | 942 WalletClient::UNKNOWN_ERROR)).Times(1); |
| 972 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); | 943 delegate_.ExpectLogWalletApiCallDuration( |
| 944 AutofillMetrics::GET_WALLET_ITEMS, 1); |
| 973 delegate_.ExpectBaselineMetrics(); | 945 delegate_.ExpectBaselineMetrics(); |
| 974 delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_UNKNOWN_ERROR); | 946 delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_UNKNOWN_ERROR); |
| 975 | 947 |
| 976 std::vector<AutocheckoutStatistic> statistics; | 948 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); |
| 977 wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, | |
| 978 GURL(kMerchantUrl), | |
| 979 statistics, | |
| 980 "google_transaction_id"); | |
| 981 VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, | 949 VerifyAndFinishRequest(net::HTTP_INTERNAL_SERVER_ERROR, |
| 982 kSendAutocheckoutStatusOfSuccessValidRequest, | 950 kGetWalletItemsValidRequest, |
| 983 kErrorTypeMissingInResponse); | 951 kErrorTypeMissingInResponse); |
| 984 } | 952 } |
| 985 | 953 |
| 986 TEST_F(WalletClientTest, NetworkFailureOnExpectedVoidResponse) { | |
| 987 EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1); | |
| 988 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); | |
| 989 delegate_.ExpectBaselineMetrics(); | |
| 990 delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR); | |
| 991 | |
| 992 std::vector<AutocheckoutStatistic> statistics; | |
| 993 wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, | |
| 994 GURL(kMerchantUrl), | |
| 995 statistics, | |
| 996 "google_transaction_id"); | |
| 997 VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED, | |
| 998 kSendAutocheckoutStatusOfSuccessValidRequest, | |
| 999 std::string()); | |
| 1000 } | |
| 1001 | |
| 1002 TEST_F(WalletClientTest, NetworkFailureOnExpectedResponse) { | 954 TEST_F(WalletClientTest, NetworkFailureOnExpectedResponse) { |
| 1003 EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1); | 955 EXPECT_CALL(delegate_, OnWalletError(WalletClient::NETWORK_ERROR)).Times(1); |
| 1004 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, | 956 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, |
| 1005 1); | 957 1); |
| 1006 delegate_.ExpectBaselineMetrics(); | 958 delegate_.ExpectBaselineMetrics(); |
| 1007 delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR); | 959 delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_NETWORK_ERROR); |
| 1008 | 960 |
| 1009 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); | 961 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); |
| 1010 VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED, | 962 VerifyAndFinishRequest(net::HTTP_UNAUTHORIZED, |
| 1011 kGetWalletItemsValidRequest, | 963 kGetWalletItemsValidRequest, |
| 1012 std::string()); | 964 std::string()); |
| 1013 } | 965 } |
| 1014 | 966 |
| 1015 TEST_F(WalletClientTest, RequestError) { | 967 TEST_F(WalletClientTest, RequestError) { |
| 1016 EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1); | 968 EXPECT_CALL(delegate_, OnWalletError(WalletClient::BAD_REQUEST)).Times(1); |
| 1017 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); | 969 delegate_.ExpectLogWalletApiCallDuration( |
| 970 AutofillMetrics::GET_WALLET_ITEMS, 1); |
| 1018 delegate_.ExpectBaselineMetrics(); | 971 delegate_.ExpectBaselineMetrics(); |
| 1019 delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_BAD_REQUEST); | 972 delegate_.ExpectWalletErrorMetric(AutofillMetrics::WALLET_BAD_REQUEST); |
| 1020 | 973 |
| 1021 std::vector<AutocheckoutStatistic> statistics; | 974 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); |
| 1022 wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, | |
| 1023 GURL(kMerchantUrl), | |
| 1024 statistics, | |
| 1025 "google_transaction_id"); | |
| 1026 VerifyAndFinishRequest(net::HTTP_BAD_REQUEST, | 975 VerifyAndFinishRequest(net::HTTP_BAD_REQUEST, |
| 1027 kSendAutocheckoutStatusOfSuccessValidRequest, | 976 kGetWalletItemsValidRequest, |
| 1028 std::string()); | 977 std::string()); |
| 1029 } | 978 } |
| 1030 | 979 |
| 1031 TEST_F(WalletClientTest, GetFullWalletSuccess) { | 980 TEST_F(WalletClientTest, GetFullWalletSuccess) { |
| 1032 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); | 981 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_FULL_WALLET, 1); |
| 1033 delegate_.ExpectBaselineMetrics(); | 982 delegate_.ExpectBaselineMetrics(); |
| 1034 | 983 |
| 1035 WalletClient::FullWalletRequest full_wallet_request( | 984 WalletClient::FullWalletRequest full_wallet_request( |
| 1036 "instrument_id", | 985 "instrument_id", |
| 1037 "shipping_address_id", | 986 "shipping_address_id", |
| (...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1655 | 1604 |
| 1656 wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), | 1605 wallet_client_->SaveToWallet(GetTestAddressUpgradeInstrument(), |
| 1657 scoped_ptr<Address>(), | 1606 scoped_ptr<Address>(), |
| 1658 GURL(kMerchantUrl)); | 1607 GURL(kMerchantUrl)); |
| 1659 | 1608 |
| 1660 VerifyAndFinishRequest(net::HTTP_OK, | 1609 VerifyAndFinishRequest(net::HTTP_OK, |
| 1661 kUpdateInstrumentAddressValidRequest, | 1610 kUpdateInstrumentAddressValidRequest, |
| 1662 kUpdateMalformedResponse); | 1611 kUpdateMalformedResponse); |
| 1663 } | 1612 } |
| 1664 | 1613 |
| 1665 TEST_F(WalletClientTest, SendAutocheckoutOfStatusSuccess) { | |
| 1666 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); | |
| 1667 delegate_.ExpectBaselineMetrics(); | |
| 1668 | |
| 1669 AutocheckoutStatistic statistic; | |
| 1670 statistic.page_number = 1; | |
| 1671 statistic.steps.push_back(AUTOCHECKOUT_STEP_SHIPPING); | |
| 1672 statistic.time_taken = base::TimeDelta::FromMilliseconds(100); | |
| 1673 std::vector<AutocheckoutStatistic> statistics; | |
| 1674 statistics.push_back(statistic); | |
| 1675 wallet_client_->SendAutocheckoutStatus(autofill::SUCCESS, | |
| 1676 GURL(kMerchantUrl), | |
| 1677 statistics, | |
| 1678 "google_transaction_id"); | |
| 1679 VerifyAndFinishRequest(net::HTTP_OK, | |
| 1680 kSendAutocheckoutStatusWithStatisticsValidRequest, | |
| 1681 ")]}"); // Invalid JSON. Should be ignored. | |
| 1682 } | |
| 1683 | |
| 1684 TEST_F(WalletClientTest, SendAutocheckoutStatusOfFailure) { | |
| 1685 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::SEND_STATUS, 1); | |
| 1686 delegate_.ExpectBaselineMetrics(); | |
| 1687 | |
| 1688 std::vector<AutocheckoutStatistic> statistics; | |
| 1689 wallet_client_->SendAutocheckoutStatus(autofill::CANNOT_PROCEED, | |
| 1690 GURL(kMerchantUrl), | |
| 1691 statistics, | |
| 1692 "google_transaction_id"); | |
| 1693 VerifyAndFinishRequest(net::HTTP_OK, | |
| 1694 kSendAutocheckoutStatusOfFailureValidRequest, | |
| 1695 ")]}"); // Invalid JSON. Should be ignored. | |
| 1696 } | |
| 1697 | |
| 1698 TEST_F(WalletClientTest, HasRequestInProgress) { | 1614 TEST_F(WalletClientTest, HasRequestInProgress) { |
| 1699 EXPECT_FALSE(wallet_client_->HasRequestInProgress()); | 1615 EXPECT_FALSE(wallet_client_->HasRequestInProgress()); |
| 1700 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, | 1616 delegate_.ExpectLogWalletApiCallDuration(AutofillMetrics::GET_WALLET_ITEMS, |
| 1701 1); | 1617 1); |
| 1702 delegate_.ExpectBaselineMetrics(); | 1618 delegate_.ExpectBaselineMetrics(); |
| 1703 | 1619 |
| 1704 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); | 1620 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); |
| 1705 EXPECT_TRUE(wallet_client_->HasRequestInProgress()); | 1621 EXPECT_TRUE(wallet_client_->HasRequestInProgress()); |
| 1706 | 1622 |
| 1707 VerifyAndFinishRequest(net::HTTP_OK, | 1623 VerifyAndFinishRequest(net::HTTP_OK, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1755 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); | 1671 wallet_client_->GetWalletItems(GURL(kMerchantUrl)); |
| 1756 EXPECT_EQ(2U, wallet_client_->pending_requests_.size()); | 1672 EXPECT_EQ(2U, wallet_client_->pending_requests_.size()); |
| 1757 | 1673 |
| 1758 wallet_client_->CancelRequests(); | 1674 wallet_client_->CancelRequests(); |
| 1759 EXPECT_EQ(0U, wallet_client_->pending_requests_.size()); | 1675 EXPECT_EQ(0U, wallet_client_->pending_requests_.size()); |
| 1760 EXPECT_FALSE(wallet_client_->HasRequestInProgress()); | 1676 EXPECT_FALSE(wallet_client_->HasRequestInProgress()); |
| 1761 } | 1677 } |
| 1762 | 1678 |
| 1763 } // namespace wallet | 1679 } // namespace wallet |
| 1764 } // namespace autofill | 1680 } // namespace autofill |
| OLD | NEW |