|  | // Copyright 2017 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. | 
|  |  | 
|  | #include "components/payments/core/payment_options.h" | 
|  |  | 
|  | #include "base/values.h" | 
|  |  | 
|  | namespace payments { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | // These are defined as part of the spec at: | 
|  | // https://w3c.github.io/payment-request/#paymentoptions-dictionary | 
|  | static const char kPaymentOptionsRequestPayerEmail[] = "requestPayerEmail"; | 
|  | static const char kPaymentOptionsRequestPayerName[] = "requestPayerName"; | 
|  | static const char kPaymentOptionsRequestPayerPhone[] = "requestPayerPhone"; | 
|  | static const char kPaymentOptionsRequestShipping[] = "requestShipping"; | 
|  | static const char kPaymentOptionsShippingTypeDelivery[] = "delivery"; | 
|  | static const char kPaymentOptionsShippingTypePickup[] = "pickup"; | 
|  | static const char kPaymentOptionsShippingType[] = "shippingType"; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | PaymentOptions::PaymentOptions() | 
|  | : request_payer_name(false), | 
|  | request_payer_email(false), | 
|  | request_payer_phone(false), | 
|  | request_shipping(false), | 
|  | shipping_type(payments::PaymentShippingType::SHIPPING) {} | 
|  | PaymentOptions::~PaymentOptions() = default; | 
|  |  | 
|  | bool PaymentOptions::operator==(const PaymentOptions& other) const { | 
|  | return request_payer_name == other.request_payer_name && | 
|  | request_payer_email == other.request_payer_email && | 
|  | request_payer_phone == other.request_payer_phone && | 
|  | request_shipping == other.request_shipping && | 
|  | shipping_type == other.shipping_type; | 
|  | } | 
|  |  | 
|  | bool PaymentOptions::operator!=(const PaymentOptions& other) const { | 
|  | return !(*this == other); | 
|  | } | 
|  |  | 
|  | bool PaymentOptions::FromDictionaryValue(const base::DictionaryValue& value) { | 
|  | value.GetBoolean(kPaymentOptionsRequestPayerName, &request_payer_name); | 
|  |  | 
|  | value.GetBoolean(kPaymentOptionsRequestPayerEmail, &request_payer_email); | 
|  |  | 
|  | value.GetBoolean(kPaymentOptionsRequestPayerPhone, &request_payer_phone); | 
|  |  | 
|  | value.GetBoolean(kPaymentOptionsRequestShipping, &request_shipping); | 
|  |  | 
|  | std::string shipping_type_string; | 
|  | value.GetString(kPaymentOptionsShippingType, &shipping_type_string); | 
|  | if (shipping_type_string == kPaymentOptionsShippingTypeDelivery) { | 
|  | shipping_type = payments::PaymentShippingType::DELIVERY; | 
|  | } else if (shipping_type_string == kPaymentOptionsShippingTypePickup) { | 
|  | shipping_type = payments::PaymentShippingType::PICKUP; | 
|  | } else { | 
|  | shipping_type = payments::PaymentShippingType::SHIPPING; | 
|  | } | 
|  |  | 
|  | return true; | 
|  | } | 
|  |  | 
|  | }  // namespace payments |