#include "components/commerce/core/compare/product_specifications_server_proxy.h"
#include <optional>
#include <string>
#include "base/command_line.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "base/values.h"
#include "components/commerce/core/commerce_constants.h"
#include "components/commerce/core/compare/compare_utils.h"
#include "components/commerce/core/feature_utils.h"
#include "components/endpoint_fetcher/endpoint_fetcher.h"
#include "net/http/http_status_code.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "services/data_decoder/public/cpp/data_decoder.h"
#include "services/data_decoder/public/cpp/json_sanitizer.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
namespace commerce {
namespace {
const char kEndpointUrl[] = …;
const char kAltTextKey[] = …;
const char kDescriptionKey[] = …;
const char kFaviconUrlKey[] = …;
const char kGPCKey[] = …;
const char kIdentifiersKey[] = …;
const char kImageURLKey[] = …;
const char kKeyKey[] = …;
const char kLabelKey[] = …;
const char kMIDKey[] = …;
const char kOptionsKey[] = …;
const char kProductSpecificationsKey[] = …;
const char kProductSpecificationSectionsKey[] = …;
const char kProductSpecificationValuesKey[] = …;
const char kSpecificationDescriptionsKey[] = …;
const char kSummaryKey[] = …;
const char kThumbnailUrlKey[] = …;
const char kTitleKey[] = …;
const char kTextKey[] = …;
const char kUrlKey[] = …;
const char kUrlsKey[] = …;
const uint64_t kTimeoutMs = …;
constexpr net::NetworkTrafficAnnotationTag kShoppingListTrafficAnnotation = …;
std::optional<ProductSpecifications::DescriptionText> ParseDescriptionText(
const base::Value::Dict* desc_text_dict) { … }
std::optional<ProductSpecifications::Description> ParseDescription(
const base::Value::Dict* desc_dict) { … }
std::optional<ProductSpecifications::Value> ParseValue(
const base::Value::Dict* value_dict) { … }
}
ProductSpecificationsServerProxy::ProductSpecificationsServerProxy(
AccountChecker* account_checker,
signin::IdentityManager* identity_manager,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory)
: … { … }
ProductSpecificationsServerProxy::~ProductSpecificationsServerProxy() = default;
void ProductSpecificationsServerProxy::GetProductSpecificationsForClusterIds(
std::vector<uint64_t> cluster_ids,
ProductSpecificationsCallback callback) { … }
void ProductSpecificationsServerProxy::HandleSpecificationsResponse(
std::vector<uint64_t> cluster_ids,
base::OnceCallback<void(std::vector<uint64_t>,
std::optional<ProductSpecifications>)> callback,
std::unique_ptr<EndpointFetcher> endpoint_fetcher,
std::unique_ptr<EndpointResponse> responses) { … }
std::unique_ptr<EndpointFetcher>
ProductSpecificationsServerProxy::CreateEndpointFetcher(
const GURL& url,
const std::string& http_method,
const std::string& post_data) { … }
std::optional<ProductSpecifications>
ProductSpecificationsServerProxy::ProductSpecificationsFromJsonResponse(
const base::Value& compareJson) { … }
}