| // Copyright 2018 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef COMPONENTS_UPDATE_CLIENT_PROTOCOL_SERIALIZER_H_ | 
 | #define COMPONENTS_UPDATE_CLIENT_PROTOCOL_SERIALIZER_H_ | 
 |  | 
 | #include <map> | 
 | #include <memory> | 
 | #include <optional> | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "base/containers/flat_map.h" | 
 | #include "base/values.h" | 
 | #include "components/update_client/protocol_definition.h" | 
 |  | 
 | namespace base { | 
 | class Version; | 
 | } | 
 |  | 
 | namespace update_client { | 
 |  | 
 | class PersistedData; | 
 |  | 
 | // Creates the values for the DDOS extra request headers sent with the update | 
 | // check. These headers include "X-Goog-Update-Updater", | 
 | // "X-Goog-Update-AppId", and  "X-Goog-Update-Interactivity". | 
 | base::flat_map<std::string, std::string> BuildUpdateCheckExtraRequestHeaders( | 
 |     const std::string& prod_id, | 
 |     const base::Version& browser_version, | 
 |     const std::vector<std::string>& ids_checked, | 
 |     bool is_foreground); | 
 |  | 
 | protocol_request::Request MakeProtocolRequest( | 
 |     bool is_machine, | 
 |     const std::string& session_id, | 
 |     const std::string& prod_id, | 
 |     const std::string& browser_version, | 
 |     const std::string& channel, | 
 |     const std::string& os_long_name, | 
 |     const std::string& download_preference, | 
 |     std::optional<bool> domain_joined, | 
 |     const base::flat_map<std::string, std::string>& additional_attributes, | 
 |     const base::flat_map<std::string, std::string>& updater_state_attributes, | 
 |     std::vector<protocol_request::App> apps); | 
 |  | 
 | protocol_request::App MakeProtocolApp( | 
 |     const std::string& app_id, | 
 |     const base::Version& version, | 
 |     const std::string& ap, | 
 |     const std::string& brand_code, | 
 |     const std::string& install_id, | 
 |     const std::string& lang, | 
 |     int install_date, | 
 |     const std::string& install_source, | 
 |     const std::string& install_location, | 
 |     const std::map<std::string, std::string>& installer_attributes, | 
 |     const std::string& cohort, | 
 |     const std::string& cohort_hint, | 
 |     const std::string& cohort_name, | 
 |     const std::string& release_channel, | 
 |     const std::vector<int>& disabled_reasons, | 
 |     const std::vector<std::string>& cached_hashes, | 
 |     std::optional<protocol_request::UpdateCheck> update_check, | 
 |     const std::vector<protocol_request::Data>& data, | 
 |     std::optional<protocol_request::Ping> ping, | 
 |     std::optional<std::vector<base::Value::Dict>> events); | 
 |  | 
 | protocol_request::UpdateCheck MakeProtocolUpdateCheck( | 
 |     bool is_update_disabled, | 
 |     const std::string& target_version_prefix, | 
 |     bool rollback_allowed, | 
 |     bool same_version_update_allowed); | 
 |  | 
 | protocol_request::Ping MakeProtocolPing(const std::string& app_id, | 
 |                                         const PersistedData* metadata, | 
 |                                         bool active); | 
 |  | 
 | class ProtocolSerializer { | 
 |  public: | 
 |   virtual ~ProtocolSerializer() = default; | 
 |   virtual std::string Serialize( | 
 |       const protocol_request::Request& request) const = 0; | 
 |  | 
 |  protected: | 
 |   ProtocolSerializer() = default; | 
 | }; | 
 |  | 
 | }  // namespace update_client | 
 |  | 
 | #endif  // COMPONENTS_UPDATE_CLIENT_PROTOCOL_SERIALIZER_H_ |