Index: components/autofill/core/browser/payments/payments_client.cc |
diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc |
index 75a735c40475483b61232b42773ab6de936f2b45..683a2f5449f58eb6cb083c123f8428ac33088de4 100644 |
--- a/components/autofill/core/browser/payments/payments_client.cc |
+++ b/components/autofill/core/browser/payments/payments_client.cc |
@@ -161,6 +161,22 @@ std::unique_ptr<base::DictionaryValue> BuildAddressDictionary( |
return address; |
} |
+// Populates the list of active experiments that affect either the data sent in |
+// payments RPCs or whether the RPCs are sent or not. |
+void SetActiveExperiments(const std::vector<const char*>& active_experiments, |
+ base::DictionaryValue* request_dict) { |
+ if (active_experiments.empty()) |
+ return; |
+ |
+ std::unique_ptr<base::ListValue> active_chrome_experiments( |
+ base::MakeUnique<base::ListValue>()); |
+ for (const char* it : active_experiments) |
+ active_chrome_experiments->AppendString(it); |
+ |
+ request_dict->Set("active_chrome_experiments", |
+ std::move(active_chrome_experiments)); |
+} |
+ |
class UnmaskCardRequest : public PaymentsRequest { |
public: |
UnmaskCardRequest(const PaymentsClient::UnmaskRequestDetails& request_details) |
@@ -222,8 +238,11 @@ class UnmaskCardRequest : public PaymentsRequest { |
class GetUploadDetailsRequest : public PaymentsRequest { |
public: |
GetUploadDetailsRequest(const std::vector<AutofillProfile>& addresses, |
+ const std::vector<const char*>& active_experiments, |
const std::string& app_locale) |
- : addresses_(addresses), app_locale_(app_locale) {} |
+ : addresses_(addresses), |
+ active_experiments_(active_experiments), |
+ app_locale_(app_locale) {} |
~GetUploadDetailsRequest() override {} |
std::string GetRequestUrlPath() override { |
@@ -250,6 +269,8 @@ class GetUploadDetailsRequest : public PaymentsRequest { |
} |
request_dict.Set("address", std::move(addresses)); |
+ SetActiveExperiments(active_experiments_, &request_dict); |
+ |
std::string request_content; |
base::JSONWriter::Write(request_dict, &request_content); |
VLOG(3) << "getdetailsforsavecard request body: " << request_content; |
@@ -274,7 +295,8 @@ class GetUploadDetailsRequest : public PaymentsRequest { |
} |
private: |
- std::vector<AutofillProfile> addresses_; |
+ const std::vector<AutofillProfile> addresses_; |
+ const std::vector<const char*> active_experiments_; |
std::string app_locale_; |
base::string16 context_token_; |
std::unique_ptr<base::DictionaryValue> legal_message_; |
@@ -325,6 +347,8 @@ class UploadCardRequest : public PaymentsRequest { |
if (base::StringToInt(exp_year, &value)) |
request_dict.SetInteger("expiration_year", value); |
+ SetActiveExperiments(request_details_.active_experiments, &request_dict); |
+ |
const base::string16 pan = request_details_.card.GetInfo( |
AutofillType(CREDIT_CARD_NUMBER), app_locale); |
std::string json_request; |
@@ -352,7 +376,7 @@ class UploadCardRequest : public PaymentsRequest { |
} |
private: |
- PaymentsClient::UploadRequestDetails request_details_; |
+ const PaymentsClient::UploadRequestDetails request_details_; |
std::string server_id_; |
}; |
@@ -393,8 +417,10 @@ void PaymentsClient::UnmaskCard( |
void PaymentsClient::GetUploadDetails( |
const std::vector<AutofillProfile>& addresses, |
+ const std::vector<const char*>& active_experiments, |
const std::string& app_locale) { |
- IssueRequest(base::MakeUnique<GetUploadDetailsRequest>(addresses, app_locale), |
+ IssueRequest(base::MakeUnique<GetUploadDetailsRequest>( |
+ addresses, active_experiments, app_locale), |
false); |
} |