blob: e44250c4d9b6055f266e652e84bbbf42aab6b5b8 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_NETWORK_PUBLIC_CPP_PROXY_CONFIG_MOJOM_TRAITS_H_
#define SERVICES_NETWORK_PUBLIC_CPP_PROXY_CONFIG_MOJOM_TRAITS_H_
#include <string>
#include <vector>
#include "base/component_export.h"
#include "mojo/public/cpp/base/big_string_mojom_traits.h"
#include "mojo/public/cpp/bindings/enum_traits.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "net/base/proxy_chain.h"
#include "net/proxy_resolution/proxy_bypass_rules.h"
#include "net/proxy_resolution/proxy_config.h"
#include "net/proxy_resolution/proxy_config_with_annotation.h"
#include "net/proxy_resolution/proxy_list.h"
#include "services/network/public/cpp/network_param_mojom_traits.h"
#include "services/network/public/mojom/proxy_config.mojom-shared.h"
#include "url/mojom/scheme_host_port_mojom_traits.h"
// This file handles the serialization of net::ProxyConfig.
namespace mojo {
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
StructTraits<network::mojom::ProxyBypassRulesDataView,
net::ProxyBypassRules> {
public:
static std::vector<std::string> rules(const net::ProxyBypassRules& r);
static bool Read(network::mojom::ProxyBypassRulesDataView data,
net::ProxyBypassRules* out_proxy_bypass_rules);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
StructTraits<network::mojom::ProxyListDataView, net::ProxyList> {
public:
static const std::vector<net::ProxyChain>& proxies(const net::ProxyList& r) {
return r.AllChains();
}
static bool Read(network::mojom::ProxyListDataView data,
net::ProxyList* out_proxy_list);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
EnumTraits<network::mojom::ProxyRulesType,
net::ProxyConfig::ProxyRules::Type> {
public:
static network::mojom::ProxyRulesType ToMojom(
net::ProxyConfig::ProxyRules::Type net_proxy_rules_type);
static bool FromMojom(network::mojom::ProxyRulesType mojo_proxy_rules_type,
net::ProxyConfig::ProxyRules::Type* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
EnumTraits<network::mojom::ProxyOverrideRuleResult,
net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition::Result> {
public:
static network::mojom::ProxyOverrideRuleResult ToMojom(
net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition::Result result);
static bool FromMojom(
network::mojom::ProxyOverrideRuleResult mojom_result,
net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition::Result* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
StructTraits<network::mojom::ProxyRulesDataView,
net::ProxyConfig::ProxyRules> {
public:
static const net::ProxyBypassRules& bypass_rules(
const net::ProxyConfig::ProxyRules& r) {
return r.bypass_rules;
}
static bool reverse_bypass(const net::ProxyConfig::ProxyRules& r) {
return r.reverse_bypass;
}
static net::ProxyConfig::ProxyRules::Type type(
const net::ProxyConfig::ProxyRules& r) {
return r.type;
}
static const net::ProxyList& single_proxies(
const net::ProxyConfig::ProxyRules& r) {
return r.single_proxies;
}
static const net::ProxyList& proxies_for_http(
const net::ProxyConfig::ProxyRules& r) {
return r.proxies_for_http;
}
static const net::ProxyList& proxies_for_https(
const net::ProxyConfig::ProxyRules& r) {
return r.proxies_for_https;
}
static const net::ProxyList& proxies_for_ftp(
const net::ProxyConfig::ProxyRules& r) {
return r.proxies_for_ftp;
}
static const net::ProxyList& fallback_proxies(
const net::ProxyConfig::ProxyRules& r) {
return r.fallback_proxies;
}
static bool Read(network::mojom::ProxyRulesDataView data,
net::ProxyConfig::ProxyRules* out_proxy_rules);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
StructTraits<network::mojom::DnsProbeConditionDataView,
net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition> {
static const url::SchemeHostPort& host(
const net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition& r) {
return r.host;
}
static net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition::Result result(
const net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition& r) {
return r.result;
}
static bool Read(network::mojom::DnsProbeConditionDataView data,
net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
StructTraits<network::mojom::ProxyOverrideRuleDataView,
net::ProxyConfig::ProxyOverrideRule> {
static net::ProxyBypassRules destination_matchers(
const net::ProxyConfig::ProxyOverrideRule& r) {
return r.destination_matchers;
}
static const std::vector<
net::ProxyConfig::ProxyOverrideRule::DnsProbeCondition>&
dns_conditions(const net::ProxyConfig::ProxyOverrideRule& r) {
return r.dns_conditions;
}
static const net::ProxyList& proxy_list(
const net::ProxyConfig::ProxyOverrideRule& r) {
return r.proxy_list;
}
static bool Read(network::mojom::ProxyOverrideRuleDataView data,
net::ProxyConfig::ProxyOverrideRule* out);
};
template <>
struct COMPONENT_EXPORT(NETWORK_CPP_PROXY_CONFIG)
StructTraits<network::mojom::ProxyConfigDataView, net::ProxyConfig> {
public:
static bool auto_detect(const net::ProxyConfig& r) { return r.auto_detect(); }
static bool from_system(const net::ProxyConfig& r) { return r.from_system(); }
static const std::string& pac_url(const net::ProxyConfig& r) {
return r.pac_url().possibly_invalid_spec();
}
static bool pac_mandatory(const net::ProxyConfig& r) {
return r.pac_mandatory();
}
static const net::ProxyConfig::ProxyRules& proxy_rules(
const net::ProxyConfig& r) {
return r.proxy_rules();
}
static const std::vector<net::ProxyConfig::ProxyOverrideRule>&
proxy_override_rules(const net::ProxyConfig& r) {
return r.proxy_override_rules();
}
static bool Read(network::mojom::ProxyConfigDataView data,
net::ProxyConfig* out_proxy_config);
};
} // namespace mojo
#endif // SERVICES_NETWORK_PUBLIC_CPP_PROXY_CONFIG_MOJOM_TRAITS_H_