summaryrefslogtreecommitdiff
path: root/chromium/net/http
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-20 13:40:20 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-22 12:41:23 +0000
commit7961cea6d1041e3e454dae6a1da660b453efd238 (patch)
treec0eeb4a9ff9ba32986289c1653d9608e53ccb444 /chromium/net/http
parentb7034d0803538058e5c9d904ef03cf5eab34f6ef (diff)
downloadqtwebengine-chromium-7961cea6d1041e3e454dae6a1da660b453efd238.tar.gz
BASELINE: Update Chromium to 78.0.3904.130
Change-Id: If185e0c0061b3437531c97c9c8c78f239352a68b Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/net/http')
-rw-r--r--chromium/net/http/BUILD.gn1
-rw-r--r--chromium/net/http/alternative_service.cc239
-rw-r--r--chromium/net/http/alternative_service.h227
-rw-r--r--chromium/net/http/alternative_service_unittest.cc46
-rw-r--r--chromium/net/http/bidirectional_stream.cc10
-rw-r--r--chromium/net/http/bidirectional_stream_unittest.cc8
-rw-r--r--chromium/net/http/broken_alternative_services.cc10
-rw-r--r--chromium/net/http/broken_alternative_services.h30
-rw-r--r--chromium/net/http/broken_alternative_services_unittest.cc8
-rw-r--r--chromium/net/http/failing_http_transaction_factory.cc6
-rw-r--r--chromium/net/http/http_auth_controller.cc21
-rw-r--r--chromium/net/http/http_auth_controller.h23
-rw-r--r--chromium/net/http/http_auth_controller_unittest.cc12
-rw-r--r--chromium/net/http/http_auth_filter.cc27
-rw-r--r--chromium/net/http/http_auth_filter.h20
-rw-r--r--chromium/net/http/http_auth_filter_unittest.cc28
-rw-r--r--chromium/net/http/http_auth_gssapi_posix.cc8
-rw-r--r--chromium/net/http/http_auth_gssapi_posix_unittest.cc6
-rw-r--r--chromium/net/http/http_auth_handler_negotiate.cc2
-rw-r--r--chromium/net/http/http_auth_handler_negotiate_unittest.cc4
-rw-r--r--chromium/net/http/http_auth_handler_unittest.cc4
-rw-r--r--chromium/net/http/http_auth_preferences.cc24
-rw-r--r--chromium/net/http/http_auth_preferences.h11
-rw-r--r--chromium/net/http/http_auth_preferences_unittest.cc8
-rw-r--r--chromium/net/http/http_auth_sspi_win.cc215
-rw-r--r--chromium/net/http/http_auth_sspi_win.h14
-rw-r--r--chromium/net/http/http_auth_sspi_win_unittest.cc138
-rw-r--r--chromium/net/http/http_cache.cc92
-rw-r--r--chromium/net/http/http_cache.h6
-rw-r--r--chromium/net/http/http_cache_lookup_manager_unittest.cc12
-rw-r--r--chromium/net/http/http_cache_transaction.cc191
-rw-r--r--chromium/net/http/http_cache_transaction.h28
-rw-r--r--chromium/net/http/http_cache_unittest.cc347
-rw-r--r--chromium/net/http/http_cache_writers_unittest.cc6
-rw-r--r--chromium/net/http/http_network_layer.cc2
-rw-r--r--chromium/net/http/http_network_layer_unittest.cc9
-rw-r--r--chromium/net/http/http_network_session.cc34
-rw-r--r--chromium/net/http/http_network_session.h24
-rw-r--r--chromium/net/http/http_network_transaction.cc213
-rw-r--r--chromium/net/http/http_network_transaction.h10
-rw-r--r--chromium/net/http/http_network_transaction_unittest.cc933
-rw-r--r--chromium/net/http/http_proxy_client_socket_fuzzer.cc11
-rw-r--r--chromium/net/http/http_proxy_connect_job.cc6
-rw-r--r--chromium/net/http/http_proxy_connect_job_unittest.cc9
-rw-r--r--chromium/net/http/http_response_body_drainer.cc7
-rw-r--r--chromium/net/http/http_response_body_drainer_unittest.cc10
-rw-r--r--chromium/net/http/http_response_info.cc9
-rw-r--r--chromium/net/http/http_response_info.h5
-rw-r--r--chromium/net/http/http_server_properties.cc1126
-rw-r--r--chromium/net/http/http_server_properties.h718
-rw-r--r--chromium/net/http/http_server_properties_impl.cc793
-rw-r--r--chromium/net/http/http_server_properties_impl.h229
-rw-r--r--chromium/net/http/http_server_properties_manager.cc826
-rw-r--r--chromium/net/http/http_server_properties_manager.h274
-rw-r--r--chromium/net/http/http_server_properties_manager_unittest.cc1767
-rw-r--r--chromium/net/http/http_server_properties_unittest.cc (renamed from chromium/net/http/http_server_properties_impl_unittest.cc)1165
-rw-r--r--chromium/net/http/http_stream_factory.cc62
-rw-r--r--chromium/net/http/http_stream_factory.h8
-rw-r--r--chromium/net/http/http_stream_factory_job.cc34
-rw-r--r--chromium/net/http/http_stream_factory_job_controller.cc21
-rw-r--r--chromium/net/http/http_stream_factory_job_controller.h4
-rw-r--r--chromium/net/http/http_stream_factory_job_controller_unittest.cc347
-rw-r--r--chromium/net/http/http_stream_factory_unittest.cc364
-rw-r--r--chromium/net/http/http_stream_parser_fuzzer.cc3
-rw-r--r--chromium/net/http/http_stream_parser_unittest.cc22
-rw-r--r--chromium/net/http/http_stream_request_unittest.cc4
-rw-r--r--chromium/net/http/http_transaction.h8
-rw-r--r--chromium/net/http/http_transaction_test_util.cc26
-rw-r--r--chromium/net/http/http_transaction_test_util.h3
-rw-r--r--chromium/net/http/mock_http_cache.cc176
-rw-r--r--chromium/net/http/mock_http_cache.h61
-rw-r--r--chromium/net/http/mock_sspi_library_win.cc206
-rw-r--r--chromium/net/http/mock_sspi_library_win.h39
-rw-r--r--chromium/net/http/transport_security_persister_unittest.cc6
-rw-r--r--chromium/net/http/transport_security_state.cc22
-rw-r--r--chromium/net/http/transport_security_state.h13
-rw-r--r--chromium/net/http/transport_security_state_static.json6037
-rw-r--r--chromium/net/http/transport_security_state_static_unittest_default.json1
-rw-r--r--chromium/net/http/transport_security_state_unittest.cc51
-rw-r--r--chromium/net/http/url_security_manager.cc34
-rw-r--r--chromium/net/http/url_security_manager.h46
-rw-r--r--chromium/net/http/url_security_manager_posix.cc2
-rw-r--r--chromium/net/http/url_security_manager_unittest.cc23
-rw-r--r--chromium/net/http/url_security_manager_win.cc6
84 files changed, 10328 insertions, 7313 deletions
diff --git a/chromium/net/http/BUILD.gn b/chromium/net/http/BUILD.gn
index 3799a9fcbe3..22ec5deed01 100644
--- a/chromium/net/http/BUILD.gn
+++ b/chromium/net/http/BUILD.gn
@@ -73,6 +73,7 @@ source_set("transport_security_state_generated_files") {
]
deps = [
+ "//build:branding_buildflags",
"//net:net_deps",
"//net:net_public_deps",
"//net/dns",
diff --git a/chromium/net/http/alternative_service.cc b/chromium/net/http/alternative_service.cc
new file mode 100644
index 00000000000..c35a3968c2d
--- /dev/null
+++ b/chromium/net/http/alternative_service.cc
@@ -0,0 +1,239 @@
+// Copyright (c) 2012 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 "net/http/alternative_service.h"
+
+#include "base/logging.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/strings/stringprintf.h"
+
+namespace net {
+
+namespace {
+
+enum AlternativeProxyUsage {
+ // Alternative Proxy was used without racing a normal connection.
+ ALTERNATIVE_PROXY_USAGE_NO_RACE = 0,
+ // Alternative Proxy was used by winning a race with a normal connection.
+ ALTERNATIVE_PROXY_USAGE_WON_RACE = 1,
+ // Alternative Proxy was not used by losing a race with a normal connection.
+ ALTERNATIVE_PROXY_USAGE_LOST_RACE = 2,
+ // Maximum value for the enum.
+ ALTERNATIVE_PROXY_USAGE_MAX,
+};
+
+AlternativeProxyUsage ConvertProtocolUsageToProxyUsage(
+ AlternateProtocolUsage usage) {
+ switch (usage) {
+ case ALTERNATE_PROTOCOL_USAGE_NO_RACE:
+ return ALTERNATIVE_PROXY_USAGE_NO_RACE;
+ case ALTERNATE_PROTOCOL_USAGE_WON_RACE:
+ return ALTERNATIVE_PROXY_USAGE_WON_RACE;
+ case ALTERNATE_PROTOCOL_USAGE_LOST_RACE:
+ return ALTERNATIVE_PROXY_USAGE_LOST_RACE;
+ default:
+ NOTREACHED();
+ return ALTERNATIVE_PROXY_USAGE_MAX;
+ }
+}
+
+quic::ParsedQuicVersion ParsedQuicVersionFromAlpn(
+ base::StringPiece str,
+ quic::ParsedQuicVersionVector supported_versions) {
+ for (const quic::ParsedQuicVersion version : supported_versions) {
+ if (AlpnForVersion(version) == str)
+ return version;
+ }
+ return {quic::PROTOCOL_UNSUPPORTED, quic::QUIC_VERSION_UNSUPPORTED};
+}
+
+} // anonymous namespace
+
+void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage,
+ bool proxy_server_used) {
+ if (proxy_server_used) {
+ DCHECK_LE(usage, ALTERNATE_PROTOCOL_USAGE_LOST_RACE);
+ UMA_HISTOGRAM_ENUMERATION("Net.QuicAlternativeProxy.Usage",
+ ConvertProtocolUsageToProxyUsage(usage),
+ ALTERNATIVE_PROXY_USAGE_MAX);
+ } else {
+ UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolUsage", usage,
+ ALTERNATE_PROTOCOL_USAGE_MAX);
+ }
+}
+
+void HistogramBrokenAlternateProtocolLocation(
+ BrokenAlternateProtocolLocation location) {
+ UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolBrokenLocation", location,
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX);
+}
+
+bool IsAlternateProtocolValid(NextProto protocol) {
+ switch (protocol) {
+ case kProtoUnknown:
+ return false;
+ case kProtoHTTP11:
+ return false;
+ case kProtoHTTP2:
+ return true;
+ case kProtoQUIC:
+ return true;
+ }
+ NOTREACHED();
+ return false;
+}
+
+bool IsProtocolEnabled(NextProto protocol,
+ bool is_http2_enabled,
+ bool is_quic_enabled) {
+ switch (protocol) {
+ case kProtoUnknown:
+ NOTREACHED();
+ return false;
+ case kProtoHTTP11:
+ return true;
+ case kProtoHTTP2:
+ return is_http2_enabled;
+ case kProtoQUIC:
+ return is_quic_enabled;
+ }
+ NOTREACHED();
+ return false;
+}
+
+// static
+AlternativeServiceInfo
+AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ const AlternativeService& alternative_service,
+ base::Time expiration) {
+ DCHECK_EQ(alternative_service.protocol, kProtoHTTP2);
+ return AlternativeServiceInfo(alternative_service, expiration,
+ quic::ParsedQuicVersionVector());
+}
+
+// static
+AlternativeServiceInfo AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ const AlternativeService& alternative_service,
+ base::Time expiration,
+ const quic::ParsedQuicVersionVector& advertised_versions) {
+ DCHECK_EQ(alternative_service.protocol, kProtoQUIC);
+ return AlternativeServiceInfo(alternative_service, expiration,
+ advertised_versions);
+}
+
+AlternativeServiceInfo::AlternativeServiceInfo() : alternative_service_() {}
+
+AlternativeServiceInfo::~AlternativeServiceInfo() = default;
+
+AlternativeServiceInfo::AlternativeServiceInfo(
+ const AlternativeService& alternative_service,
+ base::Time expiration,
+ const quic::ParsedQuicVersionVector& advertised_versions)
+ : alternative_service_(alternative_service), expiration_(expiration) {
+ if (alternative_service_.protocol == kProtoQUIC) {
+ advertised_versions_ = advertised_versions;
+ std::sort(advertised_versions_.begin(), advertised_versions_.end(),
+ TransportVersionLessThan);
+ }
+}
+
+AlternativeServiceInfo::AlternativeServiceInfo(
+ const AlternativeServiceInfo& alternative_service_info) = default;
+
+AlternativeServiceInfo& AlternativeServiceInfo::operator=(
+ const AlternativeServiceInfo& alternative_service_info) = default;
+
+std::string AlternativeService::ToString() const {
+ return base::StringPrintf("%s %s:%d", NextProtoToString(protocol),
+ host.c_str(), port);
+}
+
+std::string AlternativeServiceInfo::ToString() const {
+ base::Time::Exploded exploded;
+ expiration_.LocalExplode(&exploded);
+ return base::StringPrintf(
+ "%s, expires %04d-%02d-%02d %02d:%02d:%02d",
+ alternative_service_.ToString().c_str(), exploded.year, exploded.month,
+ exploded.day_of_month, exploded.hour, exploded.minute, exploded.second);
+}
+
+// static
+bool AlternativeServiceInfo::TransportVersionLessThan(
+ const quic::ParsedQuicVersion& lhs,
+ const quic::ParsedQuicVersion& rhs) {
+ return lhs.transport_version < rhs.transport_version;
+}
+
+std::ostream& operator<<(std::ostream& os,
+ const AlternativeService& alternative_service) {
+ os << alternative_service.ToString();
+ return os;
+}
+
+AlternativeServiceInfoVector ProcessAlternativeServices(
+ const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector&
+ alternative_service_vector,
+ bool is_http2_enabled,
+ bool is_quic_enabled,
+ const quic::ParsedQuicVersionVector& supported_quic_versions,
+ bool support_ietf_format_quic_altsvc) {
+ // Convert spdy::SpdyAltSvcWireFormat::AlternativeService entries
+ // to net::AlternativeServiceInfo.
+ AlternativeServiceInfoVector alternative_service_info_vector;
+ for (const spdy::SpdyAltSvcWireFormat::AlternativeService&
+ alternative_service_entry : alternative_service_vector) {
+ if (!IsPortValid(alternative_service_entry.port))
+ continue;
+
+ NextProto protocol =
+ NextProtoFromString(alternative_service_entry.protocol_id);
+ // Check if QUIC version is supported. Filter supported QUIC versions.
+ quic::ParsedQuicVersionVector advertised_versions;
+ if (protocol == kProtoQUIC) {
+ if (!IsProtocolEnabled(protocol, is_http2_enabled, is_quic_enabled))
+ continue;
+ if (!alternative_service_entry.version.empty()) {
+ advertised_versions = FilterSupportedAltSvcVersions(
+ alternative_service_entry, supported_quic_versions,
+ support_ietf_format_quic_altsvc);
+ if (advertised_versions.empty())
+ continue;
+ }
+ } else if (!IsAlternateProtocolValid(protocol)) {
+ quic::ParsedQuicVersion version = ParsedQuicVersionFromAlpn(
+ alternative_service_entry.protocol_id, supported_quic_versions);
+ if (version.handshake_protocol == quic::PROTOCOL_UNSUPPORTED ||
+ version.transport_version == quic::QUIC_VERSION_UNSUPPORTED) {
+ continue;
+ }
+ protocol = kProtoQUIC;
+ advertised_versions = {version};
+ }
+ if (!IsAlternateProtocolValid(protocol) ||
+ !IsProtocolEnabled(protocol, is_http2_enabled, is_quic_enabled)) {
+ continue;
+ }
+
+ AlternativeService alternative_service(protocol,
+ alternative_service_entry.host,
+ alternative_service_entry.port);
+ base::Time expiration =
+ base::Time::Now() +
+ base::TimeDelta::FromSeconds(alternative_service_entry.max_age);
+ AlternativeServiceInfo alternative_service_info;
+ if (protocol == kProtoQUIC) {
+ alternative_service_info =
+ AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ alternative_service, expiration, advertised_versions);
+ } else {
+ alternative_service_info =
+ AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ alternative_service, expiration);
+ }
+ alternative_service_info_vector.push_back(alternative_service_info);
+ }
+ return alternative_service_info_vector;
+}
+
+} // namespace net
diff --git a/chromium/net/http/alternative_service.h b/chromium/net/http/alternative_service.h
new file mode 100644
index 00000000000..5e2374c0c00
--- /dev/null
+++ b/chromium/net/http/alternative_service.h
@@ -0,0 +1,227 @@
+// Copyright (c) 2012 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.
+
+#ifndef NET_HTTP_ALTERNATIVE_SERVICE_H_
+#define NET_HTTP_ALTERNATIVE_SERVICE_H_
+
+#include <stdint.h>
+
+#include <algorithm>
+#include <ostream>
+#include <string>
+
+#include "base/time/time.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/net_export.h"
+#include "net/base/port_util.h"
+#include "net/quic/quic_http_utils.h"
+#include "net/socket/next_proto.h"
+#include "net/third_party/quiche/src/quic/core/quic_versions.h"
+#include "net/third_party/quiche/src/spdy/core/spdy_protocol.h"
+
+namespace net {
+
+enum AlternateProtocolUsage {
+ // Alternate Protocol was used without racing a normal connection.
+ ALTERNATE_PROTOCOL_USAGE_NO_RACE = 0,
+ // Alternate Protocol was used by winning a race with a normal connection.
+ ALTERNATE_PROTOCOL_USAGE_WON_RACE = 1,
+ // Alternate Protocol was not used by losing a race with a normal connection.
+ ALTERNATE_PROTOCOL_USAGE_LOST_RACE = 2,
+ // Alternate Protocol was not used because no Alternate-Protocol information
+ // was available when the request was issued, but an Alternate-Protocol header
+ // was present in the response.
+ ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING = 3,
+ // Alternate Protocol was not used because it was marked broken.
+ ALTERNATE_PROTOCOL_USAGE_BROKEN = 4,
+ // Maximum value for the enum.
+ ALTERNATE_PROTOCOL_USAGE_MAX,
+};
+
+// Log a histogram to reflect |usage|.
+NET_EXPORT void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage,
+ bool proxy_server_used);
+
+enum BrokenAlternateProtocolLocation {
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB = 0,
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_STREAM_FACTORY = 1,
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_ALT = 2,
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_MAIN = 3,
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_HTTP_STREAM = 4,
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_NETWORK_TRANSACTION = 5,
+ BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX,
+};
+
+// Log a histogram to reflect |location|.
+NET_EXPORT void HistogramBrokenAlternateProtocolLocation(
+ BrokenAlternateProtocolLocation location);
+
+// Returns true if |protocol| is a valid protocol.
+NET_EXPORT bool IsAlternateProtocolValid(NextProto protocol);
+
+// Returns true if |protocol| is enabled, based on |is_http2_enabled|
+// and |is_quic_enabled|..
+NET_EXPORT bool IsProtocolEnabled(NextProto protocol,
+ bool is_http2_enabled,
+ bool is_quic_enabled);
+
+// (protocol, host, port) triple as defined in
+// https://tools.ietf.org/id/draft-ietf-httpbis-alt-svc-06.html
+//
+// TODO(mmenke): Seems like most of this stuff should be de-inlined.
+struct NET_EXPORT AlternativeService {
+ AlternativeService() : protocol(kProtoUnknown), host(), port(0) {}
+
+ AlternativeService(NextProto protocol, const std::string& host, uint16_t port)
+ : protocol(protocol), host(host), port(port) {}
+
+ AlternativeService(NextProto protocol, const HostPortPair& host_port_pair)
+ : protocol(protocol),
+ host(host_port_pair.host()),
+ port(host_port_pair.port()) {}
+
+ AlternativeService(const AlternativeService& alternative_service) = default;
+ AlternativeService& operator=(const AlternativeService& alternative_service) =
+ default;
+
+ HostPortPair host_port_pair() const { return HostPortPair(host, port); }
+
+ bool operator==(const AlternativeService& other) const {
+ return protocol == other.protocol && host == other.host &&
+ port == other.port;
+ }
+
+ bool operator!=(const AlternativeService& other) const {
+ return !this->operator==(other);
+ }
+
+ bool operator<(const AlternativeService& other) const {
+ return std::tie(protocol, host, port) <
+ std::tie(other.protocol, other.host, other.port);
+ }
+
+ // Output format: "protocol host:port", e.g. "h2 www.google.com:1234".
+ std::string ToString() const;
+
+ NextProto protocol;
+ std::string host;
+ uint16_t port;
+};
+
+NET_EXPORT_PRIVATE std::ostream& operator<<(
+ std::ostream& os,
+ const AlternativeService& alternative_service);
+
+struct AlternativeServiceHash {
+ size_t operator()(const net::AlternativeService& entry) const {
+ return entry.protocol ^ std::hash<std::string>()(entry.host) ^ entry.port;
+ }
+};
+
+class NET_EXPORT_PRIVATE AlternativeServiceInfo {
+ public:
+ static AlternativeServiceInfo CreateHttp2AlternativeServiceInfo(
+ const AlternativeService& alternative_service,
+ base::Time expiration);
+
+ static AlternativeServiceInfo CreateQuicAlternativeServiceInfo(
+ const AlternativeService& alternative_service,
+ base::Time expiration,
+ const quic::ParsedQuicVersionVector& advertised_versions);
+
+ AlternativeServiceInfo();
+ ~AlternativeServiceInfo();
+
+ AlternativeServiceInfo(
+ const AlternativeServiceInfo& alternative_service_info);
+
+ AlternativeServiceInfo& operator=(
+ const AlternativeServiceInfo& alternative_service_info);
+
+ bool operator==(const AlternativeServiceInfo& other) const {
+ return alternative_service_ == other.alternative_service() &&
+ expiration_ == other.expiration() &&
+ advertised_versions_ == other.advertised_versions();
+ }
+
+ bool operator!=(const AlternativeServiceInfo& other) const {
+ return !this->operator==(other);
+ }
+
+ std::string ToString() const;
+
+ void set_alternative_service(const AlternativeService& alternative_service) {
+ alternative_service_ = alternative_service;
+ }
+
+ void set_protocol(const NextProto& protocol) {
+ alternative_service_.protocol = protocol;
+ }
+
+ void set_host(const std::string& host) { alternative_service_.host = host; }
+
+ void set_port(uint16_t port) { alternative_service_.port = port; }
+
+ void set_expiration(const base::Time& expiration) {
+ expiration_ = expiration;
+ }
+
+ void set_advertised_versions(
+ const quic::ParsedQuicVersionVector& advertised_versions) {
+ if (alternative_service_.protocol != kProtoQUIC)
+ return;
+
+ advertised_versions_ = advertised_versions;
+ std::sort(advertised_versions_.begin(), advertised_versions_.end(),
+ TransportVersionLessThan);
+ }
+
+ const AlternativeService& alternative_service() const {
+ return alternative_service_;
+ }
+
+ NextProto protocol() const { return alternative_service_.protocol; }
+
+ HostPortPair host_port_pair() const {
+ return alternative_service_.host_port_pair();
+ }
+
+ base::Time expiration() const { return expiration_; }
+
+ const quic::ParsedQuicVersionVector& advertised_versions() const {
+ return advertised_versions_;
+ }
+
+ private:
+ AlternativeServiceInfo(
+ const AlternativeService& alternative_service,
+ base::Time expiration,
+ const quic::ParsedQuicVersionVector& advertised_versions);
+
+ static bool TransportVersionLessThan(const quic::ParsedQuicVersion& lhs,
+ const quic::ParsedQuicVersion& rhs);
+
+ AlternativeService alternative_service_;
+ base::Time expiration_;
+
+ // Lists all the QUIC versions that are advertised by the server and supported
+ // by Chrome. If empty, defaults to versions used by the current instance of
+ // the netstack.
+ // This list MUST be sorted in ascending order.
+ quic::ParsedQuicVersionVector advertised_versions_;
+};
+
+using AlternativeServiceInfoVector = std::vector<AlternativeServiceInfo>;
+
+NET_EXPORT_PRIVATE AlternativeServiceInfoVector ProcessAlternativeServices(
+ const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector&
+ alternative_service_vector,
+ bool is_http2_enabled,
+ bool is_quic_enabled,
+ const quic::ParsedQuicVersionVector& supported_quic_versions,
+ bool support_ietf_format_quic_altsvc);
+
+} // namespace net
+
+#endif // NET_HTTP_ALTERNATIVE_SERVICE_H_
diff --git a/chromium/net/http/alternative_service_unittest.cc b/chromium/net/http/alternative_service_unittest.cc
new file mode 100644
index 00000000000..c788980b3bd
--- /dev/null
+++ b/chromium/net/http/alternative_service_unittest.cc
@@ -0,0 +1,46 @@
+// Copyright 2019 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 "net/http/alternative_service.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+namespace {
+
+TEST(AlternativeServicesTest, IsProtocolEnabledHttp11) {
+ EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/false,
+ /*is_quic_enabled=*/false));
+ EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/false,
+ /*is_quic_enabled=*/true));
+ EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/true,
+ /*is_quic_enabled=*/false));
+ EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/true,
+ /*is_quic_enabled=*/true));
+}
+
+TEST(AlternativeServicesTest, IsProtocolEnabledHttp2) {
+ EXPECT_FALSE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/false,
+ /*is_quic_enabled=*/false));
+ EXPECT_FALSE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/false,
+ /*is_quic_enabled=*/true));
+ EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/true,
+ /*is_quic_enabled=*/false));
+ EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/true,
+ /*is_quic_enabled=*/true));
+}
+
+TEST(AlternativeServicesTest, IsProtocolEnabledQuic) {
+ EXPECT_FALSE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/false,
+ /*is_quic_enabled=*/false));
+ EXPECT_TRUE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/false,
+ /*is_quic_enabled=*/true));
+ EXPECT_FALSE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/true,
+ /*is_quic_enabled=*/false));
+ EXPECT_TRUE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/true,
+ /*is_quic_enabled=*/true));
+}
+
+} // namespace
+} // namespace net
diff --git a/chromium/net/http/bidirectional_stream.cc b/chromium/net/http/bidirectional_stream.cc
index 867f7678191..e70c7d75f3d 100644
--- a/chromium/net/http/bidirectional_stream.cc
+++ b/chromium/net/http/bidirectional_stream.cc
@@ -113,7 +113,6 @@ BidirectionalStream::BidirectionalStream(
}
SSLConfig ssl_config;
- session->ssl_config_service()->GetSSLConfig(&ssl_config);
session->GetAlpnProtos(&ssl_config.alpn_protos);
StartRequest(ssl_config);
@@ -265,7 +264,7 @@ void BidirectionalStream::OnHeadersReceived(
load_timing_info_.receive_headers_end = base::TimeTicks::Now();
read_end_time_ = load_timing_info_.receive_headers_end;
session_->http_stream_factory()->ProcessAlternativeServices(
- session_, response_info.headers.get(),
+ session_, net::NetworkIsolationKey(), response_info.headers.get(),
url::SchemeHostPort(request_info_->url));
delegate_->OnHeadersReceived(response_headers);
}
@@ -419,11 +418,8 @@ void BidirectionalStream::OnNeedsClientAuth(const SSLConfig& used_ssl_config,
// BidirectionalStream doesn't support client auth. It ignores client auth
// requests with null client cert and key.
SSLConfig ssl_config = used_ssl_config;
- ssl_config.send_client_cert = true;
- ssl_config.client_cert = nullptr;
- ssl_config.client_private_key = nullptr;
- session_->ssl_client_auth_cache()->Add(cert_info->host_and_port, nullptr,
- nullptr);
+ session_->ssl_client_context()->SetClientCertificate(cert_info->host_and_port,
+ nullptr, nullptr);
stream_request_ = nullptr;
StartRequest(ssl_config);
}
diff --git a/chromium/net/http/bidirectional_stream_unittest.cc b/chromium/net/http/bidirectional_stream_unittest.cc
index cb02bd3bdd5..34136bc6bd3 100644
--- a/chromium/net/http/bidirectional_stream_unittest.cc
+++ b/chromium/net/http/bidirectional_stream_unittest.cc
@@ -40,7 +40,7 @@
#include "net/test/cert_test_util.h"
#include "net/test/gtest_util.h"
#include "net/test/test_data_directory.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "net/url_request/url_request_test_util.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -399,7 +399,7 @@ class MockTimer : public base::MockOneShotTimer {
} // namespace
-class BidirectionalStreamTest : public TestWithScopedTaskEnvironment {
+class BidirectionalStreamTest : public TestWithTaskEnvironment {
public:
BidirectionalStreamTest()
: default_url_(kDefaultUrl),
@@ -646,7 +646,7 @@ TEST_F(BidirectionalStreamTest, ClientAuthRequestIgnored) {
// Ensure the certificate was added to the client auth cache.
scoped_refptr<X509Certificate> client_cert;
scoped_refptr<SSLPrivateKey> client_private_key;
- ASSERT_TRUE(http_session_->ssl_client_auth_cache()->Lookup(
+ ASSERT_TRUE(http_session_->ssl_client_context()->GetClientCertificate(
host_port_pair_, &client_cert, &client_private_key));
ASSERT_FALSE(client_cert);
ASSERT_FALSE(client_private_key);
@@ -1740,7 +1740,7 @@ TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) {
AlternativeServiceInfoVector alternative_service_info_vector =
http_session_->http_server_properties()->GetAlternativeServiceInfos(
- url::SchemeHostPort(default_url_));
+ url::SchemeHostPort(default_url_), NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
AlternativeService alternative_service(kProtoQUIC, "www.example.org", 443);
EXPECT_EQ(alternative_service,
diff --git a/chromium/net/http/broken_alternative_services.cc b/chromium/net/http/broken_alternative_services.cc
index fcb9548f9f7..bacfc3d8851 100644
--- a/chromium/net/http/broken_alternative_services.cc
+++ b/chromium/net/http/broken_alternative_services.cc
@@ -8,7 +8,7 @@
#include "base/memory/singleton.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
-#include "net/http/http_server_properties_impl.h"
+#include "net/http/http_server_properties.h"
namespace net {
@@ -32,9 +32,13 @@ base::TimeDelta ComputeBrokenAlternativeServiceExpirationDelay(
} // namespace
BrokenAlternativeServices::BrokenAlternativeServices(
+ int max_recently_broken_alternative_service_entries,
Delegate* delegate,
const base::TickClock* clock)
- : delegate_(delegate), clock_(clock) {
+ : delegate_(delegate),
+ clock_(clock),
+ recently_broken_alternative_services_(
+ max_recently_broken_alternative_service_entries) {
DCHECK(delegate_);
DCHECK(clock_);
}
@@ -321,7 +325,7 @@ void BrokenAlternativeServices ::
expiration_timer_.Stop();
expiration_timer_.Start(
FROM_HERE, delay,
- base::Bind(
+ base::BindOnce(
&BrokenAlternativeServices ::ExpireBrokenAlternateProtocolMappings,
weak_ptr_factory_.GetWeakPtr()));
}
diff --git a/chromium/net/http/broken_alternative_services.h b/chromium/net/http/broken_alternative_services.h
index 2d93fb4901a..776c0f2bed5 100644
--- a/chromium/net/http/broken_alternative_services.h
+++ b/chromium/net/http/broken_alternative_services.h
@@ -9,9 +9,11 @@
#include <set>
#include <unordered_map>
+#include "base/containers/mru_cache.h"
#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
#include "base/timer/timer.h"
-#include "net/http/http_server_properties.h"
+#include "net/http/alternative_service.h"
namespace base {
class TickClock;
@@ -19,12 +21,28 @@ class TickClock;
namespace net {
+// Stores broken alternative services and when their brokenness expires.
+typedef std::list<std::pair<AlternativeService, base::TimeTicks>>
+ BrokenAlternativeServiceList;
+
+// Stores how many times an alternative service has been marked broken.
+class RecentlyBrokenAlternativeServices
+ : public base::MRUCache<AlternativeService, int> {
+ public:
+ RecentlyBrokenAlternativeServices(
+ int max_recently_broken_alternative_service_entries)
+ : base::MRUCache<AlternativeService, int>(
+ max_recently_broken_alternative_service_entries) {}
+};
+
// This class tracks HTTP alternative services that have been marked as broken.
// The brokenness of an alt-svc will expire after some time according to an
// exponential back-off formula: each time an alt-svc is marked broken, the
// expiration delay will be some constant multiple of its previous expiration
// delay. This prevents broken alt-svcs from being retried too often by the
// network stack.
+//
+// Intended solely for use by HttpServerProperties.
class NET_EXPORT_PRIVATE BrokenAlternativeServices {
public:
// Delegate to be used by owner so it can be notified when the brokenness of
@@ -42,7 +60,9 @@ class NET_EXPORT_PRIVATE BrokenAlternativeServices {
// |clock| is used for setting expiration times and scheduling the
// expiration of broken alternative services. It must not be null.
// |delegate| and |clock| are both unowned and must outlive this.
- BrokenAlternativeServices(Delegate* delegate, const base::TickClock* clock);
+ BrokenAlternativeServices(int max_recently_broken_alternative_service_entries,
+ Delegate* delegate,
+ const base::TickClock* clock);
BrokenAlternativeServices(const BrokenAlternativeServices&) = delete;
void operator=(const BrokenAlternativeServices&) = delete;
@@ -114,9 +134,9 @@ class NET_EXPORT_PRIVATE BrokenAlternativeServices {
recently_broken_alternative_services() const;
private:
- // TODO (wangyix): modify HttpServerPropertiesImpl unit tests so this
- // friendness is no longer required.
- friend class HttpServerPropertiesImplPeer;
+ // TODO (wangyix): modify HttpServerProperties unit tests so this friendness
+ // is no longer required.
+ friend class HttpServerPropertiesPeer;
struct AlternativeServiceHash {
size_t operator()(const net::AlternativeService& entry) const {
diff --git a/chromium/net/http/broken_alternative_services_unittest.cc b/chromium/net/http/broken_alternative_services_unittest.cc
index bff016e9094..bff1d195e53 100644
--- a/chromium/net/http/broken_alternative_services_unittest.cc
+++ b/chromium/net/http/broken_alternative_services_unittest.cc
@@ -26,7 +26,7 @@ class BrokenAlternativeServicesTest
: test_task_runner_(new base::TestMockTimeTaskRunner()),
test_task_runner_context_(test_task_runner_),
broken_services_clock_(test_task_runner_->GetMockTickClock()),
- broken_services_(this, broken_services_clock_) {}
+ broken_services_(50, this, broken_services_clock_) {}
// BrokenAlternativeServices::Delegate implementation
void OnExpireBrokenAlternativeService(
@@ -640,7 +640,7 @@ TEST_F(BrokenAlternativeServicesTest, SetBrokenAlternativeServices) {
{alternative_service1, broken_services_clock_->NowTicks() + delay1});
std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
- std::make_unique<RecentlyBrokenAlternativeServices>();
+ std::make_unique<RecentlyBrokenAlternativeServices>(10);
recently_broken_map->Put(alternative_service1, 1);
recently_broken_map->Put(alternative_service2, 2);
@@ -701,7 +701,7 @@ TEST_F(BrokenAlternativeServicesTest,
broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(1)});
std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
- std::make_unique<RecentlyBrokenAlternativeServices>();
+ std::make_unique<RecentlyBrokenAlternativeServices>(10);
recently_broken_map->Put(alternative_service1, 1);
recently_broken_map->Put(alternative_service3, 1);
@@ -822,7 +822,7 @@ TEST_F(BrokenAlternativeServicesTest, Clear) {
broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(1)});
std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
- std::make_unique<RecentlyBrokenAlternativeServices>();
+ std::make_unique<RecentlyBrokenAlternativeServices>(10);
recently_broken_map->Put(alternative_service2, 2);
broken_services_.SetBrokenAndRecentlyBrokenAlternativeServices(
diff --git a/chromium/net/http/failing_http_transaction_factory.cc b/chromium/net/http/failing_http_transaction_factory.cc
index 4d3a609b2cc..2446690280e 100644
--- a/chromium/net/http/failing_http_transaction_factory.cc
+++ b/chromium/net/http/failing_http_transaction_factory.cc
@@ -54,7 +54,6 @@ class FailingHttpTransaction : public HttpTransaction {
int buf_len,
CompletionOnceCallback callback) override;
void StopCaching() override;
- bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override;
int64_t GetTotalReceivedBytes() const override;
int64_t GetTotalSentBytes() const override;
void DoneReading() override;
@@ -125,11 +124,6 @@ int FailingHttpTransaction::Read(IOBuffer* buf,
void FailingHttpTransaction::StopCaching() {}
-bool FailingHttpTransaction::GetFullRequestHeaders(
- HttpRequestHeaders* headers) const {
- return false;
-}
-
int64_t FailingHttpTransaction::GetTotalReceivedBytes() const {
return 0;
}
diff --git a/chromium/net/http/http_auth_controller.cc b/chromium/net/http/http_auth_controller.cc
index 9f7923bb524..2442e7b726a 100644
--- a/chromium/net/http/http_auth_controller.cc
+++ b/chromium/net/http/http_auth_controller.cc
@@ -141,12 +141,14 @@ HttpAuthController::HttpAuthController(
const GURL& auth_url,
HttpAuthCache* http_auth_cache,
HttpAuthHandlerFactory* http_auth_handler_factory,
- HostResolver* host_resolver)
+ HostResolver* host_resolver,
+ HttpAuthPreferences::DefaultCredentials allow_default_credentials)
: target_(target),
auth_url_(auth_url),
auth_origin_(auth_url.GetOrigin()),
auth_path_(auth_url.path()),
embedded_identity_used_(false),
+ allow_default_credentials_(allow_default_credentials),
default_credentials_used_(false),
http_auth_cache_(http_auth_cache),
http_auth_handler_factory_(http_auth_handler_factory),
@@ -528,12 +530,17 @@ bool HttpAuthController::SelectNextAuthIdentityToTry() {
return true;
}
- // Use default credentials (single sign on) if this is the first attempt
- // at identity. Do not allow multiple times as it will infinite loop.
- // We use default credentials after checking the auth cache so that if
- // single sign-on doesn't work, we won't try default credentials for future
- // transactions.
- if (!default_credentials_used_ && handler_->AllowsDefaultCredentials()) {
+ // Use default credentials (single sign-on) if they're allowed and this is the
+ // first attempt at using an identity. Do not allow multiple times as it will
+ // infinite loop. We use default credentials after checking the auth cache so
+ // that if single sign-on doesn't work, we won't try default credentials for
+ // future transactions.
+ if (!default_credentials_used_ && handler_->AllowsDefaultCredentials() &&
+ // TODO(https://crbug.com/458508): Refactor |AllowsDefaultCredentials|
+ // to internally process |allow_default_credentials_| once it is
+ // passed along with the other |HttpAuthPreferences|.
+ allow_default_credentials_ ==
+ HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS) {
identity_.source = HttpAuth::IDENT_SRC_DEFAULT_CREDENTIALS;
identity_.invalid = false;
default_credentials_used_ = true;
diff --git a/chromium/net/http/http_auth_controller.h b/chromium/net/http/http_auth_controller.h
index e868520b953..414554f4510 100644
--- a/chromium/net/http/http_auth_controller.h
+++ b/chromium/net/http/http_auth_controller.h
@@ -15,6 +15,7 @@
#include "net/base/completion_once_callback.h"
#include "net/base/net_export.h"
#include "net/http/http_auth.h"
+#include "net/http/http_auth_preferences.h"
#include "net/log/net_log_with_source.h"
#include "url/gurl.h"
@@ -74,11 +75,16 @@ class NET_EXPORT_PRIVATE HttpAuthController
// * |host_resolver| is used for determining the canonical hostname given a
// possibly non-canonical host name. Name canonicalization is used for
// NTLM and Negotiate HTTP authentication schemes.
- HttpAuthController(HttpAuth::Target target,
- const GURL& auth_url,
- HttpAuthCache* http_auth_cache,
- HttpAuthHandlerFactory* http_auth_handler_factory,
- HostResolver* host_resolver);
+ //
+ // * |allow_default_credentials| is used for determining if the current
+ // context allows ambient authentication using default credentials.
+ HttpAuthController(
+ HttpAuth::Target target,
+ const GURL& auth_url,
+ HttpAuthCache* http_auth_cache,
+ HttpAuthHandlerFactory* http_auth_handler_factory,
+ HostResolver* host_resolver,
+ HttpAuthPreferences::DefaultCredentials allow_default_credentials);
// Generate an authentication token for |target| if necessary. The return
// value is a net error code. |OK| will be returned both in the case that
@@ -213,6 +219,13 @@ class NET_EXPORT_PRIVATE HttpAuthController
// preventing an infinite auth restart loop.
bool embedded_identity_used_;
+ // If the current context allows ambient authentication using default
+ // credentials.
+ // TODO(https://crbug.com/458508): Refactor |allow_default_credentials_|
+ // to be passed along with the other |HttpAuthPreferences|, rather then being
+ // passed directly to |HttpAuthController|.
+ HttpAuthPreferences::DefaultCredentials allow_default_credentials_;
+
// True if default credentials have already been tried for this transaction
// in response to an HTTP authentication challenge.
bool default_credentials_used_;
diff --git a/chromium/net/http/http_auth_controller_unittest.cc b/chromium/net/http/http_auth_controller_unittest.cc
index 90fa3a8c2e0..7e654baaf82 100644
--- a/chromium/net/http/http_auth_controller_unittest.cc
+++ b/chromium/net/http/http_auth_controller_unittest.cc
@@ -8,7 +8,7 @@
#include <utility>
#include "base/strings/utf_string_conversions.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/task_environment.h"
#include "net/base/net_errors.h"
#include "net/base/test_completion_callback.h"
#include "net/dns/mock_host_resolver.h"
@@ -77,7 +77,8 @@ void RunSingleRoundAuthTest(
scoped_refptr<HttpAuthController> controller(new HttpAuthController(
HttpAuth::AUTH_PROXY, GURL("http://example.com"), &dummy_auth_cache,
- &auth_handler_factory, host_resolver.get()));
+ &auth_handler_factory, host_resolver.get(),
+ HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS));
SSLInfo null_ssl_info;
ASSERT_EQ(OK, controller->HandleAuthChallenge(headers, null_ssl_info, false,
false, net_log));
@@ -102,7 +103,7 @@ void RunSingleRoundAuthTest(
// permanent error, the HttpAuthController should disable the scheme
// used and retry the request.
TEST(HttpAuthControllerTest, PermanentErrors) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
// Run a synchronous handler that returns
// ERR_UNEXPECTED_SECURITY_LIBRARY_STATUS. We expect a return value
@@ -133,7 +134,7 @@ TEST(HttpAuthControllerTest, PermanentErrors) {
// Verify that the controller logs appropriate lifetime events.
TEST(HttpAuthControllerTest, Logging) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
BoundTestNetLog net_log;
RunSingleRoundAuthTest(RUN_HANDLER_SYNC, OK, OK, SCHEME_IS_ENABLED,
@@ -259,7 +260,8 @@ TEST(HttpAuthControllerTest, NoExplicitCredentialsAllowed) {
scoped_refptr<HttpAuthController> controller(new HttpAuthController(
HttpAuth::AUTH_SERVER, GURL("http://example.com"), &dummy_auth_cache,
- &auth_handler_factory, host_resolver.get()));
+ &auth_handler_factory, host_resolver.get(),
+ HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS));
SSLInfo null_ssl_info;
ASSERT_EQ(OK, controller->HandleAuthChallenge(headers, null_ssl_info, false,
false, dummy_log));
diff --git a/chromium/net/http/http_auth_filter.cc b/chromium/net/http/http_auth_filter.cc
index d5efb6dd634..33f0eac3409 100644
--- a/chromium/net/http/http_auth_filter.cc
+++ b/chromium/net/http/http_auth_filter.cc
@@ -8,23 +8,20 @@
namespace net {
-// Using a std::set<> has the benefit of removing duplicates automatically.
-typedef std::set<base::string16> RegistryWhitelist;
-
-// TODO(ahendrickson) -- Determine if we want separate whitelists for HTTP and
+// TODO(ahendrickson) -- Determine if we want separate allowlists for HTTP and
// HTTPS, one for both, or only an HTTP one. My understanding is that the HTTPS
// entries in the registry mean that you are only allowed to connect to the site
// via HTTPS and still be considered 'safe'.
-HttpAuthFilterWhitelist::HttpAuthFilterWhitelist(
- const std::string& server_whitelist) {
- SetWhitelist(server_whitelist);
+HttpAuthFilterAllowlist::HttpAuthFilterAllowlist(
+ const std::string& server_allowlist) {
+ SetAllowlist(server_allowlist);
}
-HttpAuthFilterWhitelist::~HttpAuthFilterWhitelist() = default;
+HttpAuthFilterAllowlist::~HttpAuthFilterAllowlist() = default;
-// Add a new domain |filter| to the whitelist, if it's not already there
-bool HttpAuthFilterWhitelist::AddFilter(const std::string& filter,
+// Add a new domain |filter| to the allowlist, if it's not already there
+bool HttpAuthFilterAllowlist::AddFilter(const std::string& filter,
HttpAuth::Target target) {
if ((target != HttpAuth::AUTH_SERVER) && (target != HttpAuth::AUTH_PROXY))
return false;
@@ -35,7 +32,7 @@ bool HttpAuthFilterWhitelist::AddFilter(const std::string& filter,
return true;
}
-bool HttpAuthFilterWhitelist::IsValid(const GURL& url,
+bool HttpAuthFilterAllowlist::IsValid(const GURL& url,
HttpAuth::Target target) const {
if ((target != HttpAuth::AUTH_SERVER) && (target != HttpAuth::AUTH_PROXY))
return false;
@@ -45,14 +42,14 @@ bool HttpAuthFilterWhitelist::IsValid(const GURL& url,
return rules_.Matches(url);
}
-void HttpAuthFilterWhitelist::SetWhitelist(
- const std::string& server_whitelist) {
+void HttpAuthFilterAllowlist::SetAllowlist(
+ const std::string& server_allowlist) {
// TODO(eroman): Is this necessary? The issue is that
- // HttpAuthFilterWhitelist is trying to use ProxyBypassRules as a generic
+ // HttpAuthFilterAllowlist is trying to use ProxyBypassRules as a generic
// URL filter. However internally it has some implicit rules for localhost
// and linklocal addresses.
rules_.ParseFromString(ProxyBypassRules::GetRulesToSubtractImplicit() + ";" +
- server_whitelist);
+ server_allowlist);
}
} // namespace net
diff --git a/chromium/net/http/http_auth_filter.h b/chromium/net/http/http_auth_filter.h
index 4ebe897d35f..45515fcd5d4 100644
--- a/chromium/net/http/http_auth_filter.h
+++ b/chromium/net/http/http_auth_filter.h
@@ -28,15 +28,15 @@ class NET_EXPORT_PRIVATE HttpAuthFilter {
virtual bool IsValid(const GURL& url, HttpAuth::Target target) const = 0;
};
-// Whitelist HTTP authentication filter.
-// Explicit whitelists of domains are set via SetWhitelist().
+// Allowlist HTTP authentication filter.
+// Explicit allowlists of domains are set via SetAllowlist().
//
-// Uses the ProxyBypassRules class to do whitelisting for servers.
+// Uses the ProxyBypassRules class to do allowlisting for servers.
// All proxies are allowed.
-class NET_EXPORT HttpAuthFilterWhitelist : public HttpAuthFilter {
+class NET_EXPORT HttpAuthFilterAllowlist : public HttpAuthFilter {
public:
- explicit HttpAuthFilterWhitelist(const std::string& server_whitelist);
- ~HttpAuthFilterWhitelist() override;
+ explicit HttpAuthFilterAllowlist(const std::string& server_allowlist);
+ ~HttpAuthFilterAllowlist() override;
// Adds an individual URL |filter| to the list, of the specified |target|.
bool AddFilter(const std::string& filter, HttpAuth::Target target);
@@ -47,15 +47,15 @@ class NET_EXPORT HttpAuthFilterWhitelist : public HttpAuthFilter {
bool IsValid(const GURL& url, HttpAuth::Target target) const override;
private:
- // Installs the whitelist.
- // |server_whitelist| is parsed by ProxyBypassRules.
- void SetWhitelist(const std::string& server_whitelist);
+ // Installs the allowlist.
+ // |server_allowlist| is parsed by ProxyBypassRules.
+ void SetAllowlist(const std::string& server_allowlist);
// We are using ProxyBypassRules because they have the functionality that we
// want, but we are not using it for proxy bypass.
ProxyBypassRules rules_;
- DISALLOW_COPY_AND_ASSIGN(HttpAuthFilterWhitelist);
+ DISALLOW_COPY_AND_ASSIGN(HttpAuthFilterAllowlist);
};
} // namespace net
diff --git a/chromium/net/http/http_auth_filter_unittest.cc b/chromium/net/http/http_auth_filter_unittest.cc
index bf7261600e3..17f93542ff7 100644
--- a/chromium/net/http/http_auth_filter_unittest.cc
+++ b/chromium/net/http/http_auth_filter_unittest.cc
@@ -15,16 +15,10 @@ namespace net {
namespace {
-static const char* const server_whitelist_array[] = {
- "google.com",
- "linkedin.com",
- "book.com",
- ".chromium.org",
- ".gag",
- "gog"
-};
+static const char* const server_allowlist_array[] = {
+ "google.com", "linkedin.com", "book.com", ".chromium.org", ".gag", "gog"};
-enum { ALL_SERVERS_MATCH = (1 << base::size(server_whitelist_array)) - 1 };
+enum { ALL_SERVERS_MATCH = (1 << base::size(server_allowlist_array)) - 1 };
struct UrlData {
GURL url;
@@ -71,7 +65,7 @@ static const UrlData urls[] = {
TEST(HttpAuthFilterTest, EmptyFilter) {
// Create an empty filter
- HttpAuthFilterWhitelist filter((std::string()));
+ HttpAuthFilterAllowlist filter((std::string()));
for (size_t i = 0; i < base::size(urls); i++) {
EXPECT_EQ(urls[i].target == HttpAuth::AUTH_PROXY,
filter.IsValid(urls[i].url, urls[i].target))
@@ -81,14 +75,14 @@ TEST(HttpAuthFilterTest, EmptyFilter) {
TEST(HttpAuthFilterTest, NonEmptyFilter) {
// Create an non-empty filter
- std::string server_whitelist_filter_string;
- for (size_t i = 0; i < base::size(server_whitelist_array); ++i) {
- if (!server_whitelist_filter_string.empty())
- server_whitelist_filter_string += ",";
- server_whitelist_filter_string += "*";
- server_whitelist_filter_string += server_whitelist_array[i];
+ std::string server_allowlist_filter_string;
+ for (size_t i = 0; i < base::size(server_allowlist_array); ++i) {
+ if (!server_allowlist_filter_string.empty())
+ server_allowlist_filter_string += ",";
+ server_allowlist_filter_string += "*";
+ server_allowlist_filter_string += server_allowlist_array[i];
}
- HttpAuthFilterWhitelist filter(server_whitelist_filter_string);
+ HttpAuthFilterAllowlist filter(server_allowlist_filter_string);
for (size_t i = 0; i < base::size(urls); i++) {
EXPECT_EQ(urls[i].matches, filter.IsValid(urls[i].url, urls[i].target))
<< " " << i << ": " << urls[i].url;
diff --git a/chromium/net/http/http_auth_gssapi_posix.cc b/chromium/net/http/http_auth_gssapi_posix.cc
index f8efa9f7a2d..ad7ecad9ac2 100644
--- a/chromium/net/http/http_auth_gssapi_posix.cc
+++ b/chromium/net/http/http_auth_gssapi_posix.cc
@@ -261,9 +261,11 @@ base::Value GetDisplayNameValue(GSSAPILibrary* gssapi_lib,
}
base::Value ContextFlagsToValue(OM_uint32 flags) {
- // TODO(asanka): This should break down known flags. At least the
- // GSS_C_DELEG_FLAG.
- return base::Value(base::StringPrintf("%08x", flags));
+ base::Value rv{base::Value::Type::DICTIONARY};
+ rv.SetStringKey("value", base::StringPrintf("0x%08x", flags));
+ rv.SetBoolKey("delegated", (flags & GSS_C_DELEG_FLAG) == GSS_C_DELEG_FLAG);
+ rv.SetBoolKey("mutual", (flags & GSS_C_MUTUAL_FLAG) == GSS_C_MUTUAL_FLAG);
+ return rv;
}
base::Value GetContextStateAsValue(GSSAPILibrary* gssapi_lib,
diff --git a/chromium/net/http/http_auth_gssapi_posix_unittest.cc b/chromium/net/http/http_auth_gssapi_posix_unittest.cc
index 7ae41f76c82..27dbfab3f6a 100644
--- a/chromium/net/http/http_auth_gssapi_posix_unittest.cc
+++ b/chromium/net/http/http_auth_gssapi_posix_unittest.cc
@@ -632,7 +632,11 @@ TEST(HttpAuthGSSAPITest, GetContextStateAsValue_ValidContext) {
"mechanism": {
"oid": "<Empty OID>"
},
- "flags": "00000000",
+ "flags": {
+ "value": "0x00000000",
+ "delegated": false,
+ "mutual": false
+ },
"open": false
}
)");
diff --git a/chromium/net/http/http_auth_handler_negotiate.cc b/chromium/net/http/http_auth_handler_negotiate.cc
index 83e88725560..c9980c1e619 100644
--- a/chromium/net/http/http_auth_handler_negotiate.cc
+++ b/chromium/net/http/http_auth_handler_negotiate.cc
@@ -191,7 +191,7 @@ bool HttpAuthHandlerNegotiate::Init(HttpAuthChallengeTokenizer* challenge,
}
// GSSAPI does not provide a way to enter username/password to
// obtain a TGT. If the default credentials are not allowed for
- // a particular site (based on whitelist), fall back to a
+ // a particular site (based on allowlist), fall back to a
// different scheme.
if (!AllowsDefaultCredentials())
return false;
diff --git a/chromium/net/http/http_auth_handler_negotiate_unittest.cc b/chromium/net/http/http_auth_handler_negotiate_unittest.cc
index e4111c8acfa..52011cd0ec0 100644
--- a/chromium/net/http/http_auth_handler_negotiate_unittest.cc
+++ b/chromium/net/http/http_auth_handler_negotiate_unittest.cc
@@ -21,7 +21,7 @@
#include "net/net_buildflags.h"
#include "net/ssl/ssl_info.h"
#include "net/test/gtest_util.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
@@ -48,7 +48,7 @@ namespace net {
constexpr char kFakeToken[] = "FakeToken";
class HttpAuthHandlerNegotiateTest : public PlatformTest,
- public WithScopedTaskEnvironment {
+ public WithTaskEnvironment {
public:
void SetUp() override {
auth_library_ = new MockAuthLibrary();
diff --git a/chromium/net/http/http_auth_handler_unittest.cc b/chromium/net/http/http_auth_handler_unittest.cc
index bb25c16f103..aeca24a1f1d 100644
--- a/chromium/net/http/http_auth_handler_unittest.cc
+++ b/chromium/net/http/http_auth_handler_unittest.cc
@@ -6,7 +6,7 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/task_environment.h"
#include "net/base/net_errors.h"
#include "net/base/test_completion_callback.h"
#include "net/http/http_auth_challenge_tokenizer.h"
@@ -22,7 +22,7 @@
namespace net {
TEST(HttpAuthHandlerTest, NetLog) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
GURL origin("http://www.example.com");
std::string challenge = "Mock asdf";
diff --git a/chromium/net/http/http_auth_preferences.cc b/chromium/net/http/http_auth_preferences.cc
index 0672f2c7bd0..15ab440c0df 100644
--- a/chromium/net/http/http_auth_preferences.cc
+++ b/chromium/net/http/http_auth_preferences.cc
@@ -63,20 +63,20 @@ DelegationType HttpAuthPreferences::GetDelegationType(
return DelegationType::kUnconstrained;
}
-void HttpAuthPreferences::SetServerWhitelist(
- const std::string& server_whitelist) {
- std::unique_ptr<HttpAuthFilter> whitelist;
- if (!server_whitelist.empty())
- whitelist = std::make_unique<HttpAuthFilterWhitelist>(server_whitelist);
- security_manager_->SetDefaultWhitelist(std::move(whitelist));
+void HttpAuthPreferences::SetServerAllowlist(
+ const std::string& server_allowlist) {
+ std::unique_ptr<HttpAuthFilter> allowlist;
+ if (!server_allowlist.empty())
+ allowlist = std::make_unique<HttpAuthFilterAllowlist>(server_allowlist);
+ security_manager_->SetDefaultAllowlist(std::move(allowlist));
}
-void HttpAuthPreferences::SetDelegateWhitelist(
- const std::string& delegate_whitelist) {
- std::unique_ptr<HttpAuthFilter> whitelist;
- if (!delegate_whitelist.empty())
- whitelist = std::make_unique<HttpAuthFilterWhitelist>(delegate_whitelist);
- security_manager_->SetDelegateWhitelist(std::move(whitelist));
+void HttpAuthPreferences::SetDelegateAllowlist(
+ const std::string& delegate_allowlist) {
+ std::unique_ptr<HttpAuthFilter> allowlist;
+ if (!delegate_allowlist.empty())
+ allowlist = std::make_unique<HttpAuthFilterAllowlist>(delegate_allowlist);
+ security_manager_->SetDelegateAllowlist(std::move(allowlist));
}
} // namespace net
diff --git a/chromium/net/http/http_auth_preferences.h b/chromium/net/http/http_auth_preferences.h
index 06a30e61929..8045bdd6f81 100644
--- a/chromium/net/http/http_auth_preferences.h
+++ b/chromium/net/http/http_auth_preferences.h
@@ -24,6 +24,13 @@ class URLSecurityManager;
// them accessible from the IO thread.
class NET_EXPORT HttpAuthPreferences {
public:
+ // |DefaultCredentials| influences the behavior of codepaths that use
+ // IdentitySource::IDENT_SRC_DEFAULT_CREDENTIALS in |HttpAuthController|
+ enum DefaultCredentials {
+ DISALLOW_DEFAULT_CREDENTIALS = 0,
+ ALLOW_DEFAULT_CREDENTIALS = 1,
+ };
+
HttpAuthPreferences();
virtual ~HttpAuthPreferences();
@@ -68,9 +75,9 @@ class NET_EXPORT HttpAuthPreferences {
}
#endif
- void SetServerWhitelist(const std::string& server_whitelist);
+ void SetServerAllowlist(const std::string& server_allowlist);
- void SetDelegateWhitelist(const std::string& delegate_whitelist);
+ void SetDelegateAllowlist(const std::string& delegate_allowlist);
#if defined(OS_ANDROID)
void set_auth_android_negotiate_account_type(
diff --git a/chromium/net/http/http_auth_preferences_unittest.cc b/chromium/net/http/http_auth_preferences_unittest.cc
index 9395212632e..7418b132d65 100644
--- a/chromium/net/http/http_auth_preferences_unittest.cc
+++ b/chromium/net/http/http_auth_preferences_unittest.cc
@@ -59,11 +59,11 @@ TEST(HttpAuthPreferencesTest, AllowGssapiLibraryLoad) {
}
#endif
-TEST(HttpAuthPreferencesTest, AuthServerWhitelist) {
+TEST(HttpAuthPreferencesTest, AuthServerAllowlist) {
HttpAuthPreferences http_auth_preferences;
// Check initial value
EXPECT_FALSE(http_auth_preferences.CanUseDefaultCredentials(GURL("abc")));
- http_auth_preferences.SetServerWhitelist("*");
+ http_auth_preferences.SetServerAllowlist("*");
EXPECT_TRUE(http_auth_preferences.CanUseDefaultCredentials(GURL("abc")));
}
@@ -74,7 +74,7 @@ TEST(HttpAuthPreferencesTest, DelegationType) {
EXPECT_EQ(DelegationType::kNone,
http_auth_preferences.GetDelegationType(GURL("abc")));
- http_auth_preferences.SetDelegateWhitelist("*");
+ http_auth_preferences.SetDelegateAllowlist("*");
EXPECT_EQ(DelegationType::kUnconstrained,
http_auth_preferences.GetDelegationType(GURL("abc")));
@@ -82,7 +82,7 @@ TEST(HttpAuthPreferencesTest, DelegationType) {
EXPECT_EQ(DelegationType::kByKdcPolicy,
http_auth_preferences.GetDelegationType(GURL("abc")));
- http_auth_preferences.SetDelegateWhitelist("");
+ http_auth_preferences.SetDelegateAllowlist("");
EXPECT_EQ(DelegationType::kNone,
http_auth_preferences.GetDelegationType(GURL("abc")));
}
diff --git a/chromium/net/http/http_auth_sspi_win.cc b/chromium/net/http/http_auth_sspi_win.cc
index 8bc2665f9d8..754d4d954bd 100644
--- a/chromium/net/http/http_auth_sspi_win.cc
+++ b/chromium/net/http/http_auth_sspi_win.cc
@@ -9,11 +9,18 @@
#include "base/base64.h"
#include "base/logging.h"
+#include "base/strings/string_piece.h"
#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
#include "net/base/net_errors.h"
#include "net/http/http_auth.h"
#include "net/http/http_auth_multi_round_parse.h"
+#include "net/log/net_log.h"
+#include "net/log/net_log_event_type.h"
+#include "net/log/net_log_values.h"
+#include "net/log/net_log_with_source.h"
namespace net {
@@ -21,18 +28,95 @@ using DelegationType = HttpAuth::DelegationType;
namespace {
-int MapAcquireCredentialsStatusToError(SECURITY_STATUS status,
- const SEC_WCHAR* package) {
- VLOG(1) << "AcquireCredentialsHandle returned 0x" << std::hex << status;
+base::Value SecurityStatusToValue(Error mapped_error, SECURITY_STATUS status) {
+ base::Value params{base::Value::Type::DICTIONARY};
+ params.SetIntKey("net_error", mapped_error);
+ params.SetIntKey("security_status", status);
+ return params;
+}
+
+base::Value AcquireCredentialsHandleParams(const base::string16* domain,
+ const base::string16* user,
+ Error result,
+ SECURITY_STATUS status) {
+ base::Value params{base::Value::Type::DICTIONARY};
+ if (domain && user) {
+ params.SetStringKey("domain", base::UTF16ToUTF8(*domain));
+ params.SetStringKey("user", base::UTF16ToUTF8(*user));
+ }
+ params.SetKey("status", SecurityStatusToValue(result, status));
+ return params;
+}
+
+base::Value ContextFlagsToValue(DWORD flags) {
+ base::Value params{base::Value::Type::DICTIONARY};
+ params.SetStringKey("value", base::StringPrintf("0x%08lx", flags));
+ params.SetBoolKey("delegated",
+ (flags & ISC_RET_DELEGATE) == ISC_RET_DELEGATE);
+ params.SetBoolKey("mutual",
+ (flags & ISC_RET_MUTUAL_AUTH) == ISC_RET_MUTUAL_AUTH);
+ return params;
+}
+
+base::Value ContextAttributesToValue(SSPILibrary* library,
+ PCtxtHandle handle,
+ DWORD attributes) {
+ base::Value params{base::Value::Type::DICTIONARY};
+
+ SecPkgContext_NativeNames native_names = {0};
+ auto qc_result = library->QueryContextAttributesEx(
+ handle, SECPKG_ATTR_NATIVE_NAMES, &native_names, sizeof(native_names));
+ if (qc_result == SEC_E_OK && native_names.sClientName &&
+ native_names.sServerName) {
+ params.SetStringKey("source", base::as_u16cstr(native_names.sClientName));
+ params.SetStringKey("target", base::as_u16cstr(native_names.sServerName));
+ }
+
+ SecPkgContext_NegotiationInfo negotiation_info = {0};
+ qc_result = library->QueryContextAttributesEx(
+ handle, SECPKG_ATTR_NEGOTIATION_INFO, &negotiation_info,
+ sizeof(negotiation_info));
+ if (qc_result == SEC_E_OK && negotiation_info.PackageInfo &&
+ negotiation_info.PackageInfo->Name) {
+ params.SetStringKey("mechanism",
+ base::as_u16cstr(negotiation_info.PackageInfo->Name));
+ params.SetBoolKey("open", negotiation_info.NegotiationState !=
+ SECPKG_NEGOTIATION_COMPLETE);
+ }
+
+ SecPkgContext_Authority authority = {0};
+ qc_result = library->QueryContextAttributesEx(handle, SECPKG_ATTR_AUTHORITY,
+ &authority, sizeof(authority));
+ if (qc_result == SEC_E_OK && authority.sAuthorityName) {
+ params.SetStringKey("authority",
+ base::as_u16cstr(authority.sAuthorityName));
+ }
+
+ params.SetKey("flags", ContextFlagsToValue(attributes));
+ return params;
+}
+
+base::Value InitializeSecurityContextParams(SSPILibrary* library,
+ PCtxtHandle handle,
+ Error result,
+ SECURITY_STATUS status,
+ DWORD attributes) {
+ base::Value params{base::Value::Type::DICTIONARY};
+ params.SetKey("status", SecurityStatusToValue(result, status));
+ if (result == OK)
+ params.SetKey("context",
+ ContextAttributesToValue(library, handle, attributes));
+ return params;
+}
+
+Error MapAcquireCredentialsStatusToError(SECURITY_STATUS status,
+ const SEC_WCHAR* package) {
switch (status) {
case SEC_E_OK:
return OK;
case SEC_E_INSUFFICIENT_MEMORY:
return ERR_OUT_OF_MEMORY;
case SEC_E_INTERNAL_ERROR:
- LOG(WARNING)
- << "AcquireCredentialsHandle returned unexpected status 0x"
- << std::hex << status;
return ERR_UNEXPECTED_SECURITY_LIBRARY_STATUS;
case SEC_E_NO_CREDENTIALS:
case SEC_E_NOT_OWNER:
@@ -42,19 +126,17 @@ int MapAcquireCredentialsStatusToError(SECURITY_STATUS status,
// This indicates that the SSPI configuration does not match expectations
return ERR_UNSUPPORTED_AUTH_SCHEME;
default:
- LOG(WARNING)
- << "AcquireCredentialsHandle returned undocumented status 0x"
- << std::hex << status;
return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS;
}
}
-int AcquireExplicitCredentials(SSPILibrary* library,
- const SEC_WCHAR* package,
- const base::string16& domain,
- const base::string16& user,
- const base::string16& password,
- CredHandle* cred) {
+Error AcquireExplicitCredentials(SSPILibrary* library,
+ const SEC_WCHAR* package,
+ const base::string16& domain,
+ const base::string16& user,
+ const base::string16& password,
+ const NetLogWithSource& net_log,
+ CredHandle* cred) {
SEC_WINNT_AUTH_IDENTITY identity;
identity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
identity.User = reinterpret_cast<unsigned short*>(
@@ -69,6 +151,8 @@ int AcquireExplicitCredentials(SSPILibrary* library,
TimeStamp expiry;
+ net_log.BeginEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS);
+
// Pass the username/password to get the credentials handle.
SECURITY_STATUS status = library->AcquireCredentialsHandle(
nullptr, // pszPrincipal
@@ -81,12 +165,19 @@ int AcquireExplicitCredentials(SSPILibrary* library,
cred, // phCredential
&expiry); // ptsExpiry
- return MapAcquireCredentialsStatusToError(status, package);
+ auto result = MapAcquireCredentialsStatusToError(status, package);
+ net_log.EndEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS, [&] {
+ return AcquireCredentialsHandleParams(&domain, &user, result, status);
+ });
+ return result;
}
-int AcquireDefaultCredentials(SSPILibrary* library, const SEC_WCHAR* package,
- CredHandle* cred) {
+Error AcquireDefaultCredentials(SSPILibrary* library,
+ const SEC_WCHAR* package,
+ const NetLogWithSource& net_log,
+ CredHandle* cred) {
TimeStamp expiry;
+ net_log.BeginEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS);
// Pass the username/password to get the credentials handle.
// Note: Since the 5th argument is nullptr, it uses the default
@@ -103,11 +194,14 @@ int AcquireDefaultCredentials(SSPILibrary* library, const SEC_WCHAR* package,
cred, // phCredential
&expiry); // ptsExpiry
- return MapAcquireCredentialsStatusToError(status, package);
+ auto result = MapAcquireCredentialsStatusToError(status, package);
+ net_log.EndEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS, [&] {
+ return AcquireCredentialsHandleParams(nullptr, nullptr, result, status);
+ });
+ return result;
}
-int MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) {
- VLOG(1) << "InitializeSecurityContext returned 0x" << std::hex << status;
+Error MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) {
switch (status) {
case SEC_E_OK:
case SEC_I_CONTINUE_NEEDED:
@@ -120,9 +214,6 @@ int MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) {
// These are return codes reported by InitializeSecurityContext
// but not expected by Chrome (for example, INCOMPLETE_CREDENTIALS
// and INCOMPLETE_MESSAGE are intended for schannel).
- LOG(WARNING)
- << "InitializeSecurityContext returned unexpected status 0x"
- << std::hex << status;
return ERR_UNEXPECTED_SECURITY_LIBRARY_STATUS;
case SEC_E_INSUFFICIENT_MEMORY:
return ERR_OUT_OF_MEMORY;
@@ -143,15 +234,11 @@ int MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) {
case SEC_E_TARGET_UNKNOWN:
return ERR_MISCONFIGURED_AUTH_ENVIRONMENT;
default:
- LOG(WARNING)
- << "InitializeSecurityContext returned undocumented status 0x"
- << std::hex << status;
return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS;
}
}
-int MapQuerySecurityPackageInfoStatusToError(SECURITY_STATUS status) {
- VLOG(1) << "QuerySecurityPackageInfo returned 0x" << std::hex << status;
+Error MapQuerySecurityPackageInfoStatusToError(SECURITY_STATUS status) {
switch (status) {
case SEC_E_OK:
return OK;
@@ -160,15 +247,11 @@ int MapQuerySecurityPackageInfoStatusToError(SECURITY_STATUS status) {
// during testing.
return ERR_UNSUPPORTED_AUTH_SCHEME;
default:
- LOG(WARNING)
- << "QuerySecurityPackageInfo returned undocumented status 0x"
- << std::hex << status;
return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS;
}
}
-int MapFreeContextBufferStatusToError(SECURITY_STATUS status) {
- VLOG(1) << "FreeContextBuffer returned 0x" << std::hex << status;
+Error MapFreeContextBufferStatusToError(SECURITY_STATUS status) {
switch (status) {
case SEC_E_OK:
return OK;
@@ -178,9 +261,6 @@ int MapFreeContextBufferStatusToError(SECURITY_STATUS status) {
// only mentions that a non-zero (or non-SEC_E_OK) value is returned
// if the function fails, and does not indicate what the failure
// conditions are.
- LOG(WARNING)
- << "FreeContextBuffer returned undocumented status 0x"
- << std::hex << status;
return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS;
}
}
@@ -197,9 +277,9 @@ SECURITY_STATUS SSPILibraryDefault::AcquireCredentialsHandle(
void* pvGetKeyArgument,
PCredHandle phCredential,
PTimeStamp ptsExpiry) {
- return ::AcquireCredentialsHandle(pszPrincipal, pszPackage, fCredentialUse,
- pvLogonId, pvAuthData, pGetKeyFn,
- pvGetKeyArgument, phCredential, ptsExpiry);
+ return ::AcquireCredentialsHandleW(pszPrincipal, pszPackage, fCredentialUse,
+ pvLogonId, pvAuthData, pGetKeyFn,
+ pvGetKeyArgument, phCredential, ptsExpiry);
}
SECURITY_STATUS SSPILibraryDefault::InitializeSecurityContext(
@@ -215,16 +295,28 @@ SECURITY_STATUS SSPILibraryDefault::InitializeSecurityContext(
PSecBufferDesc pOutput,
unsigned long* contextAttr,
PTimeStamp ptsExpiry) {
- return ::InitializeSecurityContext(phCredential, phContext, pszTargetName,
- fContextReq, Reserved1, TargetDataRep,
- pInput, Reserved2, phNewContext, pOutput,
- contextAttr, ptsExpiry);
+ return ::InitializeSecurityContextW(phCredential, phContext, pszTargetName,
+ fContextReq, Reserved1, TargetDataRep,
+ pInput, Reserved2, phNewContext, pOutput,
+ contextAttr, ptsExpiry);
+}
+
+SECURITY_STATUS SSPILibraryDefault::QueryContextAttributesEx(
+ PCtxtHandle phContext,
+ ULONG ulAttribute,
+ PVOID pBuffer,
+ ULONG cbBuffer) {
+ // TODO(https://crbug.com/992779): QueryContextAttributesExW is not included
+ // in Secur32.Lib in 10.0.18362.0 SDK. This symbol requires switching to using
+ // Windows SDK API sets in mincore.lib or OneCore.Lib. Switch to using
+ // QueryContextAttributesEx when the switch is made.
+ return ::QueryContextAttributes(phContext, ulAttribute, pBuffer);
}
SECURITY_STATUS SSPILibraryDefault::QuerySecurityPackageInfo(
LPWSTR pszPackageName,
PSecPkgInfoW* pkgInfo) {
- return ::QuerySecurityPackageInfo(pszPackageName, pkgInfo);
+ return ::QuerySecurityPackageInfoW(pszPackageName, pkgInfo);
}
SECURITY_STATUS SSPILibraryDefault::FreeCredentialsHandle(
@@ -300,11 +392,14 @@ int HttpAuthSSPI::GenerateAuthToken(const AuthCredentials* credentials,
const std::string& spn,
const std::string& channel_bindings,
std::string* auth_token,
- const NetLogWithSource&,
+ const NetLogWithSource& net_log,
CompletionOnceCallback /*callback*/) {
// Initial challenge.
if (!SecIsValidHandle(&cred_)) {
- int rv = OnFirstRound(credentials);
+ // ParseChallenge fails early if a non-empty token is received on the first
+ // challenge.
+ DCHECK(decoded_server_auth_token_.empty());
+ int rv = OnFirstRound(credentials, net_log);
if (rv != OK)
return rv;
}
@@ -315,7 +410,7 @@ int HttpAuthSSPI::GenerateAuthToken(const AuthCredentials* credentials,
int rv = GetNextSecurityToken(
spn, channel_bindings,
static_cast<void*>(const_cast<char*>(decoded_server_auth_token_.c_str())),
- decoded_server_auth_token_.length(), &out_buf, &out_buf_len);
+ decoded_server_auth_token_.length(), net_log, &out_buf, &out_buf_len);
if (rv != OK)
return rv;
@@ -329,19 +424,21 @@ int HttpAuthSSPI::GenerateAuthToken(const AuthCredentials* credentials,
return OK;
}
-int HttpAuthSSPI::OnFirstRound(const AuthCredentials* credentials) {
+int HttpAuthSSPI::OnFirstRound(const AuthCredentials* credentials,
+ const NetLogWithSource& net_log) {
DCHECK(!SecIsValidHandle(&cred_));
int rv = OK;
if (credentials) {
base::string16 domain;
base::string16 user;
SplitDomainAndUser(credentials->username(), &domain, &user);
- rv = AcquireExplicitCredentials(library_, security_package_, domain,
- user, credentials->password(), &cred_);
+ rv = AcquireExplicitCredentials(library_, security_package_, domain, user,
+ credentials->password(), net_log, &cred_);
if (rv != OK)
return rv;
} else {
- rv = AcquireDefaultCredentials(library_, security_package_, &cred_);
+ rv =
+ AcquireDefaultCredentials(library_, security_package_, net_log, &cred_);
if (rv != OK)
return rv;
}
@@ -353,6 +450,7 @@ int HttpAuthSSPI::GetNextSecurityToken(const std::string& spn,
const std::string& channel_bindings,
const void* in_token,
int in_token_len,
+ const NetLogWithSource& net_log,
void** out_token,
int* out_token_len) {
CtxtHandle* ctxt_ptr = nullptr;
@@ -422,8 +520,10 @@ int HttpAuthSSPI::GetNextSecurityToken(const std::string& spn,
if (delegation_type_ != DelegationType::kNone)
context_flags |= (ISC_REQ_DELEGATE | ISC_REQ_MUTUAL_AUTH);
+ net_log.BeginEvent(NetLogEventType::AUTH_LIBRARY_INIT_SEC_CTX);
+
// This returns a token that is passed to the remote server.
- DWORD context_attribute;
+ DWORD context_attributes = 0;
base::string16 spn16 = base::ASCIIToUTF16(spn);
SECURITY_STATUS status = library_->InitializeSecurityContext(
&cred_, // phCredential
@@ -436,9 +536,14 @@ int HttpAuthSSPI::GetNextSecurityToken(const std::string& spn,
0, // Reserved2 (must be 0)
&ctxt_, // phNewContext
&out_buffer_desc, // pOutput
- &context_attribute, // pfContextAttr
+ &context_attributes, // pfContextAttr
nullptr); // ptsExpiry
- int rv = MapInitializeSecurityContextStatusToError(status);
+ Error rv = MapInitializeSecurityContextStatusToError(status);
+ net_log.EndEvent(NetLogEventType::AUTH_LIBRARY_INIT_SEC_CTX, [&] {
+ return InitializeSecurityContextParams(library_, &ctxt_, rv, status,
+ context_attributes);
+ });
+
if (rv != OK) {
ResetSecurityContext();
free(out_buffer.pvBuffer);
diff --git a/chromium/net/http/http_auth_sspi_win.h b/chromium/net/http/http_auth_sspi_win.h
index 408ac5931d7..798673e7f54 100644
--- a/chromium/net/http/http_auth_sspi_win.h
+++ b/chromium/net/http/http_auth_sspi_win.h
@@ -59,6 +59,11 @@ class SSPILibrary {
unsigned long* contextAttr,
PTimeStamp ptsExpiry) = 0;
+ virtual SECURITY_STATUS QueryContextAttributesEx(PCtxtHandle phContext,
+ ULONG ulAttribute,
+ PVOID pBuffer,
+ ULONG cbBuffer) = 0;
+
virtual SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName,
PSecPkgInfoW *pkgInfo) = 0;
@@ -97,6 +102,11 @@ class SSPILibraryDefault : public SSPILibrary {
unsigned long* contextAttr,
PTimeStamp ptsExpiry) override;
+ SECURITY_STATUS QueryContextAttributesEx(PCtxtHandle phContext,
+ ULONG ulAttribute,
+ PVOID pBuffer,
+ ULONG cbBuffer) override;
+
SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName,
PSecPkgInfoW* pkgInfo) override;
@@ -130,12 +140,14 @@ class NET_EXPORT_PRIVATE HttpAuthSSPI : public HttpNegotiateAuthSystem {
void SetDelegation(HttpAuth::DelegationType delegation_type) override;
private:
- int OnFirstRound(const AuthCredentials* credentials);
+ int OnFirstRound(const AuthCredentials* credentials,
+ const NetLogWithSource& net_log);
int GetNextSecurityToken(const std::string& spn,
const std::string& channing_bindings,
const void* in_token,
int in_token_len,
+ const NetLogWithSource& net_log,
void** out_token,
int* out_token_len);
diff --git a/chromium/net/http/http_auth_sspi_win_unittest.cc b/chromium/net/http/http_auth_sspi_win_unittest.cc
index d9031fa7e28..3856bb85bbc 100644
--- a/chromium/net/http/http_auth_sspi_win_unittest.cc
+++ b/chromium/net/http/http_auth_sspi_win_unittest.cc
@@ -4,11 +4,18 @@
#include "net/http/http_auth_sspi_win.h"
+#include <vector>
+
+#include "base/base64.h"
#include "base/bind.h"
+#include "base/json/json_reader.h"
#include "net/base/net_errors.h"
#include "net/http/http_auth_challenge_tokenizer.h"
#include "net/http/mock_sspi_library_win.h"
+#include "net/log/net_log_entry.h"
+#include "net/log/net_log_event_type.h"
#include "net/log/net_log_with_source.h"
+#include "net/log/test_net_log.h"
#include "net/test/gtest_util.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -171,4 +178,135 @@ TEST(HttpAuthSSPITest, ParseChallenge_NonBase64EncodedToken) {
auth_sspi.ParseChallenge(&second_challenge));
}
+// Runs through a full handshake against the MockSSPILibrary.
+TEST(HttpAuthSSPITest, GenerateAuthToken_FullHandshake_AmbientCreds) {
+ MockSSPILibrary mock_library;
+ HttpAuthSSPI auth_sspi(&mock_library, "Negotiate", NEGOSSP_NAME,
+ kMaxTokenLength);
+ std::string first_challenge_text = "Negotiate";
+ HttpAuthChallengeTokenizer first_challenge(first_challenge_text.begin(),
+ first_challenge_text.end());
+ ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT,
+ auth_sspi.ParseChallenge(&first_challenge));
+
+ std::string auth_token;
+ ASSERT_EQ(OK,
+ auth_sspi.GenerateAuthToken(
+ nullptr, "HTTP/intranet.google.com", std::string(), &auth_token,
+ NetLogWithSource(), base::BindOnce(&UnexpectedCallback)));
+ EXPECT_EQ("Negotiate ", auth_token.substr(0, 10));
+
+ std::string decoded_token;
+ ASSERT_TRUE(base::Base64Decode(auth_token.substr(10), &decoded_token));
+
+ // This token string indicates that HttpAuthSSPI correctly established the
+ // security context using the default credentials.
+ EXPECT_EQ("<Default>'s token #1 for HTTP/intranet.google.com", decoded_token);
+
+ // The server token is arbitrary.
+ std::string second_challenge_text = "Negotiate UmVzcG9uc2U=";
+ HttpAuthChallengeTokenizer second_challenge(second_challenge_text.begin(),
+ second_challenge_text.end());
+ ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT,
+ auth_sspi.ParseChallenge(&second_challenge));
+
+ ASSERT_EQ(OK,
+ auth_sspi.GenerateAuthToken(
+ nullptr, "HTTP/intranet.google.com", std::string(), &auth_token,
+ NetLogWithSource(), base::BindOnce(&UnexpectedCallback)));
+ ASSERT_EQ("Negotiate ", auth_token.substr(0, 10));
+ ASSERT_TRUE(base::Base64Decode(auth_token.substr(10), &decoded_token));
+ EXPECT_EQ("<Default>'s token #2 for HTTP/intranet.google.com", decoded_token);
+}
+
+// Test NetLogs produced while going through a full Negotiate handshake.
+TEST(HttpAuthSSPITest, GenerateAuthToken_FullHandshake_AmbientCreds_Logging) {
+ BoundTestNetLog net_log;
+ MockSSPILibrary mock_library;
+ HttpAuthSSPI auth_sspi(&mock_library, "Negotiate", NEGOSSP_NAME,
+ kMaxTokenLength);
+ std::string first_challenge_text = "Negotiate";
+ HttpAuthChallengeTokenizer first_challenge(first_challenge_text.begin(),
+ first_challenge_text.end());
+ ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT,
+ auth_sspi.ParseChallenge(&first_challenge));
+
+ std::string auth_token;
+ ASSERT_EQ(OK,
+ auth_sspi.GenerateAuthToken(
+ nullptr, "HTTP/intranet.google.com", std::string(), &auth_token,
+ net_log.bound(), base::BindOnce(&UnexpectedCallback)));
+
+ // The token is the ASCII string "Response" in base64.
+ std::string second_challenge_text = "Negotiate UmVzcG9uc2U=";
+ HttpAuthChallengeTokenizer second_challenge(second_challenge_text.begin(),
+ second_challenge_text.end());
+ ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT,
+ auth_sspi.ParseChallenge(&second_challenge));
+ ASSERT_EQ(OK,
+ auth_sspi.GenerateAuthToken(
+ nullptr, "HTTP/intranet.google.com", std::string(), &auth_token,
+ net_log.bound(), base::BindOnce(&UnexpectedCallback)));
+
+ auto entries =
+ net_log.GetEntriesWithType(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS);
+ ASSERT_EQ(2u, entries.size()); // BEGIN and END.
+ auto expected = base::JSONReader::Read(R"(
+ {
+ "status": {
+ "net_error": 0,
+ "security_status": 0
+ }
+ }
+ )");
+ EXPECT_EQ(expected, entries[1].params);
+
+ entries =
+ net_log.GetEntriesWithType(NetLogEventType::AUTH_LIBRARY_INIT_SEC_CTX);
+ ASSERT_EQ(4u, entries.size());
+
+ expected = base::JSONReader::Read(R"(
+ {
+ "context": {
+ "authority": "Dodgy Server",
+ "flags": {
+ "delegated": false,
+ "mutual": false,
+ "value": "0x00000000"
+ },
+ "mechanism": "Itsa me Kerberos!!",
+ "open": true,
+ "source": "\u003CDefault>",
+ "target": "HTTP/intranet.google.com"
+ },
+ "status": {
+ "net_error": 0,
+ "security_status": 0
+ }
+ }
+ )");
+ EXPECT_EQ(expected, entries[1].params);
+
+ expected = base::JSONReader::Read(R"(
+ {
+ "context": {
+ "authority": "Dodgy Server",
+ "flags": {
+ "delegated": false,
+ "mutual": false,
+ "value": "0x00000000"
+ },
+ "mechanism": "Itsa me Kerberos!!",
+ "open": false,
+ "source": "\u003CDefault>",
+ "target": "HTTP/intranet.google.com"
+ },
+ "status": {
+ "net_error": 0,
+ "security_status": 0
+ }
+ }
+ )");
+ EXPECT_EQ(expected, entries[3].params);
+}
} // namespace net
diff --git a/chromium/net/http/http_cache.cc b/chromium/net/http/http_cache.cc
index b6803dc9c7c..b46df639e30 100644
--- a/chromium/net/http/http_cache.cc
+++ b/chromium/net/http/http_cache.cc
@@ -140,7 +140,8 @@ bool HttpCache::ActiveEntry::TransactionInReaders(
// This structure keeps track of work items that are attempting to create or
// open cache entries or the backend itself.
struct HttpCache::PendingOp {
- PendingOp() : callback_will_delete(false) {}
+ PendingOp()
+ : entry(nullptr), entry_opened(false), callback_will_delete(false) {}
~PendingOp() = default;
// Returns the estimate of dynamically allocated memory in bytes.
@@ -151,7 +152,8 @@ struct HttpCache::PendingOp {
base::trace_event::EstimateMemoryUsage(pending_queue);
}
- disk_cache::EntryWithOpened disk_entry_struct;
+ disk_cache::Entry* entry;
+ bool entry_opened; // rather than created.
std::unique_ptr<disk_cache::Backend> backend;
std::unique_ptr<WorkItem> writer;
@@ -692,8 +694,8 @@ HttpCache::PendingOp* HttpCache::GetPendingOp(const std::string& key) {
void HttpCache::DeletePendingOp(PendingOp* pending_op) {
std::string key;
- if (pending_op->disk_entry_struct.entry)
- key = pending_op->disk_entry_struct.entry->GetKey();
+ if (pending_op->entry)
+ key = pending_op->entry->GetKey();
if (!key.empty()) {
auto it = pending_ops_.find(key);
@@ -723,18 +725,19 @@ int HttpCache::OpenOrCreateEntry(const std::string& key,
if (rv != OK)
return rv;
- rv = disk_cache_->OpenOrCreateEntry(
- key, transaction->priority(), &(pending_op->disk_entry_struct),
- base::BindOnce(&HttpCache::OnPendingOpComplete, GetWeakPtr(),
+ disk_cache::EntryResult entry_result = disk_cache_->OpenOrCreateEntry(
+ key, transaction->priority(),
+ base::BindOnce(&HttpCache::OnPendingCreationOpComplete, GetWeakPtr(),
pending_op));
-
+ rv = entry_result.net_error();
if (rv == ERR_IO_PENDING) {
pending_op->callback_will_delete = true;
- return rv;
+ return ERR_IO_PENDING;
}
pending_op->writer->ClearTransaction();
- OnPendingOpComplete(GetWeakPtr(), pending_op, rv);
+ OnPendingCreationOpComplete(GetWeakPtr(), pending_op,
+ std::move(entry_result));
return rv;
}
@@ -748,21 +751,19 @@ int HttpCache::OpenEntry(const std::string& key,
if (rv != OK)
return rv;
- rv = disk_cache_->OpenEntry(key, transaction->priority(),
- &(pending_op->disk_entry_struct.entry),
- base::BindOnce(&HttpCache::OnPendingOpComplete,
- GetWeakPtr(), pending_op));
- // Manually set the opened flag as disk_cache::OpenEntry() doesn't use
- // EntryWithOpened struct.
- pending_op->disk_entry_struct.opened = true;
-
+ disk_cache::EntryResult entry_result = disk_cache_->OpenEntry(
+ key, transaction->priority(),
+ base::BindOnce(&HttpCache::OnPendingCreationOpComplete, GetWeakPtr(),
+ pending_op));
+ rv = entry_result.net_error();
if (rv == ERR_IO_PENDING) {
pending_op->callback_will_delete = true;
- return rv;
+ return ERR_IO_PENDING;
}
pending_op->writer->ClearTransaction();
- OnPendingOpComplete(GetWeakPtr(), pending_op, rv);
+ OnPendingCreationOpComplete(GetWeakPtr(), pending_op,
+ std::move(entry_result));
return rv;
}
@@ -779,21 +780,19 @@ int HttpCache::CreateEntry(const std::string& key,
if (rv != OK)
return rv;
- rv = disk_cache_->CreateEntry(key, transaction->priority(),
- &(pending_op->disk_entry_struct.entry),
- base::BindOnce(&HttpCache::OnPendingOpComplete,
- GetWeakPtr(), pending_op));
- // Manually set the opened flag as disk_cache::CreateEntry() doesn't use
- // EntryWithOpened struct.
- pending_op->disk_entry_struct.opened = false;
-
+ disk_cache::EntryResult entry_result = disk_cache_->CreateEntry(
+ key, transaction->priority(),
+ base::BindOnce(&HttpCache::OnPendingCreationOpComplete, GetWeakPtr(),
+ pending_op));
+ rv = entry_result.net_error();
if (rv == ERR_IO_PENDING) {
pending_op->callback_will_delete = true;
- return rv;
+ return ERR_IO_PENDING;
}
pending_op->writer->ClearTransaction();
- OnPendingOpComplete(GetWeakPtr(), pending_op, rv);
+ OnPendingCreationOpComplete(GetWeakPtr(), pending_op,
+ std::move(entry_result));
return rv;
}
@@ -1317,16 +1316,15 @@ void HttpCache::OnIOComplete(int result, PendingOp* pending_op) {
// Anything after a Doom has to be restarted.
try_restart_requests = true;
} else if (item->IsValid()) {
- key = pending_op->disk_entry_struct.entry->GetKey();
- entry = ActivateEntry(pending_op->disk_entry_struct.entry,
- pending_op->disk_entry_struct.opened);
+ key = pending_op->entry->GetKey();
+ entry = ActivateEntry(pending_op->entry, pending_op->entry_opened);
} else {
// The writer transaction is gone.
- if (!pending_op->disk_entry_struct.opened)
- pending_op->disk_entry_struct.entry->Doom();
+ if (!pending_op->entry_opened)
+ pending_op->entry->Doom();
- pending_op->disk_entry_struct.entry->Close();
- pending_op->disk_entry_struct.entry = nullptr;
+ pending_op->entry->Close();
+ pending_op->entry = nullptr;
try_restart_requests = true;
}
}
@@ -1417,6 +1415,26 @@ void HttpCache::OnPendingOpComplete(const base::WeakPtr<HttpCache>& cache,
}
}
+// static
+void HttpCache::OnPendingCreationOpComplete(
+ const base::WeakPtr<HttpCache>& cache,
+ PendingOp* pending_op,
+ disk_cache::EntryResult result) {
+ if (!cache.get()) {
+ // The callback was cancelled so we should delete the pending_op that
+ // was used with this callback. If |result| contains a fresh entry
+ // it will close it automatically, since we don't release it here.
+ delete pending_op;
+ return;
+ }
+
+ int rv = result.net_error();
+ pending_op->entry_opened = result.opened();
+ pending_op->entry = result.ReleaseEntry();
+ pending_op->callback_will_delete = false;
+ cache->OnIOComplete(rv, pending_op);
+}
+
void HttpCache::OnBackendCreated(int result, PendingOp* pending_op) {
std::unique_ptr<WorkItem> item = std::move(pending_op->writer);
WorkItemOperation op = item->operation();
diff --git a/chromium/net/http/http_cache.h b/chromium/net/http/http_cache.h
index 371786c56a2..f85bd499d4c 100644
--- a/chromium/net/http/http_cache.h
+++ b/chromium/net/http/http_cache.h
@@ -50,6 +50,7 @@ class ApplicationStatusListener;
namespace disk_cache {
class Backend;
class Entry;
+class EntryResult;
} // namespace disk_cache
namespace net {
@@ -618,6 +619,11 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory {
PendingOp* pending_op,
int result);
+ // Variant for Open/Create method family, which has a different signature.
+ static void OnPendingCreationOpComplete(const base::WeakPtr<HttpCache>& cache,
+ PendingOp* pending_op,
+ disk_cache::EntryResult result);
+
// Processes the backend creation notification.
void OnBackendCreated(int result, PendingOp* pending_op);
diff --git a/chromium/net/http/http_cache_lookup_manager_unittest.cc b/chromium/net/http/http_cache_lookup_manager_unittest.cc
index ac7dec90824..35f1dbbcb65 100644
--- a/chromium/net/http/http_cache_lookup_manager_unittest.cc
+++ b/chromium/net/http/http_cache_lookup_manager_unittest.cc
@@ -6,7 +6,7 @@
#include <string>
#include "base/run_loop.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/task_environment.h"
#include "net/base/net_errors.h"
#include "net/base/test_completion_callback.h"
#include "net/http/http_cache_lookup_manager.h"
@@ -84,7 +84,7 @@ void PopulateCacheEntry(HttpCache* cache, const GURL& request_url) {
} // namespace
TEST(HttpCacheLookupManagerTest, ServerPushMissCache) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockHttpCache mock_cache;
HttpCacheLookupManager push_delegate(mock_cache.http_cache());
GURL request_url("http://www.example.com/pushed.jpg");
@@ -105,7 +105,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushMissCache) {
}
TEST(HttpCacheLookupManagerTest, ServerPushDoNotCreateCacheEntry) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockHttpCache mock_cache;
HttpCacheLookupManager push_delegate(mock_cache.http_cache());
GURL request_url("http://www.example.com/pushed.jpg");
@@ -135,7 +135,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushDoNotCreateCacheEntry) {
}
TEST(HttpCacheLookupManagerTest, ServerPushHitCache) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockHttpCache mock_cache;
HttpCacheLookupManager push_delegate(mock_cache.http_cache());
GURL request_url("http://www.example.com/pushed.jpg");
@@ -173,7 +173,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushHitCache) {
// pending lookup transaction for the same URL, the new server push will not
// send a new lookup transaction and should not be canceled.
TEST(HttpCacheLookupManagerTest, ServerPushPendingLookup) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockHttpCache mock_cache;
HttpCacheLookupManager push_delegate(mock_cache.http_cache());
GURL request_url("http://www.example.com/pushed.jpg");
@@ -218,7 +218,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushPendingLookup) {
// Test the server push lookup is based on the full url.
TEST(HttpCacheLookupManagerTest, ServerPushLookupOnUrl) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockHttpCache mock_cache;
HttpCacheLookupManager push_delegate(mock_cache.http_cache());
GURL request_url("http://www.example.com/pushed.jpg?u=0");
diff --git a/chromium/net/http/http_cache_transaction.cc b/chromium/net/http/http_cache_transaction.cc
index 68ed6135ea1..b1249dfda91 100644
--- a/chromium/net/http/http_cache_transaction.cc
+++ b/chromium/net/http/http_cache_transaction.cc
@@ -33,6 +33,7 @@
#include "base/trace_event/trace_event.h"
#include "base/values.h"
#include "net/base/auth.h"
+#include "net/base/cache_metrics.h"
#include "net/base/features.h"
#include "net/base/load_flags.h"
#include "net/base/load_timing_info.h"
@@ -196,6 +197,8 @@ HttpCache::Transaction::Transaction(RequestPriority priority, HttpCache* cache)
HttpCache::Transaction::~Transaction() {
TRACE_EVENT0("io", "HttpCacheTransaction::~Transaction");
+ RecordHistograms();
+
// We may have to issue another IO, but we should never invoke the callback_
// after this point.
callback_.Reset();
@@ -439,20 +442,6 @@ void HttpCache::Transaction::StopCaching() {
}
}
-bool HttpCache::Transaction::GetFullRequestHeaders(
- HttpRequestHeaders* headers) const {
- const HttpTransaction* transaction = GetOwnedOrMovedNetworkTransaction();
- if (transaction) {
- return transaction->GetFullRequestHeaders(headers);
- } else if (!network_transaction_info_.full_request_headers.IsEmpty()) {
- *headers = network_transaction_info_.full_request_headers;
- return true;
- }
-
- // TODO(juliatuttle): Read headers from cache.
- return false;
-}
-
int64_t HttpCache::Transaction::GetTotalReceivedBytes() const {
int64_t total_received_bytes = network_transaction_info_.total_received_bytes;
const HttpTransaction* transaction = GetOwnedOrMovedNetworkTransaction();
@@ -629,8 +618,6 @@ size_t HttpCache::Transaction::EstimateMemoryUsage() const {
}
void HttpCache::Transaction::WriterAboutToBeRemovedFromEntry(int result) {
- RecordHistograms();
-
// Since the transaction can no longer access the network transaction, save
// all network related info now.
if (moved_network_transaction_to_writers_ &&
@@ -781,9 +768,9 @@ void HttpCache::Transaction::MaybeSetParallelWritingPatternForMetrics(
// UpdateCachedResponse.
//
// 12. Prefetch, cached entry:
-// Like examples 2-4, only CacheToggleUnusedSincePrefetch* is inserted between
-// CacheReadResponse* and CacheDispatchValidation if the unused_since_prefetch
-// bit is unset.
+// Like examples 2-4, only CacheWriteUpdatedPrefetchResponse* is inserted
+// between CacheReadResponse* and CacheDispatchValidation if the
+// unused_since_prefetch bit is unset.
//
// 13. Cached entry less than 5 minutes old, unused_since_prefetch is true:
// Skip validation, similar to example 2.
@@ -860,12 +847,12 @@ int HttpCache::Transaction::DoLoop(int result) {
case STATE_CACHE_READ_RESPONSE_COMPLETE:
rv = DoCacheReadResponseComplete(rv);
break;
- case STATE_TOGGLE_UNUSED_SINCE_PREFETCH:
+ case STATE_WRITE_UPDATED_PREFETCH_RESPONSE:
DCHECK_EQ(OK, rv);
- rv = DoCacheToggleUnusedSincePrefetch();
+ rv = DoCacheWriteUpdatedPrefetchResponse(rv);
break;
- case STATE_TOGGLE_UNUSED_SINCE_PREFETCH_COMPLETE:
- rv = DoCacheToggleUnusedSincePrefetchComplete(rv);
+ case STATE_WRITE_UPDATED_PREFETCH_RESPONSE_COMPLETE:
+ rv = DoCacheWriteUpdatedPrefetchResponseComplete(rv);
break;
case STATE_CACHE_DISPATCH_VALIDATION:
DCHECK_EQ(OK, rv);
@@ -1512,12 +1499,33 @@ int HttpCache::Transaction::DoCacheReadResponseComplete(int result) {
}
}
+ if (response_.restricted_prefetch &&
+ !(request_->load_flags & LOAD_CAN_USE_RESTRICTED_PREFETCH)) {
+ TransitionToState(STATE_SEND_REQUEST);
+ return OK;
+ }
+
+ // When a restricted prefetch is reused, we lift its reuse restriction.
+ bool restricted_prefetch_reuse =
+ response_.restricted_prefetch &&
+ request_->load_flags & LOAD_CAN_USE_RESTRICTED_PREFETCH;
+ DCHECK(!restricted_prefetch_reuse || response_.unused_since_prefetch);
+
if (response_.unused_since_prefetch !=
!!(request_->load_flags & LOAD_PREFETCH)) {
// Either this is the first use of an entry since it was prefetched XOR
// this is a prefetch. The value of response.unused_since_prefetch is
// valid for this transaction but the bit needs to be flipped in storage.
- TransitionToState(STATE_TOGGLE_UNUSED_SINCE_PREFETCH);
+ DCHECK(!updated_prefetch_response_);
+ updated_prefetch_response_ = std::make_unique<HttpResponseInfo>(response_);
+ updated_prefetch_response_->unused_since_prefetch =
+ !response_.unused_since_prefetch;
+ if (response_.restricted_prefetch &&
+ request_->load_flags & LOAD_CAN_USE_RESTRICTED_PREFETCH) {
+ updated_prefetch_response_->restricted_prefetch = false;
+ }
+
+ TransitionToState(STATE_WRITE_UPDATED_PREFETCH_RESPONSE);
return OK;
}
@@ -1525,32 +1533,35 @@ int HttpCache::Transaction::DoCacheReadResponseComplete(int result) {
return OK;
}
-int HttpCache::Transaction::DoCacheToggleUnusedSincePrefetch() {
- TRACE_EVENT0("io", "HttpCacheTransaction::DoCacheToggleUnusedSincePrefetch");
- // Write back the toggled value for the next use of this entry.
- response_.unused_since_prefetch = !response_.unused_since_prefetch;
-
+int HttpCache::Transaction::DoCacheWriteUpdatedPrefetchResponse(int result) {
+ TRACE_EVENT0(NetTracingCategory(),
+ "HttpCacheTransaction::DoCacheWriteUpdatedPrefetchResponse");
+ DCHECK(updated_prefetch_response_);
// TODO(jkarlin): If DoUpdateCachedResponse is also called for this
// transaction then metadata will be written to cache twice. If prefetching
// becomes more common, consider combining the writes.
-
- TransitionToState(STATE_TOGGLE_UNUSED_SINCE_PREFETCH_COMPLETE);
- return WriteResponseInfoToEntry(false);
+ TransitionToState(STATE_WRITE_UPDATED_PREFETCH_RESPONSE_COMPLETE);
+ return WriteResponseInfoToEntry(*updated_prefetch_response_.get(), false);
}
-int HttpCache::Transaction::DoCacheToggleUnusedSincePrefetchComplete(
+int HttpCache::Transaction::DoCacheWriteUpdatedPrefetchResponseComplete(
int result) {
TRACE_EVENT0(
NetTracingCategory(),
- "HttpCacheTransaction::DoCacheToggleUnusedSincePrefetchComplete");
- // Restore the original value for this transaction.
- response_.unused_since_prefetch = !response_.unused_since_prefetch;
+ "HttpCacheTransaction::DoCacheWriteUpdatedPrefetchResponseComplete");
+ updated_prefetch_response_.reset();
TransitionToState(STATE_CACHE_DISPATCH_VALIDATION);
return OnWriteResponseInfoToEntryComplete(result);
}
int HttpCache::Transaction::DoCacheDispatchValidation() {
TRACE_EVENT0("io", "HttpCacheTransaction::DoCacheDispatchValidation");
+ if (!entry_) {
+ // Entry got destroyed when twiddling unused-since-prefetch bit.
+ TransitionToState(STATE_HEADERS_PHASE_CANNOT_PROCEED);
+ return OK;
+ }
+
// We now have access to the cache entry.
//
// o if we are a reader for the transaction, then we can start reading the
@@ -1639,7 +1650,7 @@ int HttpCache::Transaction::DoCacheUpdateStaleWhileRevalidateTimeout() {
response_.stale_revalidate_timeout =
cache_->clock_->Now() + kStaleRevalidateTimeout;
TransitionToState(STATE_CACHE_UPDATE_STALE_WHILE_REVALIDATE_TIMEOUT_COMPLETE);
- return WriteResponseInfoToEntry(false);
+ return WriteResponseInfoToEntry(response_, false);
}
int HttpCache::Transaction::DoCacheUpdateStaleWhileRevalidateTimeoutComplete(
@@ -1706,6 +1717,7 @@ int HttpCache::Transaction::DoSendRequestComplete(int result) {
response_.network_accessed = response->network_accessed;
response_.was_fetched_via_proxy = response->was_fetched_via_proxy;
response_.proxy_server = response->proxy_server;
+ response_.restricted_prefetch = response->restricted_prefetch;
// Do not record requests that have network errors or restarts.
UpdateCacheEntryStatus(CacheEntryStatus::ENTRY_OTHER);
@@ -1792,7 +1804,7 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() {
// Invalidate any cached GET with a successful PUT or DELETE.
if (mode_ == WRITE && (method_ == "PUT" || method_ == "DELETE")) {
- if (NonErrorResponse(new_response->headers->response_code()) &&
+ if (NonErrorResponse(new_response_->headers->response_code()) &&
(entry_ && !entry_->doomed)) {
int ret = cache_->DoomEntry(cache_key_, nullptr);
DCHECK_EQ(OK, ret);
@@ -1803,11 +1815,11 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() {
// Invalidate any cached GET with a successful POST.
if (!(effective_load_flags_ & LOAD_DISABLE_CACHE) && method_ == "POST" &&
- NonErrorResponse(new_response->headers->response_code())) {
+ NonErrorResponse(new_response_->headers->response_code())) {
cache_->DoomMainEntryForUrl(request_->url, request_->network_isolation_key);
}
- RecordNoStoreHeaderHistogram(request_->load_flags, new_response);
+ RecordNoStoreHeaderHistogram(request_->load_flags, new_response_);
if (new_response_->headers->response_code() == 416 &&
(method_ == "GET" || method_ == "POST")) {
@@ -1844,6 +1856,7 @@ int HttpCache::Transaction::DoUpdateCachedResponse() {
response_.request_time = new_response_->request_time;
response_.network_accessed = new_response_->network_accessed;
response_.unused_since_prefetch = new_response_->unused_since_prefetch;
+ response_.restricted_prefetch = new_response_->restricted_prefetch;
response_.ssl_info = new_response_->ssl_info;
if (new_response_->vary_data.is_valid()) {
response_.vary_data = new_response_->vary_data;
@@ -1855,7 +1868,8 @@ int HttpCache::Transaction::DoUpdateCachedResponse() {
response_.vary_data = new_vary_data;
}
- if (response_.headers->HasHeaderValue("cache-control", "no-store")) {
+ if (response_.headers->HasHeaderValue("cache-control", "no-store") ||
+ ShouldDisableMediaCaching(response_.headers.get())) {
if (!entry_->doomed) {
int ret = cache_->DoomEntry(cache_key_, nullptr);
DCHECK_EQ(OK, ret);
@@ -1877,9 +1891,8 @@ int HttpCache::Transaction::DoUpdateCachedResponse() {
int HttpCache::Transaction::DoCacheWriteUpdatedResponse() {
TRACE_EVENT0("io", "HttpCacheTransaction::DoCacheWriteUpdatedResponse");
-
TransitionToState(STATE_CACHE_WRITE_UPDATED_RESPONSE_COMPLETE);
- return WriteResponseInfoToEntry(false);
+ return WriteResponseInfoToEntry(response_, false);
}
int HttpCache::Transaction::DoCacheWriteUpdatedResponseComplete(int result) {
@@ -1984,7 +1997,7 @@ int HttpCache::Transaction::DoCacheWriteResponse() {
}
TransitionToState(STATE_CACHE_WRITE_RESPONSE_COMPLETE);
- return WriteResponseInfoToEntry(truncated_);
+ return WriteResponseInfoToEntry(response_, truncated_);
}
int HttpCache::Transaction::DoCacheWriteResponseComplete(int result) {
@@ -3006,6 +3019,13 @@ void HttpCache::Transaction::FixHeadersForHead() {
int HttpCache::Transaction::DoSetupEntryForRead() {
if (network_trans_)
ResetNetworkTransaction();
+
+ if (!entry_) {
+ // Entry got destroyed when twiddling SWR bits.
+ TransitionToState(STATE_HEADERS_PHASE_CANNOT_PROCEED);
+ return OK;
+ }
+
if (partial_) {
if (truncated_ || is_sparse_ || !invalid_range_) {
// We are going to return the saved response headers to the caller, so
@@ -3046,7 +3066,9 @@ int HttpCache::Transaction::WriteToEntry(int index,
return rv;
}
-int HttpCache::Transaction::WriteResponseInfoToEntry(bool truncated) {
+int HttpCache::Transaction::WriteResponseInfoToEntry(
+ const HttpResponseInfo& response,
+ bool truncated) {
if (!entry_)
return OK;
@@ -3062,8 +3084,9 @@ int HttpCache::Transaction::WriteResponseInfoToEntry(bool truncated) {
// (even though the cert status contains the actual errors) and no SSL
// blocking page is shown. An alternative would be to reverse-map the cert
// status to a net error and replay the net error.
- if ((response_.headers->HasHeaderValue("cache-control", "no-store")) ||
- IsCertStatusError(response_.ssl_info.cert_status)) {
+ if ((response.headers->HasHeaderValue("cache-control", "no-store")) ||
+ IsCertStatusError(response.ssl_info.cert_status) ||
+ ShouldDisableMediaCaching(response.headers.get())) {
bool stopped = StopCachingImpl(false);
DCHECK(stopped);
if (net_log_.IsCapturing())
@@ -3072,12 +3095,12 @@ int HttpCache::Transaction::WriteResponseInfoToEntry(bool truncated) {
}
if (truncated)
- DCHECK_EQ(200, response_.headers->response_code());
+ DCHECK_EQ(200, response.headers->response_code());
// When writing headers, we normally only write the non-transient headers.
bool skip_transient_headers = true;
scoped_refptr<PickledIOBuffer> data(new PickledIOBuffer());
- response_.Persist(data->pickle(), skip_transient_headers, truncated);
+ response.Persist(data->pickle(), skip_transient_headers, truncated);
data->Done();
io_buf_len_ = data->pickle()->size();
@@ -3128,11 +3151,6 @@ void HttpCache::Transaction::DoneWithEntry(bool entry_is_complete) {
if (!entry_)
return;
- // For a writer, histograms will be recorded in
- // WriterAboutToBeRemovedFromEntry.
- if (!InWriters())
- RecordHistograms();
-
cache_->DoneWithEntry(entry_, this, entry_is_complete, partial_ != nullptr);
entry_ = nullptr;
mode_ = NONE; // switch to 'pass through' mode
@@ -3231,8 +3249,11 @@ int HttpCache::Transaction::DoRestartPartialRequest() {
// WRITE + Doom + STATE_INIT_ENTRY == STATE_CREATE_ENTRY (without an attempt
// to Doom the entry again).
- mode_ = WRITE;
ResetPartialState(!range_requested_);
+
+ // Change mode to WRITE after ResetPartialState as that may have changed the
+ // mode to NONE.
+ mode_ = WRITE;
TransitionToState(STATE_CREATE_ENTRY);
return OK;
}
@@ -3364,6 +3385,19 @@ void HttpCache::Transaction::RecordHistograms() {
cache_entry_status_ == CacheEntryStatus::ENTRY_VALIDATED ||
cache_entry_status_ == CacheEntryStatus::ENTRY_UPDATED;
+ bool is_third_party = false;
+
+ // Given that cache_entry_status_ is not ENTRY_UNDEFINED, the request must
+ // have started and so request_ should exist.
+ DCHECK(request_);
+ if (!request_->network_isolation_key.IsEmpty()) {
+ const url::Origin& top_frame_origin =
+ request_->network_isolation_key.GetTopFrameOrigin().value();
+ url::Origin request_origin = url::Origin::Create(request_->url);
+
+ is_third_party = !top_frame_origin.IsSameOriginWith(request_origin);
+ }
+
std::string mime_type;
HttpResponseHeaders* response_headers = GetResponseInfo()->headers.get();
if (response_headers && response_headers->GetMimeType(&mime_type)) {
@@ -3376,6 +3410,9 @@ void HttpCache::Transaction::RecordHistograms() {
} else if (mime_type == "text/html") {
CACHE_STATUS_HISTOGRAMS(".NonMainFrameHTML");
} else if (mime_type == "text/css") {
+ if (is_third_party) {
+ CACHE_STATUS_HISTOGRAMS(".CSSThirdParty");
+ }
CACHE_STATUS_HISTOGRAMS(".CSS");
} else if (base::StartsWith(mime_type, "image/",
base::CompareCase::SENSITIVE)) {
@@ -3390,8 +3427,14 @@ void HttpCache::Transaction::RecordHistograms() {
base::CompareCase::SENSITIVE) ||
base::EndsWith(mime_type, "ecmascript",
base::CompareCase::SENSITIVE)) {
+ if (is_third_party) {
+ CACHE_STATUS_HISTOGRAMS(".JavaScriptThirdParty");
+ }
CACHE_STATUS_HISTOGRAMS(".JavaScript");
} else if (mime_type.find("font") != std::string::npos) {
+ if (is_third_party) {
+ CACHE_STATUS_HISTOGRAMS(".FontThirdParty");
+ }
CACHE_STATUS_HISTOGRAMS(".Font");
} else if (base::StartsWith(mime_type, "audio/",
base::CompareCase::SENSITIVE)) {
@@ -3437,11 +3480,12 @@ void HttpCache::Transaction::RecordHistograms() {
cache_entry_status_ == CacheEntryStatus::ENTRY_UPDATED ||
cache_entry_status_ == CacheEntryStatus::ENTRY_CANT_CONDITIONALIZE)) ||
(!did_send_request &&
- cache_entry_status_ == CacheEntryStatus::ENTRY_USED));
+ (cache_entry_status_ == CacheEntryStatus::ENTRY_USED ||
+ cache_entry_status_ == CacheEntryStatus::ENTRY_CANT_CONDITIONALIZE)));
if (!did_send_request) {
- DCHECK(cache_entry_status_ == CacheEntryStatus::ENTRY_USED);
- UMA_HISTOGRAM_TIMES("HttpCache.AccessToDone.Used", total_time);
+ if (cache_entry_status_ == CacheEntryStatus::ENTRY_USED)
+ UMA_HISTOGRAM_TIMES("HttpCache.AccessToDone.Used", total_time);
return;
}
@@ -3508,9 +3552,6 @@ void HttpCache::Transaction::SaveNetworkTransactionInfo(
network_transaction_info_.old_connection_attempts.push_back(attempt);
network_transaction_info_.old_remote_endpoint = IPEndPoint();
transaction.GetRemoteEndpoint(&network_transaction_info_.old_remote_endpoint);
-
- transaction.GetFullRequestHeaders(
- &network_transaction_info_.full_request_headers);
}
void HttpCache::Transaction::OnIOComplete(int result) {
@@ -3524,4 +3565,32 @@ void HttpCache::Transaction::TransitionToState(State state) {
next_state_ = state;
}
+bool HttpCache::Transaction::ShouldDisableMediaCaching(
+ const HttpResponseHeaders* headers) const {
+ bool disable_caching = false;
+ if (base::FeatureList::IsEnabled(features::kTurnOffStreamingMediaCaching)) {
+ // If the acquired content is 'large' and not already cached, and we have
+ // a MIME type of audio or video, then disable the cache for this response.
+ // We based our initial definition of 'large' on the disk cache maximum
+ // block size of 16K, which we observed captures the majority of responses
+ // from various MSE implementations.
+ static constexpr int kMaxContentSize = 4096 * 4;
+ std::string mime_type;
+ if (headers->GetContentLength() > kMaxContentSize &&
+ headers->response_code() != 304 && headers->GetMimeType(&mime_type) &&
+ (base::StartsWith(mime_type, "video",
+ base::CompareCase::INSENSITIVE_ASCII) ||
+ base::StartsWith(mime_type, "audio",
+ base::CompareCase::INSENSITIVE_ASCII))) {
+ disable_caching = true;
+ MediaCacheStatusResponseHistogram(
+ MediaResponseCacheType::kMediaResponseTransactionCacheDisabled);
+ } else {
+ MediaCacheStatusResponseHistogram(
+ MediaResponseCacheType::kMediaResponseTransactionCacheEnabled);
+ }
+ }
+ return disable_caching;
+}
+
} // namespace net
diff --git a/chromium/net/http/http_cache_transaction.h b/chromium/net/http/http_cache_transaction.h
index ec14305ab56..f5f1b159035 100644
--- a/chromium/net/http/http_cache_transaction.h
+++ b/chromium/net/http/http_cache_transaction.h
@@ -131,7 +131,6 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
int buf_len,
CompletionOnceCallback callback) override;
void StopCaching() override;
- bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override;
int64_t GetTotalReceivedBytes() const override;
int64_t GetTotalSentBytes() const override;
void DoneReading() override;
@@ -210,7 +209,6 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
int64_t total_sent_bytes = 0;
ConnectionAttempts old_connection_attempts;
IPEndPoint old_remote_endpoint;
- HttpRequestHeaders full_request_headers;
DISALLOW_COPY_AND_ASSIGN(NetworkTransactionInfo);
};
@@ -234,8 +232,8 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
STATE_DONE_HEADERS_ADD_TO_ENTRY_COMPLETE,
STATE_CACHE_READ_RESPONSE,
STATE_CACHE_READ_RESPONSE_COMPLETE,
- STATE_TOGGLE_UNUSED_SINCE_PREFETCH,
- STATE_TOGGLE_UNUSED_SINCE_PREFETCH_COMPLETE,
+ STATE_WRITE_UPDATED_PREFETCH_RESPONSE,
+ STATE_WRITE_UPDATED_PREFETCH_RESPONSE_COMPLETE,
STATE_CACHE_DISPATCH_VALIDATION,
STATE_CACHE_QUERY_DATA,
STATE_CACHE_QUERY_DATA_COMPLETE,
@@ -314,8 +312,8 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
int DoDoneHeadersAddToEntryComplete(int result);
int DoCacheReadResponse();
int DoCacheReadResponseComplete(int result);
- int DoCacheToggleUnusedSincePrefetch();
- int DoCacheToggleUnusedSincePrefetchComplete(int result);
+ int DoCacheWriteUpdatedPrefetchResponse(int result);
+ int DoCacheWriteUpdatedPrefetchResponseComplete(int result);
int DoCacheDispatchValidation();
int DoCacheQueryData();
int DoCacheQueryDataComplete(int result);
@@ -444,9 +442,10 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
int data_len,
CompletionOnceCallback callback);
- // Called to write response_ to the cache entry. |truncated| indicates if the
+ // Called to write a response to the cache entry. |truncated| indicates if the
// entry should be marked as incomplete.
- int WriteResponseInfoToEntry(bool truncated);
+ int WriteResponseInfoToEntry(const HttpResponseInfo& response,
+ bool truncated);
// Helper function, should be called with result of WriteResponseInfoToEntry
// (or the result of the callback, when WriteResponseInfoToEntry returns
@@ -554,6 +553,9 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
// Saves network transaction info using |transaction|.
void SaveNetworkTransactionInfo(const HttpTransaction& transaction);
+ // Disables caching for media content when running on battery.
+ bool ShouldDisableMediaCaching(const HttpResponseHeaders* headers) const;
+
State next_state_;
// Initial request with which Start() was invoked.
@@ -576,6 +578,16 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
CompletionOnceCallback callback_; // Consumer's callback.
HttpResponseInfo response_;
HttpResponseInfo auth_response_;
+
+ // This is only populated when we want to modify a prefetch request in some
+ // way for future transactions, while leaving it untouched for the current
+ // one. DoCacheReadResponseComplete() sets this to a copy of |response_|,
+ // and modifies the members for future transactions. Then,
+ // WriteResponseInfoToEntry() writes |updated_prefetch_response_| to the cache
+ // entry if it is populated, or |response_| otherwise. Finally,
+ // WriteResponseInfoToEntry() resets this to base::nullopt.
+ std::unique_ptr<HttpResponseInfo> updated_prefetch_response_;
+
const HttpResponseInfo* new_response_;
std::string cache_key_;
Mode mode_;
diff --git a/chromium/net/http/http_cache_unittest.cc b/chromium/net/http/http_cache_unittest.cc
index 8d4f37b7cba..35a0b28a5fe 100644
--- a/chromium/net/http/http_cache_unittest.cc
+++ b/chromium/net/http/http_cache_unittest.cc
@@ -64,7 +64,7 @@
#include "net/test/cert_test_util.h"
#include "net/test/gtest_util.h"
#include "net/test/test_data_directory.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "net/websockets/websocket_handshake_stream_base.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -689,7 +689,7 @@ bool LogContainsEventType(const BoundTestNetLog& log,
} // namespace
-using HttpCacheTest = TestWithScopedTaskEnvironment;
+using HttpCacheTest = TestWithTaskEnvironment;
class HttpCacheIOCallbackTest : public HttpCacheTest {
public:
HttpCacheIOCallbackTest() {}
@@ -859,7 +859,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures) {
base::HistogramTester histograms;
const std::string histogram_name = "HttpCache.ParallelWritingPattern";
- cache.disk_cache()->set_soft_failures(true);
+ cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL);
// Read from the network, and fail to write to the cache.
RunTransactionTest(cache.http_cache(), kSimpleGET_Transaction);
@@ -897,7 +897,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures2) {
rv = c->callback.WaitForResult();
// Start failing request now.
- cache.disk_cache()->set_soft_failures(true);
+ cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL);
// We have to open the entry again to propagate the failure flag.
disk_cache::Entry* en;
@@ -930,7 +930,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures3) {
EXPECT_EQ(0, cache.disk_cache()->open_count());
EXPECT_EQ(1, cache.disk_cache()->create_count());
- cache.disk_cache()->set_soft_failures(true);
+ cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL);
MockHttpRequest request(kSimpleGET_Transaction);
@@ -943,7 +943,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures3) {
EXPECT_THAT(c->callback.GetResult(rv), IsOk());
// Now verify that the entry was removed from the cache.
- cache.disk_cache()->set_soft_failures(false);
+ cache.disk_cache()->set_soft_failures_mask(0);
EXPECT_EQ(2, cache.network_layer()->transaction_count());
EXPECT_EQ(1, cache.disk_cache()->open_count());
@@ -1211,6 +1211,37 @@ TEST_F(HttpCacheTest, SimpleGET_CacheSignal_Failure) {
}
}
+// Tests that if the transaction is destroyed right after setting the
+// cache_entry_status_ as CANT_CONDITIONALIZE, then RecordHistograms should not
+// hit a dcheck.
+TEST_F(HttpCacheTest, RecordHistogramsCantConditionalize) {
+ MockHttpCache cache;
+ cache.disk_cache()->set_support_in_memory_entry_data(true);
+
+ {
+ // Prime cache.
+ ScopedMockTransaction transaction(kSimpleGET_Transaction);
+ transaction.response_headers = "Cache-Control: no-cache\n";
+ RunTransactionTest(cache.http_cache(), transaction);
+ EXPECT_EQ(1, cache.network_layer()->transaction_count());
+ EXPECT_EQ(1, cache.disk_cache()->create_count());
+ EXPECT_EQ(0, cache.disk_cache()->open_count());
+ }
+
+ {
+ ScopedMockTransaction transaction(kSimpleGET_Transaction);
+ MockHttpRequest request(transaction);
+ TestCompletionCallback callback;
+ std::unique_ptr<HttpTransaction> trans;
+ int rv = cache.http_cache()->CreateTransaction(DEFAULT_PRIORITY, &trans);
+ EXPECT_THAT(rv, IsOk());
+ ASSERT_TRUE(trans.get());
+ rv = trans->Start(&request, callback.callback(), NetLogWithSource());
+ // Now destroy the transaction so that RecordHistograms gets invoked.
+ trans.reset();
+ }
+}
+
// Confirm if we have an empty cache, a read is marked as network verified.
TEST_F(HttpCacheTest, SimpleGET_NetworkAccessed_Network) {
MockHttpCache cache;
@@ -1420,6 +1451,112 @@ TEST_F(HttpCacheTest, SimpleGET_UnusedSincePrefetch) {
EXPECT_TRUE(response_info.was_cached);
}
+// Tests that requests made with the LOAD_RESTRICTED_PREFETCH load flag result
+// in HttpResponseInfo entries with the |restricted_prefetch| flag set. Also
+// tests that responses with |restricted_prefetch| flag set can only be used by
+// requests that have the LOAD_CAN_USE_RESTRICTED_PREFETCH load flag.
+TEST_F(HttpCacheTest, SimpleGET_RestrictedPrefetchIsRestrictedUntilReuse) {
+ MockHttpCache cache;
+ HttpResponseInfo response_info;
+
+ // A normal load does not have |restricted_prefetch| set.
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), kTypicalGET_Transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+ EXPECT_FALSE(response_info.restricted_prefetch);
+ EXPECT_FALSE(response_info.was_cached);
+ EXPECT_TRUE(response_info.network_accessed);
+
+ // A restricted prefetch is marked as |restricted_prefetch|.
+ MockTransaction prefetch_transaction(kSimpleGET_Transaction);
+ prefetch_transaction.load_flags |= LOAD_PREFETCH;
+ prefetch_transaction.load_flags |= LOAD_RESTRICTED_PREFETCH;
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), prefetch_transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+ EXPECT_TRUE(response_info.restricted_prefetch);
+ EXPECT_FALSE(response_info.was_cached);
+ EXPECT_TRUE(response_info.network_accessed);
+
+ // Requests that are marked as able to reuse restricted prefetches can do so
+ // correctly. Once it is reused, it is no longer considered as or marked
+ // restricted.
+ MockTransaction can_use_restricted_prefetch_transaction(
+ kSimpleGET_Transaction);
+ can_use_restricted_prefetch_transaction.load_flags |=
+ LOAD_CAN_USE_RESTRICTED_PREFETCH;
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), can_use_restricted_prefetch_transaction,
+ &response_info, BoundTestNetLog().bound(), nullptr);
+ EXPECT_TRUE(response_info.restricted_prefetch);
+ EXPECT_TRUE(response_info.was_cached);
+ EXPECT_FALSE(response_info.network_accessed);
+
+ // Later reuse is still no longer marked restricted.
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), kSimpleGET_Transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+ EXPECT_FALSE(response_info.restricted_prefetch);
+ EXPECT_TRUE(response_info.was_cached);
+ EXPECT_FALSE(response_info.network_accessed);
+}
+
+TEST_F(HttpCacheTest, SimpleGET_RestrictedPrefetchReuseIsLimited) {
+ MockHttpCache cache;
+ HttpResponseInfo response_info;
+
+ // A restricted prefetch is marked as |restricted_prefetch|.
+ MockTransaction prefetch_transaction(kSimpleGET_Transaction);
+ prefetch_transaction.load_flags |= LOAD_PREFETCH;
+ prefetch_transaction.load_flags |= LOAD_RESTRICTED_PREFETCH;
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), prefetch_transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+ EXPECT_TRUE(response_info.restricted_prefetch);
+ EXPECT_FALSE(response_info.was_cached);
+ EXPECT_TRUE(response_info.network_accessed);
+
+ // Requests that cannot reuse restricted prefetches fail to do so. The network
+ // is accessed and the resulting response is not marked as
+ // |restricted_prefetch|.
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), kSimpleGET_Transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+ EXPECT_FALSE(response_info.restricted_prefetch);
+ EXPECT_FALSE(response_info.was_cached);
+ EXPECT_TRUE(response_info.network_accessed);
+
+ // Future requests that are not marked as able to reuse restricted prefetches
+ // can use the entry in the cache now, since it has been evicted in favor of
+ // an unrestricted one.
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), kSimpleGET_Transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+ EXPECT_FALSE(response_info.restricted_prefetch);
+ EXPECT_TRUE(response_info.was_cached);
+ EXPECT_FALSE(response_info.network_accessed);
+}
+
+TEST_F(HttpCacheTest, SimpleGET_UnusedSincePrefetchWriteError) {
+ MockHttpCache cache;
+ HttpResponseInfo response_info;
+
+ // Do a prefetch.
+ MockTransaction prefetch_transaction(kSimpleGET_Transaction);
+ prefetch_transaction.load_flags |= LOAD_PREFETCH;
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), prefetch_transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+ EXPECT_TRUE(response_info.unused_since_prefetch);
+ EXPECT_FALSE(response_info.was_cached);
+
+ // Try to use it while injecting a failure on write.
+ cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_WRITE);
+ RunTransactionTestWithResponseInfoAndGetTiming(
+ cache.http_cache(), kSimpleGET_Transaction, &response_info,
+ BoundTestNetLog().bound(), nullptr);
+}
+
static void PreserveRequestHeaders_Handler(const HttpRequestInfo* request,
std::string* response_status,
std::string* response_headers,
@@ -1590,6 +1727,50 @@ TEST_F(HttpCacheTest, RangeGET_FullAfterPartial) {
}
}
+// Tests that when a range request transaction becomes a writer for the first
+// range and then fails conditionalization for the next range and decides to
+// doom the entry, then there should not be a dcheck assertion hit.
+TEST_F(HttpCacheTest, RangeGET_OverlappingRangesCouldntConditionalize) {
+ MockHttpCache cache;
+
+ {
+ ScopedMockTransaction transaction_pre(kRangeGET_TransactionOK);
+ transaction_pre.request_headers = "Range: bytes = 10-19\r\n" EXTRA_HEADER;
+ transaction_pre.data = "rg: 10-19 ";
+ MockHttpRequest request_pre(transaction_pre);
+
+ HttpResponseInfo response_pre;
+ RunTransactionTestWithRequest(cache.http_cache(), transaction_pre,
+ request_pre, &response_pre);
+ ASSERT_TRUE(response_pre.headers != nullptr);
+ EXPECT_EQ(206, response_pre.headers->response_code());
+ EXPECT_EQ(1, cache.network_layer()->transaction_count());
+ EXPECT_EQ(0, cache.disk_cache()->open_count());
+ EXPECT_EQ(1, cache.disk_cache()->create_count());
+ }
+
+ {
+ // First range skips validation because the response is fresh while the
+ // second range requires validation since that range is not present in the
+ // cache and during validation it fails conditionalization.
+ cache.FailConditionalizations();
+ ScopedMockTransaction transaction_pre(kRangeGET_TransactionOK);
+ transaction_pre.request_headers = "Range: bytes = 10-29\r\n" EXTRA_HEADER;
+
+ // TODO(crbug.com/992521): Fix this scenario to not return the cached bytes
+ // repeatedly.
+ transaction_pre.data = "rg: 10-19 rg: 10-19 rg: 20-29 ";
+ MockHttpRequest request_pre(transaction_pre);
+ HttpResponseInfo response_pre;
+ RunTransactionTestWithRequest(cache.http_cache(), transaction_pre,
+ request_pre, &response_pre);
+ ASSERT_TRUE(response_pre.headers != nullptr);
+ EXPECT_EQ(2, cache.network_layer()->transaction_count());
+ EXPECT_EQ(1, cache.disk_cache()->open_count());
+ EXPECT_EQ(2, cache.disk_cache()->create_count());
+ }
+}
+
TEST_F(HttpCacheTest, RangeGET_FullAfterPartialReuse) {
MockHttpCache cache;
@@ -2027,6 +2208,7 @@ TEST_F(HttpCacheTest, RangeGET_ParallelValidationDifferentRanges) {
EXPECT_EQ(1, cache.disk_cache()->open_count());
EXPECT_EQ(1, cache.disk_cache()->create_count());
+ context_list.clear();
histograms.ExpectBucketCount(
histogram_name,
static_cast<int>(HttpCache::PARALLEL_WRITING_NOT_JOIN_RANGE), 1);
@@ -2250,6 +2432,7 @@ TEST_F(HttpCacheTest, RangeGET_ParallelValidationCouldntConditionalize) {
range_transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 ";
ReadAndVerifyTransaction(c->trans.get(), range_transaction);
}
+ context_list.clear();
}
// Tests a 200 request and a simultaneous range request where conditionalization
@@ -2334,6 +2517,7 @@ TEST_F(HttpCacheTest, RangeGET_ParallelValidationCouldConditionalize) {
range_transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 ";
ReadAndVerifyTransaction(c1->trans.get(), range_transaction);
+ context_list.clear();
}
// Tests parallel validation on range requests with overlapping ranges.
@@ -3277,7 +3461,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritingCacheWriteFailed) {
EXPECT_EQ(1, cache.GetCountDoneHeadersQueue(kSimpleGET_Transaction.url));
// Initiate Read from two writers and let the first get a cache write failure.
- cache.disk_cache()->set_soft_failures(true);
+ cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL);
// We have to open the entry again to propagate the failure flag.
disk_cache::Entry* en;
cache.OpenBackendEntry(kSimpleGET_Transaction.url, &en);
@@ -3395,6 +3579,7 @@ TEST_F(HttpCacheTest, SimplePOST_ParallelWritingDisallowed) {
EXPECT_EQ(0, cache.disk_cache()->open_count());
EXPECT_EQ(1, cache.disk_cache()->create_count());
+ context_list.clear();
histograms.ExpectBucketCount(
histogram_name,
static_cast<int>(HttpCache::PARALLEL_WRITING_NOT_JOIN_METHOD_NOT_GET), 1);
@@ -3484,6 +3669,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritingSuccess) {
}
// Verify metrics.
+ context_list.clear();
histograms.ExpectBucketCount(
histogram_name, static_cast<int>(HttpCache::PARALLEL_WRITING_CREATE), 1);
histograms.ExpectBucketCount(
@@ -3564,6 +3750,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritingHuge) {
EXPECT_EQ(kNumTransactions, cache.network_layer()->transaction_count());
// Verify metrics.
+ context_list.clear();
histograms.ExpectBucketCount(
histogram_name, static_cast<int>(HttpCache::PARALLEL_WRITING_CREATE), 1);
histograms.ExpectBucketCount(
@@ -3940,7 +4127,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritersFailWrite) {
EXPECT_EQ(1, cache.disk_cache()->create_count());
// Fail the request.
- cache.disk_cache()->set_soft_failures(true);
+ cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL);
// We have to open the entry again to propagate the failure flag.
disk_cache::Entry* en;
cache.OpenBackendEntry(kSimpleGET_Transaction.url, &en);
@@ -6975,7 +7162,7 @@ TEST_F(HttpCacheTest, RangeGET_CacheReadError) {
EXPECT_EQ(0, cache.disk_cache()->open_count());
EXPECT_EQ(1, cache.disk_cache()->create_count());
- cache.disk_cache()->set_soft_failures_one_instance(true);
+ cache.disk_cache()->set_soft_failures_one_instance(MockDiskEntry::FAIL_ALL);
// Try to read from the cache (40-49), which will fail quickly enough to
// restart, due to the failure injected above. This should still be a range
@@ -9684,6 +9871,111 @@ TEST_F(HttpCacheTest, SplitCacheWithFrameOrigin) {
EXPECT_FALSE(response.was_cached);
}
+TEST_F(HttpCacheTest, HttpCacheProfileThirdPartyCSS) {
+ base::HistogramTester histograms;
+ MockHttpCache cache;
+ HttpResponseInfo response;
+
+ url::Origin origin_a = url::Origin::Create(GURL(kSimpleGET_Transaction.url));
+ url::Origin origin_b = url::Origin::Create(GURL("http://b.com"));
+
+ ScopedMockTransaction transaction(kSimpleGET_Transaction);
+ transaction.response_headers = "Content-Type: text/css\n";
+
+ MockHttpRequest trans_info = MockHttpRequest(transaction);
+
+ // Requesting with the same top-frame origin should not count as third-party
+ // but should still be recorded as CSS
+ trans_info.network_isolation_key = NetworkIsolationKey(origin_a, origin_a);
+
+ RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info,
+ &response);
+
+ histograms.ExpectTotalCount("HttpCache.Pattern", 1);
+ histograms.ExpectTotalCount("HttpCache.Pattern.CSS", 1);
+ histograms.ExpectTotalCount("HttpCache.Pattern.CSSThirdParty", 0);
+
+ // Requesting with a different top-frame origin should count as third-party
+ // and recorded as CSS
+ trans_info.network_isolation_key = NetworkIsolationKey(origin_b, origin_b);
+
+ RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info,
+ &response);
+ histograms.ExpectTotalCount("HttpCache.Pattern", 2);
+ histograms.ExpectTotalCount("HttpCache.Pattern.CSS", 2);
+ histograms.ExpectTotalCount("HttpCache.Pattern.CSSThirdParty", 1);
+}
+
+TEST_F(HttpCacheTest, HttpCacheProfileThirdPartyJavaScript) {
+ base::HistogramTester histograms;
+ MockHttpCache cache;
+ HttpResponseInfo response;
+
+ url::Origin origin_a = url::Origin::Create(GURL(kSimpleGET_Transaction.url));
+ url::Origin origin_b = url::Origin::Create(GURL("http://b.com"));
+
+ ScopedMockTransaction transaction(kSimpleGET_Transaction);
+ transaction.response_headers = "Content-Type: application/javascript\n";
+
+ MockHttpRequest trans_info = MockHttpRequest(transaction);
+
+ // Requesting with the same top-frame origin should not count as third-party
+ // but should still be recorded as JavaScript
+ trans_info.network_isolation_key = NetworkIsolationKey(origin_a, origin_a);
+
+ RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info,
+ &response);
+
+ histograms.ExpectTotalCount("HttpCache.Pattern", 1);
+ histograms.ExpectTotalCount("HttpCache.Pattern.JavaScript", 1);
+ histograms.ExpectTotalCount("HttpCache.Pattern.JavaScriptThirdParty", 0);
+
+ // Requesting with a different top-frame origin should count as third-party
+ // and recorded as JavaScript
+ trans_info.network_isolation_key = NetworkIsolationKey(origin_b, origin_b);
+
+ RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info,
+ &response);
+ histograms.ExpectTotalCount("HttpCache.Pattern", 2);
+ histograms.ExpectTotalCount("HttpCache.Pattern.JavaScript", 2);
+ histograms.ExpectTotalCount("HttpCache.Pattern.JavaScriptThirdParty", 1);
+}
+
+TEST_F(HttpCacheTest, HttpCacheProfileThirdPartyFont) {
+ base::HistogramTester histograms;
+ MockHttpCache cache;
+ HttpResponseInfo response;
+
+ url::Origin origin_a = url::Origin::Create(GURL(kSimpleGET_Transaction.url));
+ url::Origin origin_b = url::Origin::Create(GURL("http://b.com"));
+
+ ScopedMockTransaction transaction(kSimpleGET_Transaction);
+ transaction.response_headers = "Content-Type: font/otf\n";
+
+ MockHttpRequest trans_info = MockHttpRequest(transaction);
+
+ // Requesting with the same top-frame origin should not count as third-party
+ // but should still be recorded as a font
+ trans_info.network_isolation_key = NetworkIsolationKey(origin_a, origin_a);
+
+ RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info,
+ &response);
+
+ histograms.ExpectTotalCount("HttpCache.Pattern", 1);
+ histograms.ExpectTotalCount("HttpCache.Pattern.Font", 1);
+ histograms.ExpectTotalCount("HttpCache.Pattern.FontThirdParty", 0);
+
+ // Requesting with a different top-frame origin should count as third-party
+ // and recorded as a font
+ trans_info.network_isolation_key = NetworkIsolationKey(origin_b, origin_b);
+
+ RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info,
+ &response);
+ histograms.ExpectTotalCount("HttpCache.Pattern", 2);
+ histograms.ExpectTotalCount("HttpCache.Pattern.Font", 2);
+ histograms.ExpectTotalCount("HttpCache.Pattern.FontThirdParty", 1);
+}
+
TEST_F(HttpCacheTest, SplitCache) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(
@@ -10166,7 +10458,7 @@ using HugeCacheTestConfiguration =
class HttpCacheHugeResourceTest
: public ::testing::TestWithParam<HugeCacheTestConfiguration>,
- public WithScopedTaskEnvironment {
+ public WithTaskEnvironment {
public:
static std::list<HugeCacheTestConfiguration> GetTestModes();
static std::list<HugeCacheTestConfiguration> kTestModes;
@@ -10675,7 +10967,7 @@ TEST_F(HttpCacheTest, NetworkBytesRange) {
RemoveMockTransaction(&kRangeGET_TransactionOK);
}
-class HttpCachePrefetchValidationTest : public TestWithScopedTaskEnvironment {
+class HttpCachePrefetchValidationTest : public TestWithTaskEnvironment {
protected:
static const int kNumSecondsPerMinute = 60;
static const int kMaxAgeSecs = 100;
@@ -10933,6 +11225,37 @@ TEST_F(HttpCacheTest, StaleContentNotUsedWhenUnusable) {
EXPECT_FALSE(response_info.async_revalidation_requested);
}
+TEST_F(HttpCacheTest, StaleContentWriteError) {
+ MockHttpCache cache;
+ base::SimpleTestClock clock;
+ cache.http_cache()->SetClockForTesting(&clock);
+ cache.network_layer()->SetClock(&clock);
+ clock.Advance(base::TimeDelta::FromSeconds(10));
+
+ ScopedMockTransaction stale_while_revalidate_transaction(
+ kSimpleGET_Transaction);
+ stale_while_revalidate_transaction.load_flags |=
+ LOAD_SUPPORT_ASYNC_REVALIDATION;
+ stale_while_revalidate_transaction.response_headers =
+ "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
+ "Age: 10801\n"
+ "Cache-Control: max-age=0,stale-while-revalidate=86400\n";
+
+ // Write to the cache.
+ RunTransactionTest(cache.http_cache(), stale_while_revalidate_transaction);
+
+ EXPECT_EQ(1, cache.network_layer()->transaction_count());
+
+ // Send the request again but inject a write fault. Should still work
+ // (and not dereference any null pointers).
+ cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_WRITE);
+ HttpResponseInfo response_info;
+ RunTransactionTestWithResponseInfo(
+ cache.http_cache(), stale_while_revalidate_transaction, &response_info);
+
+ EXPECT_EQ(2, cache.network_layer()->transaction_count());
+}
+
// Tests that we allow multiple simultaneous, non-overlapping transactions to
// take place on a sparse entry.
TEST_F(HttpCacheTest, RangeGET_MultipleRequests) {
@@ -11853,7 +12176,7 @@ TEST_F(HttpCacheIOCallbackTest, FailedOpenOrCreateFollowedByOpenOrCreate) {
class HttpCacheMemoryDumpTest
: public testing::TestWithParam<base::trace_event::MemoryDumpLevelOfDetail>,
- public WithScopedTaskEnvironment {};
+ public WithTaskEnvironment {};
INSTANTIATE_TEST_SUITE_P(
/* no prefix */,
diff --git a/chromium/net/http/http_cache_writers_unittest.cc b/chromium/net/http/http_cache_writers_unittest.cc
index 8690686af01..ffe9ff845b7 100644
--- a/chromium/net/http/http_cache_writers_unittest.cc
+++ b/chromium/net/http/http_cache_writers_unittest.cc
@@ -20,7 +20,7 @@
#include "net/http/mock_http_cache.h"
#include "net/http/partial_data.h"
#include "net/test/gtest_util.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -70,7 +70,7 @@ class TestHttpCache : public HttpCache {
size_t make_readers_size_ = 0u;
};
-class WritersTest : public TestWithScopedTaskEnvironment {
+class WritersTest : public TestWithTaskEnvironment {
public:
enum class DeleteTransactionType { NONE, ACTIVE, WAITING, IDLE };
WritersTest()
@@ -385,7 +385,7 @@ class WritersTest : public TestWithScopedTaskEnvironment {
std::vector<TestCompletionCallback> callbacks(results->size());
// Fail the request.
- cache_.disk_cache()->set_soft_failures(true);
+ cache_.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL);
// We have to open the entry again to propagate the failure flag.
disk_cache::Entry* en;
diff --git a/chromium/net/http/http_network_layer.cc b/chromium/net/http/http_network_layer.cc
index 1c835fa6d75..14b8ebad2de 100644
--- a/chromium/net/http/http_network_layer.cc
+++ b/chromium/net/http/http_network_layer.cc
@@ -11,7 +11,7 @@
#include "base/strings/string_util.h"
#include "net/http/http_network_session.h"
#include "net/http/http_network_transaction.h"
-#include "net/http/http_server_properties_impl.h"
+#include "net/http/http_server_properties.h"
#include "net/http/http_stream_factory_job.h"
#include "net/spdy/spdy_session.h"
#include "net/spdy/spdy_session_pool.h"
diff --git a/chromium/net/http/http_network_layer_unittest.cc b/chromium/net/http/http_network_layer_unittest.cc
index 0f6514582be..b8c7a7b9c02 100644
--- a/chromium/net/http/http_network_layer_unittest.cc
+++ b/chromium/net/http/http_network_layer_unittest.cc
@@ -12,7 +12,7 @@
#include "net/cert/multi_log_ct_verifier.h"
#include "net/dns/mock_host_resolver.h"
#include "net/http/http_network_session.h"
-#include "net/http/http_server_properties_impl.h"
+#include "net/http/http_server_properties.h"
#include "net/http/http_transaction_test_util.h"
#include "net/http/transport_security_state.h"
#include "net/log/net_log_with_source.h"
@@ -21,7 +21,7 @@
#include "net/spdy/spdy_session_pool.h"
#include "net/ssl/ssl_config_service_defaults.h"
#include "net/test/gtest_util.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -34,8 +34,7 @@ namespace net {
namespace {
-class HttpNetworkLayerTest : public PlatformTest,
- public WithScopedTaskEnvironment {
+class HttpNetworkLayerTest : public PlatformTest, public WithTaskEnvironment {
protected:
HttpNetworkLayerTest()
: ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()) {}
@@ -275,7 +274,7 @@ class HttpNetworkLayerTest : public PlatformTest,
std::unique_ptr<HttpNetworkLayer> factory_;
private:
- HttpServerPropertiesImpl http_server_properties_;
+ HttpServerProperties http_server_properties_;
};
TEST_F(HttpNetworkLayerTest, CreateAndDestroy) {
diff --git a/chromium/net/http/http_network_session.cc b/chromium/net/http/http_network_session.cc
index 93e89e46866..35549024a49 100644
--- a/chromium/net/http/http_network_session.cc
+++ b/chromium/net/http/http_network_session.cc
@@ -32,6 +32,7 @@
#include "net/socket/client_socket_pool_manager_impl.h"
#include "net/socket/next_proto.h"
#include "net/socket/ssl_client_socket.h"
+#include "net/spdy/spdy_session.h"
#include "net/spdy/spdy_session_pool.h"
#include "net/third_party/quiche/src/quic/core/crypto/quic_random.h"
#include "net/third_party/quiche/src/quic/core/quic_packets.h"
@@ -80,6 +81,7 @@ HttpNetworkSession::Params::Params()
enable_spdy_ping_based_connection_checking(true),
enable_http2(true),
spdy_session_max_recv_window_size(kSpdySessionMaxRecvWindowSize),
+ spdy_session_max_queued_capped_frames(kSpdySessionMaxQueuedCappedFrames),
time_func(&base::TimeTicks::Now),
enable_http2_alternative_service(false),
enable_websocket_over_http2(false),
@@ -139,7 +141,8 @@ HttpNetworkSession::HttpNetworkSession(const Params& params,
proxy_resolution_service_(context.proxy_resolution_service),
ssl_config_service_(context.ssl_config_service),
ssl_client_session_cache_(SSLClientSessionCache::Config()),
- ssl_client_context_(context.cert_verifier,
+ ssl_client_context_(context.ssl_config_service,
+ context.cert_verifier,
context.transport_security_state,
context.cert_transparency_verifier,
context.ct_policy_enforcer,
@@ -165,13 +168,16 @@ HttpNetworkSession::HttpNetworkSession(const Params& params,
: quic::QuicChromiumClock::GetInstance(),
params.quic_params),
spdy_session_pool_(context.host_resolver,
- context.ssl_config_service,
+ &ssl_client_context_,
context.http_server_properties,
context.transport_security_state,
params.quic_params.supported_versions,
params.enable_spdy_ping_based_connection_checking,
+ params.enable_http2,
+ params.enable_quic,
params.quic_params.support_ietf_format_quic_altsvc,
params.spdy_session_max_recv_window_size,
+ params.spdy_session_max_queued_capped_frames,
AddDefaultHttp2Settings(params.http2_settings),
params.greased_http2_frame,
params.time_func,
@@ -186,12 +192,12 @@ HttpNetworkSession::HttpNetworkSession(const Params& params,
normal_socket_pool_manager_ = std::make_unique<ClientSocketPoolManagerImpl>(
CreateCommonConnectJobParams(false /* for_websockets */),
CreateCommonConnectJobParams(true /* for_websockets */),
- context_.ssl_config_service, NORMAL_SOCKET_POOL);
+ NORMAL_SOCKET_POOL);
websocket_socket_pool_manager_ =
std::make_unique<ClientSocketPoolManagerImpl>(
CreateCommonConnectJobParams(false /* for_websockets */),
CreateCommonConnectJobParams(true /* for_websockets */),
- context_.ssl_config_service, WEBSOCKET_SOCKET_POOL);
+ WEBSOCKET_SOCKET_POOL);
if (params_.enable_http2)
next_protos_.push_back(kProtoHTTP2);
@@ -342,22 +348,6 @@ void HttpNetworkSession::CloseIdleConnections() {
spdy_session_pool_.CloseCurrentIdleSessions();
}
-bool HttpNetworkSession::IsProtocolEnabled(NextProto protocol) const {
- switch (protocol) {
- case kProtoUnknown:
- NOTREACHED();
- return false;
- case kProtoHTTP11:
- return true;
- case kProtoHTTP2:
- return params_.enable_http2;
- case kProtoQUIC:
- return IsQuicEnabled();
- }
- NOTREACHED();
- return false;
-}
-
void HttpNetworkSession::SetServerPushDelegate(
std::unique_ptr<ServerPushDelegate> push_delegate) {
DCHECK(push_delegate);
@@ -373,10 +363,8 @@ void HttpNetworkSession::GetAlpnProtos(NextProtoVector* alpn_protos) const {
*alpn_protos = next_protos_;
}
-void HttpNetworkSession::GetSSLConfig(const HttpRequestInfo& request,
- SSLConfig* server_config,
+void HttpNetworkSession::GetSSLConfig(SSLConfig* server_config,
SSLConfig* proxy_config) const {
- ssl_config_service_->GetSSLConfig(server_config);
GetAlpnProtos(&server_config->alpn_protos);
server_config->ignore_certificate_errors = params_.ignore_certificate_errors;
*proxy_config = *server_config;
diff --git a/chromium/net/http/http_network_session.h b/chromium/net/http/http_network_session.h
index 1e2131fe79e..d6ad5607abe 100644
--- a/chromium/net/http/http_network_session.h
+++ b/chromium/net/http/http_network_session.h
@@ -27,6 +27,7 @@
#include "net/base/host_port_pair.h"
#include "net/base/net_export.h"
#include "net/http/http_auth_cache.h"
+#include "net/http/http_auth_preferences.h"
#include "net/http/http_stream_factory.h"
#include "net/net_buildflags.h"
#include "net/quic/quic_stream_factory.h"
@@ -34,7 +35,6 @@
#include "net/socket/next_proto.h"
#include "net/socket/websocket_endpoint_lock_manager.h"
#include "net/spdy/spdy_session_pool.h"
-#include "net/ssl/ssl_client_auth_cache.h"
#include "net/ssl/ssl_client_session_cache.h"
#include "net/third_party/quiche/src/spdy/core/spdy_protocol.h"
@@ -106,6 +106,8 @@ class NET_EXPORT HttpNetworkSession {
bool enable_spdy_ping_based_connection_checking;
bool enable_http2;
size_t spdy_session_max_recv_window_size;
+ // Maximum number of capped frames that can be queued at any time.
+ int spdy_session_max_queued_capped_frames;
// HTTP/2 connection settings.
// Unknown settings will still be sent to the server.
// Might contain unknown setting identifiers from a predefined set that
@@ -140,7 +142,7 @@ class NET_EXPORT HttpNetworkSession {
QuicParams quic_params;
// If non-empty, QUIC will only be spoken to hosts in this list.
- base::flat_set<std::string> quic_host_whitelist;
+ base::flat_set<std::string> quic_host_allowlist;
// Enable HTTP/0.9 for HTTP/HTTPS on ports other than the default one for
// each protocol.
@@ -148,6 +150,10 @@ class NET_EXPORT HttpNetworkSession {
// If true, idle sockets won't be closed when memory pressure happens.
bool disable_idle_sockets_close_on_memory_pressure;
+
+ // If authentication APIs that support ambient authentication are allowed
+ // to use the default credentials.
+ HttpAuthPreferences::DefaultCredentials allow_default_credentials;
};
// Structure with pointers to the dependencies of the HttpNetworkSession.
@@ -195,9 +201,7 @@ class NET_EXPORT HttpNetworkSession {
~HttpNetworkSession();
HttpAuthCache* http_auth_cache() { return &http_auth_cache_; }
- SSLClientAuthCache* ssl_client_auth_cache() {
- return &ssl_client_auth_cache_;
- }
+ SSLClientContext* ssl_client_context() { return &ssl_client_context_; }
void AddResponseDrainer(std::unique_ptr<HttpResponseBodyDrainer> drainer);
@@ -258,18 +262,13 @@ class NET_EXPORT HttpNetworkSession {
// Returns the original Context used to construct this session.
const Context& context() const { return context_; }
- bool IsProtocolEnabled(NextProto protocol) const;
-
void SetServerPushDelegate(std::unique_ptr<ServerPushDelegate> push_delegate);
// Populates |*alpn_protos| with protocols to be used with ALPN.
void GetAlpnProtos(NextProtoVector* alpn_protos) const;
- // Populates |server_config| and |proxy_config| based on this session and
- // |request|.
- void GetSSLConfig(const HttpRequestInfo& request,
- SSLConfig* server_config,
- SSLConfig* proxy_config) const;
+ // Populates |server_config| and |proxy_config| based on this session.
+ void GetSSLConfig(SSLConfig* server_config, SSLConfig* proxy_config) const;
// Dumps memory allocation stats. |parent_dump_absolute_name| is the name
// used by the parent MemoryAllocatorDump in the memory dump hierarchy.
@@ -315,7 +314,6 @@ class NET_EXPORT HttpNetworkSession {
SSLConfigService* const ssl_config_service_;
HttpAuthCache http_auth_cache_;
- SSLClientAuthCache ssl_client_auth_cache_;
SSLClientSessionCache ssl_client_session_cache_;
SSLClientContext ssl_client_context_;
WebSocketEndpointLockManager websocket_endpoint_lock_manager_;
diff --git a/chromium/net/http/http_network_transaction.cc b/chromium/net/http/http_network_transaction.cc
index 9aea7f000c9..149fdf61c68 100644
--- a/chromium/net/http/http_network_transaction.cc
+++ b/chromium/net/http/http_network_transaction.cc
@@ -66,6 +66,7 @@
#include "net/ssl/ssl_info.h"
#include "net/ssl/ssl_private_key.h"
#include "url/gurl.h"
+#include "url/scheme_host_port.h"
#include "url/url_canon.h"
#if BUILDFLAG(ENABLE_REPORTING)
@@ -117,7 +118,7 @@ HttpNetworkTransaction::HttpNetworkTransaction(RequestPriority priority,
priority_(priority),
headers_valid_(false),
can_send_early_data_(false),
- server_ssl_client_cert_was_cached_(false),
+ configured_client_cert_for_server_(false),
request_headers_(),
#if BUILDFLAG(ENABLE_REPORTING)
network_error_logging_report_generated_(false),
@@ -182,8 +183,7 @@ int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info,
start_timeticks_ = base::TimeTicks::Now();
#endif // BUILDFLAG(ENABLE_REPORTING)
- // Now that we have an HttpRequestInfo object, update server_ssl_config_.
- session_->GetSSLConfig(*request_, &server_ssl_config_, &proxy_ssl_config_);
+ session_->GetSSLConfig(&server_ssl_config_, &proxy_ssl_config_);
if (request_->load_flags & LOAD_DISABLE_CERT_NETWORK_FETCHES) {
server_ssl_config_.disable_cert_verification_network_fetches = true;
@@ -194,8 +194,14 @@ int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info,
can_send_early_data_ = true;
}
- if (request_->load_flags & LOAD_PREFETCH)
+ if (request_->load_flags & LOAD_PREFETCH) {
response_.unused_since_prefetch = true;
+ }
+
+ if (request_->load_flags & LOAD_RESTRICTED_PREFETCH) {
+ DCHECK(response_.unused_since_prefetch);
+ response_.restricted_prefetch = true;
+ }
next_state_ = STATE_NOTIFY_BEFORE_CREATE_STREAM;
int rv = DoLoop(OK);
@@ -235,8 +241,8 @@ int HttpNetworkTransaction::RestartWithCertificate(
scoped_refptr<X509Certificate> client_cert,
scoped_refptr<SSLPrivateKey> client_private_key,
CompletionOnceCallback callback) {
- // In HandleCertificateRequest(), we always tear down existing stream
- // requests to force a new connection. So we shouldn't have one here.
+ // When we receive ERR_SSL_CLIENT_AUTH_CERT_NEEDED, we always tear down
+ // existing streams and stream requests to force a new connection.
DCHECK(!stream_request_.get());
DCHECK(!stream_.get());
DCHECK_EQ(STATE_NONE, next_state_);
@@ -244,14 +250,15 @@ int HttpNetworkTransaction::RestartWithCertificate(
if (!CheckMaxRestarts())
return ERR_TOO_MANY_RETRIES;
- SSLConfig* ssl_config = response_.cert_request_info->is_proxy ?
- &proxy_ssl_config_ : &server_ssl_config_;
- ssl_config->send_client_cert = true;
- ssl_config->client_cert = client_cert;
- ssl_config->client_private_key = client_private_key;
- session_->ssl_client_auth_cache()->Add(
+ // Add the credentials to the client auth cache. The next stream request will
+ // then pick them up.
+ session_->ssl_client_context()->SetClientCertificate(
response_.cert_request_info->host_and_port, std::move(client_cert),
std::move(client_private_key));
+
+ if (!response_.cert_request_info->is_proxy)
+ configured_client_cert_for_server_ = true;
+
// Reset the other member variables.
// Note: this is necessary only with SSL renegotiation.
ResetStateForRestart();
@@ -318,7 +325,8 @@ void HttpNetworkTransaction::PrepareForAuthRestart(HttpAuth::Target target) {
if (target == HttpAuth::AUTH_SERVER &&
auth_controllers_[target]->NeedsHTTP11()) {
session_->http_server_properties()->SetHTTP11Required(
- HostPortPair::FromURL(request_->url));
+ HttpServerProperties::GetNormalizedSchemeHostPort(request_->url),
+ request_->network_isolation_key);
}
bool keep_alive = false;
@@ -417,13 +425,6 @@ int HttpNetworkTransaction::Read(IOBuffer* buf,
void HttpNetworkTransaction::StopCaching() {}
-bool HttpNetworkTransaction::GetFullRequestHeaders(
- HttpRequestHeaders* headers) const {
- // TODO(juliatuttle): Make sure we've populated request_headers_.
- *headers = request_headers_;
- return true;
-}
-
int64_t HttpNetworkTransaction::GetTotalReceivedBytes() const {
int64_t total_received_bytes = total_received_bytes_;
if (stream_)
@@ -834,8 +835,6 @@ int HttpNetworkTransaction::DoCreateStreamComplete(int result) {
if (result == OK) {
next_state_ = STATE_INIT_STREAM;
DCHECK(stream_.get());
- } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) {
- result = HandleCertificateRequest(result);
} else if (result == ERR_HTTP_1_1_REQUIRED ||
result == ERR_PROXY_HTTP_1_1_REQUIRED) {
return HandleHttp11Required(result);
@@ -886,7 +885,8 @@ int HttpNetworkTransaction::DoGenerateProxyAuthToken() {
if (!auth_controllers_[target].get())
auth_controllers_[target] = new HttpAuthController(
target, AuthURL(target), session_->http_auth_cache(),
- session_->http_auth_handler_factory(), session_->host_resolver());
+ session_->http_auth_handler_factory(), session_->host_resolver(),
+ session_->params().allow_default_credentials);
return auth_controllers_[target]->MaybeGenerateAuthToken(request_,
io_callback_,
net_log_);
@@ -905,7 +905,8 @@ int HttpNetworkTransaction::DoGenerateServerAuthToken() {
if (!auth_controllers_[target].get()) {
auth_controllers_[target] = new HttpAuthController(
target, AuthURL(target), session_->http_auth_cache(),
- session_->http_auth_handler_factory(), session_->host_resolver());
+ session_->http_auth_handler_factory(), session_->host_resolver(),
+ session_->params().allow_default_credentials);
if (request_->load_flags & LOAD_DO_NOT_USE_EMBEDDED_IDENTITY)
auth_controllers_[target]->DisableEmbeddedIdentity();
}
@@ -1052,6 +1053,9 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) {
// We don't handle a certificate error during SSL renegotiation, so we
// have to return an error that's not in the certificate error range
// (-2xx).
+ //
+ // TODO(davidben): Remove this error. This is impossible now that server
+ // certificates are forbidden from changing in renegotiation.
LOG(ERROR) << "Got a server certificate with error " << result
<< " during SSL renegotiation";
result = ERR_CERT_ERROR_IN_SSL_RENEGOTIATION;
@@ -1060,9 +1064,10 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) {
DCHECK(IsSecureRequest());
response_.cert_request_info = base::MakeRefCounted<SSLCertRequestInfo>();
stream_->GetSSLCertRequestInfo(response_.cert_request_info.get());
- result = HandleCertificateRequest(result);
- if (result == OK)
- return result;
+ total_received_bytes_ += stream_->GetTotalReceivedBytes();
+ total_sent_bytes_ += stream_->GetTotalSentBytes();
+ stream_->Close(true);
+ CacheNetErrorDetailsAndResetStream();
}
if (result == ERR_HTTP_1_1_REQUIRED ||
@@ -1158,7 +1163,7 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) {
if (response_.ssl_info.is_valid() &&
!IsCertStatusError(response_.ssl_info.cert_status)) {
session_->http_stream_factory()->ProcessAlternativeServices(
- session_, response_.headers.get(),
+ session_, request_->network_isolation_key, response_.headers.get(),
url::SchemeHostPort(request_->url));
}
}
@@ -1442,134 +1447,56 @@ void HttpNetworkTransaction::GenerateNetworkErrorLoggingReport(int rv) {
}
#endif // BUILDFLAG(ENABLE_REPORTING)
-int HttpNetworkTransaction::HandleCertificateRequest(int error) {
- // There are two paths through which the server can request a certificate
- // from us. The first is during the initial handshake, the second is
- // during SSL renegotiation.
- //
- // In both cases, we want to close the connection before proceeding.
- // We do this for two reasons:
- // First, we don't want to keep the connection to the server hung for a
- // long time while the user selects a certificate.
- // Second, even if we did keep the connection open, NSS has a bug where
- // restarting the handshake for ClientAuth is currently broken.
- DCHECK_EQ(error, ERR_SSL_CLIENT_AUTH_CERT_NEEDED);
-
- if (stream_.get()) {
- // Since we already have a stream, we're being called as part of SSL
- // renegotiation.
- DCHECK(!stream_request_.get());
- total_received_bytes_ += stream_->GetTotalReceivedBytes();
- total_sent_bytes_ += stream_->GetTotalSentBytes();
- stream_->Close(true);
- CacheNetErrorDetailsAndResetStream();
- }
-
- // The server is asking for a client certificate during the initial
- // handshake.
- stream_request_.reset();
-
- // If the user selected one of the certificates in client_certs or declined
- // to provide one for this server before, use the past decision
- // automatically.
- scoped_refptr<X509Certificate> client_cert;
- scoped_refptr<SSLPrivateKey> client_private_key;
- bool found_cached_cert = session_->ssl_client_auth_cache()->Lookup(
- response_.cert_request_info->host_and_port, &client_cert,
- &client_private_key);
- if (!found_cached_cert)
- return error;
-
- // Check that the certificate selected is still a certificate the server
- // is likely to accept, based on the criteria supplied in the
- // CertificateRequest message.
- if (client_cert.get()) {
- const std::vector<std::string>& cert_authorities =
- response_.cert_request_info->cert_authorities;
-
- bool cert_still_valid = cert_authorities.empty() ||
- client_cert->IsIssuedByEncoded(cert_authorities);
- if (!cert_still_valid)
- return error;
- }
-
- if (!response_.cert_request_info->is_proxy) {
- server_ssl_client_cert_was_cached_ = true;
- }
-
- // TODO(davidben): Add a unit test which covers this path; we need to be
- // able to send a legitimate certificate and also bypass/clear the
- // SSL session cache.
- SSLConfig* ssl_config = response_.cert_request_info->is_proxy ?
- &proxy_ssl_config_ : &server_ssl_config_;
- ssl_config->send_client_cert = true;
- ssl_config->client_cert = client_cert;
- ssl_config->client_private_key = client_private_key;
- next_state_ = STATE_CREATE_STREAM;
- // Reset the other member variables.
- // Note: this is necessary only with SSL renegotiation.
- ResetStateForRestart();
- return OK;
-}
-
int HttpNetworkTransaction::HandleHttp11Required(int error) {
DCHECK(error == ERR_HTTP_1_1_REQUIRED ||
error == ERR_PROXY_HTTP_1_1_REQUIRED);
- if (error == ERR_HTTP_1_1_REQUIRED) {
- HttpServerProperties::ForceHTTP11(&server_ssl_config_);
- } else {
- HttpServerProperties::ForceHTTP11(&proxy_ssl_config_);
- }
+ // HttpServerProperties should have been updated, so when the request is sent
+ // again, it will automatically use HTTP/1.1.
ResetConnectionAndRequestForResend();
return OK;
}
int HttpNetworkTransaction::HandleSSLClientAuthError(int error) {
- // Most client auth errors here come from the origin server, but they may come
- // from the proxy if the request is not tunneled (i.e. the origin is HTTP, so
- // there is no HTTPS connection) and the proxy does not report a bad client
- // certificate until after the TLS handshake completes. The latter occurs in
- // TLS 1.3 or TLS 1.2 with False Start (disabled for proxies). The error will
- // then surface out of Read() rather than Connect() and ultimately surfaced
- // out of DoReadHeadersComplete().
+ // Client certificate errors may come from either the origin server or the
+ // proxy.
+ //
+ // Origin errors are handled here, while most proxy errors are handled in the
+ // HttpStreamFactory and below. However, if the request is not tunneled (i.e.
+ // the origin is HTTP, so there is no HTTPS connection) and the proxy does not
+ // report a bad client certificate until after the TLS handshake completes.
+ // The latter occurs in TLS 1.3 or TLS 1.2 with False Start (disabled for
+ // proxies). The error will then surface out of Read() rather than Connect()
+ // and ultimately surfaced out of DoReadHeadersComplete().
//
// See https://crbug.com/828965.
- bool is_server;
- SSLConfig* ssl_config;
- HostPortPair host_port_pair;
- if (UsingHttpProxyWithoutTunnel()) {
- is_server = false;
- ssl_config = &proxy_ssl_config_;
- host_port_pair = proxy_info_.proxy_server().host_port_pair();
- } else {
- is_server = true;
- ssl_config = &server_ssl_config_;
- host_port_pair = HostPortPair::FromURL(request_->url);
- }
+ bool is_server = !UsingHttpProxyWithoutTunnel();
+ HostPortPair host_port_pair =
+ is_server ? HostPortPair::FromURL(request_->url)
+ : proxy_info_.proxy_server().host_port_pair();
- // Client certificate errors from the proxy are handled in the
- // HttpStreamFactory and below.
- if (ssl_config->send_client_cert &&
- (error == ERR_SSL_PROTOCOL_ERROR || IsClientCertificateError(error))) {
+ if (error == ERR_SSL_PROTOCOL_ERROR || IsClientCertificateError(error)) {
DCHECK((is_server && IsSecureRequest()) || proxy_info_.is_https());
- session_->ssl_client_auth_cache()->Remove(host_port_pair);
-
- // The private key handle may have gone stale due to, e.g., the user
- // unplugging their smartcard. Operating systems do not provide reliable
- // notifications for this, so if the signature failed and the private key
- // came from SSLClientAuthCache, retry to ask the user for a new one.
- if (is_server && error == ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED &&
- server_ssl_client_cert_was_cached_ && !HasExceededMaxRetries()) {
- server_ssl_client_cert_was_cached_ = false;
- server_ssl_config_.send_client_cert = false;
- server_ssl_config_.client_cert = nullptr;
- server_ssl_config_.client_private_key = nullptr;
- retry_attempts_++;
- net_log_.AddEventWithNetErrorCode(
- NetLogEventType::HTTP_TRANSACTION_RESTART_AFTER_ERROR, error);
- ResetConnectionAndRequestForResend();
- return OK;
+ if (session_->ssl_client_context()->ClearClientCertificate(
+ host_port_pair)) {
+ // The private key handle may have gone stale due to, e.g., the user
+ // unplugging their smartcard. Operating systems do not provide reliable
+ // notifications for this, so if the signature failed and the user was
+ // not already prompted for certificate on this request, retry to ask
+ // the user for a new one.
+ //
+ // TODO(davidben): There is no corresponding feature for proxy client
+ // certificates. Ideally this would live at a lower level, common to both,
+ // but |configured_client_cert_for_server_| is not accessible below the
+ // socket pools.
+ if (is_server && error == ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED &&
+ !configured_client_cert_for_server_ && !HasExceededMaxRetries()) {
+ retry_attempts_++;
+ net_log_.AddEventWithNetErrorCode(
+ NetLogEventType::HTTP_TRANSACTION_RESTART_AFTER_ERROR, error);
+ ResetConnectionAndRequestForResend();
+ return OK;
+ }
}
}
return error;
diff --git a/chromium/net/http/http_network_transaction.h b/chromium/net/http/http_network_transaction.h
index fbb7bf69337..3fb09d25cf2 100644
--- a/chromium/net/http/http_network_transaction.h
+++ b/chromium/net/http/http_network_transaction.h
@@ -70,7 +70,6 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction
int buf_len,
CompletionOnceCallback callback) override;
void StopCaching() override;
- bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override;
int64_t GetTotalReceivedBytes() const override;
int64_t GetTotalSentBytes() const override;
void DoneReading() override;
@@ -223,9 +222,6 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction
// response to a CONNECT request.
void LogBlockedTunnelResponse(int response_code) const;
- // Called to handle a client certificate request.
- int HandleCertificateRequest(int error);
-
// Called wherever ERR_HTTP_1_1_REQUIRED or
// ERR_PROXY_HTTP_1_1_REQUIRED has to be handled.
int HandleHttp11Required(int error);
@@ -339,9 +335,9 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction
// True if we can send the request over early data.
bool can_send_early_data_;
- // True if |server_ssl_config_.client_cert| was looked up from the
- // SSLClientAuthCache, rather than provided externally by the caller.
- bool server_ssl_client_cert_was_cached_;
+ // True if the client certificate for the server (rather than the proxy) was
+ // configured in this transaction.
+ bool configured_client_cert_for_server_;
// SSL configuration used for the server and proxy, respectively. Note
// |server_ssl_config_| may be updated from the HttpStreamFactory, which will
diff --git a/chromium/net/http/http_network_transaction_unittest.cc b/chromium/net/http/http_network_transaction_unittest.cc
index 7bd3fffca68..34169b51d1b 100644
--- a/chromium/net/http/http_network_transaction_unittest.cc
+++ b/chromium/net/http/http_network_transaction_unittest.cc
@@ -31,9 +31,9 @@
#include "base/strings/utf_string_conversions.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
-#include "base/test/scoped_task_environment.h"
#include "base/test/simple_test_clock.h"
#include "base/test/simple_test_tick_clock.h"
+#include "base/test/task_environment.h"
#include "base/test/test_file_util.h"
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
@@ -69,7 +69,7 @@
#include "net/http/http_proxy_connect_job.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_info.h"
-#include "net/http/http_server_properties_impl.h"
+#include "net/http/http_server_properties.h"
#include "net/http/http_stream.h"
#include "net/http/http_stream_factory.h"
#include "net/http/http_transaction_test_util.h"
@@ -104,10 +104,11 @@
#include "net/ssl/ssl_config_service.h"
#include "net/ssl/ssl_info.h"
#include "net/ssl/ssl_private_key.h"
+#include "net/ssl/test_ssl_config_service.h"
#include "net/test/cert_test_util.h"
#include "net/test/gtest_util.h"
#include "net/test/test_data_directory.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "net/third_party/quiche/src/spdy/core/spdy_framer.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "net/url_request/static_http_user_agent_settings.h"
@@ -348,31 +349,10 @@ class FailingProxyResolverFactory : public ProxyResolverFactory {
}
};
-class TestSSLConfigService : public SSLConfigService {
- public:
- explicit TestSSLConfigService(const SSLConfig& config) : config_(config) {}
- ~TestSSLConfigService() override = default;
-
- void GetSSLConfig(SSLConfig* config) override { *config = config_; }
-
- bool CanShareConnectionWithClientCerts(
- const std::string& hostname) const override {
- return false;
- }
-
- void UpdateSSLConfigAndNotify(const SSLConfig& config) {
- config_ = config;
- NotifySSLConfigChange();
- }
-
- private:
- SSLConfig config_;
-};
-
} // namespace
class HttpNetworkTransactionTest : public PlatformTest,
- public WithScopedTaskEnvironment {
+ public WithTaskEnvironment {
public:
~HttpNetworkTransactionTest() override {
// Important to restore the per-pool limit first, since the pool limit must
@@ -385,8 +365,7 @@ class HttpNetworkTransactionTest : public PlatformTest,
protected:
HttpNetworkTransactionTest()
- : WithScopedTaskEnvironment(
- base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+ : WithTaskEnvironment(base::test::TaskEnvironment::TimeSource::MOCK_TIME),
dummy_connect_job_params_(
nullptr /* client_socket_factory */,
nullptr /* host_resolver */,
@@ -524,14 +503,6 @@ class HttpNetworkTransactionTest : public PlatformTest,
EXPECT_EQ("GET / HTTP/1.1\r\n",
GetStringValueFromParams(entries[pos], "line"));
- HttpRequestHeaders request_headers;
- EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers));
- std::string value;
- EXPECT_TRUE(request_headers.GetHeader("Host", &value));
- EXPECT_EQ("www.example.org", value);
- EXPECT_TRUE(request_headers.GetHeader("Connection", &value));
- EXPECT_EQ("keep-alive", value);
-
EXPECT_EQ("['Host: www.example.org','Connection: keep-alive']",
GetHeaders(entries[pos].params));
@@ -673,8 +644,7 @@ class CaptureGroupIdTransportSocketPool : public TransportClientSocketPool {
base::TimeDelta(),
ProxyServer::Direct(),
false /* is_for_websockets */,
- common_connect_job_params,
- nullptr /* ssl_config_service */) {}
+ common_connect_job_params) {}
const ClientSocketPool::GroupId& last_group_id_received() const {
return last_group_id_;
@@ -7595,18 +7565,9 @@ TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2) {
ntlm::test::kExpectedAuthenticateMsgEmptyChannelBindingsV2)),
&authenticate_msg);
- // Retry with authorization header.
- spdy::SpdyHeaderBlock request_headers1(
- spdy_util_.ConstructGetHeaderBlock(kUrl));
- request_headers1["authorization"] = std::string("NTLM ") + negotiate_msg;
- spdy::SpdySerializedFrame request1(spdy_util_.ConstructSpdyHeaders(
- 3, std::move(request_headers1), LOWEST, true));
-
- spdy::SpdySerializedFrame rst(
- spdy_util_.ConstructSpdyRstStream(3, spdy::ERROR_CODE_HTTP_1_1_REQUIRED));
-
MockWrite writes0[] = {CreateMockWrite(request0, 0)};
- MockRead reads0[] = {CreateMockRead(resp, 1), MockRead(ASYNC, 0, 2)};
+ MockRead reads0[] = {CreateMockRead(resp, 1),
+ MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2)};
// Retry yet again using HTTP/1.1.
MockWrite writes1[] = {
@@ -7649,7 +7610,11 @@ TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2) {
SSLSocketDataProvider ssl0(ASYNC, OK);
ssl0.next_proto = kProtoHTTP2;
+ ssl0.next_protos_expected_in_ssl_config =
+ NextProtoVector{kProtoHTTP2, kProtoHTTP11};
SSLSocketDataProvider ssl1(ASYNC, OK);
+ // When creating the second connection, only HTTP/1.1 should be allowed.
+ ssl1.next_protos_expected_in_ssl_config = NextProtoVector{kProtoHTTP11};
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl0);
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1);
@@ -7709,6 +7674,225 @@ TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2) {
EXPECT_TRUE(data1.AllWriteDataConsumed());
}
+#if BUILDFLAG(ENABLE_WEBSOCKETS)
+
+// Variant of above test using WebSockets.
+TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2WithWebsockets) {
+ const GURL kInitialUrl("https://server/");
+ const GURL kWebSocketUrl("wss://server/");
+ HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(
+ MockGetMSTime, MockGenerateRandom, MockGetHostName);
+
+ // Initial request establishes an H2 connection, which will then be reused for
+ // WebSockets. This is needed since WebSockets will reuse H2 connections, but
+ // it won't create a new one.
+ spdy::SpdyHeaderBlock initial_request_headers(
+ spdy_util_.ConstructGetHeaderBlock(kInitialUrl.spec()));
+ spdy::SpdySerializedFrame initial_request(spdy_util_.ConstructSpdyHeaders(
+ 1, std::move(initial_request_headers), DEFAULT_PRIORITY, true));
+ spdy::SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck());
+
+ // Settings frame, indicating WebSockets is supported.
+ spdy::SettingsMap settings;
+ settings[spdy::SETTINGS_ENABLE_CONNECT_PROTOCOL] = 1;
+ spdy::SpdySerializedFrame settings_frame(
+ spdy_util_.ConstructSpdySettings(settings));
+
+ // Response headers for first request. Body is never received, but that
+ // shouldn't matter for the purposes of this test.
+ spdy::SpdySerializedFrame initial_response(
+ spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
+
+ // First WebSocket request, which has no credentials.
+ spdy::SpdyHeaderBlock websocket_request_headers;
+ websocket_request_headers[spdy::kHttp2MethodHeader] = "CONNECT";
+ websocket_request_headers[spdy::kHttp2AuthorityHeader] = "server";
+ websocket_request_headers[spdy::kHttp2SchemeHeader] = "https";
+ websocket_request_headers[spdy::kHttp2PathHeader] = "/";
+ websocket_request_headers[spdy::kHttp2ProtocolHeader] = "websocket";
+ websocket_request_headers["origin"] = "http://server";
+ websocket_request_headers["sec-websocket-version"] = "13";
+ websocket_request_headers["sec-websocket-extensions"] =
+ "permessage-deflate; client_max_window_bits";
+ spdy::SpdySerializedFrame websocket_request(spdy_util_.ConstructSpdyHeaders(
+ 3, std::move(websocket_request_headers), MEDIUM, false));
+
+ // Auth challenge to WebSocket request.
+ spdy::SpdyHeaderBlock auth_challenge_headers;
+ auth_challenge_headers[spdy::kHttp2StatusHeader] = "401";
+ auth_challenge_headers["www-authenticate"] = "NTLM";
+ spdy::SpdySerializedFrame websocket_auth_challenge(
+ spdy_util_.ConstructSpdyResponseHeaders(
+ 3, std::move(auth_challenge_headers), true));
+
+ MockWrite writes0[] = {CreateMockWrite(initial_request, 0),
+ CreateMockWrite(settings_ack, 2),
+ CreateMockWrite(websocket_request, 4),
+ MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 7)};
+ MockRead reads0[] = {CreateMockRead(settings_frame, 1),
+ CreateMockRead(initial_response, 3),
+ CreateMockRead(websocket_auth_challenge, 5),
+ MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6)};
+
+ // Generate the NTLM messages based on known test data.
+ std::string negotiate_msg;
+ std::string challenge_msg;
+ std::string authenticate_msg;
+ base::Base64Encode(
+ base::StringPiece(
+ reinterpret_cast<const char*>(ntlm::test::kExpectedNegotiateMsg),
+ base::size(ntlm::test::kExpectedNegotiateMsg)),
+ &negotiate_msg);
+ base::Base64Encode(
+ base::StringPiece(
+ reinterpret_cast<const char*>(ntlm::test::kChallengeMsgFromSpecV2),
+ base::size(ntlm::test::kChallengeMsgFromSpecV2)),
+ &challenge_msg);
+ base::Base64Encode(
+ base::StringPiece(
+ reinterpret_cast<const char*>(
+ ntlm::test::kExpectedAuthenticateMsgEmptyChannelBindingsV2),
+ base::size(
+ ntlm::test::kExpectedAuthenticateMsgEmptyChannelBindingsV2)),
+ &authenticate_msg);
+
+ // Retry yet again using HTTP/1.1.
+ MockWrite writes1[] = {
+ // After restarting with a null identity, this is the
+ // request we should be issuing -- the final header line contains a Type
+ // 1 message.
+ MockWrite("GET / HTTP/1.1\r\n"
+ "Host: server\r\n"
+ "Connection: Upgrade\r\n"
+ "Authorization: NTLM "),
+ MockWrite(negotiate_msg.c_str()),
+ MockWrite("\r\n"),
+ MockWrite("Origin: http://server\r\n"
+ "Sec-WebSocket-Version: 13\r\n"
+ "Upgrade: websocket\r\n"
+ "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
+ "Sec-WebSocket-Extensions: permessage-deflate; "
+ "client_max_window_bits\r\n\r\n"),
+
+ // After calling trans.RestartWithAuth(), we should send a Type 3 message
+ // (the credentials for the origin server). The second request continues
+ // on the same connection.
+ MockWrite("GET / HTTP/1.1\r\n"
+ "Host: server\r\n"
+ "Connection: Upgrade\r\n"
+ "Authorization: NTLM "),
+ MockWrite(authenticate_msg.c_str()),
+ MockWrite("\r\n"),
+ MockWrite("Origin: http://server\r\n"
+ "Sec-WebSocket-Version: 13\r\n"
+ "Upgrade: websocket\r\n"
+ "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
+ "Sec-WebSocket-Extensions: permessage-deflate; "
+ "client_max_window_bits\r\n\r\n"),
+ };
+
+ MockRead reads1[] = {
+ // The origin server responds with a Type 2 message.
+ MockRead("HTTP/1.1 401 Access Denied\r\n"),
+ MockRead("WWW-Authenticate: NTLM "),
+ MockRead(challenge_msg.c_str()),
+ MockRead("\r\n"),
+ MockRead("Content-Length: 42\r\n"),
+ MockRead("Content-Type: text/html\r\n\r\n"),
+ MockRead("You are not authorized to view this page\r\n"),
+
+ // Lastly we get the desired content.
+ MockRead("HTTP/1.1 101 Switching Protocols\r\n"
+ "Upgrade: websocket\r\n"
+ "Connection: Upgrade\r\n"
+ "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n"),
+ };
+ SequencedSocketData data0(reads0, writes0);
+ session_deps_.socket_factory->AddSocketDataProvider(&data0);
+ SSLSocketDataProvider ssl0(ASYNC, OK);
+ ssl0.next_proto = kProtoHTTP2;
+ ssl0.next_protos_expected_in_ssl_config =
+ NextProtoVector{kProtoHTTP2, kProtoHTTP11};
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl0);
+
+ StaticSocketDataProvider data1(reads1, writes1);
+ session_deps_.socket_factory->AddSocketDataProvider(&data1);
+ SSLSocketDataProvider ssl1(ASYNC, OK);
+ // When creating the second connection, only HTTP/1.1 should be allowed.
+ ssl1.next_protos_expected_in_ssl_config = NextProtoVector{};
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1);
+
+ session_deps_.enable_websocket_over_http2 = true;
+ std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+
+ HttpRequestInfo initial_request_info;
+ initial_request_info.method = "GET";
+ initial_request_info.url = kInitialUrl;
+ initial_request_info.traffic_annotation =
+ net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+ HttpNetworkTransaction initial_trans(DEFAULT_PRIORITY, session.get());
+ TestCompletionCallback initial_callback;
+ int rv = initial_trans.Start(&initial_request_info,
+ initial_callback.callback(), NetLogWithSource());
+ EXPECT_THAT(initial_callback.GetResult(rv), IsOk());
+
+ EXPECT_FALSE(session->http_server_properties()->RequiresHTTP11(
+ url::SchemeHostPort(kInitialUrl), NetworkIsolationKey()));
+
+ HttpRequestInfo websocket_request_info;
+ websocket_request_info.method = "GET";
+ websocket_request_info.url = kWebSocketUrl;
+ websocket_request_info.traffic_annotation =
+ net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+ EXPECT_TRUE(HostPortPair::FromURL(initial_request_info.url)
+ .Equals(HostPortPair::FromURL(websocket_request_info.url)));
+ websocket_request_info.extra_headers.SetHeader("Origin", "http://server");
+ websocket_request_info.extra_headers.SetHeader("Sec-WebSocket-Version", "13");
+ // The following two headers must be removed by WebSocketHttp2HandshakeStream.
+ websocket_request_info.extra_headers.SetHeader("Connection", "Upgrade");
+ websocket_request_info.extra_headers.SetHeader("Upgrade", "websocket");
+
+ TestWebSocketHandshakeStreamCreateHelper websocket_stream_create_helper;
+
+ HttpNetworkTransaction websocket_trans(MEDIUM, session.get());
+ websocket_trans.SetWebSocketHandshakeStreamCreateHelper(
+ &websocket_stream_create_helper);
+
+ TestCompletionCallback websocket_callback;
+ rv = websocket_trans.Start(&websocket_request_info,
+ websocket_callback.callback(), NetLogWithSource());
+ EXPECT_THAT(websocket_callback.GetResult(rv), IsOk());
+
+ EXPECT_FALSE(websocket_trans.IsReadyToRestartForAuth());
+
+ const HttpResponseInfo* response = websocket_trans.GetResponseInfo();
+ ASSERT_TRUE(response);
+ EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge));
+
+ rv = websocket_trans.RestartWithAuth(
+ AuthCredentials(ntlm::test::kDomainUserCombined, ntlm::test::kPassword),
+ websocket_callback.callback());
+ EXPECT_THAT(websocket_callback.GetResult(rv), IsOk());
+
+ EXPECT_TRUE(websocket_trans.IsReadyToRestartForAuth());
+
+ response = websocket_trans.GetResponseInfo();
+ ASSERT_TRUE(response);
+ EXPECT_FALSE(response->auth_challenge.has_value());
+
+ rv = websocket_trans.RestartWithAuth(AuthCredentials(),
+ websocket_callback.callback());
+ EXPECT_THAT(websocket_callback.GetResult(rv), IsOk());
+
+ // The server should have been marked as requiring HTTP/1.1. The important
+ // part here is that the scheme that requires HTTP/1.1 should be HTTPS, not
+ // WSS.
+ EXPECT_TRUE(session->http_server_properties()->RequiresHTTP11(
+ url::SchemeHostPort(kInitialUrl), NetworkIsolationKey()));
+}
+
+#endif // BUILDFLAG(ENABLE_WEBSOCKETS)
+
// Test that, if we have an NTLM proxy and the origin resets the connection, we
// do no retry forever checking for TLS version interference. This is a
// regression test for https://crbug.com/823387. The version interference probe
@@ -7721,7 +7905,7 @@ TEST_F(HttpNetworkTransactionTest, NTLMProxyTLSHandshakeReset) {
ProxyResolutionService::CreateFixedFromPacResult(
"PROXY server", TRAFFIC_ANNOTATION_FOR_TESTS);
- SSLConfig config;
+ SSLContextConfig config;
session_deps_.ssl_config_service =
std::make_unique<TestSSLConfigService>(config);
@@ -11153,7 +11337,7 @@ std::unique_ptr<HttpNetworkSession> SetupSessionForGroupIdTests(
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
url::SchemeHostPort("https", "host.with.alternate", 443),
- alternative_service, expiration);
+ NetworkIsolationKey(), alternative_service, expiration);
return session;
}
@@ -11960,7 +12144,9 @@ TEST_F(HttpNetworkTransactionTest, IgnoreAltSvcWithInvalidCert) {
HttpServerProperties* http_server_properties =
session->http_server_properties();
EXPECT_TRUE(
- http_server_properties->GetAlternativeServiceInfos(test_server).empty());
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
EXPECT_THAT(callback.WaitForResult(), IsOk());
@@ -11976,7 +12162,9 @@ TEST_F(HttpNetworkTransactionTest, IgnoreAltSvcWithInvalidCert) {
EXPECT_EQ("hello world", response_data);
EXPECT_TRUE(
- http_server_properties->GetAlternativeServiceInfos(test_server).empty());
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
}
TEST_F(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) {
@@ -12015,7 +12203,92 @@ TEST_F(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) {
HttpServerProperties* http_server_properties =
session->http_server_properties();
EXPECT_TRUE(
- http_server_properties->GetAlternativeServiceInfos(test_server).empty());
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
+
+ EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+ const HttpResponseInfo* response = trans.GetResponseInfo();
+ ASSERT_TRUE(response);
+ ASSERT_TRUE(response->headers);
+ EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
+ EXPECT_FALSE(response->was_fetched_via_spdy);
+ EXPECT_FALSE(response->was_alpn_negotiated);
+
+ std::string response_data;
+ ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk());
+ EXPECT_EQ("hello world", response_data);
+
+ AlternativeServiceInfoVector alternative_service_info_vector =
+ http_server_properties->GetAlternativeServiceInfos(test_server,
+ NetworkIsolationKey());
+ ASSERT_EQ(1u, alternative_service_info_vector.size());
+ AlternativeService alternative_service(kProtoHTTP2, "mail.example.org", 443);
+ EXPECT_EQ(alternative_service,
+ alternative_service_info_vector[0].alternative_service());
+}
+
+TEST_F(HttpNetworkTransactionTest,
+ HonorAlternativeServiceHeaderWithNetworkIsolationKey) {
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitWithFeatures(
+ // enabled_features
+ {features::kPartitionHttpServerPropertiesByNetworkIsolationKey,
+ // Need to partition connections by NetworkIsolationKey for
+ // SpdySessionKeys to include NetworkIsolationKeys.
+ features::kPartitionConnectionsByNetworkIsolationKey},
+ // disabled_features
+ {});
+ // Since HttpServerProperties caches the feature value, have to create a new
+ // one.
+ session_deps_.http_server_properties =
+ std::make_unique<HttpServerProperties>();
+
+ const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+ const net::NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1);
+ const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+ const net::NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2);
+
+ MockRead data_reads[] = {
+ MockRead("HTTP/1.1 200 OK\r\n"),
+ MockRead(kAlternativeServiceHttpHeader),
+ MockRead("\r\n"),
+ MockRead("hello world"),
+ MockRead(SYNCHRONOUS, OK),
+ };
+
+ HttpRequestInfo request;
+ request.method = "GET";
+ request.url = GURL("https://www.example.org/");
+ request.traffic_annotation =
+ net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+ request.network_isolation_key = kNetworkIsolationKey1;
+
+ StaticSocketDataProvider data(data_reads, base::span<MockWrite>());
+ session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+ SSLSocketDataProvider ssl(ASYNC, OK);
+ ssl.ssl_info.cert =
+ ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem");
+ ASSERT_TRUE(ssl.ssl_info.cert);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
+
+ TestCompletionCallback callback;
+
+ std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+ HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
+
+ int rv = trans.Start(&request, callback.callback(), NetLogWithSource());
+ EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+ url::SchemeHostPort test_server(request.url);
+ HttpServerProperties* http_server_properties =
+ session->http_server_properties();
+ EXPECT_TRUE(
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1)
+ .empty());
EXPECT_THAT(callback.WaitForResult(), IsOk());
@@ -12031,11 +12304,23 @@ TEST_F(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) {
EXPECT_EQ("hello world", response_data);
AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_properties->GetAlternativeServiceInfos(test_server);
+ http_server_properties->GetAlternativeServiceInfos(test_server,
+ kNetworkIsolationKey1);
ASSERT_EQ(1u, alternative_service_info_vector.size());
AlternativeService alternative_service(kProtoHTTP2, "mail.example.org", 443);
EXPECT_EQ(alternative_service,
alternative_service_info_vector[0].alternative_service());
+
+ // Make sure the alternative service information is only associated with
+ // kNetworkIsolationKey1.
+ EXPECT_TRUE(
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
+ EXPECT_TRUE(
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2)
+ .empty());
}
// Regression test for https://crbug.com/615497.
@@ -12068,7 +12353,9 @@ TEST_F(HttpNetworkTransactionTest,
HttpServerProperties* http_server_properties =
session->http_server_properties();
EXPECT_TRUE(
- http_server_properties->GetAlternativeServiceInfos(test_server).empty());
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
int rv = trans.Start(&request, callback.callback(), NetLogWithSource());
EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
@@ -12086,7 +12373,9 @@ TEST_F(HttpNetworkTransactionTest,
EXPECT_EQ("hello world", response_data);
EXPECT_TRUE(
- http_server_properties->GetAlternativeServiceInfos(test_server).empty());
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
}
// HTTP/2 Alternative Services should be disabled by default.
@@ -12125,7 +12414,8 @@ TEST_F(HttpNetworkTransactionTest,
444);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(request.url), alternative_service, expiration);
+ url::SchemeHostPort(request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12165,7 +12455,8 @@ TEST_F(HttpNetworkTransactionTest,
AlternativeService alternative_service(kProtoHTTP2, "", 444);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(request.url), alternative_service, expiration);
+ url::SchemeHostPort(request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12184,11 +12475,12 @@ TEST_F(HttpNetworkTransactionTest, ClearAlternativeServices) {
AlternativeService alternative_service(kProtoQUIC, "", 80);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetQuicAlternativeService(
- test_server, alternative_service, expiration,
+ test_server, NetworkIsolationKey(), alternative_service, expiration,
session->params().quic_params.supported_versions);
- EXPECT_EQ(
- 1u,
- http_server_properties->GetAlternativeServiceInfos(test_server).size());
+ EXPECT_EQ(1u,
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .size());
// Send a clear header.
MockRead data_reads[] = {
@@ -12232,7 +12524,9 @@ TEST_F(HttpNetworkTransactionTest, ClearAlternativeServices) {
EXPECT_EQ("hello world", response_data);
EXPECT_TRUE(
- http_server_properties->GetAlternativeServiceInfos(test_server).empty());
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
}
TEST_F(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) {
@@ -12271,7 +12565,9 @@ TEST_F(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) {
HttpServerProperties* http_server_properties =
session->http_server_properties();
EXPECT_TRUE(
- http_server_properties->GetAlternativeServiceInfos(test_server).empty());
+ http_server_properties
+ ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
EXPECT_THAT(callback.WaitForResult(), IsOk());
@@ -12287,7 +12583,8 @@ TEST_F(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) {
EXPECT_EQ("hello world", response_data);
AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_properties->GetAlternativeServiceInfos(test_server);
+ http_server_properties->GetAlternativeServiceInfos(test_server,
+ NetworkIsolationKey());
ASSERT_EQ(2u, alternative_service_info_vector.size());
AlternativeService alternative_service(kProtoHTTP2, "www.example.com", 443);
@@ -12337,7 +12634,7 @@ TEST_F(HttpNetworkTransactionTest, IdentifyQuicBroken) {
AlternativeService alternative_service(kProtoQUIC, alternative);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetQuicAlternativeService(
- server, alternative_service, expiration,
+ server, NetworkIsolationKey(), alternative_service, expiration,
HttpNetworkSession::Params().quic_params.supported_versions);
// Mark the QUIC alternative service as broken.
http_server_properties->MarkAlternativeServiceBroken(alternative_service);
@@ -12411,12 +12708,13 @@ TEST_F(HttpNetworkTransactionTest, IdentifyQuicNotBroken) {
session->params().quic_params.supported_versions));
http_server_properties->SetAlternativeServices(
- server, alternative_service_info_vector);
+ server, NetworkIsolationKey(), alternative_service_info_vector);
// Mark one of the QUIC alternative service as broken.
http_server_properties->MarkAlternativeServiceBroken(alternative_service1);
- EXPECT_EQ(2u,
- http_server_properties->GetAlternativeServiceInfos(server).size());
+ EXPECT_EQ(2u, http_server_properties
+ ->GetAlternativeServiceInfos(server, NetworkIsolationKey())
+ .size());
HttpRequestInfo request;
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
@@ -12469,7 +12767,7 @@ TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) {
666);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- server, alternative_service, expiration);
+ server, NetworkIsolationKey(), alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12488,7 +12786,8 @@ TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) {
EXPECT_EQ("hello world", response_data);
const AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_properties->GetAlternativeServiceInfos(server);
+ http_server_properties->GetAlternativeServiceInfos(server,
+ NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service,
alternative_service_info_vector[0].alternative_service());
@@ -12533,8 +12832,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedBlocked) {
kUnrestrictedAlternatePort);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(restricted_port_request.url), alternative_service,
- expiration);
+ url::SchemeHostPort(restricted_port_request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12584,8 +12883,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedPermitted) {
kUnrestrictedAlternatePort);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(restricted_port_request.url), alternative_service,
- expiration);
+ url::SchemeHostPort(restricted_port_request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12634,8 +12933,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedAllowed) {
kRestrictedAlternatePort);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(restricted_port_request.url), alternative_service,
- expiration);
+ url::SchemeHostPort(restricted_port_request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12684,8 +12983,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortUnrestrictedAllowed1) {
kRestrictedAlternatePort);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(unrestricted_port_request.url), alternative_service,
- expiration);
+ url::SchemeHostPort(unrestricted_port_request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12734,8 +13033,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortUnrestrictedAllowed2) {
kUnrestrictedAlternatePort);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(unrestricted_port_request.url), alternative_service,
- expiration);
+ url::SchemeHostPort(unrestricted_port_request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -12776,7 +13075,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) {
kUnsafePort);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- url::SchemeHostPort(request.url), alternative_service, expiration);
+ url::SchemeHostPort(request.url), NetworkIsolationKey(),
+ alternative_service, expiration);
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
TestCompletionCallback callback;
@@ -13106,7 +13406,7 @@ TEST_F(HttpNetworkTransactionTest, UseOriginNotAlternativeForProxy) {
AlternativeService alternative_service(kProtoHTTP2, alternative);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- server, alternative_service, expiration);
+ server, NetworkIsolationKey(), alternative_service, expiration);
// Non-alternative job should hang.
MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING);
@@ -14344,7 +14644,7 @@ TEST_F(HttpNetworkTransactionTest, MultiRoundAuth) {
1, // Max sockets per group
base::TimeDelta::FromSeconds(10), // unused_idle_socket_timeout
ProxyServer::Direct(), false, // is_for_websockets
- &common_connect_job_params, session_deps_.ssl_config_service.get());
+ &common_connect_job_params);
auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>();
mock_pool_manager->SetSocketPool(ProxyServer::Direct(),
base::WrapUnique(transport_pool));
@@ -15163,7 +15463,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_NoFalseStart) {
// allowing the connection to continue restarting.
scoped_refptr<X509Certificate> client_cert;
scoped_refptr<SSLPrivateKey> client_private_key;
- ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert, &client_private_key));
ASSERT_FALSE(client_cert);
@@ -15175,7 +15475,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_NoFalseStart) {
// Ensure that the client certificate is removed from the cache on a
// handshake failure.
- ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert, &client_private_key));
}
@@ -15281,7 +15581,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_FalseStart) {
// allowing the connection to continue restarting.
scoped_refptr<X509Certificate> client_cert;
scoped_refptr<SSLPrivateKey> client_private_key;
- ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert, &client_private_key));
ASSERT_FALSE(client_cert);
@@ -15293,7 +15593,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_FalseStart) {
// Ensure that the client certificate is removed from the cache on a
// handshake failure.
- ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert, &client_private_key));
}
@@ -15418,12 +15718,12 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Proxy_Fail) {
// allowing the connection to continue restarting.
scoped_refptr<X509Certificate> client_cert;
scoped_refptr<SSLPrivateKey> client_private_key;
- ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("proxy", 70), &client_cert, &client_private_key));
ASSERT_FALSE(client_cert);
// Ensure the certificate was NOT cached for the endpoint. This only
// applies to HTTPS requests, but is fine to check for HTTP requests.
- ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert,
&client_private_key));
@@ -15435,9 +15735,9 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Proxy_Fail) {
// Now that the new handshake has failed, ensure that the client
// certificate was removed from the client auth cache.
- ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("proxy", 70), &client_cert, &client_private_key));
- ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert,
&client_private_key));
}
@@ -15514,7 +15814,7 @@ TEST_F(HttpNetworkTransactionTest, CertificateRequestInRenego) {
// allowing the connection to continue restarting.
scoped_refptr<X509Certificate> client_cert;
scoped_refptr<SSLPrivateKey> client_private_key;
- ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert, &client_private_key));
EXPECT_TRUE(client_cert->EqualsIncludingChain(identity->certificate()));
@@ -15524,7 +15824,7 @@ TEST_F(HttpNetworkTransactionTest, CertificateRequestInRenego) {
EXPECT_EQ(200, trans.GetResponseInfo()->headers->response_code());
// The client certificate remains in the cache.
- ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup(
+ ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate(
HostPortPair("www.example.com", 443), &client_cert, &client_private_key));
EXPECT_TRUE(client_cert->EqualsIncludingChain(identity->certificate()));
}
@@ -16132,7 +16432,7 @@ TEST_F(HttpNetworkTransactionTest, AlternativeServiceNotOnHttp11) {
AlternativeService alternative_service(kProtoHTTP2, alternative);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- server, alternative_service, expiration);
+ server, NetworkIsolationKey(), alternative_service, expiration);
HttpRequestInfo request;
HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
@@ -16200,7 +16500,7 @@ TEST_F(HttpNetworkTransactionTest, FailedAlternativeServiceIsNotUserVisible) {
AlternativeService alternative_service(kProtoHTTP2, alternative);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- server, alternative_service, expiration);
+ server, NetworkIsolationKey(), alternative_service, expiration);
HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get());
HttpRequestInfo request1;
@@ -16310,7 +16610,7 @@ TEST_F(HttpNetworkTransactionTest, AlternativeServiceShouldNotPoolToHttp11) {
AlternativeService alternative_service(kProtoHTTP2, alternative);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties->SetHttp2AlternativeService(
- server, alternative_service, expiration);
+ server, NetworkIsolationKey(), alternative_service, expiration);
// First transaction to alternative to open an HTTP/1.1 socket.
HttpRequestInfo request1;
@@ -16891,10 +17191,6 @@ TEST_F(HttpNetworkTransactionTest, HttpSyncConnectError) {
rv = callback.WaitForResult();
EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED));
- // We don't care whether this succeeds or fails, but it shouldn't crash.
- HttpRequestHeaders request_headers;
- trans.GetFullRequestHeaders(&request_headers);
-
ConnectionAttempts attempts;
trans.GetConnectionAttempts(&attempts);
ASSERT_EQ(1u, attempts.size());
@@ -16928,10 +17224,6 @@ TEST_F(HttpNetworkTransactionTest, HttpAsyncConnectError) {
rv = callback.WaitForResult();
EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED));
- // We don't care whether this succeeds or fails, but it shouldn't crash.
- HttpRequestHeaders request_headers;
- trans.GetFullRequestHeaders(&request_headers);
-
ConnectionAttempts attempts;
trans.GetConnectionAttempts(&attempts);
ASSERT_EQ(1u, attempts.size());
@@ -16969,10 +17261,6 @@ TEST_F(HttpNetworkTransactionTest, HttpSyncWriteError) {
rv = callback.WaitForResult();
EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET));
-
- HttpRequestHeaders request_headers;
- EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers));
- EXPECT_TRUE(request_headers.HasHeader("Host"));
}
TEST_F(HttpNetworkTransactionTest, HttpAsyncWriteError) {
@@ -17002,10 +17290,6 @@ TEST_F(HttpNetworkTransactionTest, HttpAsyncWriteError) {
rv = callback.WaitForResult();
EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET));
-
- HttpRequestHeaders request_headers;
- EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers));
- EXPECT_TRUE(request_headers.HasHeader("Host"));
}
TEST_F(HttpNetworkTransactionTest, HttpSyncReadError) {
@@ -17038,10 +17322,6 @@ TEST_F(HttpNetworkTransactionTest, HttpSyncReadError) {
rv = callback.WaitForResult();
EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET));
-
- HttpRequestHeaders request_headers;
- EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers));
- EXPECT_TRUE(request_headers.HasHeader("Host"));
}
TEST_F(HttpNetworkTransactionTest, HttpAsyncReadError) {
@@ -17074,53 +17354,6 @@ TEST_F(HttpNetworkTransactionTest, HttpAsyncReadError) {
rv = callback.WaitForResult();
EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET));
-
- HttpRequestHeaders request_headers;
- EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers));
- EXPECT_TRUE(request_headers.HasHeader("Host"));
-}
-
-TEST_F(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) {
- HttpRequestInfo request;
- request.method = "GET";
- request.url = GURL("http://www.example.org/");
- request.extra_headers.SetHeader("X-Foo", "bar");
- request.traffic_annotation =
- net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
-
- std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
- HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
-
- MockWrite data_writes[] = {
- MockWrite(
- "GET / HTTP/1.1\r\n"
- "Host: www.example.org\r\n"
- "Connection: keep-alive\r\n"
- "X-Foo: bar\r\n\r\n"),
- };
- MockRead data_reads[] = {
- MockRead("HTTP/1.1 200 OK\r\n"
- "Content-Length: 5\r\n\r\n"
- "hello"),
- MockRead(ASYNC, ERR_UNEXPECTED),
- };
-
- StaticSocketDataProvider data(data_reads, data_writes);
- session_deps_.socket_factory->AddSocketDataProvider(&data);
-
- TestCompletionCallback callback;
-
- int rv = trans.Start(&request, callback.callback(), NetLogWithSource());
- EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
-
- rv = callback.WaitForResult();
- EXPECT_THAT(rv, IsOk());
-
- HttpRequestHeaders request_headers;
- EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers));
- std::string foo;
- EXPECT_TRUE(request_headers.GetHeader("X-Foo", &foo));
- EXPECT_EQ("bar", foo);
}
// Tests that when a used socket is returned to the SSL socket pool, it's closed
@@ -20261,6 +20494,17 @@ TEST_F(HttpNetworkTransactionTest, AuthEverything) {
mock_reads3.emplace_back(
"HTTP/1.1 200 OK\r\n"
"Content-Length: 0\r\n\r\n");
+ // The client makes another request. This should reuse the socket with all
+ // credentials cached.
+ mock_writes3.emplace_back(
+ "GET / HTTP/1.1\r\n"
+ "Host: www.example.org\r\n"
+ "Connection: keep-alive\r\n"
+ // Authenticate as user:pass.
+ "Authorization: Basic dXNlcjpwYXNz\r\n\r\n");
+ mock_reads3.emplace_back(
+ "HTTP/1.1 200 OK\r\n"
+ "Content-Length: 0\r\n\r\n");
StaticSocketDataProvider data3(mock_reads3, mock_writes3);
session_deps_.socket_factory->AddSocketDataProvider(&data3);
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_proxy3);
@@ -20319,6 +20563,14 @@ TEST_F(HttpNetworkTransactionTest, AuthEverything) {
// The request completes.
ASSERT_THAT(rv, IsOk());
EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code());
+
+ // Make a second request. This time all credentials are cached.
+ trans =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ ASSERT_THAT(callback.GetResult(trans->Start(&request, callback.callback(),
+ NetLogWithSource())),
+ IsOk());
+ EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code());
}
// Test the proxy and origin server each requesting both TLS client certificates
@@ -20468,6 +20720,38 @@ TEST_F(HttpNetworkTransactionTest, AuthEverythingWithConnectClose) {
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_proxy5);
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_origin5);
+ // The client makes a second request. This needs yet another connection, but
+ // all credentials are cached.
+ SSLSocketDataProvider ssl_proxy6(ASYNC, OK);
+ ssl_proxy6.expected_send_client_cert = true;
+ ssl_proxy6.expected_client_cert = identity_proxy->certificate();
+ std::vector<MockWrite> mock_writes6;
+ std::vector<MockRead> mock_reads6;
+ mock_writes6.emplace_back(
+ "CONNECT www.example.org:443 HTTP/1.1\r\n"
+ "Host: www.example.org:443\r\n"
+ "Proxy-Connection: keep-alive\r\n"
+ // Authenticate as proxyuser:proxypass.
+ "Proxy-Authorization: Basic cHJveHl1c2VyOnByb3h5cGFzcw==\r\n\r\n");
+ mock_reads6.emplace_back("HTTP/1.1 200 Connection Established\r\n\r\n");
+ SSLSocketDataProvider ssl_origin6(ASYNC, OK);
+ ssl_origin6.expected_send_client_cert = true;
+ ssl_origin6.expected_client_cert = identity_origin->certificate();
+ mock_writes6.emplace_back(
+ "GET / HTTP/1.1\r\n"
+ "Host: www.example.org\r\n"
+ "Connection: keep-alive\r\n"
+ // Authenticate as user:pass.
+ "Authorization: Basic dXNlcjpwYXNz\r\n\r\n");
+ mock_reads6.emplace_back(
+ "HTTP/1.1 200 OK\r\n"
+ "Connection: close\r\n"
+ "Content-Length: 0\r\n\r\n");
+ StaticSocketDataProvider data6(mock_reads6, mock_writes6);
+ session_deps_.socket_factory->AddSocketDataProvider(&data6);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_proxy6);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_origin6);
+
std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
// Start the request.
@@ -20521,6 +20805,14 @@ TEST_F(HttpNetworkTransactionTest, AuthEverythingWithConnectClose) {
// The request completes.
ASSERT_THAT(rv, IsOk());
EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code());
+
+ // Make a second request. This time all credentials are cached.
+ trans =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ ASSERT_THAT(callback.GetResult(trans->Start(&request, callback.callback(),
+ NetLogWithSource())),
+ IsOk());
+ EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code());
}
// Test the proxy requesting HTTP auth and the server requesting TLS client
@@ -21433,9 +21725,10 @@ TEST_F(HttpNetworkTransactionTest, NetworkIsolationSSLProxy) {
// Test that SSLConfig changes from SSLConfigService are picked up even when
// there are live sockets.
TEST_F(HttpNetworkTransactionTest, SSLConfigChanged) {
- SSLConfig ssl_config;
- ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3;
- auto ssl_config_service = std::make_unique<TestSSLConfigService>(ssl_config);
+ SSLContextConfig ssl_context_config;
+ ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3;
+ auto ssl_config_service =
+ std::make_unique<TestSSLConfigService>(ssl_context_config);
TestSSLConfigService* ssl_config_service_raw = ssl_config_service.get();
session_deps_.ssl_config_service = std::move(ssl_config_service);
@@ -21526,8 +21819,8 @@ TEST_F(HttpNetworkTransactionTest, SSLConfigChanged) {
EXPECT_EQ("2", response_data2);
trans2.reset();
- ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2;
- ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_config);
+ ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2;
+ ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_context_config);
auto trans3 =
std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
@@ -21540,9 +21833,10 @@ TEST_F(HttpNetworkTransactionTest, SSLConfigChanged) {
}
TEST_F(HttpNetworkTransactionTest, SSLConfigChangedPendingConnect) {
- SSLConfig ssl_config;
- ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3;
- auto ssl_config_service = std::make_unique<TestSSLConfigService>(ssl_config);
+ SSLContextConfig ssl_context_config;
+ ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3;
+ auto ssl_config_service =
+ std::make_unique<TestSSLConfigService>(ssl_context_config);
TestSSLConfigService* ssl_config_service_raw = ssl_config_service.get();
session_deps_.ssl_config_service = std::move(ssl_config_service);
@@ -21568,10 +21862,301 @@ TEST_F(HttpNetworkTransactionTest, SSLConfigChangedPendingConnect) {
int rv = trans->Start(&request, callback.callback(), NetLogWithSource());
EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
- ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2;
- ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_config);
+ ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2;
+ ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_context_config);
EXPECT_THAT(callback.GetResult(rv), IsError(ERR_NETWORK_CHANGED));
}
+// Test that HttpNetworkTransaction correctly handles existing sockets when the
+// server requests a client certificate post-handshake (via a TLS
+// renegotiation). This is a regression test for https://crbug.com/829184.
+TEST_F(HttpNetworkTransactionTest, PostHandshakeClientCertWithSockets) {
+ const MutableNetworkTrafficAnnotationTag kTrafficAnnotation(
+ TRAFFIC_ANNOTATION_FOR_TESTS);
+
+ auto cert_request_info = base::MakeRefCounted<SSLCertRequestInfo>();
+ cert_request_info->host_and_port = HostPortPair("foo.test", 443);
+
+ std::unique_ptr<FakeClientCertIdentity> identity =
+ FakeClientCertIdentity::CreateFromCertAndKeyFiles(
+ GetTestCertsDirectory(), "client_1.pem", "client_1.pk8");
+ ASSERT_TRUE(identity);
+
+ // This test will make several requests so that, when the client certificate
+ // request comes in, we have a socket in use, an idle socket, and a socket for
+ // an unrelated host.
+ //
+ // First, two long-lived requests which do not complete until after the client
+ // certificate request. This arranges for sockets to be in use during the
+ // request. They should not be interrupted.
+ HttpRequestInfo request_long_lived;
+ request_long_lived.method = "GET";
+ request_long_lived.url = GURL("https://foo.test/long-lived");
+ request_long_lived.traffic_annotation = kTrafficAnnotation;
+
+ HttpRequestInfo request_long_lived_bar;
+ request_long_lived_bar.method = "GET";
+ request_long_lived_bar.url = GURL("https://bar.test/long-lived");
+ request_long_lived_bar.traffic_annotation = kTrafficAnnotation;
+
+ // Next, make a request that needs client certificates.
+ HttpRequestInfo request_auth;
+ request_auth.method = "GET";
+ request_auth.url = GURL("https://foo.test/auth");
+ request_auth.traffic_annotation = kTrafficAnnotation;
+
+ // Before responding to the challenge, make a request to an unauthenticated
+ // endpoint. This will result in an idle socket when the client certificate
+ // challenge is resolved.
+ HttpRequestInfo request_unauth;
+ request_unauth.method = "GET";
+ request_unauth.url = GURL("https://foo.test/unauth");
+ request_unauth.traffic_annotation = kTrafficAnnotation;
+
+ // After all the preceding requests complete, end with two additional requests
+ // to ensure pre-authentication foo.test sockets are not used and bar.test
+ // sockets are unaffected.
+ HttpRequestInfo request_post_auth;
+ request_post_auth.method = "GET";
+ request_post_auth.url = GURL("https://foo.test/post-auth");
+ request_post_auth.traffic_annotation = kTrafficAnnotation;
+
+ HttpRequestInfo request_post_auth_bar;
+ request_post_auth_bar.method = "GET";
+ request_post_auth_bar.url = GURL("https://bar.test/post-auth");
+ request_post_auth_bar.traffic_annotation = kTrafficAnnotation;
+
+ // The sockets for /long-lived and /unauth complete their request but are
+ // not allocated for /post-auth or /retry because SSL state has since changed.
+ const MockWrite kLongLivedWrites[] = {
+ MockWrite(ASYNC, 0,
+ "GET /long-lived HTTP/1.1\r\n"
+ "Host: foo.test\r\n"
+ "Connection: keep-alive\r\n\r\n"),
+ };
+ const MockRead kLongLivedReads[] = {
+ // Pause so /long-lived completes after the client presents client
+ // certificates.
+ MockRead(ASYNC, ERR_IO_PENDING, 1),
+ MockRead(ASYNC, 2,
+ "HTTP/1.1 200 OK\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Length: 10\r\n\r\n"
+ "long-lived"),
+ };
+ SequencedSocketData data_long_lived(kLongLivedReads, kLongLivedWrites);
+ SSLSocketDataProvider ssl_long_lived(ASYNC, OK);
+ session_deps_.socket_factory->AddSocketDataProvider(&data_long_lived);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_long_lived);
+
+ // Requests for bar.test should be unaffected by foo.test and get allocated
+ // a single socket.
+ const MockWrite kBarWrites[] = {
+ MockWrite(ASYNC, 0,
+ "GET /long-lived HTTP/1.1\r\n"
+ "Host: bar.test\r\n"
+ "Connection: keep-alive\r\n\r\n"),
+ MockWrite(ASYNC, 3,
+ "GET /post-auth HTTP/1.1\r\n"
+ "Host: bar.test\r\n"
+ "Connection: keep-alive\r\n\r\n"),
+ };
+ const MockRead kBarReads[] = {
+ // Pause on /long-lived so it completes after foo.test's authentication.
+ MockRead(ASYNC, ERR_IO_PENDING, 1),
+ MockRead(ASYNC, 2,
+ "HTTP/1.1 200 OK\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Length: 10\r\n\r\n"
+ "long-lived"),
+ MockRead(ASYNC, 4,
+ "HTTP/1.1 200 OK\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Length: 9\r\n\r\n"
+ "post-auth"),
+ };
+ SequencedSocketData data_bar(kBarReads, kBarWrites);
+ SSLSocketDataProvider ssl_bar(ASYNC, OK);
+ session_deps_.socket_factory->AddSocketDataProvider(&data_bar);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bar);
+
+ // Requesting /auth results in a post-handshake client certificate challenge.
+ const MockWrite kAuthWrites[] = {
+ MockWrite(ASYNC, 0,
+ "GET /auth HTTP/1.1\r\n"
+ "Host: foo.test\r\n"
+ "Connection: keep-alive\r\n\r\n"),
+ };
+ const MockRead kAuthReads[] = {
+ MockRead(ASYNC, ERR_SSL_CLIENT_AUTH_CERT_NEEDED, 1),
+ };
+ SequencedSocketData data_auth(kAuthReads, kAuthWrites);
+ SSLSocketDataProvider ssl_auth(ASYNC, OK);
+ ssl_auth.cert_request_info = cert_request_info.get();
+ session_deps_.socket_factory->AddSocketDataProvider(&data_auth);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_auth);
+
+ // Requesting /unauth completes.
+ const MockWrite kUnauthWrites[] = {
+ MockWrite(ASYNC, 0,
+ "GET /unauth HTTP/1.1\r\n"
+ "Host: foo.test\r\n"
+ "Connection: keep-alive\r\n\r\n"),
+ };
+ const MockRead kUnauthReads[] = {
+ MockRead(ASYNC, 1,
+ "HTTP/1.1 200 OK\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Length: 6\r\n\r\n"
+ "unauth"),
+ };
+ SequencedSocketData data_unauth(kUnauthReads, kUnauthWrites);
+ SSLSocketDataProvider ssl_unauth(ASYNC, OK);
+ session_deps_.socket_factory->AddSocketDataProvider(&data_unauth);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_unauth);
+
+ // When the client certificate is selected, /auth is retried on a new
+ // connection. In particular, it should not be retried on |data_unauth|,
+ // which would not honor the new client certificate configuration.
+ const MockWrite kRetryWrites[] = {
+ MockWrite(ASYNC, 0,
+ "GET /auth HTTP/1.1\r\n"
+ "Host: foo.test\r\n"
+ "Connection: keep-alive\r\n\r\n"),
+ };
+ const MockRead kRetryReads[] = {
+ MockRead(ASYNC, 1,
+ "HTTP/1.1 200 OK\r\n"
+ // Close the connection so we test that /post-auth is not
+ // allocated to |data_unauth| or |data_long_lived|.
+ "Connection: close\r\n"
+ "Content-Length: 4\r\n\r\n"
+ "auth"),
+ };
+ SequencedSocketData data_retry(kRetryReads, kRetryWrites);
+ SSLSocketDataProvider ssl_retry(ASYNC, OK);
+ ssl_retry.expected_send_client_cert = true;
+ ssl_retry.expected_client_cert = identity->certificate();
+ session_deps_.socket_factory->AddSocketDataProvider(&data_retry);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_retry);
+
+ // /post-auth gets its own socket.
+ const MockWrite kPostAuthWrites[] = {
+ MockWrite(ASYNC, 0,
+ "GET /post-auth HTTP/1.1\r\n"
+ "Host: foo.test\r\n"
+ "Connection: keep-alive\r\n\r\n"),
+ };
+ const MockRead kPostAuthReads[] = {
+ MockRead(ASYNC, 1,
+ "HTTP/1.1 200 OK\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Length: 9\r\n\r\n"
+ "post-auth"),
+ };
+ SequencedSocketData data_post_auth(kPostAuthReads, kPostAuthWrites);
+ SSLSocketDataProvider ssl_post_auth(ASYNC, OK);
+ ssl_post_auth.expected_send_client_cert = true;
+ ssl_post_auth.expected_client_cert = identity->certificate();
+ session_deps_.socket_factory->AddSocketDataProvider(&data_post_auth);
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_post_auth);
+
+ std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_);
+
+ // Start the two long-lived requests.
+ TestCompletionCallback callback_long_lived;
+ auto trans_long_lived =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ int rv = trans_long_lived->Start(
+ &request_long_lived, callback_long_lived.callback(), NetLogWithSource());
+ ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
+ data_long_lived.RunUntilPaused();
+
+ TestCompletionCallback callback_long_lived_bar;
+ auto trans_long_lived_bar =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ rv = trans_long_lived_bar->Start(&request_long_lived_bar,
+ callback_long_lived_bar.callback(),
+ NetLogWithSource());
+ ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
+ data_bar.RunUntilPaused();
+
+ // Request /auth. This gives a client certificate challenge.
+ TestCompletionCallback callback_auth;
+ auto trans_auth =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ rv = trans_auth->Start(&request_auth, callback_auth.callback(),
+ NetLogWithSource());
+ EXPECT_THAT(callback_auth.GetResult(rv),
+ IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED));
+
+ // Make an unauthenticated request. This completes.
+ TestCompletionCallback callback_unauth;
+ auto trans_unauth =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ rv = trans_unauth->Start(&request_unauth, callback_unauth.callback(),
+ NetLogWithSource());
+ EXPECT_THAT(callback_unauth.GetResult(rv), IsOk());
+ std::string response_unauth;
+ EXPECT_THAT(ReadTransaction(trans_unauth.get(), &response_unauth), IsOk());
+ EXPECT_EQ("unauth", response_unauth);
+ trans_unauth.reset();
+
+ // Complete the authenticated request.
+ rv = trans_auth->RestartWithCertificate(identity->certificate(),
+ identity->ssl_private_key(),
+ callback_auth.callback());
+ EXPECT_THAT(callback_auth.GetResult(rv), IsOk());
+ std::string response_auth;
+ EXPECT_THAT(ReadTransaction(trans_auth.get(), &response_auth), IsOk());
+ EXPECT_EQ("auth", response_auth);
+ trans_auth.reset();
+
+ // Complete the long-lived requests.
+ data_long_lived.Resume();
+ EXPECT_THAT(callback_long_lived.GetResult(ERR_IO_PENDING), IsOk());
+ std::string response_long_lived;
+ EXPECT_THAT(ReadTransaction(trans_long_lived.get(), &response_long_lived),
+ IsOk());
+ EXPECT_EQ("long-lived", response_long_lived);
+ trans_long_lived.reset();
+
+ data_bar.Resume();
+ EXPECT_THAT(callback_long_lived_bar.GetResult(ERR_IO_PENDING), IsOk());
+ std::string response_long_lived_bar;
+ EXPECT_THAT(
+ ReadTransaction(trans_long_lived_bar.get(), &response_long_lived_bar),
+ IsOk());
+ EXPECT_EQ("long-lived", response_long_lived_bar);
+ trans_long_lived_bar.reset();
+
+ // Run the post-authentication requests.
+ TestCompletionCallback callback_post_auth;
+ auto trans_post_auth =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ rv = trans_post_auth->Start(&request_post_auth, callback_post_auth.callback(),
+ NetLogWithSource());
+ EXPECT_THAT(callback_post_auth.GetResult(rv), IsOk());
+ std::string response_post_auth;
+ EXPECT_THAT(ReadTransaction(trans_post_auth.get(), &response_post_auth),
+ IsOk());
+ EXPECT_EQ("post-auth", response_post_auth);
+ trans_post_auth.reset();
+
+ TestCompletionCallback callback_post_auth_bar;
+ auto trans_post_auth_bar =
+ std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get());
+ rv = trans_post_auth_bar->Start(&request_post_auth_bar,
+ callback_post_auth_bar.callback(),
+ NetLogWithSource());
+ EXPECT_THAT(callback_post_auth_bar.GetResult(rv), IsOk());
+ std::string response_post_auth_bar;
+ EXPECT_THAT(
+ ReadTransaction(trans_post_auth_bar.get(), &response_post_auth_bar),
+ IsOk());
+ EXPECT_EQ("post-auth", response_post_auth_bar);
+ trans_post_auth_bar.reset();
+}
+
} // namespace net
diff --git a/chromium/net/http/http_proxy_client_socket_fuzzer.cc b/chromium/net/http/http_proxy_client_socket_fuzzer.cc
index 45c36ccabf2..f253b16f46b 100644
--- a/chromium/net/http/http_proxy_client_socket_fuzzer.cc
+++ b/chromium/net/http/http_proxy_client_socket_fuzzer.cc
@@ -7,6 +7,8 @@
#include <stddef.h>
#include <stdint.h>
+#include <fuzzer/FuzzedDataProvider.h>
+
#include <memory>
#include <string>
@@ -20,12 +22,12 @@
#include "net/http/http_auth_handler_basic.h"
#include "net/http/http_auth_handler_digest.h"
#include "net/http/http_auth_handler_factory.h"
+#include "net/http/http_auth_preferences.h"
#include "net/http/http_auth_scheme.h"
#include "net/log/test_net_log.h"
#include "net/socket/fuzzed_socket.h"
#include "net/socket/next_proto.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
-#include "third_party/libFuzzer/src/utils/FuzzedDataProvider.h"
// Fuzzer for HttpProxyClientSocket only tests establishing a connection when
// using the proxy as a tunnel.
@@ -53,9 +55,10 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
net::kDigestAuthScheme, new net::HttpAuthHandlerDigest::Factory());
scoped_refptr<net::HttpAuthController> auth_controller(
- new net::HttpAuthController(net::HttpAuth::AUTH_PROXY,
- GURL("http://proxy:42/"), &auth_cache,
- &auth_handler_factory, nullptr));
+ new net::HttpAuthController(
+ net::HttpAuth::AUTH_PROXY, GURL("http://proxy:42/"), &auth_cache,
+ &auth_handler_factory, nullptr,
+ net::HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS));
// Determine if the HttpProxyClientSocket should be told the underlying socket
// is HTTPS.
net::HttpProxyClientSocket socket(
diff --git a/chromium/net/http/http_proxy_connect_job.cc b/chromium/net/http/http_proxy_connect_job.cc
index a9fbbdc38fd..6ee20a1dbe8 100644
--- a/chromium/net/http/http_proxy_connect_job.cc
+++ b/chromium/net/http/http_proxy_connect_job.cc
@@ -187,7 +187,8 @@ HttpProxyConnectJob::HttpProxyConnectJob(
GetDestination().ToString()),
common_connect_job_params->http_auth_cache,
common_connect_job_params->http_auth_handler_factory,
- host_resolver())
+ host_resolver(),
+ HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS)
: nullptr) {}
HttpProxyConnectJob::~HttpProxyConnectJob() {}
@@ -698,7 +699,8 @@ int HttpProxyConnectJob::DoQuicProxyCreateStreamComplete(int result) {
spdy::SpdyPriority spdy_priority =
ConvertRequestPriorityToQuicPriority(kH2QuicTunnelPriority);
- quic_stream->SetPriority(spdy_priority);
+ spdy::SpdyStreamPrecedence precedence(spdy_priority);
+ quic_stream->SetPriority(precedence);
transport_socket_ = std::make_unique<QuicProxyClientSocket>(
std::move(quic_stream), std::move(quic_session_), GetUserAgent(),
diff --git a/chromium/net/http/http_proxy_connect_job_unittest.cc b/chromium/net/http/http_proxy_connect_job_unittest.cc
index 8ddd8e2f422..3f569c6e27f 100644
--- a/chromium/net/http/http_proxy_connect_job_unittest.cc
+++ b/chromium/net/http/http_proxy_connect_job_unittest.cc
@@ -18,7 +18,7 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/metrics/histogram_tester.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/task_environment.h"
#include "build/build_config.h"
#include "net/base/host_port_pair.h"
#include "net/base/network_isolation_key.h"
@@ -35,7 +35,7 @@
#include "net/socket/transport_connect_job.h"
#include "net/spdy/spdy_test_util_common.h"
#include "net/test/gtest_util.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -53,11 +53,10 @@ const char kHttpsProxyHost[] = "httpsproxy.example.test";
} // namespace
class HttpProxyConnectJobTest : public ::testing::TestWithParam<HttpProxyType>,
- public WithScopedTaskEnvironment {
+ public WithTaskEnvironment {
protected:
HttpProxyConnectJobTest()
- : WithScopedTaskEnvironment(
- base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+ : WithTaskEnvironment(base::test::TaskEnvironment::TimeSource::MOCK_TIME),
field_trial_list_(nullptr) {
// Used a mock HostResolver that does not have a cache.
session_deps_.host_resolver = std::make_unique<MockHostResolver>();
diff --git a/chromium/net/http/http_response_body_drainer.cc b/chromium/net/http/http_response_body_drainer.cc
index 010657dc6e1..bd60c429fe1 100644
--- a/chromium/net/http/http_response_body_drainer.cc
+++ b/chromium/net/http/http_response_body_drainer.cc
@@ -73,10 +73,9 @@ int HttpResponseBodyDrainer::DoDrainResponseBody() {
next_state_ = STATE_DRAIN_RESPONSE_BODY_COMPLETE;
return stream_->ReadResponseBody(
- read_buf_.get(),
- kDrainBodyBufferSize - total_read_,
- base::Bind(&HttpResponseBodyDrainer::OnIOComplete,
- base::Unretained(this)));
+ read_buf_.get(), kDrainBodyBufferSize - total_read_,
+ base::BindOnce(&HttpResponseBodyDrainer::OnIOComplete,
+ base::Unretained(this)));
}
int HttpResponseBodyDrainer::DoDrainResponseBodyComplete(int result) {
diff --git a/chromium/net/http/http_response_body_drainer_unittest.cc b/chromium/net/http/http_response_body_drainer_unittest.cc
index b40cdca15b8..84c2f4501b0 100644
--- a/chromium/net/http/http_response_body_drainer_unittest.cc
+++ b/chromium/net/http/http_response_body_drainer_unittest.cc
@@ -25,12 +25,12 @@
#include "net/cert/mock_cert_verifier.h"
#include "net/cert/multi_log_ct_verifier.h"
#include "net/http/http_network_session.h"
-#include "net/http/http_server_properties_impl.h"
+#include "net/http/http_server_properties.h"
#include "net/http/http_stream.h"
#include "net/http/transport_security_state.h"
#include "net/proxy_resolution/proxy_resolution_service.h"
#include "net/ssl/ssl_config_service_defaults.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
@@ -228,12 +228,12 @@ void MockHttpStream::CompleteRead() {
std::move(callback_).Run(result);
}
-class HttpResponseBodyDrainerTest : public TestWithScopedTaskEnvironment {
+class HttpResponseBodyDrainerTest : public TestWithTaskEnvironment {
protected:
HttpResponseBodyDrainerTest()
: proxy_resolution_service_(ProxyResolutionService::CreateDirect()),
ssl_config_service_(new SSLConfigServiceDefaults),
- http_server_properties_(new HttpServerPropertiesImpl()),
+ http_server_properties_(new HttpServerProperties()),
session_(CreateNetworkSession()),
mock_stream_(new MockHttpStream(&result_waiter_)),
drainer_(new HttpResponseBodyDrainer(mock_stream_)) {}
@@ -254,7 +254,7 @@ class HttpResponseBodyDrainerTest : public TestWithScopedTaskEnvironment {
std::unique_ptr<ProxyResolutionService> proxy_resolution_service_;
std::unique_ptr<SSLConfigService> ssl_config_service_;
- std::unique_ptr<HttpServerPropertiesImpl> http_server_properties_;
+ std::unique_ptr<HttpServerProperties> http_server_properties_;
MockCertVerifier cert_verifier_;
TransportSecurityState transport_security_state_;
MultiLogCTVerifier ct_verifier_;
diff --git a/chromium/net/http/http_response_info.cc b/chromium/net/http/http_response_info.cc
index 0b9844e9ac1..d03f76da339 100644
--- a/chromium/net/http/http_response_info.cc
+++ b/chromium/net/http/http_response_info.cc
@@ -110,6 +110,10 @@ enum {
// This bit is set if the response has a peer signature algorithm.
RESPONSE_INFO_HAS_PEER_SIGNATURE_ALGORITHM = 1 << 25,
+ // This bit is set if the response is a prefetch whose reuse should be
+ // restricted in some way.
+ RESPONSE_INFO_RESTRICTED_PREFETCH = 1 << 26,
+
// TODO(darin): Add other bits to indicate alternate request methods.
// For now, we don't support storing those.
};
@@ -124,6 +128,7 @@ HttpResponseInfo::HttpResponseInfo()
was_fetched_via_proxy(false),
did_use_http_auth(false),
unused_since_prefetch(false),
+ restricted_prefetch(false),
async_revalidation_requested(false),
connection_info(CONNECTION_INFO_UNKNOWN) {}
@@ -287,6 +292,8 @@ bool HttpResponseInfo::InitFromPickle(const base::Pickle& pickle,
unused_since_prefetch = (flags & RESPONSE_INFO_UNUSED_SINCE_PREFETCH) != 0;
+ restricted_prefetch = (flags & RESPONSE_INFO_RESTRICTED_PREFETCH) != 0;
+
ssl_info.pkp_bypassed = (flags & RESPONSE_INFO_PKP_BYPASSED) != 0;
// Read peer_signature_algorithm.
@@ -336,6 +343,8 @@ void HttpResponseInfo::Persist(base::Pickle* pickle,
flags |= RESPONSE_INFO_USE_HTTP_AUTHENTICATION;
if (unused_since_prefetch)
flags |= RESPONSE_INFO_UNUSED_SINCE_PREFETCH;
+ if (restricted_prefetch)
+ flags |= RESPONSE_INFO_RESTRICTED_PREFETCH;
if (ssl_info.pkp_bypassed)
flags |= RESPONSE_INFO_PKP_BYPASSED;
if (!stale_revalidate_timeout.is_null())
diff --git a/chromium/net/http/http_response_info.h b/chromium/net/http/http_response_info.h
index 1f75fe4793c..ff80d89295c 100644
--- a/chromium/net/http/http_response_info.h
+++ b/chromium/net/http/http_response_info.h
@@ -157,6 +157,11 @@ class NET_EXPORT HttpResponseInfo {
// used since.
bool unused_since_prefetch;
+ // True if the response is a prefetch whose reuse is "restricted". This means
+ // it can only be reused from the cache by requests that are marked as able to
+ // use restricted prefetches.
+ bool restricted_prefetch;
+
// True if this resource is stale and needs async revalidation.
// This value is not persisted by Persist(); it is only ever set when the
// response is retrieved from the cache.
diff --git a/chromium/net/http/http_server_properties.cc b/chromium/net/http/http_server_properties.cc
index cea073214d6..e83e286e6fa 100644
--- a/chromium/net/http/http_server_properties.cc
+++ b/chromium/net/http/http_server_properties.cc
@@ -4,10 +4,22 @@
#include "net/http/http_server_properties.h"
+#include "base/bind.h"
+#include "base/feature_list.h"
+#include "base/location.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
+#include "base/single_thread_task_runner.h"
+#include "base/stl_util.h"
+#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "base/time/default_clock.h"
+#include "base/time/default_tick_clock.h"
+#include "base/values.h"
+#include "net/base/features.h"
#include "net/http/http_network_session.h"
+#include "net/http/http_server_properties_manager.h"
#include "net/socket/ssl_client_socket.h"
#include "net/ssl/ssl_config.h"
@@ -15,143 +27,1043 @@ namespace net {
namespace {
-enum AlternativeProxyUsage {
- // Alternative Proxy was used without racing a normal connection.
- ALTERNATIVE_PROXY_USAGE_NO_RACE = 0,
- // Alternative Proxy was used by winning a race with a normal connection.
- ALTERNATIVE_PROXY_USAGE_WON_RACE = 1,
- // Alternative Proxy was not used by losing a race with a normal connection.
- ALTERNATIVE_PROXY_USAGE_LOST_RACE = 2,
- // Maximum value for the enum.
- ALTERNATIVE_PROXY_USAGE_MAX,
-};
-
-AlternativeProxyUsage ConvertProtocolUsageToProxyUsage(
- AlternateProtocolUsage usage) {
- switch (usage) {
- case ALTERNATE_PROTOCOL_USAGE_NO_RACE:
- return ALTERNATIVE_PROXY_USAGE_NO_RACE;
- case ALTERNATE_PROTOCOL_USAGE_WON_RACE:
- return ALTERNATIVE_PROXY_USAGE_WON_RACE;
- case ALTERNATE_PROTOCOL_USAGE_LOST_RACE:
- return ALTERNATIVE_PROXY_USAGE_LOST_RACE;
- default:
- NOTREACHED();
- return ALTERNATIVE_PROXY_USAGE_MAX;
- }
-}
-
-} // anonymous namespace
-
-const char kAlternativeServiceHeader[] = "Alt-Svc";
-
-void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage,
- bool proxy_server_used) {
- if (proxy_server_used) {
- DCHECK_LE(usage, ALTERNATE_PROTOCOL_USAGE_LOST_RACE);
- UMA_HISTOGRAM_ENUMERATION("Net.QuicAlternativeProxy.Usage",
- ConvertProtocolUsageToProxyUsage(usage),
- ALTERNATIVE_PROXY_USAGE_MAX);
- } else {
- UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolUsage", usage,
- ALTERNATE_PROTOCOL_USAGE_MAX);
- }
-}
-
-void HistogramBrokenAlternateProtocolLocation(
- BrokenAlternateProtocolLocation location){
- UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolBrokenLocation", location,
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX);
-}
-
-bool IsAlternateProtocolValid(NextProto protocol) {
- switch (protocol) {
- case kProtoUnknown:
- return false;
- case kProtoHTTP11:
- return false;
- case kProtoHTTP2:
- return true;
- case kProtoQUIC:
+// Time to wait before starting an update the preferences from the
+// http_server_properties_impl_ cache. Scheduling another update during this
+// period will be a no-op.
+constexpr base::TimeDelta kUpdatePrefsDelay = base::TimeDelta::FromSeconds(60);
+
+} // namespace
+
+HttpServerProperties::PrefDelegate::~PrefDelegate() = default;
+
+HttpServerProperties::ServerInfo::ServerInfo() = default;
+HttpServerProperties::ServerInfo::ServerInfo(const ServerInfo& server_info) =
+ default;
+HttpServerProperties::ServerInfo::ServerInfo(ServerInfo&& server_info) =
+ default;
+HttpServerProperties::ServerInfo::~ServerInfo() = default;
+
+bool HttpServerProperties::ServerInfo::empty() const {
+ return !supports_spdy.has_value() && !alternative_services.has_value() &&
+ !server_network_stats.has_value();
+}
+
+bool HttpServerProperties::ServerInfo::operator==(
+ const ServerInfo& other) const {
+ return supports_spdy == other.supports_spdy &&
+ alternative_services == other.alternative_services &&
+ server_network_stats == other.server_network_stats;
+}
+
+HttpServerProperties::ServerInfoMapKey::ServerInfoMapKey(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key,
+ bool use_network_isolation_key)
+ : server(server),
+ network_isolation_key(use_network_isolation_key ? network_isolation_key
+ : NetworkIsolationKey()) {
+ // TODO(mmenke): DCHECK that |server|'s scheme is not ws/wss.
+}
+
+HttpServerProperties::ServerInfoMapKey::~ServerInfoMapKey() = default;
+
+bool HttpServerProperties::ServerInfoMapKey::operator<(
+ const ServerInfoMapKey& other) const {
+ return std::tie(server, network_isolation_key) <
+ std::tie(other.server, other.network_isolation_key);
+}
+
+HttpServerProperties::ServerInfoMap::ServerInfoMap()
+ : base::MRUCache<ServerInfoMapKey, ServerInfo>(kMaxServerInfoEntries) {}
+
+HttpServerProperties::ServerInfoMap::iterator
+HttpServerProperties::ServerInfoMap::GetOrPut(const ServerInfoMapKey& key) {
+ auto it = Get(key);
+ if (it != end())
+ return it;
+ return Put(key, ServerInfo());
+}
+
+HttpServerProperties::ServerInfoMap::iterator
+HttpServerProperties::ServerInfoMap::EraseIfEmpty(iterator server_info_it) {
+ if (server_info_it->second.empty())
+ return Erase(server_info_it);
+ return ++server_info_it;
+}
+
+HttpServerProperties::HttpServerProperties(
+ std::unique_ptr<PrefDelegate> pref_delegate,
+ NetLog* net_log,
+ const base::TickClock* tick_clock,
+ base::Clock* clock)
+ : tick_clock_(tick_clock ? tick_clock
+ : base::DefaultTickClock::GetInstance()),
+ clock_(clock ? clock : base::DefaultClock::GetInstance()),
+ use_network_isolation_key_(base::FeatureList::IsEnabled(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey)),
+ is_initialized_(pref_delegate.get() == nullptr),
+ queue_write_on_load_(false),
+ properties_manager_(
+ pref_delegate
+ ? std::make_unique<HttpServerPropertiesManager>(
+ std::move(pref_delegate),
+ base::BindOnce(&HttpServerProperties::OnPrefsLoaded,
+ base::Unretained(this)),
+ kDefaultMaxQuicServerEntries,
+ net_log,
+ tick_clock_)
+ : nullptr),
+ broken_alternative_services_(kMaxRecentlyBrokenAlternativeServiceEntries,
+ this,
+ tick_clock_),
+ canonical_suffixes_({".ggpht.com", ".c.youtube.com", ".googlevideo.com",
+ ".googleusercontent.com"}),
+ quic_server_info_map_(kDefaultMaxQuicServerEntries),
+ max_server_configs_stored_in_properties_(kDefaultMaxQuicServerEntries) {}
+
+HttpServerProperties::~HttpServerProperties() {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+ if (properties_manager_) {
+ // Stop waiting for initial settings.
+ is_initialized_ = true;
+
+ // Stop the timer if it's running, since this will write to the properties
+ // file immediately.
+ prefs_update_timer_.Stop();
+
+ WriteProperties(base::OnceClosure());
+ }
+}
+
+url::SchemeHostPort HttpServerProperties::GetNormalizedSchemeHostPort(
+ const GURL& url) {
+ if (url.is_valid()) {
+ if (url.SchemeIs(url::kHttpsScheme) || url.SchemeIs(url::kWssScheme)) {
+ return url::SchemeHostPort(url::kHttpsScheme, url.host_piece(),
+ url.EffectiveIntPort());
+ } else if (url.SchemeIs(url::kHttpScheme) || url.SchemeIs(url::kWsScheme)) {
+ return url::SchemeHostPort(url::kHttpScheme, url.host_piece(),
+ url.EffectiveIntPort());
+ }
+ }
+ return url::SchemeHostPort(url);
+}
+
+void HttpServerProperties::Clear(base::OnceClosure callback) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ server_info_map_.Clear();
+ broken_alternative_services_.Clear();
+ canonical_alt_svc_map_.clear();
+ last_quic_address_ = IPAddress();
+ quic_server_info_map_.Clear();
+ canonical_server_info_map_.clear();
+
+ if (properties_manager_) {
+ // Stop waiting for initial settings.
+ is_initialized_ = true;
+ // Leaving this as-is doesn't actually have any effect, if it's true, but
+ // seems best to be safe.
+ queue_write_on_load_ = false;
+
+ // Stop the timer if it's running, since this will write to the properties
+ // file immediately.
+ prefs_update_timer_.Stop();
+ WriteProperties(std::move(callback));
+ } else if (callback) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
+ std::move(callback));
+ }
+}
+
+bool HttpServerProperties::SupportsRequestPriority(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ if (server.host().empty())
+ return false;
+
+ if (GetSupportsSpdy(server, network_isolation_key))
+ return true;
+ const AlternativeServiceInfoVector alternative_service_info_vector =
+ GetAlternativeServiceInfos(server, network_isolation_key);
+ for (const AlternativeServiceInfo& alternative_service_info :
+ alternative_service_info_vector) {
+ if (alternative_service_info.alternative_service().protocol == kProtoQUIC) {
return true;
+ }
}
- NOTREACHED();
return false;
}
-// static
-AlternativeServiceInfo
-AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+bool HttpServerProperties::GetSupportsSpdy(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ if (server.host().empty())
+ return false;
+
+ auto server_info =
+ server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key));
+ return server_info != server_info_map_.end() &&
+ server_info->second.supports_spdy.value_or(false);
+}
+
+void HttpServerProperties::SetSupportsSpdy(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key,
+ bool supports_spdy) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ if (server.host().empty())
+ return;
+
+ auto server_info = server_info_map_.GetOrPut(
+ CreateServerInfoKey(server, network_isolation_key));
+ // If value is already the same as |supports_spdy|, or value is unset and
+ // |supports_spdy| is false, don't queue a write.
+ bool queue_write =
+ server_info->second.supports_spdy.value_or(false) != supports_spdy;
+ server_info->second.supports_spdy = supports_spdy;
+
+ if (queue_write)
+ MaybeQueueWriteProperties();
+}
+
+bool HttpServerProperties::RequiresHTTP11(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ DCHECK(server.scheme() != "ws");
+ DCHECK(server.scheme() != "wss");
+ if (server.host().empty())
+ return false;
+
+ auto spdy_info =
+ server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key));
+ return spdy_info != server_info_map_.end() &&
+ spdy_info->second.requires_http11.value_or(false);
+}
+
+void HttpServerProperties::SetHTTP11Required(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ DCHECK(server.scheme() != "ws");
+ DCHECK(server.scheme() != "wss");
+ if (server.host().empty())
+ return;
+
+ server_info_map_.GetOrPut(CreateServerInfoKey(server, network_isolation_key))
+ ->second.requires_http11 = true;
+ // No need to call MaybeQueueWriteProperties(), as this information is not
+ // persisted to preferences.
+}
+
+void HttpServerProperties::MaybeForceHTTP11(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key,
+ SSLConfig* ssl_config) {
+ DCHECK(server.scheme() != "ws");
+ DCHECK(server.scheme() != "wss");
+ if (RequiresHTTP11(server, network_isolation_key)) {
+ ssl_config->alpn_protos.clear();
+ ssl_config->alpn_protos.push_back(kProtoHTTP11);
+ }
+}
+
+AlternativeServiceInfoVector HttpServerProperties::GetAlternativeServiceInfos(
+ const url::SchemeHostPort& origin,
+ const net::NetworkIsolationKey& network_isolation_key) {
+ // Copy valid alternative service infos into
+ // |valid_alternative_service_infos|.
+ AlternativeServiceInfoVector valid_alternative_service_infos;
+ const base::Time now = clock_->Now();
+ auto map_it =
+ server_info_map_.Get(CreateServerInfoKey(origin, network_isolation_key));
+ if (map_it != server_info_map_.end() &&
+ map_it->second.alternative_services.has_value()) {
+ AlternativeServiceInfoVector* service_info =
+ &map_it->second.alternative_services.value();
+ HostPortPair host_port_pair(origin.host(), origin.port());
+ for (auto it = service_info->begin(); it != service_info->end();) {
+ if (it->expiration() < now) {
+ it = service_info->erase(it);
+ continue;
+ }
+ AlternativeService alternative_service(it->alternative_service());
+ if (alternative_service.host.empty()) {
+ alternative_service.host = origin.host();
+ }
+ // If the alternative service is equivalent to the origin (same host, same
+ // port, and both TCP), skip it.
+ if (host_port_pair.Equals(alternative_service.host_port_pair()) &&
+ alternative_service.protocol == kProtoHTTP2) {
+ ++it;
+ continue;
+ }
+ if (alternative_service.protocol == kProtoQUIC) {
+ valid_alternative_service_infos.push_back(
+ AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ alternative_service, it->expiration(),
+ it->advertised_versions()));
+ } else {
+ valid_alternative_service_infos.push_back(
+ AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ alternative_service, it->expiration()));
+ }
+ ++it;
+ }
+ if (service_info->empty()) {
+ map_it->second.alternative_services.reset();
+ server_info_map_.EraseIfEmpty(map_it);
+ }
+ return valid_alternative_service_infos;
+ }
+
+ auto canonical = GetCanonicalAltSvcHost(origin, network_isolation_key);
+ if (canonical == canonical_alt_svc_map_.end()) {
+ return AlternativeServiceInfoVector();
+ }
+ map_it = server_info_map_.Get(
+ CreateServerInfoKey(canonical->second, network_isolation_key));
+ if (map_it == server_info_map_.end() ||
+ !map_it->second.alternative_services.has_value()) {
+ return AlternativeServiceInfoVector();
+ }
+ AlternativeServiceInfoVector* service_info =
+ &map_it->second.alternative_services.value();
+ for (auto it = service_info->begin(); it != service_info->end();) {
+ if (it->expiration() < now) {
+ it = service_info->erase(it);
+ continue;
+ }
+ AlternativeService alternative_service(it->alternative_service());
+ if (alternative_service.host.empty()) {
+ alternative_service.host = canonical->second.host();
+ if (IsAlternativeServiceBroken(alternative_service)) {
+ ++it;
+ continue;
+ }
+ alternative_service.host = origin.host();
+ } else if (IsAlternativeServiceBroken(alternative_service)) {
+ ++it;
+ continue;
+ }
+ if (alternative_service.protocol == kProtoQUIC) {
+ valid_alternative_service_infos.push_back(
+ AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ alternative_service, it->expiration(),
+ it->advertised_versions()));
+ } else {
+ valid_alternative_service_infos.push_back(
+ AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ alternative_service, it->expiration()));
+ }
+ ++it;
+ }
+ if (service_info->empty())
+ server_info_map_.EraseIfEmpty(map_it);
+ return valid_alternative_service_infos;
+}
+
+void HttpServerProperties::SetHttp2AlternativeService(
+ const url::SchemeHostPort& origin,
+ const NetworkIsolationKey& network_isolation_key,
const AlternativeService& alternative_service,
base::Time expiration) {
DCHECK_EQ(alternative_service.protocol, kProtoHTTP2);
- return AlternativeServiceInfo(alternative_service, expiration,
- quic::ParsedQuicVersionVector());
+
+ SetAlternativeServices(
+ origin, network_isolation_key,
+ AlternativeServiceInfoVector(
+ /*size=*/1, AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ alternative_service, expiration)));
}
-// static
-AlternativeServiceInfo AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+void HttpServerProperties::SetQuicAlternativeService(
+ const url::SchemeHostPort& origin,
+ const NetworkIsolationKey& network_isolation_key,
const AlternativeService& alternative_service,
base::Time expiration,
const quic::ParsedQuicVersionVector& advertised_versions) {
- DCHECK_EQ(alternative_service.protocol, kProtoQUIC);
- return AlternativeServiceInfo(alternative_service, expiration,
- advertised_versions);
+ DCHECK(alternative_service.protocol == kProtoQUIC);
+
+ SetAlternativeServices(
+ origin, network_isolation_key,
+ AlternativeServiceInfoVector(
+ /*size=*/1,
+ AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ alternative_service, expiration, advertised_versions)));
}
-AlternativeServiceInfo::AlternativeServiceInfo() : alternative_service_() {}
+void HttpServerProperties::SetAlternativeServices(
+ const url::SchemeHostPort& origin,
+ const net::NetworkIsolationKey& network_isolation_key,
+ const AlternativeServiceInfoVector& alternative_service_info_vector) {
+ if (alternative_service_info_vector.empty()) {
+ RemoveAltSvcCanonicalHost(origin, network_isolation_key);
+ // Don't bother moving to front when erasing information.
+ auto it = server_info_map_.Peek(
+ CreateServerInfoKey(origin, network_isolation_key));
-AlternativeServiceInfo::~AlternativeServiceInfo() = default;
+ if (it == server_info_map_.end() ||
+ !it->second.alternative_services.has_value()) {
+ return;
+ }
-AlternativeServiceInfo::AlternativeServiceInfo(
- const AlternativeService& alternative_service,
- base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions)
- : alternative_service_(alternative_service), expiration_(expiration) {
- if (alternative_service_.protocol == kProtoQUIC) {
- advertised_versions_ = advertised_versions;
- std::sort(advertised_versions_.begin(), advertised_versions_.end(),
- TransportVersionLessThan);
+ it->second.alternative_services.reset();
+ server_info_map_.EraseIfEmpty(it);
+ MaybeQueueWriteProperties();
+ return;
+ }
+
+ auto it = server_info_map_.GetOrPut(
+ CreateServerInfoKey(origin, network_isolation_key));
+ bool need_update_pref = true;
+ if (it->second.alternative_services.has_value()) {
+ DCHECK(!it->second.empty());
+ if (it->second.alternative_services->size() ==
+ alternative_service_info_vector.size()) {
+ const base::Time now = clock_->Now();
+ need_update_pref = false;
+ auto new_it = alternative_service_info_vector.begin();
+ for (const auto& old : *it->second.alternative_services) {
+ // Persist to disk immediately if new entry has different scheme, host,
+ // or port.
+ if (old.alternative_service() != new_it->alternative_service()) {
+ need_update_pref = true;
+ break;
+ }
+ // Also persist to disk if new expiration it more that twice as far or
+ // less than half as far in the future.
+ base::Time old_time = old.expiration();
+ base::Time new_time = new_it->expiration();
+ if (new_time - now > 2 * (old_time - now) ||
+ 2 * (new_time - now) < (old_time - now)) {
+ need_update_pref = true;
+ break;
+ }
+ // Also persist to disk if new entry has a different list of advertised
+ // versions.
+ if (old.advertised_versions() != new_it->advertised_versions()) {
+ need_update_pref = true;
+ break;
+ }
+ ++new_it;
+ }
+ }
+ }
+
+ const bool previously_no_alternative_services =
+ (GetIteratorWithAlternativeServiceInfo(origin, network_isolation_key) ==
+ server_info_map_.end());
+
+ it->second.alternative_services = alternative_service_info_vector;
+
+ if (previously_no_alternative_services &&
+ !GetAlternativeServiceInfos(origin, network_isolation_key).empty()) {
+ // TODO(rch): Consider the case where multiple requests are started
+ // before the first completes. In this case, only one of the jobs
+ // would reach this code, whereas all of them should should have.
+ HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING,
+ false);
+ }
+
+ // If this host ends with a canonical suffix, then set it as the
+ // canonical host.
+ const char* kCanonicalScheme = "https";
+ if (origin.scheme() == kCanonicalScheme) {
+ const std::string* canonical_suffix = GetCanonicalSuffix(origin.host());
+ if (canonical_suffix != nullptr) {
+ url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix,
+ origin.port());
+ canonical_alt_svc_map_[CreateServerInfoKey(
+ canonical_server, network_isolation_key)] = origin;
+ }
}
+
+ if (need_update_pref)
+ MaybeQueueWriteProperties();
}
-AlternativeServiceInfo::AlternativeServiceInfo(
- const AlternativeServiceInfo& alternative_service_info) = default;
+void HttpServerProperties::MarkAlternativeServiceBroken(
+ const AlternativeService& alternative_service) {
+ broken_alternative_services_.MarkBroken(alternative_service);
+ MaybeQueueWriteProperties();
+}
-AlternativeServiceInfo& AlternativeServiceInfo::operator=(
- const AlternativeServiceInfo& alternative_service_info) = default;
+void HttpServerProperties::
+ MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
+ const AlternativeService& alternative_service) {
+ broken_alternative_services_.MarkBrokenUntilDefaultNetworkChanges(
+ alternative_service);
+ MaybeQueueWriteProperties();
+}
+
+void HttpServerProperties::MarkAlternativeServiceRecentlyBroken(
+ const AlternativeService& alternative_service) {
+ broken_alternative_services_.MarkRecentlyBroken(alternative_service);
+ MaybeQueueWriteProperties();
+}
+
+bool HttpServerProperties::IsAlternativeServiceBroken(
+ const AlternativeService& alternative_service) const {
+ return broken_alternative_services_.IsBroken(alternative_service);
+}
+
+bool HttpServerProperties::WasAlternativeServiceRecentlyBroken(
+ const AlternativeService& alternative_service) {
+ return broken_alternative_services_.WasRecentlyBroken(alternative_service);
+}
+
+void HttpServerProperties::ConfirmAlternativeService(
+ const AlternativeService& alternative_service) {
+ bool old_value = IsAlternativeServiceBroken(alternative_service);
+ broken_alternative_services_.Confirm(alternative_service);
+ bool new_value = IsAlternativeServiceBroken(alternative_service);
-std::string AlternativeService::ToString() const {
- return base::StringPrintf("%s %s:%d", NextProtoToString(protocol),
- host.c_str(), port);
+ // For persisting, we only care about the value returned by
+ // IsAlternativeServiceBroken. If that value changes, then call persist.
+ if (old_value != new_value)
+ MaybeQueueWriteProperties();
}
-std::string AlternativeServiceInfo::ToString() const {
- base::Time::Exploded exploded;
- expiration_.LocalExplode(&exploded);
- return base::StringPrintf(
- "%s, expires %04d-%02d-%02d %02d:%02d:%02d",
- alternative_service_.ToString().c_str(), exploded.year, exploded.month,
- exploded.day_of_month, exploded.hour, exploded.minute, exploded.second);
+void HttpServerProperties::OnDefaultNetworkChanged() {
+ bool changed = broken_alternative_services_.OnDefaultNetworkChanged();
+ if (changed)
+ MaybeQueueWriteProperties();
}
-// static
-bool AlternativeServiceInfo::TransportVersionLessThan(
- const quic::ParsedQuicVersion& lhs,
- const quic::ParsedQuicVersion& rhs) {
- return lhs.transport_version < rhs.transport_version;
+std::unique_ptr<base::Value>
+HttpServerProperties::GetAlternativeServiceInfoAsValue() const {
+ const base::Time now = clock_->Now();
+ const base::TimeTicks now_ticks = tick_clock_->NowTicks();
+ std::unique_ptr<base::ListValue> dict_list(new base::ListValue);
+ for (const auto& server_info : server_info_map_) {
+ if (!server_info.second.alternative_services.has_value())
+ continue;
+ std::unique_ptr<base::ListValue> alternative_service_list(
+ new base::ListValue);
+ const ServerInfoMapKey& key = server_info.first;
+ for (const AlternativeServiceInfo& alternative_service_info :
+ server_info.second.alternative_services.value()) {
+ std::string alternative_service_string(
+ alternative_service_info.ToString());
+ AlternativeService alternative_service(
+ alternative_service_info.alternative_service());
+ if (alternative_service.host.empty()) {
+ alternative_service.host = key.server.host();
+ }
+ base::TimeTicks brokenness_expiration_ticks;
+ if (broken_alternative_services_.IsBroken(alternative_service,
+ &brokenness_expiration_ticks)) {
+ // Convert |brokenness_expiration| from TimeTicks to Time
+ base::Time brokenness_expiration =
+ now + (brokenness_expiration_ticks - now_ticks);
+ base::Time::Exploded exploded;
+ brokenness_expiration.LocalExplode(&exploded);
+ std::string broken_info_string =
+ " (broken until " +
+ base::StringPrintf("%04d-%02d-%02d %0d:%0d:%0d", exploded.year,
+ exploded.month, exploded.day_of_month,
+ exploded.hour, exploded.minute,
+ exploded.second) +
+ ")";
+ alternative_service_string.append(broken_info_string);
+ }
+ alternative_service_list->AppendString(alternative_service_string);
+ }
+ if (alternative_service_list->empty())
+ continue;
+ std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
+ dict->SetString("server", key.server.Serialize());
+ dict->SetString("network_isolation_key",
+ key.network_isolation_key.ToDebugString());
+ dict->Set("alternative_service", std::unique_ptr<base::Value>(
+ std::move(alternative_service_list)));
+ dict_list->Append(std::move(dict));
+ }
+ return std::move(dict_list);
}
-std::ostream& operator<<(std::ostream& os,
- const AlternativeService& alternative_service) {
- os << alternative_service.ToString();
- return os;
+bool HttpServerProperties::GetSupportsQuic(IPAddress* last_address) const {
+ if (last_quic_address_.empty())
+ return false;
+
+ *last_address = last_quic_address_;
+ return true;
}
-// static
-void HttpServerProperties::ForceHTTP11(SSLConfig* ssl_config) {
- ssl_config->alpn_protos.clear();
- ssl_config->alpn_protos.push_back(kProtoHTTP11);
+void HttpServerProperties::SetSupportsQuic(bool used_quic,
+ const IPAddress& address) {
+ IPAddress new_quic_address;
+ if (used_quic)
+ new_quic_address = address;
+
+ if (new_quic_address == last_quic_address_)
+ return;
+
+ last_quic_address_ = new_quic_address;
+ MaybeQueueWriteProperties();
+}
+
+void HttpServerProperties::SetServerNetworkStats(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key,
+ ServerNetworkStats stats) {
+ auto server_info = server_info_map_.GetOrPut(
+ CreateServerInfoKey(server, network_isolation_key));
+ bool changed = !server_info->second.server_network_stats.has_value() ||
+ server_info->second.server_network_stats.value() != stats;
+
+ if (changed) {
+ server_info->second.server_network_stats = stats;
+ MaybeQueueWriteProperties();
+ }
+}
+
+void HttpServerProperties::ClearServerNetworkStats(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key) {
+ auto server_info =
+ server_info_map_.Peek(CreateServerInfoKey(server, network_isolation_key));
+ // If stats are empty, nothing to do.
+ if (server_info == server_info_map_.end() ||
+ !server_info->second.server_network_stats.has_value()) {
+ return;
+ }
+
+ // Otherwise, clear and delete if needed. No need to bring to front of MRU
+ // cache when clearing data.
+ server_info->second.server_network_stats.reset();
+ if (server_info->second.empty())
+ server_info_map_.EraseIfEmpty(server_info);
+ MaybeQueueWriteProperties();
+}
+
+const ServerNetworkStats* HttpServerProperties::GetServerNetworkStats(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key) {
+ auto server_info =
+ server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key));
+ if (server_info == server_info_map_.end() ||
+ !server_info->second.server_network_stats.has_value()) {
+ return nullptr;
+ }
+ return &server_info->second.server_network_stats.value();
+}
+
+void HttpServerProperties::SetQuicServerInfo(
+ const quic::QuicServerId& server_id,
+ const std::string& server_info) {
+ auto it = quic_server_info_map_.Peek(server_id);
+ bool changed =
+ (it == quic_server_info_map_.end() || it->second != server_info);
+ quic_server_info_map_.Put(server_id, server_info);
+ UpdateCanonicalServerInfoMap(server_id);
+ if (changed)
+ MaybeQueueWriteProperties();
+}
+
+const std::string* HttpServerProperties::GetQuicServerInfo(
+ const quic::QuicServerId& server_id) {
+ auto it = quic_server_info_map_.Get(server_id);
+ if (it != quic_server_info_map_.end()) {
+ // Since |canonical_server_info_map_| should always map to the most
+ // recent host, update it with the one that became MRU in
+ // |quic_server_info_map_|.
+ UpdateCanonicalServerInfoMap(server_id);
+ return &it->second;
+ }
+
+ // If the exact match for |server_id| wasn't found, check
+ // |canonical_server_info_map_| whether there is server info for a host with
+ // the same canonical host suffix.
+ auto canonical_itr = GetCanonicalServerInfoHost(server_id);
+ if (canonical_itr == canonical_server_info_map_.end())
+ return nullptr;
+
+ // When search in |quic_server_info_map_|, do not change the MRU order.
+ it = quic_server_info_map_.Peek(canonical_itr->second);
+ if (it != quic_server_info_map_.end())
+ return &it->second;
+
+ return nullptr;
+}
+
+const QuicServerInfoMap& HttpServerProperties::quic_server_info_map() const {
+ return quic_server_info_map_;
+}
+
+size_t HttpServerProperties::max_server_configs_stored_in_properties() const {
+ return max_server_configs_stored_in_properties_;
+}
+
+void HttpServerProperties::SetMaxServerConfigsStoredInProperties(
+ size_t max_server_configs_stored_in_properties) {
+ // Do nothing if the new size is the same as the old one.
+ if (max_server_configs_stored_in_properties_ ==
+ max_server_configs_stored_in_properties) {
+ return;
+ }
+
+ max_server_configs_stored_in_properties_ =
+ max_server_configs_stored_in_properties;
+
+ // MRUCache doesn't allow the capacity of the cache to be changed. Thus create
+ // a new map with the new size and add current elements and swap the new map.
+ quic_server_info_map_.ShrinkToSize(max_server_configs_stored_in_properties_);
+ QuicServerInfoMap temp_map(max_server_configs_stored_in_properties_);
+ // Update the |canonical_server_info_map_| as well, so it stays in sync with
+ // |quic_server_info_map_|.
+ canonical_server_info_map_ = CanonicalServerInfoMap();
+ for (auto it = quic_server_info_map_.rbegin();
+ it != quic_server_info_map_.rend(); ++it) {
+ temp_map.Put(it->first, it->second);
+ UpdateCanonicalServerInfoMap(it->first);
+ }
+
+ quic_server_info_map_.Swap(temp_map);
+ if (properties_manager_) {
+ properties_manager_->set_max_server_configs_stored_in_properties(
+ max_server_configs_stored_in_properties);
+ }
+}
+
+bool HttpServerProperties::IsInitialized() const {
+ return is_initialized_;
+}
+
+void HttpServerProperties::OnExpireBrokenAlternativeService(
+ const AlternativeService& expired_alternative_service) {
+ // Remove every occurrence of |expired_alternative_service| from
+ // |alternative_service_map_|.
+ for (auto map_it = server_info_map_.begin();
+ map_it != server_info_map_.end();) {
+ if (!map_it->second.alternative_services.has_value()) {
+ ++map_it;
+ continue;
+ }
+ AlternativeServiceInfoVector* service_info =
+ &map_it->second.alternative_services.value();
+ for (auto it = service_info->begin(); it != service_info->end();) {
+ AlternativeService alternative_service(it->alternative_service());
+ // Empty hostname in map means hostname of key: substitute before
+ // comparing to |expired_alternative_service|.
+ if (alternative_service.host.empty()) {
+ alternative_service.host = map_it->first.server.host();
+ }
+ if (alternative_service == expired_alternative_service) {
+ it = service_info->erase(it);
+ continue;
+ }
+ ++it;
+ }
+ // If an origin has an empty list of alternative services, then remove it
+ // from both |canonical_alt_svc_map_| and
+ // |alternative_service_map_|.
+ if (service_info->empty()) {
+ // TODO(mmenke): Take a NetworkIsolationKey as input and use it here.
+ RemoveAltSvcCanonicalHost(map_it->first.server, NetworkIsolationKey());
+ map_it->second.alternative_services.reset();
+ map_it = server_info_map_.EraseIfEmpty(map_it);
+ continue;
+ }
+ ++map_it;
+ }
+}
+
+base::TimeDelta HttpServerProperties::GetUpdatePrefsDelayForTesting() {
+ return kUpdatePrefsDelay;
+}
+
+HttpServerProperties::ServerInfoMapKey
+HttpServerProperties::CreateServerInfoKey(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key) const {
+ return ServerInfoMapKey(server, network_isolation_key,
+ use_network_isolation_key_);
+}
+
+HttpServerProperties::ServerInfoMap::const_iterator
+HttpServerProperties::GetIteratorWithAlternativeServiceInfo(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key) {
+ ServerInfoMap::const_iterator it =
+ server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key));
+ if (it != server_info_map_.end() && it->second.alternative_services)
+ return it;
+
+ auto canonical = GetCanonicalAltSvcHost(server, network_isolation_key);
+ if (canonical == canonical_alt_svc_map_.end()) {
+ return server_info_map_.end();
+ }
+
+ const url::SchemeHostPort canonical_server = canonical->second;
+ it = server_info_map_.Get(
+ CreateServerInfoKey(canonical_server, network_isolation_key));
+ if (it == server_info_map_.end() || !it->second.alternative_services)
+ return server_info_map_.end();
+
+ for (const AlternativeServiceInfo& alternative_service_info :
+ it->second.alternative_services.value()) {
+ AlternativeService alternative_service(
+ alternative_service_info.alternative_service());
+ if (alternative_service.host.empty()) {
+ alternative_service.host = canonical_server.host();
+ }
+ if (!IsAlternativeServiceBroken(alternative_service)) {
+ return it;
+ }
+ }
+
+ RemoveAltSvcCanonicalHost(canonical_server, network_isolation_key);
+ return server_info_map_.end();
+}
+
+HttpServerProperties::CanonicalAltSvcMap::const_iterator
+HttpServerProperties::GetCanonicalAltSvcHost(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key) const {
+ const char* kCanonicalScheme = "https";
+ if (server.scheme() != kCanonicalScheme)
+ return canonical_alt_svc_map_.end();
+
+ const std::string* canonical_suffix = GetCanonicalSuffix(server.host());
+ if (canonical_suffix == nullptr)
+ return canonical_alt_svc_map_.end();
+
+ url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix,
+ server.port());
+ return canonical_alt_svc_map_.find(
+ CreateServerInfoKey(canonical_server, network_isolation_key));
+}
+
+HttpServerProperties::CanonicalServerInfoMap::const_iterator
+HttpServerProperties::GetCanonicalServerInfoHost(
+ const quic::QuicServerId& server) const {
+ const std::string* canonical_suffix = GetCanonicalSuffix(server.host());
+ if (canonical_suffix == nullptr)
+ return canonical_server_info_map_.end();
+
+ HostPortPair canonical_pair(*canonical_suffix, server.port());
+ return canonical_server_info_map_.find(canonical_pair);
+}
+
+void HttpServerProperties::RemoveAltSvcCanonicalHost(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key) {
+ auto canonical = GetCanonicalAltSvcHost(server, network_isolation_key);
+ if (canonical == canonical_alt_svc_map_.end())
+ return;
+
+ canonical_alt_svc_map_.erase(canonical->first);
+}
+
+void HttpServerProperties::UpdateCanonicalServerInfoMap(
+ const quic::QuicServerId& server) {
+ const std::string* suffix = GetCanonicalSuffix(server.host());
+ if (suffix) {
+ HostPortPair canonical_pair(*suffix, server.port());
+ canonical_server_info_map_[canonical_pair] = server;
+ }
+}
+
+const std::string* HttpServerProperties::GetCanonicalSuffix(
+ const std::string& host) const {
+ // If this host ends with a canonical suffix, then return the canonical
+ // suffix.
+ for (const std::string& canonical_suffix : canonical_suffixes_) {
+ if (base::EndsWith(host, canonical_suffix,
+ base::CompareCase::INSENSITIVE_ASCII)) {
+ return &canonical_suffix;
+ }
+ }
+ return nullptr;
+}
+
+void HttpServerProperties::OnPrefsLoaded(
+ std::unique_ptr<ServerInfoMap> server_info_map,
+ const IPAddress& last_quic_address,
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map,
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+ DCHECK(!is_initialized_);
+
+ // Either all of these are nullptr, or none of them are (except the broken alt
+ // service fields).
+ if (server_info_map) {
+ OnServerInfoLoaded(std::move(server_info_map));
+ OnSupportsQuicLoaded(last_quic_address);
+ OnQuicServerInfoMapLoaded(std::move(quic_server_info_map));
+ if (recently_broken_alternative_services) {
+ DCHECK(broken_alternative_service_list);
+ OnBrokenAndRecentlyBrokenAlternativeServicesLoaded(
+ std::move(broken_alternative_service_list),
+ std::move(recently_broken_alternative_services));
+ }
+ }
+
+ is_initialized_ = true;
+
+ if (queue_write_on_load_) {
+ // Leaving this as true doesn't actually have any effect, but seems best to
+ // be safe.
+ queue_write_on_load_ = false;
+ MaybeQueueWriteProperties();
+ }
+}
+
+void HttpServerProperties::OnServerInfoLoaded(
+ std::unique_ptr<ServerInfoMap> server_info_map) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+ // Perform a simple sanity check on loaded data, when DCHECKs are enabled.
+#if DCHECK_IS_ON()
+ if (!use_network_isolation_key_) {
+ for (auto server_info = server_info_map->begin();
+ server_info != server_info_map->end(); ++server_info) {
+ DCHECK(server_info->first.network_isolation_key.IsEmpty());
+ }
+ }
+#endif // DCHECK_IS_ON()
+
+ // Swap in the entries from persisted data. This allows the MRU cache to be
+ // sorted based on the order of the entries in the newer in-memory cache.
+ server_info_map_.Swap(*server_info_map);
+
+ // Add the entries from the memory cache.
+ for (auto it = server_info_map->rbegin(); it != server_info_map->rend();
+ ++it) {
+ // If there's no corresponding old entry, add the new entry directly.
+ auto old_entry = server_info_map_.Get(it->first);
+ if (old_entry == server_info_map_.end()) {
+ server_info_map_.Put(it->first, std::move(it->second));
+ continue;
+ }
+
+ // Otherwise, merge the old and new entries. Prefer values from older
+ // entries.
+ if (!old_entry->second.supports_spdy.has_value())
+ old_entry->second.supports_spdy = it->second.supports_spdy;
+ if (!old_entry->second.alternative_services.has_value())
+ old_entry->second.alternative_services = it->second.alternative_services;
+ if (!old_entry->second.server_network_stats.has_value())
+ old_entry->second.server_network_stats = it->second.server_network_stats;
+
+ // |requires_http11| isn't saved to prefs, so the loaded entry should not
+ // have it set. Unconditionally copy it from the new entry.
+ DCHECK(!old_entry->second.requires_http11.has_value());
+ old_entry->second.requires_http11 = it->second.requires_http11;
+ }
+
+ // Attempt to find canonical servers. Canonical suffix only apply to HTTPS.
+ const uint16_t kCanonicalPort = 443;
+ const char* kCanonicalScheme = "https";
+ for (auto it = server_info_map_.begin(); it != server_info_map_.end(); ++it) {
+ if (!it->second.alternative_services ||
+ it->first.server.scheme() != kCanonicalScheme) {
+ continue;
+ }
+ const std::string* canonical_suffix =
+ GetCanonicalSuffix(it->first.server.host());
+ if (!canonical_suffix)
+ continue;
+ ServerInfoMapKey key = CreateServerInfoKey(
+ url::SchemeHostPort(kCanonicalScheme, *canonical_suffix,
+ kCanonicalPort),
+ it->first.network_isolation_key);
+ // If we already have a valid canonical server, we're done.
+ if (base::Contains(canonical_alt_svc_map_, key)) {
+ auto it = server_info_map_.Peek(key);
+ if (it != server_info_map_.end() &&
+ it->second.alternative_services.has_value()) {
+ continue;
+ }
+ }
+ canonical_alt_svc_map_[key] = it->first.server;
+ }
+}
+
+void HttpServerProperties::OnSupportsQuicLoaded(const IPAddress& last_address) {
+ last_quic_address_ = last_address;
+}
+
+void HttpServerProperties::OnQuicServerInfoMapLoaded(
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map) {
+ DCHECK_EQ(quic_server_info_map->max_size(), quic_server_info_map_.max_size());
+
+ // Add the entries from persisted data.
+ quic_server_info_map_.Swap(*quic_server_info_map);
+
+ // Add the entries from the memory cache.
+ for (auto it = quic_server_info_map->rbegin();
+ it != quic_server_info_map->rend(); ++it) {
+ if (quic_server_info_map_.Get(it->first) == quic_server_info_map_.end()) {
+ quic_server_info_map_.Put(it->first, it->second);
+ }
+ }
+
+ // Repopulate |canonical_server_info_map_| to stay in sync with
+ // |quic_server_info_map_|.
+ canonical_server_info_map_.clear();
+ for (auto it = quic_server_info_map_.rbegin();
+ it != quic_server_info_map_.rend(); ++it) {
+ UpdateCanonicalServerInfoMap(it->first);
+ }
+}
+
+void HttpServerProperties::OnBrokenAndRecentlyBrokenAlternativeServicesLoaded(
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services) {
+ broken_alternative_services_.SetBrokenAndRecentlyBrokenAlternativeServices(
+ std::move(broken_alternative_service_list),
+ std::move(recently_broken_alternative_services));
+}
+
+void HttpServerProperties::MaybeQueueWriteProperties() {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+ if (prefs_update_timer_.IsRunning() || !properties_manager_)
+ return;
+
+ if (!is_initialized_) {
+ queue_write_on_load_ = true;
+ return;
+ }
+
+ prefs_update_timer_.Start(
+ FROM_HERE, kUpdatePrefsDelay,
+ base::BindOnce(&HttpServerProperties::WriteProperties,
+ base::Unretained(this), base::OnceClosure()));
+}
+
+void HttpServerProperties::WriteProperties(base::OnceClosure callback) const {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ DCHECK(properties_manager_);
+
+ // |this| shouldn't be waiting to load properties cached to disk when this
+ // method is invoked, since this method will overwrite any cached properties.
+ DCHECK(is_initialized_);
+
+ // There shouldn't be a queued update when this is run, since this method
+ // removes the need for any update to be queued.
+ DCHECK(!prefs_update_timer_.IsRunning());
+
+ properties_manager_->WriteToPrefs(
+ server_info_map_,
+ base::BindRepeating(&HttpServerProperties::GetCanonicalSuffix,
+ base::Unretained(this)),
+ last_quic_address_, quic_server_info_map_,
+ broken_alternative_services_.broken_alternative_service_list(),
+ broken_alternative_services_.recently_broken_alternative_services(),
+ std::move(callback));
}
} // namespace net
diff --git a/chromium/net/http/http_server_properties.h b/chromium/net/http/http_server_properties.h
index a1117925d95..8ef3bd6426b 100644
--- a/chromium/net/http/http_server_properties.h
+++ b/chromium/net/http/http_server_properties.h
@@ -5,10 +5,12 @@
#ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_H_
#define NET_HTTP_HTTP_SERVER_PROPERTIES_H_
+#include <stddef.h>
#include <stdint.h>
#include <map>
-#include <ostream>
+#include <memory>
+#include <set>
#include <string>
#include <tuple>
#include <vector>
@@ -16,10 +18,19 @@
#include "base/callback.h"
#include "base/containers/mru_cache.h"
#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
+#include "base/threading/thread_checker.h"
#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "base/values.h"
#include "net/base/host_port_pair.h"
+#include "net/base/ip_address.h"
#include "net/base/net_export.h"
-#include "net/socket/next_proto.h"
+#include "net/base/network_isolation_key.h"
+#include "net/http/alternative_service.h"
+#include "net/http/broken_alternative_services.h"
+#include "net/http/http_server_properties.h"
#include "net/third_party/quiche/src/quic/core/quic_bandwidth.h"
#include "net/third_party/quiche/src/quic/core/quic_server_id.h"
#include "net/third_party/quiche/src/quic/core/quic_versions.h"
@@ -28,200 +39,23 @@
#include "url/scheme_host_port.h"
namespace base {
+class Clock;
+class TickClock;
class Value;
}
namespace net {
+class HostPortPair;
+class HttpServerPropertiesManager;
class IPAddress;
+class NetLog;
struct SSLConfig;
-enum AlternateProtocolUsage {
- // Alternate Protocol was used without racing a normal connection.
- ALTERNATE_PROTOCOL_USAGE_NO_RACE = 0,
- // Alternate Protocol was used by winning a race with a normal connection.
- ALTERNATE_PROTOCOL_USAGE_WON_RACE = 1,
- // Alternate Protocol was not used by losing a race with a normal connection.
- ALTERNATE_PROTOCOL_USAGE_LOST_RACE = 2,
- // Alternate Protocol was not used because no Alternate-Protocol information
- // was available when the request was issued, but an Alternate-Protocol header
- // was present in the response.
- ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING = 3,
- // Alternate Protocol was not used because it was marked broken.
- ALTERNATE_PROTOCOL_USAGE_BROKEN = 4,
- // Maximum value for the enum.
- ALTERNATE_PROTOCOL_USAGE_MAX,
-};
-
-// Log a histogram to reflect |usage|.
-NET_EXPORT void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage,
- bool proxy_server_used);
-
-enum BrokenAlternateProtocolLocation {
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB = 0,
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_STREAM_FACTORY = 1,
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_ALT = 2,
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_MAIN = 3,
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_HTTP_STREAM = 4,
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_NETWORK_TRANSACTION = 5,
- BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX,
-};
-
-// Log a histogram to reflect |location|.
-NET_EXPORT void HistogramBrokenAlternateProtocolLocation(
- BrokenAlternateProtocolLocation location);
-
-NET_EXPORT bool IsAlternateProtocolValid(NextProto protocol);
-
-// (protocol, host, port) triple as defined in
-// https://tools.ietf.org/id/draft-ietf-httpbis-alt-svc-06.html
-struct NET_EXPORT AlternativeService {
- AlternativeService() : protocol(kProtoUnknown), host(), port(0) {}
-
- AlternativeService(NextProto protocol, const std::string& host, uint16_t port)
- : protocol(protocol), host(host), port(port) {}
-
- AlternativeService(NextProto protocol, const HostPortPair& host_port_pair)
- : protocol(protocol),
- host(host_port_pair.host()),
- port(host_port_pair.port()) {}
-
- AlternativeService(const AlternativeService& alternative_service) = default;
- AlternativeService& operator=(const AlternativeService& alternative_service) =
- default;
-
- HostPortPair host_port_pair() const { return HostPortPair(host, port); }
-
- bool operator==(const AlternativeService& other) const {
- return protocol == other.protocol && host == other.host &&
- port == other.port;
- }
-
- bool operator!=(const AlternativeService& other) const {
- return !this->operator==(other);
- }
-
- bool operator<(const AlternativeService& other) const {
- return std::tie(protocol, host, port) <
- std::tie(other.protocol, other.host, other.port);
- }
-
- // Output format: "protocol host:port", e.g. "h2 www.google.com:1234".
- std::string ToString() const;
-
- NextProto protocol;
- std::string host;
- uint16_t port;
-};
-
-NET_EXPORT_PRIVATE std::ostream& operator<<(
- std::ostream& os,
- const AlternativeService& alternative_service);
-
-struct AlternativeServiceHash {
- size_t operator()(const net::AlternativeService& entry) const {
- return entry.protocol ^ std::hash<std::string>()(entry.host) ^ entry.port;
- }
-};
-
-class NET_EXPORT_PRIVATE AlternativeServiceInfo {
- public:
- static AlternativeServiceInfo CreateHttp2AlternativeServiceInfo(
- const AlternativeService& alternative_service,
- base::Time expiration);
-
- static AlternativeServiceInfo CreateQuicAlternativeServiceInfo(
- const AlternativeService& alternative_service,
- base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions);
-
- AlternativeServiceInfo();
- ~AlternativeServiceInfo();
-
- AlternativeServiceInfo(
- const AlternativeServiceInfo& alternative_service_info);
-
- AlternativeServiceInfo& operator=(
- const AlternativeServiceInfo& alternative_service_info);
-
- bool operator==(const AlternativeServiceInfo& other) const {
- return alternative_service_ == other.alternative_service() &&
- expiration_ == other.expiration() &&
- advertised_versions_ == other.advertised_versions();
- }
-
- bool operator!=(const AlternativeServiceInfo& other) const {
- return !this->operator==(other);
- }
-
- std::string ToString() const;
-
- void set_alternative_service(const AlternativeService& alternative_service) {
- alternative_service_ = alternative_service;
- }
-
- void set_protocol(const NextProto& protocol) {
- alternative_service_.protocol = protocol;
- }
-
- void set_host(const std::string& host) { alternative_service_.host = host; }
-
- void set_port(uint16_t port) { alternative_service_.port = port; }
-
- void set_expiration(const base::Time& expiration) {
- expiration_ = expiration;
- }
-
- void set_advertised_versions(
- const quic::ParsedQuicVersionVector& advertised_versions) {
- if (alternative_service_.protocol != kProtoQUIC)
- return;
-
- advertised_versions_ = advertised_versions;
- std::sort(advertised_versions_.begin(), advertised_versions_.end(),
- TransportVersionLessThan);
- }
-
- const AlternativeService& alternative_service() const {
- return alternative_service_;
- }
-
- NextProto protocol() const { return alternative_service_.protocol; }
-
- HostPortPair host_port_pair() const {
- return alternative_service_.host_port_pair();
- }
-
- base::Time expiration() const { return expiration_; }
-
- const quic::ParsedQuicVersionVector& advertised_versions() const {
- return advertised_versions_;
- }
-
- private:
- AlternativeServiceInfo(
- const AlternativeService& alternative_service,
- base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions);
-
- static bool TransportVersionLessThan(const quic::ParsedQuicVersion& lhs,
- const quic::ParsedQuicVersion& rhs);
-
- AlternativeService alternative_service_;
- base::Time expiration_;
-
- // Lists all the QUIC versions that are advertised by the server and supported
- // by Chrome. If empty, defaults to versions used by the current instance of
- // the netstack.
- // This list MUST be sorted in ascending order.
- quic::ParsedQuicVersionVector advertised_versions_;
-};
-
struct NET_EXPORT SupportsQuic {
SupportsQuic() : used_quic(false) {}
SupportsQuic(bool used_quic, const std::string& address)
- : used_quic(used_quic),
- address(address) {}
+ : used_quic(used_quic), address(address) {}
bool Equals(const SupportsQuic& other) const {
return used_quic == other.used_quic && address == other.address;
@@ -247,235 +81,477 @@ struct NET_EXPORT ServerNetworkStats {
};
typedef std::vector<AlternativeService> AlternativeServiceVector;
-typedef std::vector<AlternativeServiceInfo> AlternativeServiceInfoVector;
-
-// Stores broken alternative services and when their brokenness expires.
-typedef std::list<std::pair<AlternativeService, base::TimeTicks>>
- BrokenAlternativeServiceList;
-
-// Store at most 300 MRU SupportsSpdyServerHostPortPairs in memory and disk.
-const int kMaxSupportsSpdyServerEntries = 300;
-
-// Store at most 200 MRU AlternateProtocolHostPortPairs in memory and disk.
-const int kMaxAlternateProtocolEntries = 200;
-
-// Store at most 200 MRU ServerNetworkStats in memory and disk.
-const int kMaxServerNetworkStatsEntries = 200;
// Store at most 200 MRU RecentlyBrokenAlternativeServices in memory and disk.
+// This ideally would be with the other constants in HttpServerProperties, but
+// has to go here instead of prevent a circular dependency.
const int kMaxRecentlyBrokenAlternativeServiceEntries = 200;
// Store at most 5 MRU QUIC servers by default. This is mainly used by cronet.
const int kDefaultMaxQuicServerEntries = 5;
-// Stores flattened representation of servers (scheme, host, port) and whether
-// or not they support SPDY.
-class SpdyServersMap : public base::MRUCache<std::string, bool> {
- public:
- SpdyServersMap()
- : base::MRUCache<std::string, bool>(kMaxSupportsSpdyServerEntries) {}
-};
-
-class AlternativeServiceMap
- : public base::MRUCache<url::SchemeHostPort, AlternativeServiceInfoVector> {
- public:
- AlternativeServiceMap()
- : base::MRUCache<url::SchemeHostPort, AlternativeServiceInfoVector>(
- kMaxAlternateProtocolEntries) {}
-};
-
-class ServerNetworkStatsMap
- : public base::MRUCache<url::SchemeHostPort, ServerNetworkStats> {
- public:
- ServerNetworkStatsMap()
- : base::MRUCache<url::SchemeHostPort, ServerNetworkStats>(
- kMaxServerNetworkStatsEntries) {}
-};
-
-// Stores how many times an alternative service has been marked broken.
-class RecentlyBrokenAlternativeServices
- : public base::MRUCache<AlternativeService, int> {
- public:
- RecentlyBrokenAlternativeServices()
- : base::MRUCache<AlternativeService, int>(
- kMaxRecentlyBrokenAlternativeServiceEntries) {}
-};
-
// Max number of quic servers to store is not hardcoded and can be set.
// Because of this, QuicServerInfoMap will not be a subclass of MRUCache.
typedef base::MRUCache<quic::QuicServerId, std::string> QuicServerInfoMap;
-extern const char kAlternativeServiceHeader[];
-
// The interface for setting/retrieving the HTTP server properties.
// Currently, this class manages servers':
// * HTTP/2 support;
// * Alternative Service support;
// * QUIC data (like ServerNetworkStats and QuicServerInfo).
//
-// Embedders must ensure that HttpServerProperites is completely initialized
-// before the first request is issued.
-class NET_EXPORT HttpServerProperties {
+// Optionally retrieves and saves properties from/to disk. This class is not
+// threadsafe.
+class NET_EXPORT HttpServerProperties
+ : public BrokenAlternativeServices::Delegate {
public:
- HttpServerProperties() {}
- virtual ~HttpServerProperties() {}
+ // Store at most 500 MRU ServerInfos in memory and disk.
+ static const int kMaxServerInfoEntries = 500;
+
+ // Provides an interface to interact with persistent preferences storage
+ // implemented by the embedder. The prefs are assumed not to have been loaded
+ // before HttpServerPropertiesManager construction.
+ class NET_EXPORT PrefDelegate {
+ public:
+ virtual ~PrefDelegate();
+
+ // Returns the branch of the preferences system for the server properties.
+ // Returns nullptr if the pref system has no data for the server properties.
+ virtual const base::DictionaryValue* GetServerProperties() const = 0;
+
+ // Sets the server properties to the given value. If |callback| is
+ // non-empty, flushes data to persistent storage and invokes |callback|
+ // asynchronously when complete.
+ virtual void SetServerProperties(const base::DictionaryValue& value,
+ base::OnceClosure callback) = 0;
+
+ // Starts listening for prefs to be loaded. If prefs are already loaded,
+ // |pref_loaded_callback| will be invoked asynchronously. Callback will be
+ // invoked even if prefs fail to load. Will only be called once by the
+ // HttpServerPropertiesManager.
+ virtual void WaitForPrefLoad(base::OnceClosure pref_loaded_callback) = 0;
+ };
+
+ // Contains metadata about a particular server. Note that all methods that
+ // take a "SchemeHostPort" expect schemes of ws and wss to be mapped to http
+ // and https, respectively. See GetNormalizedSchemeHostPort().
+ struct NET_EXPORT ServerInfo {
+ ServerInfo();
+ ServerInfo(const ServerInfo& server_info);
+ ServerInfo(ServerInfo&& server_info);
+ ~ServerInfo();
+
+ // Returns true if no fields are populated.
+ bool empty() const;
+
+ // Used in tests.
+ bool operator==(const ServerInfo& other) const;
+
+ // IMPORTANT: When adding a field here, be sure to update
+ // HttpServerProperties::OnServerInfoLoaded() as well as
+ // HttpServerPropertiesManager to correctly load/save the from/to the pref
+ // store.
+
+ // Whether or not a server is known to support H2/SPDY. False indicates
+ // known lack of support, true indicates known support, and not set
+ // indicates unknown. The difference between false and not set only matters
+ // when loading from disk, when an initialized false value will take
+ // priority over a not set value.
+ base::Optional<bool> supports_spdy;
+
+ // True if the server has previously indicated it required HTTP/1.1. Unlike
+ // other fields, not persisted to disk.
+ base::Optional<bool> requires_http11;
+
+ base::Optional<AlternativeServiceInfoVector> alternative_services;
+ base::Optional<ServerNetworkStats> server_network_stats;
+ };
+
+ struct NET_EXPORT ServerInfoMapKey {
+ // If |use_network_isolation_key| is false, an empty NetworkIsolationKey is
+ // used instead of |network_isolation_key|.
+ ServerInfoMapKey(const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key,
+ bool use_network_isolation_key);
+ ~ServerInfoMapKey();
+
+ bool operator<(const ServerInfoMapKey& other) const;
+
+ url::SchemeHostPort server;
+ NetworkIsolationKey network_isolation_key;
+ };
+
+ class NET_EXPORT ServerInfoMap
+ : public base::MRUCache<ServerInfoMapKey, ServerInfo> {
+ public:
+ ServerInfoMap();
+
+ // If there's an entry corresponding to |key|, brings that entry to the
+ // front and returns an iterator to it. Otherwise, inserts an empty
+ // ServerInfo using |key|, and returns an iterator to it.
+ iterator GetOrPut(const ServerInfoMapKey& key);
+
+ // Erases the ServerInfo identified by |server_info_it| if no fields have
+ // data. The iterator must point to an entry in the map. Regardless of
+ // whether the entry is removed or not, returns iterator for the next entry.
+ iterator EraseIfEmpty(iterator server_info_it);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ServerInfoMap);
+ };
+
+ // If a |pref_delegate| is specified, it will be used to read/write the
+ // properties to a pref file. Writes are rate limited to improve performance.
+ //
+ // |tick_clock| is used for setting expiration times and scheduling the
+ // expiration of broken alternative services. If null, default clock will be
+ // used.
+ //
+ // |clock| is used for converting base::TimeTicks to base::Time for
+ // wherever base::Time is preferable.
+ HttpServerProperties(std::unique_ptr<PrefDelegate> pref_delegate = nullptr,
+ NetLog* net_log = nullptr,
+ const base::TickClock* tick_clock = nullptr,
+ base::Clock* clock = nullptr);
+
+ ~HttpServerProperties() override;
+
+ // Returns the SchemeHostPort for |url|, with the exception that it replaces
+ // "wss" with "https" and "ws" with "http", so they're grouped together.
+ static url::SchemeHostPort GetNormalizedSchemeHostPort(const GURL& url);
// Deletes all data. If |callback| is non-null, flushes data to disk
// and invokes the callback asynchronously once changes have been written to
// disk.
- virtual void Clear(base::OnceClosure callback) = 0;
+ void Clear(base::OnceClosure callback);
- // Returns true if |server| supports a network protocol which honors
- // request prioritization.
+ // Returns true if |server|, in the context of |network_isolation_key|, has
+ // previously supported a network protocol which honors request
+ // prioritization.
+ //
// Note that this also implies that the server supports request
// multiplexing, since priorities imply a relationship between
// multiple requests.
- virtual bool SupportsRequestPriority(const url::SchemeHostPort& server) = 0;
+ bool SupportsRequestPriority(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key);
// Returns the value set by SetSupportsSpdy(). If not set, returns false.
- virtual bool GetSupportsSpdy(const url::SchemeHostPort& server) = 0;
-
- // Add |server| into the persistent store. Should only be called from IO
- // thread.
- virtual void SetSupportsSpdy(const url::SchemeHostPort& server,
- bool support_spdy) = 0;
-
- // Returns true if |server| has required HTTP/1.1 via HTTP/2 error code.
- virtual bool RequiresHTTP11(const HostPortPair& server) = 0;
-
- // Require HTTP/1.1 on subsequent connections. Not persisted.
- virtual void SetHTTP11Required(const HostPortPair& server) = 0;
-
- // Modify SSLConfig to force HTTP/1.1.
- static void ForceHTTP11(SSLConfig* ssl_config);
+ bool GetSupportsSpdy(const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key);
+
+ // Records whether |server| supports H2 or not. Information is restricted to
+ // the context of |network_isolation_key|, to prevent cross-site information
+ // leakage.
+ void SetSupportsSpdy(const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key,
+ bool supports_spdy);
+
+ // Returns true if |server| has required HTTP/1.1 via HTTP/2 error code, in
+ // the context of |network_isolation_key|.
+ bool RequiresHTTP11(const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key);
+
+ // Require HTTP/1.1 on subsequent connections, in the context of
+ // |network_isolation_key|. Not persisted.
+ void SetHTTP11Required(const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key);
// Modify SSLConfig to force HTTP/1.1 if necessary.
- virtual void MaybeForceHTTP11(const HostPortPair& server,
- SSLConfig* ssl_config) = 0;
-
- // Return all alternative services for |origin|, including broken ones.
- // Returned alternative services never have empty hostnames.
- virtual AlternativeServiceInfoVector GetAlternativeServiceInfos(
- const url::SchemeHostPort& origin) = 0;
+ void MaybeForceHTTP11(const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key,
+ SSLConfig* ssl_config);
+
+ // Return all alternative services for |origin|, learned in the context of
+ // |network_isolation_key|, including broken ones. Returned alternative
+ // services never have empty hostnames.
+ AlternativeServiceInfoVector GetAlternativeServiceInfos(
+ const url::SchemeHostPort& origin,
+ const net::NetworkIsolationKey& network_isolation_key);
// Set a single HTTP/2 alternative service for |origin|. Previous
// alternative services for |origin| are discarded.
// |alternative_service.host| may be empty.
- // Return true if |alternative_service_map_| has changed significantly enough
- // that it should be persisted to disk.
- virtual bool SetHttp2AlternativeService(
+ void SetHttp2AlternativeService(
const url::SchemeHostPort& origin,
+ const NetworkIsolationKey& network_isolation_key,
const AlternativeService& alternative_service,
- base::Time expiration) = 0;
+ base::Time expiration);
// Set a single QUIC alternative service for |origin|. Previous alternative
// services for |origin| are discarded.
// |alternative_service.host| may be empty.
- // Return true if |alternative_service_map_| has changed significantly enough
- // that it should be persisted to disk.
- virtual bool SetQuicAlternativeService(
+ void SetQuicAlternativeService(
const url::SchemeHostPort& origin,
+ const NetworkIsolationKey& network_isolation_key,
const AlternativeService& alternative_service,
base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions) = 0;
+ const quic::ParsedQuicVersionVector& advertised_versions);
- // Set alternative services for |origin|. Previous alternative services for
- // |origin| are discarded.
- // Hostnames in |alternative_service_info_vector| may be empty.
+ // Set alternative services for |origin|, learned in the context of
+ // |network_isolation_key|. Previous alternative services for |origin| are
+ // discarded. Hostnames in |alternative_service_info_vector| may be empty.
// |alternative_service_info_vector| may be empty.
- // Return true if |alternative_service_map_| has changed significantly enough
- // that it should be persisted to disk.
- virtual bool SetAlternativeServices(
+ void SetAlternativeServices(
const url::SchemeHostPort& origin,
- const AlternativeServiceInfoVector& alternative_service_info_vector) = 0;
+ const net::NetworkIsolationKey& network_isolation_key,
+ const AlternativeServiceInfoVector& alternative_service_info_vector);
// Marks |alternative_service| as broken.
// |alternative_service.host| must not be empty.
- virtual void MarkAlternativeServiceBroken(
- const AlternativeService& alternative_service) = 0;
+ void MarkAlternativeServiceBroken(
+ const AlternativeService& alternative_service);
// Marks |alternative_service| as broken until the default network changes.
// |alternative_service.host| must not be empty.
- virtual void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- const AlternativeService& alternative_service) = 0;
+ void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
+ const AlternativeService& alternative_service);
// Marks |alternative_service| as recently broken.
// |alternative_service.host| must not be empty.
- virtual void MarkAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) = 0;
+ void MarkAlternativeServiceRecentlyBroken(
+ const AlternativeService& alternative_service);
// Returns true iff |alternative_service| is currently broken.
// |alternative_service.host| must not be empty.
- virtual bool IsAlternativeServiceBroken(
- const AlternativeService& alternative_service) const = 0;
+ bool IsAlternativeServiceBroken(
+ const AlternativeService& alternative_service) const;
// Returns true iff |alternative_service| was recently broken.
// |alternative_service.host| must not be empty.
- virtual bool WasAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) = 0;
+ bool WasAlternativeServiceRecentlyBroken(
+ const AlternativeService& alternative_service);
// Confirms that |alternative_service| is working.
// |alternative_service.host| must not be empty.
- virtual void ConfirmAlternativeService(
- const AlternativeService& alternative_service) = 0;
+ void ConfirmAlternativeService(const AlternativeService& alternative_service);
// Called when the default network changes.
// Clears all the alternative services that were marked broken until the
// default network changed.
- // Returns true if there is any broken alternative service affected by the
- // default network change.
- virtual bool OnDefaultNetworkChanged() = 0;
-
- // Returns all alternative service mappings.
- // Returned alternative services may have empty hostnames.
- virtual const AlternativeServiceMap& alternative_service_map() const = 0;
+ void OnDefaultNetworkChanged();
// Returns all alternative service mappings as human readable strings.
// Empty alternative service hostnames will be printed as such.
- virtual std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue()
- const = 0;
+ std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue() const;
- virtual bool GetSupportsQuic(IPAddress* last_address) const = 0;
+ bool GetSupportsQuic(IPAddress* last_address) const;
- virtual void SetSupportsQuic(bool used_quic,
- const IPAddress& last_address) = 0;
+ void SetSupportsQuic(bool used_quic, const IPAddress& last_address);
// Sets |stats| for |server|.
- virtual void SetServerNetworkStats(const url::SchemeHostPort& server,
- ServerNetworkStats stats) = 0;
+ void SetServerNetworkStats(const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key,
+ ServerNetworkStats stats);
// Clears any stats for |server|.
- virtual void ClearServerNetworkStats(const url::SchemeHostPort& server) = 0;
+ void ClearServerNetworkStats(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key);
// Returns any stats for |server| or nullptr if there are none.
- virtual const ServerNetworkStats* GetServerNetworkStats(
- const url::SchemeHostPort& server) = 0;
-
- virtual const ServerNetworkStatsMap& server_network_stats_map() const = 0;
+ const ServerNetworkStats* GetServerNetworkStats(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key);
// Save QuicServerInfo (in std::string form) for the given |server_id|.
- // Returns true if the value has changed otherwise it returns false.
- virtual bool SetQuicServerInfo(const quic::QuicServerId& server_id,
- const std::string& server_info) = 0;
+ void SetQuicServerInfo(const quic::QuicServerId& server_id,
+ const std::string& server_info);
// Get QuicServerInfo (in std::string form) for the given |server_id|.
- virtual const std::string* GetQuicServerInfo(
- const quic::QuicServerId& server_id) = 0;
+ const std::string* GetQuicServerInfo(const quic::QuicServerId& server_id);
// Returns all persistent QuicServerInfo objects.
- virtual const QuicServerInfoMap& quic_server_info_map() const = 0;
+ const QuicServerInfoMap& quic_server_info_map() const;
// Returns the number of server configs (QuicServerInfo objects) persisted.
- virtual size_t max_server_configs_stored_in_properties() const = 0;
+ size_t max_server_configs_stored_in_properties() const;
// Sets the number of server configs (QuicServerInfo objects) to be persisted.
- virtual void SetMaxServerConfigsStoredInProperties(
- size_t max_server_configs_stored_in_properties) = 0;
+ void SetMaxServerConfigsStoredInProperties(
+ size_t max_server_configs_stored_in_properties);
// Returns whether HttpServerProperties is initialized.
- virtual bool IsInitialized() const = 0;
+ bool IsInitialized() const;
+
+ // BrokenAlternativeServices::Delegate method.
+ void OnExpireBrokenAlternativeService(
+ const AlternativeService& expired_alternative_service) override;
+
+ static base::TimeDelta GetUpdatePrefsDelayForTesting();
+
+ // Test-only routines that call the methods used to load the specified
+ // field(s) from a prefs file. Unlike OnPrefsLoaded(), these may be invoked
+ // multiple times.
+ void OnServerInfoLoadedForTesting(
+ std::unique_ptr<ServerInfoMap> server_info_map) {
+ OnServerInfoLoaded(std::move(server_info_map));
+ }
+ void OnSupportsQuicLoadedForTesting(const IPAddress& last_address) {
+ OnSupportsQuicLoaded(last_address);
+ }
+ void OnQuicServerInfoMapLoadedForTesting(
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map) {
+ OnQuicServerInfoMapLoaded(std::move(quic_server_info_map));
+ }
+ void OnBrokenAndRecentlyBrokenAlternativeServicesLoadedForTesting(
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services) {
+ OnBrokenAndRecentlyBrokenAlternativeServicesLoaded(
+ std::move(broken_alternative_service_list),
+ std::move(recently_broken_alternative_services));
+ }
+
+ const std::string* GetCanonicalSuffixForTesting(
+ const std::string& host) const {
+ return GetCanonicalSuffix(host);
+ }
+
+ const ServerInfoMap& server_info_map_for_testing() const {
+ return server_info_map_;
+ }
+
+ // TODO(mmenke): Look into removing this.
+ HttpServerPropertiesManager* properties_manager_for_testing() {
+ return properties_manager_.get();
+ }
private:
+ // TODO (wangyix): modify HttpServerProperties unit tests so this
+ // friendness is no longer required.
+ friend class HttpServerPropertiesPeer;
+
+ typedef base::flat_map<ServerInfoMapKey, url::SchemeHostPort>
+ CanonicalAltSvcMap;
+ typedef base::flat_map<HostPortPair, quic::QuicServerId>
+ CanonicalServerInfoMap;
+ typedef std::vector<std::string> CanonicalSuffixList;
+
+ // Helper function to use the passed in parameters and
+ // |use_network_isolation_key_| to create a ServerInfoMapKey.
+ ServerInfoMapKey CreateServerInfoKey(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key) const;
+
+ // Return the iterator for |server| in the context of |network_isolation_key|,
+ // or for its canonical host, or end. Skips over ServerInfos without
+ // |alternative_service_info| populated.
+ ServerInfoMap::const_iterator GetIteratorWithAlternativeServiceInfo(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key);
+
+ // Return the canonical host for |server| in the context of
+ // |network_isolation_key|, or end if none exists.
+ CanonicalAltSvcMap::const_iterator GetCanonicalAltSvcHost(
+ const url::SchemeHostPort& server,
+ const net::NetworkIsolationKey& network_isolation_key) const;
+
+ // Return the canonical host with the same canonical suffix as |server|.
+ // The returned canonical host can be used to search for server info in
+ // |quic_server_info_map_|. Return 'end' the host doesn't exist.
+ CanonicalServerInfoMap::const_iterator GetCanonicalServerInfoHost(
+ const quic::QuicServerId& server) const;
+
+ // Remove the canonical alt-svc host for |server| with
+ // |network_isolation_key|.
+ void RemoveAltSvcCanonicalHost(
+ const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key);
+
+ // Update |canonical_server_info_map_| with the new canonical host.
+ // The |server| should have the corresponding server info associated with it
+ // in |quic_server_info_map_|. If |canonical_server_info_map_| doesn't
+ // have an entry associated with |server|, the method will add one.
+ void UpdateCanonicalServerInfoMap(const quic::QuicServerId& server);
+
+ // Returns the canonical host suffix for |host|, or nullptr if none
+ // exists.
+ const std::string* GetCanonicalSuffix(const std::string& host) const;
+
+ void OnPrefsLoaded(
+ std::unique_ptr<ServerInfoMap> server_info_map,
+ const IPAddress& last_quic_address,
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map,
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services);
+
+ // These methods are called by OnPrefsLoaded to handle merging properties
+ // loaded from prefs with what has been learned while waiting for prefs to
+ // load.
+ void OnServerInfoLoaded(std::unique_ptr<ServerInfoMap> server_info_map);
+ void OnSupportsQuicLoaded(const IPAddress& last_address);
+ void OnQuicServerInfoMapLoaded(
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map);
+ void OnBrokenAndRecentlyBrokenAlternativeServicesLoaded(
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services);
+
+ // Queue a delayed call to WriteProperties(). If |is_initialized_| is false,
+ // or |properties_manager_| is nullptr, or there's already a queued call to
+ // WriteProperties(), does nothing.
+ void MaybeQueueWriteProperties();
+
+ // Writes cached state to |properties_manager_|, which must not be null.
+ // Invokes |callback| on completion, if non-null.
+ void WriteProperties(base::OnceClosure callback) const;
+
+ const base::TickClock* tick_clock_; // Unowned
+ base::Clock* clock_; // Unowned
+
+ // Cached value of kPartitionHttpServerPropertiesByNetworkIsolationKey
+ // feature. Cached to improve performance.
+ const bool use_network_isolation_key_;
+
+ // Set to true once initial properties have been retrieved from disk by
+ // |properties_manager_|. Always true if |properties_manager_| is nullptr.
+ bool is_initialized_;
+
+ // Queue a write when resources finish loading. Set to true when
+ // MaybeQueueWriteProperties() is invoked while still waiting on
+ // initialization to complete.
+ bool queue_write_on_load_;
+
+ // Used to load/save properties from/to preferences. May be nullptr.
+ std::unique_ptr<HttpServerPropertiesManager> properties_manager_;
+
+ ServerInfoMap server_info_map_;
+
+ BrokenAlternativeServices broken_alternative_services_;
+
+ IPAddress last_quic_address_;
+ // Contains a map of servers which could share the same alternate protocol.
+ // Map from a Canonical scheme/host/port (host is some postfix of host names)
+ // to an actual origin, which has a plausible alternate protocol mapping.
+ CanonicalAltSvcMap canonical_alt_svc_map_;
+
+ // Contains list of suffixes (for example ".c.youtube.com",
+ // ".googlevideo.com", ".googleusercontent.com") of canonical hostnames.
+ const CanonicalSuffixList canonical_suffixes_;
+
+ QuicServerInfoMap quic_server_info_map_;
+
+ // Maps canonical suffixes to host names that have the same canonical suffix
+ // and have a corresponding entry in |quic_server_info_map_|. The map can be
+ // used to quickly look for server info for hosts that share the same
+ // canonical suffix but don't have exact match in |quic_server_info_map_|. The
+ // map exists solely to improve the search performance. It only contains
+ // derived data that can be recalculated by traversing
+ // |quic_server_info_map_|.
+ CanonicalServerInfoMap canonical_server_info_map_;
+
+ size_t max_server_configs_stored_in_properties_;
+
+ // Used to post calls to WriteProperties().
+ base::OneShotTimer prefs_update_timer_;
+
+ THREAD_CHECKER(thread_checker_);
+
DISALLOW_COPY_AND_ASSIGN(HttpServerProperties);
};
diff --git a/chromium/net/http/http_server_properties_impl.cc b/chromium/net/http/http_server_properties_impl.cc
deleted file mode 100644
index bf614b37103..00000000000
--- a/chromium/net/http/http_server_properties_impl.cc
+++ /dev/null
@@ -1,793 +0,0 @@
-// Copyright (c) 2012 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 "net/http/http_server_properties_impl.h"
-
-#include <algorithm>
-#include <memory>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/time/default_clock.h"
-#include "base/values.h"
-
-namespace net {
-
-HttpServerPropertiesImpl::HttpServerPropertiesImpl(
- const base::TickClock* tick_clock,
- base::Clock* clock)
- : tick_clock_(tick_clock ? tick_clock
- : base::DefaultTickClock::GetInstance()),
- clock_(clock ? clock : base::DefaultClock::GetInstance()),
- broken_alternative_services_(this, tick_clock_),
- canonical_suffixes_({".ggpht.com", ".c.youtube.com", ".googlevideo.com",
- ".googleusercontent.com"}),
- quic_server_info_map_(kDefaultMaxQuicServerEntries),
- max_server_configs_stored_in_properties_(kDefaultMaxQuicServerEntries) {}
-
-HttpServerPropertiesImpl::HttpServerPropertiesImpl()
- : HttpServerPropertiesImpl(nullptr, nullptr) {}
-
-HttpServerPropertiesImpl::~HttpServerPropertiesImpl() {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-}
-
-void HttpServerPropertiesImpl::SetSpdyServers(
- std::unique_ptr<SpdyServersMap> spdy_servers_map) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-
- // Add the entries from persisted data.
- spdy_servers_map_.Swap(*spdy_servers_map);
-
- // Add the entries from the memory cache.
- for (auto it = spdy_servers_map->rbegin(); it != spdy_servers_map->rend();
- ++it) {
- // Add the entry if it is not in the cache, otherwise move it to the front
- // of recency list.
- if (spdy_servers_map_.Get(it->first) == spdy_servers_map_.end())
- spdy_servers_map_.Put(it->first, it->second);
- }
-}
-
-void HttpServerPropertiesImpl::SetAlternativeServiceServers(
- std::unique_ptr<AlternativeServiceMap> alternative_service_map) {
- int32_t size_diff =
- alternative_service_map->size() - alternative_service_map_.size();
- if (size_diff > 0) {
- UMA_HISTOGRAM_COUNTS_1M("Net.AlternativeServiceServers.MorePrefsEntries",
- size_diff);
- } else {
- UMA_HISTOGRAM_COUNTS_1M(
- "Net.AlternativeServiceServers.MoreOrEqualCacheEntries", -size_diff);
- }
-
- // Add the entries from persisted data.
- alternative_service_map_.Swap(*alternative_service_map);
-
- // Add the entries from the memory cache.
- for (auto input_it = alternative_service_map->rbegin();
- input_it != alternative_service_map->rend(); ++input_it) {
- if (alternative_service_map_.Get(input_it->first) ==
- alternative_service_map_.end()) {
- alternative_service_map_.Put(input_it->first, input_it->second);
- }
- }
-
- // Attempt to find canonical servers. Canonical suffix only apply to HTTPS.
- const uint16_t kCanonicalPort = 443;
- const char* kCanonicalScheme = "https";
- for (const std::string& canonical_suffix : canonical_suffixes_) {
- url::SchemeHostPort canonical_server(kCanonicalScheme, canonical_suffix,
- kCanonicalPort);
- // If we already have a valid canonical server, we're done.
- if (base::Contains(canonical_alt_svc_map_, canonical_server) &&
- (alternative_service_map_.Peek(
- canonical_alt_svc_map_[canonical_server]) !=
- alternative_service_map_.end())) {
- continue;
- }
- // Now attempt to find a server which matches this origin and set it as
- // canonical.
- for (AlternativeServiceMap::const_iterator it =
- alternative_service_map_.begin();
- it != alternative_service_map_.end(); ++it) {
- if (base::EndsWith(it->first.host(), canonical_suffix,
- base::CompareCase::INSENSITIVE_ASCII) &&
- it->first.scheme() == canonical_server.scheme()) {
- canonical_alt_svc_map_[canonical_server] = it->first;
- break;
- }
- }
- }
-}
-
-void HttpServerPropertiesImpl::SetSupportsQuic(const IPAddress& last_address) {
- last_quic_address_ = last_address;
-}
-
-void HttpServerPropertiesImpl::SetServerNetworkStats(
- std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map) {
- // Add the entries from persisted data.
- server_network_stats_map_.Swap(*server_network_stats_map);
-
- // Add the entries from the memory cache.
- for (auto it = server_network_stats_map->rbegin();
- it != server_network_stats_map->rend(); ++it) {
- if (server_network_stats_map_.Get(it->first) ==
- server_network_stats_map_.end()) {
- server_network_stats_map_.Put(it->first, it->second);
- }
- }
-}
-
-void HttpServerPropertiesImpl::SetQuicServerInfoMap(
- std::unique_ptr<QuicServerInfoMap> quic_server_info_map) {
- DCHECK_EQ(quic_server_info_map->max_size(), quic_server_info_map_.max_size());
-
- // Add the entries from persisted data.
- quic_server_info_map_.Swap(*quic_server_info_map);
-
- // Add the entries from the memory cache.
- for (auto it = quic_server_info_map->rbegin();
- it != quic_server_info_map->rend(); ++it) {
- if (quic_server_info_map_.Get(it->first) == quic_server_info_map_.end()) {
- quic_server_info_map_.Put(it->first, it->second);
- }
- }
-
- // Repopulate |canonical_server_info_map_| to stay in sync with
- // |quic_server_info_map_|.
- canonical_server_info_map_.clear();
- for (auto it = quic_server_info_map_.rbegin();
- it != quic_server_info_map_.rend(); ++it) {
- UpdateCanonicalServerInfoMap(it->first);
- }
-}
-
-const SpdyServersMap& HttpServerPropertiesImpl::spdy_servers_map() const {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- return spdy_servers_map_;
-}
-
-void HttpServerPropertiesImpl::SetBrokenAndRecentlyBrokenAlternativeServices(
- std::unique_ptr<BrokenAlternativeServiceList>
- broken_alternative_service_list,
- std::unique_ptr<RecentlyBrokenAlternativeServices>
- recently_broken_alternative_services) {
- broken_alternative_services_.SetBrokenAndRecentlyBrokenAlternativeServices(
- std::move(broken_alternative_service_list),
- std::move(recently_broken_alternative_services));
-}
-
-const BrokenAlternativeServiceList&
-HttpServerPropertiesImpl::broken_alternative_service_list() const {
- return broken_alternative_services_.broken_alternative_service_list();
-}
-
-const RecentlyBrokenAlternativeServices&
-HttpServerPropertiesImpl::recently_broken_alternative_services() const {
- return broken_alternative_services_.recently_broken_alternative_services();
-}
-
-void HttpServerPropertiesImpl::Clear(base::OnceClosure callback) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- spdy_servers_map_.Clear();
- alternative_service_map_.Clear();
- broken_alternative_services_.Clear();
- canonical_alt_svc_map_.clear();
- last_quic_address_ = IPAddress();
- server_network_stats_map_.Clear();
- quic_server_info_map_.Clear();
- canonical_server_info_map_.clear();
-
- if (!callback.is_null()) {
- base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
- std::move(callback));
- }
-}
-
-bool HttpServerPropertiesImpl::SupportsRequestPriority(
- const url::SchemeHostPort& server) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (server.host().empty())
- return false;
-
- if (GetSupportsSpdy(server))
- return true;
- const AlternativeServiceInfoVector alternative_service_info_vector =
- GetAlternativeServiceInfos(server);
- for (const AlternativeServiceInfo& alternative_service_info :
- alternative_service_info_vector) {
- if (alternative_service_info.alternative_service().protocol == kProtoQUIC) {
- return true;
- }
- }
- return false;
-}
-
-bool HttpServerPropertiesImpl::GetSupportsSpdy(
- const url::SchemeHostPort& server) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (server.host().empty())
- return false;
-
- auto spdy_server = spdy_servers_map_.Get(server.Serialize());
- return spdy_server != spdy_servers_map_.end() && spdy_server->second;
-}
-
-void HttpServerPropertiesImpl::SetSupportsSpdy(
- const url::SchemeHostPort& server,
- bool support_spdy) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (server.host().empty())
- return;
-
- auto spdy_server = spdy_servers_map_.Get(server.Serialize());
- if ((spdy_server != spdy_servers_map_.end()) &&
- (spdy_server->second == support_spdy)) {
- return;
- }
- // Cache the data.
- spdy_servers_map_.Put(server.Serialize(), support_spdy);
-}
-
-bool HttpServerPropertiesImpl::RequiresHTTP11(
- const HostPortPair& host_port_pair) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (host_port_pair.host().empty())
- return false;
-
- return (http11_servers_.find(host_port_pair) != http11_servers_.end());
-}
-
-void HttpServerPropertiesImpl::SetHTTP11Required(
- const HostPortPair& host_port_pair) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (host_port_pair.host().empty())
- return;
-
- http11_servers_.insert(host_port_pair);
-}
-
-void HttpServerPropertiesImpl::MaybeForceHTTP11(const HostPortPair& server,
- SSLConfig* ssl_config) {
- if (RequiresHTTP11(server)) {
- ForceHTTP11(ssl_config);
- }
-}
-
-const std::string* HttpServerPropertiesImpl::GetCanonicalSuffix(
- const std::string& host) const {
- // If this host ends with a canonical suffix, then return the canonical
- // suffix.
- for (const std::string& canonical_suffix : canonical_suffixes_) {
- if (base::EndsWith(host, canonical_suffix,
- base::CompareCase::INSENSITIVE_ASCII)) {
- return &canonical_suffix;
- }
- }
- return nullptr;
-}
-
-AlternativeServiceInfoVector
-HttpServerPropertiesImpl::GetAlternativeServiceInfos(
- const url::SchemeHostPort& origin) {
- // Copy valid alternative service infos into
- // |valid_alternative_service_infos|.
- AlternativeServiceInfoVector valid_alternative_service_infos;
- const base::Time now = clock_->Now();
- auto map_it = alternative_service_map_.Get(origin);
- if (map_it != alternative_service_map_.end()) {
- HostPortPair host_port_pair(origin.host(), origin.port());
- for (auto it = map_it->second.begin(); it != map_it->second.end();) {
- if (it->expiration() < now) {
- it = map_it->second.erase(it);
- continue;
- }
- AlternativeService alternative_service(it->alternative_service());
- if (alternative_service.host.empty()) {
- alternative_service.host = origin.host();
- }
- // If the alternative service is equivalent to the origin (same host, same
- // port, and both TCP), skip it.
- if (host_port_pair.Equals(alternative_service.host_port_pair()) &&
- alternative_service.protocol == kProtoHTTP2) {
- ++it;
- continue;
- }
- if (alternative_service.protocol == kProtoQUIC) {
- valid_alternative_service_infos.push_back(
- AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
- alternative_service, it->expiration(),
- it->advertised_versions()));
- } else {
- valid_alternative_service_infos.push_back(
- AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
- alternative_service, it->expiration()));
- }
- ++it;
- }
- if (map_it->second.empty()) {
- alternative_service_map_.Erase(map_it);
- }
- return valid_alternative_service_infos;
- }
-
- auto canonical = GetCanonicalAltSvcHost(origin);
- if (canonical == canonical_alt_svc_map_.end()) {
- return AlternativeServiceInfoVector();
- }
- map_it = alternative_service_map_.Get(canonical->second);
- if (map_it == alternative_service_map_.end()) {
- return AlternativeServiceInfoVector();
- }
- for (auto it = map_it->second.begin(); it != map_it->second.end();) {
- if (it->expiration() < now) {
- it = map_it->second.erase(it);
- continue;
- }
- AlternativeService alternative_service(it->alternative_service());
- if (alternative_service.host.empty()) {
- alternative_service.host = canonical->second.host();
- if (IsAlternativeServiceBroken(alternative_service)) {
- ++it;
- continue;
- }
- alternative_service.host = origin.host();
- } else if (IsAlternativeServiceBroken(alternative_service)) {
- ++it;
- continue;
- }
- if (alternative_service.protocol == kProtoQUIC) {
- valid_alternative_service_infos.push_back(
- AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
- alternative_service, it->expiration(),
- it->advertised_versions()));
- } else {
- valid_alternative_service_infos.push_back(
- AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
- alternative_service, it->expiration()));
- }
- ++it;
- }
- if (map_it->second.empty()) {
- alternative_service_map_.Erase(map_it);
- }
- return valid_alternative_service_infos;
-}
-
-bool HttpServerPropertiesImpl::SetHttp2AlternativeService(
- const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration) {
- DCHECK_EQ(alternative_service.protocol, kProtoHTTP2);
-
- return SetAlternativeServices(
- origin,
- AlternativeServiceInfoVector(
- /*size=*/1, AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
- alternative_service, expiration)));
-}
-
-bool HttpServerPropertiesImpl::SetQuicAlternativeService(
- const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions) {
- DCHECK(alternative_service.protocol == kProtoQUIC);
-
- return SetAlternativeServices(
- origin, AlternativeServiceInfoVector(
- /*size=*/1,
- AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
- alternative_service, expiration, advertised_versions)));
-}
-
-bool HttpServerPropertiesImpl::SetAlternativeServices(
- const url::SchemeHostPort& origin,
- const AlternativeServiceInfoVector& alternative_service_info_vector) {
- auto it = alternative_service_map_.Peek(origin);
-
- if (alternative_service_info_vector.empty()) {
- RemoveAltSvcCanonicalHost(origin);
- if (it == alternative_service_map_.end())
- return false;
-
- alternative_service_map_.Erase(it);
- return true;
- }
-
- bool changed = true;
- if (it != alternative_service_map_.end()) {
- DCHECK(!it->second.empty());
- if (it->second.size() == alternative_service_info_vector.size()) {
- const base::Time now = clock_->Now();
- changed = false;
- auto new_it = alternative_service_info_vector.begin();
- for (const auto& old : it->second) {
- // Persist to disk immediately if new entry has different scheme, host,
- // or port.
- if (old.alternative_service() != new_it->alternative_service()) {
- changed = true;
- break;
- }
- // Also persist to disk if new expiration it more that twice as far or
- // less than half as far in the future.
- base::Time old_time = old.expiration();
- base::Time new_time = new_it->expiration();
- if (new_time - now > 2 * (old_time - now) ||
- 2 * (new_time - now) < (old_time - now)) {
- changed = true;
- break;
- }
- // Also persist to disk if new entry has a different list of advertised
- // versions.
- if (old.advertised_versions() != new_it->advertised_versions()) {
- changed = true;
- break;
- }
- ++new_it;
- }
- }
- }
-
- const bool previously_no_alternative_services =
- (GetAlternateProtocolIterator(origin) == alternative_service_map_.end());
-
- alternative_service_map_.Put(origin, alternative_service_info_vector);
-
- if (previously_no_alternative_services &&
- !GetAlternativeServiceInfos(origin).empty()) {
- // TODO(rch): Consider the case where multiple requests are started
- // before the first completes. In this case, only one of the jobs
- // would reach this code, whereas all of them should should have.
- HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING,
- false);
- }
-
- // If this host ends with a canonical suffix, then set it as the
- // canonical host.
- const char* kCanonicalScheme = "https";
- if (origin.scheme() == kCanonicalScheme) {
- const std::string* canonical_suffix = GetCanonicalSuffix(origin.host());
- if (canonical_suffix != nullptr) {
- url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix,
- origin.port());
- canonical_alt_svc_map_[canonical_server] = origin;
- }
- }
- return changed;
-}
-
-void HttpServerPropertiesImpl::MarkAlternativeServiceBroken(
- const AlternativeService& alternative_service) {
- broken_alternative_services_.MarkBroken(alternative_service);
-}
-
-void HttpServerPropertiesImpl::
- MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- const AlternativeService& alternative_service) {
- broken_alternative_services_.MarkBrokenUntilDefaultNetworkChanges(
- alternative_service);
-}
-
-void HttpServerPropertiesImpl::MarkAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) {
- broken_alternative_services_.MarkRecentlyBroken(alternative_service);
-}
-
-bool HttpServerPropertiesImpl::IsAlternativeServiceBroken(
- const AlternativeService& alternative_service) const {
- return broken_alternative_services_.IsBroken(alternative_service);
-}
-
-bool HttpServerPropertiesImpl::WasAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) {
- return broken_alternative_services_.WasRecentlyBroken(alternative_service);
-}
-
-void HttpServerPropertiesImpl::ConfirmAlternativeService(
- const AlternativeService& alternative_service) {
- broken_alternative_services_.Confirm(alternative_service);
-}
-
-bool HttpServerPropertiesImpl::OnDefaultNetworkChanged() {
- return broken_alternative_services_.OnDefaultNetworkChanged();
-}
-
-const AlternativeServiceMap& HttpServerPropertiesImpl::alternative_service_map()
- const {
- return alternative_service_map_;
-}
-
-std::unique_ptr<base::Value>
-HttpServerPropertiesImpl::GetAlternativeServiceInfoAsValue() const {
- const base::Time now = clock_->Now();
- const base::TimeTicks now_ticks = tick_clock_->NowTicks();
- std::unique_ptr<base::ListValue> dict_list(new base::ListValue);
- for (const auto& alternative_service_map_item : alternative_service_map_) {
- std::unique_ptr<base::ListValue> alternative_service_list(
- new base::ListValue);
- const url::SchemeHostPort& server = alternative_service_map_item.first;
- for (const AlternativeServiceInfo& alternative_service_info :
- alternative_service_map_item.second) {
- std::string alternative_service_string(
- alternative_service_info.ToString());
- AlternativeService alternative_service(
- alternative_service_info.alternative_service());
- if (alternative_service.host.empty()) {
- alternative_service.host = server.host();
- }
- base::TimeTicks brokenness_expiration_ticks;
- if (broken_alternative_services_.IsBroken(alternative_service,
- &brokenness_expiration_ticks)) {
- // Convert |brokenness_expiration| from TimeTicks to Time
- base::Time brokenness_expiration =
- now + (brokenness_expiration_ticks - now_ticks);
- base::Time::Exploded exploded;
- brokenness_expiration.LocalExplode(&exploded);
- std::string broken_info_string =
- " (broken until " +
- base::StringPrintf("%04d-%02d-%02d %0d:%0d:%0d", exploded.year,
- exploded.month, exploded.day_of_month,
- exploded.hour, exploded.minute,
- exploded.second) +
- ")";
- alternative_service_string.append(broken_info_string);
- }
- alternative_service_list->AppendString(alternative_service_string);
- }
- if (alternative_service_list->empty())
- continue;
- std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
- dict->SetString("server", server.Serialize());
- dict->Set("alternative_service", std::unique_ptr<base::Value>(
- std::move(alternative_service_list)));
- dict_list->Append(std::move(dict));
- }
- return std::move(dict_list);
-}
-
-bool HttpServerPropertiesImpl::GetSupportsQuic(IPAddress* last_address) const {
- if (last_quic_address_.empty())
- return false;
-
- *last_address = last_quic_address_;
- return true;
-}
-
-void HttpServerPropertiesImpl::SetSupportsQuic(bool used_quic,
- const IPAddress& address) {
- if (!used_quic) {
- last_quic_address_ = IPAddress();
- } else {
- last_quic_address_ = address;
- }
-}
-
-void HttpServerPropertiesImpl::SetServerNetworkStats(
- const url::SchemeHostPort& server,
- ServerNetworkStats stats) {
- server_network_stats_map_.Put(server, stats);
-}
-
-void HttpServerPropertiesImpl::ClearServerNetworkStats(
- const url::SchemeHostPort& server) {
- auto it = server_network_stats_map_.Get(server);
- if (it != server_network_stats_map_.end()) {
- server_network_stats_map_.Erase(it);
- }
-}
-
-const ServerNetworkStats* HttpServerPropertiesImpl::GetServerNetworkStats(
- const url::SchemeHostPort& server) {
- auto it = server_network_stats_map_.Get(server);
- if (it == server_network_stats_map_.end()) {
- return nullptr;
- }
- return &it->second;
-}
-
-const ServerNetworkStatsMap&
-HttpServerPropertiesImpl::server_network_stats_map() const {
- return server_network_stats_map_;
-}
-
-bool HttpServerPropertiesImpl::SetQuicServerInfo(
- const quic::QuicServerId& server_id,
- const std::string& server_info) {
- auto it = quic_server_info_map_.Peek(server_id);
- bool changed =
- (it == quic_server_info_map_.end() || it->second != server_info);
- quic_server_info_map_.Put(server_id, server_info);
- UpdateCanonicalServerInfoMap(server_id);
- return changed;
-}
-
-const std::string* HttpServerPropertiesImpl::GetQuicServerInfo(
- const quic::QuicServerId& server_id) {
- auto it = quic_server_info_map_.Get(server_id);
- if (it != quic_server_info_map_.end()) {
- // Since |canonical_server_info_map_| should always map to the most
- // recent host, update it with the one that became MRU in
- // |quic_server_info_map_|.
- UpdateCanonicalServerInfoMap(server_id);
- return &it->second;
- }
-
- // If the exact match for |server_id| wasn't found, check
- // |canonical_server_info_map_| whether there is server info for a host with
- // the same canonical host suffix.
- auto canonical_itr = GetCanonicalServerInfoHost(server_id);
- if (canonical_itr == canonical_server_info_map_.end())
- return nullptr;
-
- // When search in |quic_server_info_map_|, do not change the MRU order.
- it = quic_server_info_map_.Peek(canonical_itr->second);
- if (it != quic_server_info_map_.end())
- return &it->second;
-
- return nullptr;
-}
-
-HttpServerPropertiesImpl::CanonicalServerInfoMap::const_iterator
-HttpServerPropertiesImpl::GetCanonicalServerInfoHost(
- const quic::QuicServerId& server) const {
- const std::string* canonical_suffix = GetCanonicalSuffix(server.host());
- if (canonical_suffix == nullptr)
- return canonical_server_info_map_.end();
-
- HostPortPair canonical_pair(*canonical_suffix, server.port());
- return canonical_server_info_map_.find(canonical_pair);
-}
-
-const QuicServerInfoMap& HttpServerPropertiesImpl::quic_server_info_map()
- const {
- return quic_server_info_map_;
-}
-
-size_t HttpServerPropertiesImpl::max_server_configs_stored_in_properties()
- const {
- return max_server_configs_stored_in_properties_;
-}
-
-void HttpServerPropertiesImpl::SetMaxServerConfigsStoredInProperties(
- size_t max_server_configs_stored_in_properties) {
- // Do nothing if the new size is the same as the old one.
- if (max_server_configs_stored_in_properties_ ==
- max_server_configs_stored_in_properties)
- return;
-
- max_server_configs_stored_in_properties_ =
- max_server_configs_stored_in_properties;
-
- // MRUCache doesn't allow the capacity of the cache to be changed. Thus create
- // a new map with the new size and add current elements and swap the new map.
- quic_server_info_map_.ShrinkToSize(max_server_configs_stored_in_properties_);
- QuicServerInfoMap temp_map(max_server_configs_stored_in_properties_);
- // Update the |canonical_server_info_map_| as well, so it stays in sync with
- // |quic_server_info_map_|.
- canonical_server_info_map_ = CanonicalServerInfoMap();
- for (auto it = quic_server_info_map_.rbegin();
- it != quic_server_info_map_.rend(); ++it) {
- temp_map.Put(it->first, it->second);
- UpdateCanonicalServerInfoMap(it->first);
- }
-
- quic_server_info_map_.Swap(temp_map);
-}
-
-void HttpServerPropertiesImpl::UpdateCanonicalServerInfoMap(
- const quic::QuicServerId& server) {
- const std::string* suffix = GetCanonicalSuffix(server.host());
- if (suffix) {
- HostPortPair canonical_pair(*suffix, server.port());
- canonical_server_info_map_[canonical_pair] = server;
- }
-}
-
-bool HttpServerPropertiesImpl::IsInitialized() const {
- // No initialization is needed.
- return true;
-}
-
-AlternativeServiceMap::const_iterator
-HttpServerPropertiesImpl::GetAlternateProtocolIterator(
- const url::SchemeHostPort& server) {
- AlternativeServiceMap::const_iterator it =
- alternative_service_map_.Get(server);
- if (it != alternative_service_map_.end())
- return it;
-
- auto canonical = GetCanonicalAltSvcHost(server);
- if (canonical == canonical_alt_svc_map_.end()) {
- return alternative_service_map_.end();
- }
-
- const url::SchemeHostPort canonical_server = canonical->second;
- it = alternative_service_map_.Get(canonical_server);
- if (it == alternative_service_map_.end()) {
- return alternative_service_map_.end();
- }
-
- for (const AlternativeServiceInfo& alternative_service_info : it->second) {
- AlternativeService alternative_service(
- alternative_service_info.alternative_service());
- if (alternative_service.host.empty()) {
- alternative_service.host = canonical_server.host();
- }
- if (!IsAlternativeServiceBroken(alternative_service)) {
- return it;
- }
- }
-
- RemoveAltSvcCanonicalHost(canonical_server);
- return alternative_service_map_.end();
-}
-
-HttpServerPropertiesImpl::CanonicalAltSvcMap::const_iterator
-HttpServerPropertiesImpl::GetCanonicalAltSvcHost(
- const url::SchemeHostPort& server) const {
- const char* kCanonicalScheme = "https";
- if (server.scheme() != kCanonicalScheme)
- return canonical_alt_svc_map_.end();
-
- const std::string* canonical_suffix = GetCanonicalSuffix(server.host());
- if (canonical_suffix == nullptr)
- return canonical_alt_svc_map_.end();
-
- url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix,
- server.port());
- return canonical_alt_svc_map_.find(canonical_server);
-}
-
-void HttpServerPropertiesImpl::RemoveAltSvcCanonicalHost(
- const url::SchemeHostPort& server) {
- auto canonical = GetCanonicalAltSvcHost(server);
- if (canonical == canonical_alt_svc_map_.end())
- return;
-
- canonical_alt_svc_map_.erase(canonical->first);
-}
-
-void HttpServerPropertiesImpl::OnExpireBrokenAlternativeService(
- const AlternativeService& expired_alternative_service) {
- // Remove every occurrence of |expired_alternative_service| from
- // |alternative_service_map_|.
- for (auto map_it = alternative_service_map_.begin();
- map_it != alternative_service_map_.end();) {
- for (auto it = map_it->second.begin(); it != map_it->second.end();) {
- AlternativeService alternative_service(it->alternative_service());
- // Empty hostname in map means hostname of key: substitute before
- // comparing to |expired_alternative_service|.
- if (alternative_service.host.empty()) {
- alternative_service.host = map_it->first.host();
- }
- if (alternative_service == expired_alternative_service) {
- it = map_it->second.erase(it);
- continue;
- }
- ++it;
- }
- // If an origin has an empty list of alternative services, then remove it
- // from both |canonical_alt_svc_map_| and
- // |alternative_service_map_|.
- if (map_it->second.empty()) {
- RemoveAltSvcCanonicalHost(map_it->first);
- map_it = alternative_service_map_.Erase(map_it);
- continue;
- }
- ++map_it;
- }
-}
-
-} // namespace net
diff --git a/chromium/net/http/http_server_properties_impl.h b/chromium/net/http/http_server_properties_impl.h
deleted file mode 100644
index 863d1531f01..00000000000
--- a/chromium/net/http/http_server_properties_impl.h
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright (c) 2012 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.
-
-#ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_
-#define NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "base/threading/thread_checker.h"
-#include "base/time/default_tick_clock.h"
-#include "base/values.h"
-#include "net/base/host_port_pair.h"
-#include "net/base/ip_address.h"
-#include "net/base/net_export.h"
-#include "net/http/broken_alternative_services.h"
-#include "net/http/http_server_properties.h"
-
-namespace base {
-class Clock;
-class TickClock;
-}
-
-namespace net {
-
-// The implementation for setting/retrieving the HTTP server properties.
-class NET_EXPORT HttpServerPropertiesImpl
- : public HttpServerProperties,
- public BrokenAlternativeServices::Delegate {
- public:
- // |tick_clock| is used for setting expiration times and scheduling the
- // expiration of broken alternative services. If null, default clock will be
- // used.
- // |clock| is used for converting base::TimeTicks to base::Time for
- // wherever base::Time is preferable.
- HttpServerPropertiesImpl(const base::TickClock* tick_clock,
- base::Clock* clock);
-
- // Default clock will be used.
- HttpServerPropertiesImpl();
-
- ~HttpServerPropertiesImpl() override;
-
- // Sets |spdy_servers_map_| with the servers (host/port) from
- // |spdy_servers| that either support SPDY or not.
- void SetSpdyServers(std::unique_ptr<SpdyServersMap> spdy_servers_map);
-
- void SetAlternativeServiceServers(
- std::unique_ptr<AlternativeServiceMap> alternate_protocol_servers);
-
- void SetSupportsQuic(const IPAddress& last_address);
-
- void SetServerNetworkStats(
- std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map);
-
- void SetQuicServerInfoMap(
- std::unique_ptr<QuicServerInfoMap> quic_server_info_map);
-
- const SpdyServersMap& spdy_servers_map() const;
-
- void SetBrokenAndRecentlyBrokenAlternativeServices(
- std::unique_ptr<BrokenAlternativeServiceList>
- broken_alternative_service_list,
- std::unique_ptr<RecentlyBrokenAlternativeServices>
- recently_broken_alternative_services);
-
- const BrokenAlternativeServiceList& broken_alternative_service_list() const;
-
- const RecentlyBrokenAlternativeServices&
- recently_broken_alternative_services() const;
-
- // Returns flattened string representation of the |host_port_pair|. Used by
- // unittests.
- static std::string GetFlattenedSpdyServer(const HostPortPair& host_port_pair);
-
- // Returns the canonical host suffix for |host|, or nullptr if none
- // exists.
- const std::string* GetCanonicalSuffix(const std::string& host) const;
-
- // -----------------------------
- // HttpServerProperties methods:
- // -----------------------------
-
- void Clear(base::OnceClosure callback) override;
- bool SupportsRequestPriority(const url::SchemeHostPort& server) override;
- bool GetSupportsSpdy(const url::SchemeHostPort& server) override;
- void SetSupportsSpdy(const url::SchemeHostPort& server,
- bool support_spdy) override;
- bool RequiresHTTP11(const HostPortPair& server) override;
- void SetHTTP11Required(const HostPortPair& server) override;
- void MaybeForceHTTP11(const HostPortPair& server,
- SSLConfig* ssl_config) override;
- AlternativeServiceInfoVector GetAlternativeServiceInfos(
- const url::SchemeHostPort& origin) override;
- bool SetHttp2AlternativeService(const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration) override;
- bool SetQuicAlternativeService(
- const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions) override;
- bool SetAlternativeServices(const url::SchemeHostPort& origin,
- const AlternativeServiceInfoVector&
- alternative_service_info_vector) override;
- void MarkAlternativeServiceBroken(
- const AlternativeService& alternative_service) override;
- void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- const AlternativeService& alternative_service) override;
- void MarkAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) override;
- bool IsAlternativeServiceBroken(
- const AlternativeService& alternative_service) const override;
- bool WasAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) override;
- void ConfirmAlternativeService(
- const AlternativeService& alternative_service) override;
- bool OnDefaultNetworkChanged() override;
- const AlternativeServiceMap& alternative_service_map() const override;
- std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue()
- const override;
- bool GetSupportsQuic(IPAddress* last_address) const override;
- void SetSupportsQuic(bool used_quic, const IPAddress& address) override;
- void SetServerNetworkStats(const url::SchemeHostPort& server,
- ServerNetworkStats stats) override;
- void ClearServerNetworkStats(const url::SchemeHostPort& server) override;
- const ServerNetworkStats* GetServerNetworkStats(
- const url::SchemeHostPort& server) override;
- const ServerNetworkStatsMap& server_network_stats_map() const override;
- bool SetQuicServerInfo(const quic::QuicServerId& server_id,
- const std::string& server_info) override;
- const std::string* GetQuicServerInfo(
- const quic::QuicServerId& server_id) override;
- const QuicServerInfoMap& quic_server_info_map() const override;
- size_t max_server_configs_stored_in_properties() const override;
- void SetMaxServerConfigsStoredInProperties(
- size_t max_server_configs_stored_in_properties) override;
- bool IsInitialized() const override;
-
- // BrokenAlternativeServices::Delegate method.
- void OnExpireBrokenAlternativeService(
- const AlternativeService& expired_alternative_service) override;
-
- private:
- // TODO (wangyix): modify HttpServerPropertiesImpl unit tests so this
- // friendness is no longer required.
- friend class HttpServerPropertiesImplPeer;
-
- typedef base::flat_map<url::SchemeHostPort, url::SchemeHostPort>
- CanonicalAltSvcMap;
- typedef base::flat_map<HostPortPair, quic::QuicServerId>
- CanonicalServerInfoMap;
- typedef std::vector<std::string> CanonicalSuffixList;
- typedef std::set<HostPortPair> Http11ServerHostPortSet;
-
- // Return the iterator for |server|, or for its canonical host, or end.
- AlternativeServiceMap::const_iterator GetAlternateProtocolIterator(
- const url::SchemeHostPort& server);
-
- // Return the canonical host for |server|, or end if none exists.
- CanonicalAltSvcMap::const_iterator GetCanonicalAltSvcHost(
- const url::SchemeHostPort& server) const;
-
- // Return the canonical host with the same canonical suffix as |server|.
- // The returned canonical host can be used to search for server info in
- // |quic_server_info_map_|. Return 'end' the host doesn't exist.
- CanonicalServerInfoMap::const_iterator GetCanonicalServerInfoHost(
- const quic::QuicServerId& server) const;
-
- // Remove the canonical alt-svc host for |server|.
- void RemoveAltSvcCanonicalHost(const url::SchemeHostPort& server);
-
- // Update |canonical_server_info_map_| with the new canonical host.
- // The |server| should have the corresponding server info associated with it
- // in |quic_server_info_map_|. If |canonical_server_info_map_| doesn't
- // have an entry associated with |server|, the method will add one.
- void UpdateCanonicalServerInfoMap(const quic::QuicServerId& server);
-
- const base::TickClock* tick_clock_; // Unowned
- base::Clock* clock_; // Unowned
-
- SpdyServersMap spdy_servers_map_;
- Http11ServerHostPortSet http11_servers_;
-
- AlternativeServiceMap alternative_service_map_;
-
- BrokenAlternativeServices broken_alternative_services_;
-
- IPAddress last_quic_address_;
- ServerNetworkStatsMap server_network_stats_map_;
- // Contains a map of servers which could share the same alternate protocol.
- // Map from a Canonical scheme/host/port (host is some postfix of host names)
- // to an actual origin, which has a plausible alternate protocol mapping.
- CanonicalAltSvcMap canonical_alt_svc_map_;
-
- // Contains list of suffixes (for example ".c.youtube.com",
- // ".googlevideo.com", ".googleusercontent.com") of canonical hostnames.
- const CanonicalSuffixList canonical_suffixes_;
-
- QuicServerInfoMap quic_server_info_map_;
-
- // Maps canonical suffixes to host names that have the same canonical suffix
- // and have a corresponding entry in |quic_server_info_map_|. The map can be
- // used to quickly look for server info for hosts that share the same
- // canonical suffix but don't have exact match in |quic_server_info_map_|. The
- // map exists solely to improve the search performance. It only contains
- // derived data that can be recalculated by traversing
- // |quic_server_info_map_|.
- CanonicalServerInfoMap canonical_server_info_map_;
-
- size_t max_server_configs_stored_in_properties_;
-
- THREAD_CHECKER(thread_checker_);
-
- DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesImpl);
-};
-
-} // namespace net
-
-#endif // NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_
diff --git a/chromium/net/http/http_server_properties_manager.cc b/chromium/net/http/http_server_properties_manager.cc
index 8cb7cd9d563..33c8e5aebd2 100644
--- a/chromium/net/http/http_server_properties_manager.cc
+++ b/chromium/net/http/http_server_properties_manager.cc
@@ -7,31 +7,26 @@
#include <utility>
#include "base/bind.h"
+#include "base/feature_list.h"
#include "base/metrics/histogram_macros.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
+#include "base/time/tick_clock.h"
#include "base/values.h"
+#include "net/base/features.h"
#include "net/base/host_port_pair.h"
#include "net/base/ip_address.h"
#include "net/base/port_util.h"
#include "net/base/privacy_mode.h"
+#include "net/http/http_server_properties.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_hostname_utils.h"
#include "url/gurl.h"
+#include "url/scheme_host_port.h"
namespace net {
namespace {
-// Time to wait before starting an update the http_server_properties_impl_ cache
-// from preferences. Scheduling another update during this period will be a
-// no-op.
-constexpr base::TimeDelta kUpdateCacheDelay = base::TimeDelta::FromSeconds(1);
-
-// Time to wait before starting an update the preferences from the
-// http_server_properties_impl_ cache. Scheduling another update during this
-// period will be a no-op.
-constexpr base::TimeDelta kUpdatePrefsDelay = base::TimeDelta::FromSeconds(60);
-
// "version" 0 indicates, http_server_properties doesn't have "version"
// property.
const int kMissingVersion = 0;
@@ -42,6 +37,8 @@ const int kVersionNumber = 5;
// Persist at most 200 currently-broken alternative services to disk.
const int kMaxBrokenAlternativeServicesToPersist = 200;
+const char kServerKey[] = "server";
+const char kNetworkIsolationKey[] = "isolation";
const char kVersionKey[] = "version";
const char kServersKey[] = "servers";
const char kSupportsSpdyKey[] = "supports_spdy";
@@ -62,6 +59,49 @@ const char kBrokenAlternativeServicesKey[] = "broken_alternative_services";
const char kBrokenUntilKey[] = "broken_until";
const char kBrokenCountKey[] = "broken_count";
+// Utility method to return only those AlternativeServiceInfos that should be
+// persisted to disk. In particular, removes expired and invalid alternative
+// services. Also checks if an alternative service for the same canonical suffix
+// has already been saved, and if so, returns an empty list.
+AlternativeServiceInfoVector GetAlternativeServiceToPersist(
+ const base::Optional<AlternativeServiceInfoVector>& alternative_services,
+ const HttpServerProperties::ServerInfoMapKey& server_info_key,
+ base::Time now,
+ const HttpServerPropertiesManager::GetCannonicalSuffix&
+ get_canonical_suffix,
+ std::set<std::pair<std::string, NetworkIsolationKey>>*
+ persisted_canonical_suffix_set) {
+ if (!alternative_services)
+ return AlternativeServiceInfoVector();
+ // Separate out valid, non-expired AlternativeServiceInfo entries.
+ AlternativeServiceInfoVector notbroken_alternative_service_info_vector;
+ for (const auto& alternative_service_info : alternative_services.value()) {
+ if (alternative_service_info.expiration() < now ||
+ !IsAlternateProtocolValid(
+ alternative_service_info.alternative_service().protocol)) {
+ continue;
+ }
+ notbroken_alternative_service_info_vector.push_back(
+ alternative_service_info);
+ }
+ if (notbroken_alternative_service_info_vector.empty())
+ return notbroken_alternative_service_info_vector;
+ const std::string* canonical_suffix =
+ get_canonical_suffix.Run(server_info_key.server.host());
+ if (canonical_suffix) {
+ // Don't save if have already saved information associated with the same
+ // canonical suffix.
+ std::pair<std::string, NetworkIsolationKey> index(
+ *canonical_suffix, server_info_key.network_isolation_key);
+ if (persisted_canonical_suffix_set->find(index) !=
+ persisted_canonical_suffix_set->end()) {
+ return AlternativeServiceInfoVector();
+ }
+ persisted_canonical_suffix_set->emplace(std::move(index));
+ }
+ return notbroken_alternative_service_info_vector;
+}
+
void AddAlternativeServiceFieldsToDictionaryValue(
const AlternativeService& alternative_service,
base::DictionaryValue* dict) {
@@ -73,15 +113,6 @@ void AddAlternativeServiceFieldsToDictionaryValue(
NextProtoToString(alternative_service.protocol));
}
-// A local or temporary data structure to hold preferences for a server.
-// This is used only in UpdatePrefs.
-struct ServerPref {
- bool supports_spdy = false;
- AlternativeServiceInfoVector alternative_service_info_vector;
- bool server_network_stats_valid = false;
- ServerNetworkStats server_network_stats;
-};
-
quic::QuicServerId QuicServerIdFromString(const std::string& str) {
GURL url(str);
if (!url.is_valid()) {
@@ -105,342 +136,46 @@ std::string QuicServerIdToString(const quic::QuicServerId& server_id) {
////////////////////////////////////////////////////////////////////////////////
// HttpServerPropertiesManager
-HttpServerPropertiesManager::PrefDelegate::~PrefDelegate() = default;
-
HttpServerPropertiesManager::HttpServerPropertiesManager(
- std::unique_ptr<PrefDelegate> pref_delegate,
+ std::unique_ptr<HttpServerProperties::PrefDelegate> pref_delegate,
+ OnPrefsLoadedCallback on_prefs_loaded_callback,
+ size_t max_server_configs_stored_in_properties,
NetLog* net_log,
const base::TickClock* clock)
: pref_delegate_(std::move(pref_delegate)),
- clock_(clock ? clock : base::DefaultTickClock::GetInstance()),
+ on_prefs_loaded_callback_(std::move(on_prefs_loaded_callback)),
+ max_server_configs_stored_in_properties_(
+ max_server_configs_stored_in_properties),
+ clock_(clock),
net_log_(
NetLogWithSource::Make(net_log,
NetLogSourceType::HTTP_SERVER_PROPERTIES)) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(pref_delegate_);
+ DCHECK(on_prefs_loaded_callback_);
DCHECK(clock_);
- pref_delegate_->StartListeningForUpdates(base::BindRepeating(
- &HttpServerPropertiesManager::OnHttpServerPropertiesChanged,
- base::Unretained(this)));
+ pref_delegate_->WaitForPrefLoad(
+ base::BindOnce(&HttpServerPropertiesManager::OnHttpServerPropertiesLoaded,
+ pref_load_weak_ptr_factory_.GetWeakPtr()));
net_log_.BeginEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_INITIALIZATION);
-
- http_server_properties_impl_.reset(
- new HttpServerPropertiesImpl(clock_, nullptr));
}
HttpServerPropertiesManager::~HttpServerPropertiesManager() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- // Flush settings on destruction.
- UpdatePrefsFromCache(base::OnceClosure());
-}
-
-void HttpServerPropertiesManager::Clear(base::OnceClosure callback) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
- http_server_properties_impl_->Clear(base::OnceClosure());
- UpdatePrefsFromCache(std::move(callback));
-}
-
-bool HttpServerPropertiesManager::SupportsRequestPriority(
- const url::SchemeHostPort& server) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->SupportsRequestPriority(server);
-}
-
-bool HttpServerPropertiesManager::GetSupportsSpdy(
- const url::SchemeHostPort& server) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->GetSupportsSpdy(server);
-}
-
-void HttpServerPropertiesManager::SetSupportsSpdy(
- const url::SchemeHostPort& server,
- bool support_spdy) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
- bool old_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server);
- http_server_properties_impl_->SetSupportsSpdy(server, support_spdy);
- bool new_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server);
- if (old_support_spdy != new_support_spdy)
- ScheduleUpdatePrefs();
-}
-
-bool HttpServerPropertiesManager::RequiresHTTP11(const HostPortPair& server) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->RequiresHTTP11(server);
-}
-
-void HttpServerPropertiesManager::SetHTTP11Required(
- const HostPortPair& server) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
- http_server_properties_impl_->SetHTTP11Required(server);
- ScheduleUpdatePrefs();
-}
-
-void HttpServerPropertiesManager::MaybeForceHTTP11(const HostPortPair& server,
- SSLConfig* ssl_config) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- http_server_properties_impl_->MaybeForceHTTP11(server, ssl_config);
-}
-
-AlternativeServiceInfoVector
-HttpServerPropertiesManager::GetAlternativeServiceInfos(
- const url::SchemeHostPort& origin) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->GetAlternativeServiceInfos(origin);
-}
-
-bool HttpServerPropertiesManager::SetHttp2AlternativeService(
- const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- const bool changed = http_server_properties_impl_->SetHttp2AlternativeService(
- origin, alternative_service, expiration);
- if (changed) {
- ScheduleUpdatePrefs();
- }
- return changed;
-}
-
-bool HttpServerPropertiesManager::SetQuicAlternativeService(
- const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- const bool changed = http_server_properties_impl_->SetQuicAlternativeService(
- origin, alternative_service, expiration, advertised_versions);
- if (changed) {
- ScheduleUpdatePrefs();
- }
- return changed;
-}
-
-bool HttpServerPropertiesManager::SetAlternativeServices(
- const url::SchemeHostPort& origin,
- const AlternativeServiceInfoVector& alternative_service_info_vector) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- const bool changed = http_server_properties_impl_->SetAlternativeServices(
- origin, alternative_service_info_vector);
- if (changed) {
- ScheduleUpdatePrefs();
- }
- return changed;
-}
-
-void HttpServerPropertiesManager::MarkAlternativeServiceBroken(
- const AlternativeService& alternative_service) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- http_server_properties_impl_->MarkAlternativeServiceBroken(
- alternative_service);
- ScheduleUpdatePrefs();
-}
-
-void HttpServerPropertiesManager::
- MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- const AlternativeService& alternative_service) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- http_server_properties_impl_
- ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- alternative_service);
- ScheduleUpdatePrefs();
-}
-
-void HttpServerPropertiesManager::MarkAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- http_server_properties_impl_->MarkAlternativeServiceRecentlyBroken(
- alternative_service);
- ScheduleUpdatePrefs();
-}
-
-bool HttpServerPropertiesManager::IsAlternativeServiceBroken(
- const AlternativeService& alternative_service) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->IsAlternativeServiceBroken(
- alternative_service);
-}
-
-bool HttpServerPropertiesManager::WasAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->WasAlternativeServiceRecentlyBroken(
- alternative_service);
-}
-
-void HttpServerPropertiesManager::ConfirmAlternativeService(
- const AlternativeService& alternative_service) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- bool old_value = http_server_properties_impl_->IsAlternativeServiceBroken(
- alternative_service);
- http_server_properties_impl_->ConfirmAlternativeService(alternative_service);
- bool new_value = http_server_properties_impl_->IsAlternativeServiceBroken(
- alternative_service);
- // For persisting, we only care about the value returned by
- // IsAlternativeServiceBroken. If that value changes, then call persist.
- if (old_value != new_value)
- ScheduleUpdatePrefs();
-}
-
-bool HttpServerPropertiesManager::OnDefaultNetworkChanged() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- bool changed = http_server_properties_impl_->OnDefaultNetworkChanged();
- if (changed)
- ScheduleUpdatePrefs();
- return changed;
-}
-
-const AlternativeServiceMap&
-HttpServerPropertiesManager::alternative_service_map() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->alternative_service_map();
-}
-
-std::unique_ptr<base::Value>
-HttpServerPropertiesManager::GetAlternativeServiceInfoAsValue() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->GetAlternativeServiceInfoAsValue();
-}
-
-bool HttpServerPropertiesManager::GetSupportsQuic(
- IPAddress* last_address) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->GetSupportsQuic(last_address);
-}
-
-void HttpServerPropertiesManager::SetSupportsQuic(bool used_quic,
- const IPAddress& address) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- IPAddress old_last_quic_addr;
- http_server_properties_impl_->GetSupportsQuic(&old_last_quic_addr);
- http_server_properties_impl_->SetSupportsQuic(used_quic, address);
- IPAddress new_last_quic_addr;
- http_server_properties_impl_->GetSupportsQuic(&new_last_quic_addr);
- if (old_last_quic_addr != new_last_quic_addr)
- ScheduleUpdatePrefs();
-}
-
-void HttpServerPropertiesManager::SetServerNetworkStats(
- const url::SchemeHostPort& server,
- ServerNetworkStats stats) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- ServerNetworkStats old_stats;
- const ServerNetworkStats* old_stats_ptr =
- http_server_properties_impl_->GetServerNetworkStats(server);
- if (http_server_properties_impl_->GetServerNetworkStats(server))
- old_stats = *old_stats_ptr;
- http_server_properties_impl_->SetServerNetworkStats(server, stats);
- ServerNetworkStats new_stats =
- *(http_server_properties_impl_->GetServerNetworkStats(server));
- if (old_stats != new_stats)
- ScheduleUpdatePrefs();
-}
-
-void HttpServerPropertiesManager::ClearServerNetworkStats(
- const url::SchemeHostPort& server) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- bool need_update =
- http_server_properties_impl_->GetServerNetworkStats(server) != nullptr;
- http_server_properties_impl_->ClearServerNetworkStats(server);
- if (need_update)
- ScheduleUpdatePrefs();
-}
-
-const ServerNetworkStats* HttpServerPropertiesManager::GetServerNetworkStats(
- const url::SchemeHostPort& server) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->GetServerNetworkStats(server);
-}
-
-const ServerNetworkStatsMap&
-HttpServerPropertiesManager::server_network_stats_map() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->server_network_stats_map();
-}
-
-bool HttpServerPropertiesManager::SetQuicServerInfo(
- const quic::QuicServerId& server_id,
- const std::string& server_info) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- bool changed =
- http_server_properties_impl_->SetQuicServerInfo(server_id, server_info);
- if (changed)
- ScheduleUpdatePrefs();
- return changed;
-}
-
-const std::string* HttpServerPropertiesManager::GetQuicServerInfo(
- const quic::QuicServerId& server_id) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->GetQuicServerInfo(server_id);
-}
-
-const QuicServerInfoMap& HttpServerPropertiesManager::quic_server_info_map()
- const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->quic_server_info_map();
-}
-
-size_t HttpServerPropertiesManager::max_server_configs_stored_in_properties()
- const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_
- ->max_server_configs_stored_in_properties();
-}
-
-void HttpServerPropertiesManager::SetMaxServerConfigsStoredInProperties(
- size_t max_server_configs_stored_in_properties) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return http_server_properties_impl_->SetMaxServerConfigsStoredInProperties(
- max_server_configs_stored_in_properties);
}
-bool HttpServerPropertiesManager::IsInitialized() const {
+void HttpServerPropertiesManager::ReadPrefs(
+ std::unique_ptr<HttpServerProperties::ServerInfoMap>* server_info_map,
+ IPAddress* last_quic_address,
+ std::unique_ptr<QuicServerInfoMap>* quic_server_info_map,
+ std::unique_ptr<BrokenAlternativeServiceList>*
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>*
+ recently_broken_alternative_services) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- return is_initialized_;
-}
-
-// static
-base::TimeDelta HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() {
- return kUpdateCacheDelay;
-}
-
-// static
-base::TimeDelta HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() {
- return kUpdatePrefsDelay;
-}
-
-void HttpServerPropertiesManager::ScheduleUpdateCacheForTesting() {
- ScheduleUpdateCache();
-}
-
-void HttpServerPropertiesManager::ScheduleUpdateCache() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- // Do not schedule a new update if there is already one scheduled.
- if (pref_cache_update_timer_.IsRunning())
- return;
-
- if (!is_initialized_) {
- UpdateCacheFromPrefs();
- return;
- }
-
- pref_cache_update_timer_.Start(
- FROM_HERE, kUpdateCacheDelay, this,
- &HttpServerPropertiesManager::UpdateCacheFromPrefs);
-}
-
-void HttpServerPropertiesManager::UpdateCacheFromPrefs() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
- if (!is_initialized_) {
- net_log_.EndEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_INITIALIZATION);
- is_initialized_ = true;
- }
+ net_log_.EndEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_INITIALIZATION);
const base::DictionaryValue* http_server_properties_dict =
pref_delegate_->GetServerProperties();
@@ -448,7 +183,6 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() {
if (!http_server_properties_dict)
return;
- bool detected_corrupted_prefs = false;
net_log_.AddEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_UPDATE_CACHE,
[&] { return http_server_properties_dict->Clone(); });
int version_number = kMissingVersion;
@@ -460,7 +194,6 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() {
return;
}
- const base::DictionaryValue* servers_dict = nullptr;
const base::ListValue* servers_list = nullptr;
// For Version 5, data is stored in the following format.
// |servers| are saved in MRU order. |servers| are in the format flattened
@@ -481,54 +214,42 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() {
return;
}
- std::unique_ptr<IPAddress> addr = std::make_unique<IPAddress>();
- ReadSupportsQuic(*http_server_properties_dict, addr.get());
+ ReadSupportsQuic(*http_server_properties_dict, last_quic_address);
- // String is "scheme://host:port" tuple of spdy server.
- std::unique_ptr<SpdyServersMap> spdy_servers_map =
- std::make_unique<SpdyServersMap>();
- std::unique_ptr<AlternativeServiceMap> alternative_service_map =
- std::make_unique<AlternativeServiceMap>();
- std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map =
- std::make_unique<ServerNetworkStatsMap>();
- std::unique_ptr<QuicServerInfoMap> quic_server_info_map =
- std::make_unique<QuicServerInfoMap>(
- max_server_configs_stored_in_properties());
+ *server_info_map = std::make_unique<HttpServerProperties::ServerInfoMap>();
+ *quic_server_info_map = std::make_unique<QuicServerInfoMap>(
+ max_server_configs_stored_in_properties_);
+
+ bool use_network_isolation_key = base::FeatureList::IsEnabled(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
// Iterate servers list in reverse MRU order so that entries are inserted
// into |spdy_servers_map|, |alternative_service_map|, and
// |server_network_stats_map| from oldest to newest.
+ const base::DictionaryValue* server_dict = nullptr;
for (auto it = servers_list->end(); it != servers_list->begin();) {
--it;
- if (!it->GetAsDictionary(&servers_dict)) {
+ if (!it->GetAsDictionary(&server_dict)) {
DVLOG(1) << "Malformed http_server_properties for servers dictionary.";
- detected_corrupted_prefs = true;
continue;
}
- if (!AddServersData(*servers_dict, spdy_servers_map.get(),
- alternative_service_map.get(),
- server_network_stats_map.get())) {
- detected_corrupted_prefs = true;
- }
+ AddServerData(*server_dict, server_info_map->get(),
+ use_network_isolation_key);
}
- if (!AddToQuicServerInfoMap(*http_server_properties_dict,
- quic_server_info_map.get())) {
- detected_corrupted_prefs = true;
- }
+ AddToQuicServerInfoMap(*http_server_properties_dict,
+ quic_server_info_map->get());
// Read list containing broken and recently-broken alternative services, if
// it exists.
- std::unique_ptr<BrokenAlternativeServiceList> broken_alternative_service_list;
- std::unique_ptr<RecentlyBrokenAlternativeServices>
- recently_broken_alternative_services;
const base::ListValue* broken_alt_svc_list;
if (http_server_properties_dict->GetListWithoutPathExpansion(
kBrokenAlternativeServicesKey, &broken_alt_svc_list)) {
- broken_alternative_service_list =
+ *broken_alternative_service_list =
std::make_unique<BrokenAlternativeServiceList>();
- recently_broken_alternative_services =
- std::make_unique<RecentlyBrokenAlternativeServices>();
+ *recently_broken_alternative_services =
+ std::make_unique<RecentlyBrokenAlternativeServices>(
+ kMaxRecentlyBrokenAlternativeServiceEntries);
// Iterate list in reverse-MRU order
for (auto it = broken_alt_svc_list->end();
@@ -537,60 +258,34 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() {
const base::DictionaryValue* entry_dict;
if (!it->GetAsDictionary(&entry_dict)) {
DVLOG(1) << "Malformed broken alterantive service entry.";
- detected_corrupted_prefs = true;
- continue;
- }
- if (!AddToBrokenAlternativeServices(
- *entry_dict, broken_alternative_service_list.get(),
- recently_broken_alternative_services.get())) {
- detected_corrupted_prefs = true;
continue;
}
+ AddToBrokenAlternativeServices(
+ *entry_dict, broken_alternative_service_list->get(),
+ recently_broken_alternative_services->get());
}
}
// Set the properties loaded from prefs on |http_server_properties_impl_|.
- UMA_HISTOGRAM_COUNTS_1M("Net.CountOfSpdyServers", spdy_servers_map->size());
- http_server_properties_impl_->SetSpdyServers(std::move(spdy_servers_map));
-
- // Update the cached data and use the new alternative service list from
- // preferences.
- UMA_HISTOGRAM_COUNTS_1M("Net.CountOfAlternateProtocolServers",
- alternative_service_map->size());
- http_server_properties_impl_->SetAlternativeServiceServers(
- std::move(alternative_service_map));
-
- http_server_properties_impl_->SetSupportsQuic(*addr);
-
- http_server_properties_impl_->SetServerNetworkStats(
- std::move(server_network_stats_map));
+ // TODO(mmenke): Rename this once more information is stored in this map.
+ UMA_HISTOGRAM_COUNTS_1M("Net.HttpServerProperties.CountOfServers",
+ (*server_info_map)->size());
UMA_HISTOGRAM_COUNTS_1000("Net.CountOfQuicServerInfos",
- quic_server_info_map->size());
-
- http_server_properties_impl_->SetQuicServerInfoMap(
- std::move(quic_server_info_map));
+ (*quic_server_info_map)->size());
- if (recently_broken_alternative_services) {
- DCHECK(broken_alternative_service_list);
+ if (*recently_broken_alternative_services) {
+ DCHECK(*broken_alternative_service_list);
UMA_HISTOGRAM_COUNTS_1000("Net.CountOfBrokenAlternativeServices",
- broken_alternative_service_list->size());
+ (*broken_alternative_service_list)->size());
UMA_HISTOGRAM_COUNTS_1000("Net.CountOfRecentlyBrokenAlternativeServices",
- recently_broken_alternative_services->size());
-
- http_server_properties_impl_->SetBrokenAndRecentlyBrokenAlternativeServices(
- std::move(broken_alternative_service_list),
- std::move(recently_broken_alternative_services));
+ (*recently_broken_alternative_services)->size());
}
-
- // Update the prefs with what we have read (delete all corrupted prefs).
- if (detected_corrupted_prefs)
- ScheduleUpdatePrefs();
}
-bool HttpServerPropertiesManager::AddToBrokenAlternativeServices(
+void HttpServerPropertiesManager::AddToBrokenAlternativeServices(
const base::DictionaryValue& broken_alt_svc_entry_dict,
BrokenAlternativeServiceList* broken_alternative_service_list,
RecentlyBrokenAlternativeServices* recently_broken_alternative_services) {
@@ -598,7 +293,7 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices(
if (!ParseAlternativeServiceDict(broken_alt_svc_entry_dict, false,
"broken alternative services",
&alt_service)) {
- return false;
+ return;
}
// Each entry must contain either broken-count and/or broken-until fields.
@@ -612,11 +307,11 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices(
kBrokenCountKey, &broken_count)) {
DVLOG(1) << "Recently broken alternative service has malformed "
<< "broken-count.";
- return false;
+ return;
}
if (broken_count < 0) {
DVLOG(1) << "Broken alternative service has negative broken-count.";
- return false;
+ return;
}
recently_broken_alternative_services->Put(alt_service, broken_count);
contains_broken_count_or_broken_until = true;
@@ -632,7 +327,7 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices(
!base::StringToInt64(expiration_string, &expiration_int64)) {
DVLOG(1) << "Broken alternative service has malformed broken-until "
<< "string.";
- return false;
+ return;
}
time_t expiration_time_t = static_cast<time_t>(expiration_int64);
@@ -648,49 +343,50 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices(
if (!contains_broken_count_or_broken_until) {
DVLOG(1) << "Broken alternative service has neither broken-count nor "
<< "broken-until specified.";
- return false;
}
-
- return true;
}
-bool HttpServerPropertiesManager::AddServersData(
- const base::DictionaryValue& servers_dict,
- SpdyServersMap* spdy_servers_map,
- AlternativeServiceMap* alternative_service_map,
- ServerNetworkStatsMap* network_stats_map) {
- for (base::DictionaryValue::Iterator it(servers_dict); !it.IsAtEnd();
- it.Advance()) {
- // Get server's scheme/host/pair.
- const std::string& server_str = it.key();
- std::string spdy_server_url = server_str;
- url::SchemeHostPort spdy_server((GURL(spdy_server_url)));
- if (spdy_server.host().empty()) {
- DVLOG(1) << "Malformed http_server_properties for server: " << server_str;
- return false;
- }
+void HttpServerPropertiesManager::AddServerData(
+ const base::DictionaryValue& server_dict,
+ HttpServerProperties::ServerInfoMap* server_info_map,
+ bool use_network_isolation_key) {
+ // Get server's scheme/host/pair.
+ const std::string* server_str = server_dict.FindStringKey(kServerKey);
+ const base::Value* network_isolation_key_value =
+ server_dict.FindKey(kNetworkIsolationKey);
+ NetworkIsolationKey network_isolation_key;
+ // Can't load entry if server name missing, or if the network isolation key is
+ // missing or invalid.
+ if (!server_str || !network_isolation_key_value ||
+ !NetworkIsolationKey::FromValue(*network_isolation_key_value,
+ &network_isolation_key)) {
+ return;
+ }
- const base::DictionaryValue* server_pref_dict = nullptr;
- if (!it.value().GetAsDictionary(&server_pref_dict)) {
- DVLOG(1) << "Malformed http_server_properties server: " << server_str;
- return false;
- }
+ // If the entry includes a non-empty NetworkIsolationKey, but using a network
+ // isolation key is currently disabled, throw away the entry.
+ if (!network_isolation_key.IsEmpty() && !use_network_isolation_key)
+ return;
- // Get if server supports Spdy.
- bool supports_spdy = false;
- if (server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy) &&
- supports_spdy) {
- spdy_servers_map->Put(spdy_server.Serialize(), supports_spdy);
- }
+ url::SchemeHostPort spdy_server((GURL(*server_str)));
+ if (spdy_server.host().empty()) {
+ DVLOG(1) << "Malformed http_server_properties for server: " << server_str;
+ return;
+ }
- if (!AddToAlternativeServiceMap(spdy_server, *server_pref_dict,
- alternative_service_map) ||
- !AddToNetworkStatsMap(spdy_server, *server_pref_dict,
- network_stats_map)) {
- return false;
- }
+ HttpServerProperties::ServerInfo server_info;
+
+ server_info.supports_spdy = server_dict.FindBoolKey(kSupportsSpdyKey);
+
+ if (ParseAlternativeServiceInfo(spdy_server, server_dict, &server_info))
+ ParseNetworkStats(spdy_server, server_dict, &server_info);
+
+ if (!server_info.empty()) {
+ server_info_map->Put(
+ HttpServerProperties::ServerInfoMapKey(
+ spdy_server, network_isolation_key, use_network_isolation_key),
+ std::move(server_info));
}
- return true;
}
bool HttpServerPropertiesManager::ParseAlternativeServiceDict(
@@ -801,12 +497,11 @@ bool HttpServerPropertiesManager::ParseAlternativeServiceInfoDictOfServer(
return true;
}
-bool HttpServerPropertiesManager::AddToAlternativeServiceMap(
+bool HttpServerPropertiesManager::ParseAlternativeServiceInfo(
const url::SchemeHostPort& server,
const base::DictionaryValue& server_pref_dict,
- AlternativeServiceMap* alternative_service_map) {
- DCHECK(alternative_service_map->Peek(server) ==
- alternative_service_map->end());
+ HttpServerProperties::ServerInfo* server_info) {
+ DCHECK(!server_info->alternative_services.has_value());
const base::ListValue* alternative_service_list;
if (!server_pref_dict.GetListWithoutPathExpansion(
kAlternativeServiceKey, &alternative_service_list)) {
@@ -837,73 +532,69 @@ bool HttpServerPropertiesManager::AddToAlternativeServiceMap(
return false;
}
- alternative_service_map->Put(server, alternative_service_info_vector);
+ server_info->alternative_services = alternative_service_info_vector;
return true;
}
-bool HttpServerPropertiesManager::ReadSupportsQuic(
+void HttpServerPropertiesManager::ReadSupportsQuic(
const base::DictionaryValue& http_server_properties_dict,
IPAddress* last_quic_address) {
const base::DictionaryValue* supports_quic_dict = nullptr;
if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion(
kSupportsQuicKey, &supports_quic_dict)) {
- return true;
+ return;
}
bool used_quic = false;
if (!supports_quic_dict->GetBooleanWithoutPathExpansion(kUsedQuicKey,
&used_quic)) {
DVLOG(1) << "Malformed SupportsQuic";
- return false;
+ return;
}
if (!used_quic)
- return false;
+ return;
std::string address;
if (!supports_quic_dict->GetStringWithoutPathExpansion(kAddressKey,
&address) ||
!last_quic_address->AssignFromIPLiteral(address)) {
DVLOG(1) << "Malformed SupportsQuic";
- return false;
}
- return true;
}
-bool HttpServerPropertiesManager::AddToNetworkStatsMap(
+void HttpServerPropertiesManager::ParseNetworkStats(
const url::SchemeHostPort& server,
const base::DictionaryValue& server_pref_dict,
- ServerNetworkStatsMap* network_stats_map) {
- DCHECK(network_stats_map->Peek(server) == network_stats_map->end());
+ HttpServerProperties::ServerInfo* server_info) {
+ DCHECK(!server_info->server_network_stats.has_value());
const base::DictionaryValue* server_network_stats_dict = nullptr;
if (!server_pref_dict.GetDictionaryWithoutPathExpansion(
kNetworkStatsKey, &server_network_stats_dict)) {
- return true;
+ return;
}
int srtt;
if (!server_network_stats_dict->GetIntegerWithoutPathExpansion(kSrttKey,
&srtt)) {
DVLOG(1) << "Malformed ServerNetworkStats for server: "
<< server.Serialize();
- return false;
+ return;
}
ServerNetworkStats server_network_stats;
server_network_stats.srtt = base::TimeDelta::FromMicroseconds(srtt);
// TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist
// bandwidth_estimate.
- network_stats_map->Put(server, server_network_stats);
- return true;
+ server_info->server_network_stats = server_network_stats;
}
-bool HttpServerPropertiesManager::AddToQuicServerInfoMap(
+void HttpServerPropertiesManager::AddToQuicServerInfoMap(
const base::DictionaryValue& http_server_properties_dict,
QuicServerInfoMap* quic_server_info_map) {
const base::DictionaryValue* quic_servers_dict = nullptr;
if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion(
kQuicServers, &quic_servers_dict)) {
DVLOG(1) << "Malformed http_server_properties for quic_servers.";
- return true;
+ return;
}
- bool detected_corrupted_prefs = false;
for (base::DictionaryValue::Iterator it(*quic_servers_dict); !it.IsAtEnd();
it.Advance()) {
// Get quic_server_id.
@@ -914,7 +605,6 @@ bool HttpServerPropertiesManager::AddToQuicServerInfoMap(
if (quic_server_id.host().empty()) {
DVLOG(1) << "Malformed http_server_properties for quic server: "
<< quic_server_id_str;
- detected_corrupted_prefs = true;
continue;
}
@@ -922,7 +612,6 @@ bool HttpServerPropertiesManager::AddToQuicServerInfoMap(
if (!it.value().GetAsDictionary(&quic_server_pref_dict)) {
DVLOG(1) << "Malformed http_server_properties quic server dict: "
<< quic_server_id_str;
- detected_corrupted_prefs = true;
continue;
}
@@ -931,156 +620,90 @@ bool HttpServerPropertiesManager::AddToQuicServerInfoMap(
kServerInfoKey, &quic_server_info)) {
DVLOG(1) << "Malformed http_server_properties quic server info: "
<< quic_server_id_str;
- detected_corrupted_prefs = true;
continue;
}
quic_server_info_map->Put(quic_server_id, quic_server_info);
}
- return !detected_corrupted_prefs;
}
-void HttpServerPropertiesManager::ScheduleUpdatePrefs() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- // Do not schedule a new update if there is already one scheduled.
- if (network_prefs_update_timer_.IsRunning())
- return;
-
- network_prefs_update_timer_.Start(
- FROM_HERE, kUpdatePrefsDelay,
- base::Bind(&HttpServerPropertiesManager::UpdatePrefsFromCache,
- base::Unretained(this), base::Passed(base::OnceClosure())));
-}
-
-void HttpServerPropertiesManager::UpdatePrefsFromCache(
+void HttpServerPropertiesManager::WriteToPrefs(
+ const HttpServerProperties::ServerInfoMap& server_info_map,
+ const GetCannonicalSuffix& get_canonical_suffix,
+ const IPAddress& last_quic_address,
+ const QuicServerInfoMap& quic_server_info_map,
+ const BrokenAlternativeServiceList& broken_alternative_service_list,
+ const RecentlyBrokenAlternativeServices&
+ recently_broken_alternative_services,
base::OnceClosure callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- typedef base::MRUCache<url::SchemeHostPort, ServerPref> ServerPrefMap;
- ServerPrefMap server_pref_map(ServerPrefMap::NO_AUTO_EVICT);
-
- // Add SPDY servers to |server_pref_map|.
- const SpdyServersMap& spdy_servers_map =
- http_server_properties_impl_->spdy_servers_map();
- for (auto it = spdy_servers_map.rbegin(); it != spdy_servers_map.rend();
- ++it) {
- // Only add servers that support SPDY.
- if (!it->second)
- continue;
-
- url::SchemeHostPort server(GURL(it->first));
- auto map_it = server_pref_map.Put(server, ServerPref());
- map_it->second.supports_spdy = true;
- }
+ // If loading prefs hasn't completed, don't call it, since this will overwrite
+ // existing prefs.
+ on_prefs_loaded_callback_.Reset();
- // Add alternative service info to |server_pref_map|.
- const AlternativeServiceMap& alternative_service_map =
- http_server_properties_impl_->alternative_service_map();
- UMA_HISTOGRAM_COUNTS_1M("Net.CountOfAlternateProtocolServers.Memory",
- alternative_service_map.size());
- typedef std::map<std::string, bool> CanonicalHostPersistedMap;
- CanonicalHostPersistedMap persisted_map;
+ std::set<std::pair<std::string, NetworkIsolationKey>>
+ persisted_canonical_suffix_set;
const base::Time now = base::Time::Now();
- for (auto it = alternative_service_map.rbegin();
- it != alternative_service_map.rend(); ++it) {
- const url::SchemeHostPort& server = it->first;
- AlternativeServiceInfoVector notbroken_alternative_service_info_vector;
- for (const AlternativeServiceInfo& alternative_service_info : it->second) {
- // Do not persist expired entries
- if (alternative_service_info.expiration() < now) {
- continue;
- }
- if (!IsAlternateProtocolValid(
- alternative_service_info.alternative_service().protocol)) {
- continue;
- }
- notbroken_alternative_service_info_vector.push_back(
- alternative_service_info);
- }
- if (notbroken_alternative_service_info_vector.empty()) {
- continue;
- }
- const std::string* canonical_suffix =
- http_server_properties_impl_->GetCanonicalSuffix(server.host());
- if (canonical_suffix != nullptr) {
- if (persisted_map.find(*canonical_suffix) != persisted_map.end())
- continue;
- persisted_map[*canonical_suffix] = true;
- }
-
- auto map_it = server_pref_map.Get(server);
- if (map_it == server_pref_map.end())
- map_it = server_pref_map.Put(server, ServerPref());
- map_it->second.alternative_service_info_vector =
- std::move(notbroken_alternative_service_info_vector);
- }
-
- // Add server network stats to |server_pref_map|.
- const ServerNetworkStatsMap& server_network_stats_map =
- http_server_properties_impl_->server_network_stats_map();
- for (auto it = server_network_stats_map.rbegin();
- it != server_network_stats_map.rend(); ++it) {
- const url::SchemeHostPort& server = it->first;
- auto map_it = server_pref_map.Get(server);
- if (map_it == server_pref_map.end())
- map_it = server_pref_map.Put(server, ServerPref());
- map_it->second.server_network_stats_valid = true;
- map_it->second.server_network_stats = it->second;
- }
-
base::DictionaryValue http_server_properties_dict;
- // Convert |server_pref_map| to a DictionaryValue and add it to
+ // Convert |server_info_map| to a DictionaryValue and add it to
// |http_server_properties_dict|.
- auto servers_list = std::make_unique<base::ListValue>();
- for (ServerPrefMap::const_reverse_iterator map_it = server_pref_map.rbegin();
- map_it != server_pref_map.rend(); ++map_it) {
- const url::SchemeHostPort server = map_it->first;
- const ServerPref& server_pref = map_it->second;
+ base::Value servers_list(base::Value::Type::LIST);
+ for (auto map_it = server_info_map.rbegin(); map_it != server_info_map.rend();
+ ++map_it) {
+ const HttpServerProperties::ServerInfoMapKey key = map_it->first;
+ const HttpServerProperties::ServerInfo& server_info = map_it->second;
+
+ // If can't convert the NetworkIsolationKey to a value, don't save to disk.
+ // Generally happens because the key is for a unique origin.
+ base::Value network_isolation_key_value;
+ if (!key.network_isolation_key.ToValue(&network_isolation_key_value))
+ continue;
- auto servers_dict = std::make_unique<base::DictionaryValue>();
- auto server_pref_dict = std::make_unique<base::DictionaryValue>();
+ base::DictionaryValue server_dict;
- if (server_pref.supports_spdy) {
- server_pref_dict->SetBoolean(kSupportsSpdyKey, server_pref.supports_spdy);
- }
- if (!server_pref.alternative_service_info_vector.empty()) {
- SaveAlternativeServiceToServerPrefs(
- server_pref.alternative_service_info_vector, server_pref_dict.get());
- }
- if (server_pref.server_network_stats_valid) {
- SaveNetworkStatsToServerPrefs(server_pref.server_network_stats,
- server_pref_dict.get());
+ bool supports_spdy = server_info.supports_spdy.value_or(false);
+ if (supports_spdy)
+ server_dict.SetBoolKey(kSupportsSpdyKey, supports_spdy);
+
+ AlternativeServiceInfoVector alternative_services =
+ GetAlternativeServiceToPersist(server_info.alternative_services, key,
+ now, get_canonical_suffix,
+ &persisted_canonical_suffix_set);
+ if (!alternative_services.empty())
+ SaveAlternativeServiceToServerPrefs(alternative_services, &server_dict);
+
+ if (server_info.server_network_stats) {
+ SaveNetworkStatsToServerPrefs(*server_info.server_network_stats,
+ &server_dict);
}
- servers_dict->SetWithoutPathExpansion(server.Serialize(),
- std::move(server_pref_dict));
- bool value = servers_list->AppendIfNotPresent(std::move(servers_dict));
- DCHECK(value); // Should never happen.
+ // Don't add empty entries. This can happen if, for example, all alternative
+ // services are empty, or |supports_spdy| is set to false, and all other
+ // fields are not set.
+ if (server_dict.DictEmpty())
+ continue;
+ server_dict.SetStringKey(kServerKey, key.server.Serialize());
+ server_dict.SetKey(kNetworkIsolationKey,
+ std::move(network_isolation_key_value));
+ servers_list.GetList().emplace_back(std::move(server_dict));
}
- http_server_properties_dict.SetWithoutPathExpansion(kServersKey,
- std::move(servers_list));
+ http_server_properties_dict.SetKey(kServersKey, std::move(servers_list));
http_server_properties_dict.SetInteger(kVersionKey, kVersionNumber);
- IPAddress last_quic_addr;
- if (http_server_properties_impl_->GetSupportsQuic(&last_quic_addr)) {
- SaveSupportsQuicToPrefs(last_quic_addr, &http_server_properties_dict);
- }
+ if (last_quic_address.IsValid())
+ SaveSupportsQuicToPrefs(last_quic_address, &http_server_properties_dict);
- SaveQuicServerInfoMapToServerPrefs(
- http_server_properties_impl_->quic_server_info_map(),
- &http_server_properties_dict);
+ SaveQuicServerInfoMapToServerPrefs(quic_server_info_map,
+ &http_server_properties_dict);
SaveBrokenAlternativeServicesToPrefs(
- http_server_properties_impl_->broken_alternative_service_list(),
- kMaxBrokenAlternativeServicesToPersist,
- http_server_properties_impl_->recently_broken_alternative_services(),
- &http_server_properties_dict);
+ broken_alternative_service_list, kMaxBrokenAlternativeServicesToPersist,
+ recently_broken_alternative_services, &http_server_properties_dict);
- setting_prefs_ = true;
pref_delegate_->SetServerProperties(http_server_properties_dict,
std::move(callback));
- setting_prefs_ = false;
net_log_.AddEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_UPDATE_PREFS,
[&] { return http_server_properties_dict.Clone(); });
@@ -1240,10 +863,29 @@ void HttpServerPropertiesManager::SaveBrokenAlternativeServicesToPrefs(
kBrokenAlternativeServicesKey, std::move(json_list));
}
-void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() {
+void HttpServerPropertiesManager::OnHttpServerPropertiesLoaded() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- if (!setting_prefs_)
- ScheduleUpdateCache();
+
+ // If prefs have already been written, nothing to do.
+ if (!on_prefs_loaded_callback_)
+ return;
+
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map;
+ IPAddress last_quic_address;
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map;
+ std::unique_ptr<BrokenAlternativeServiceList> broken_alternative_service_list;
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services;
+
+ ReadPrefs(&server_info_map, &last_quic_address, &quic_server_info_map,
+ &broken_alternative_service_list,
+ &recently_broken_alternative_services);
+
+ std::move(on_prefs_loaded_callback_)
+ .Run(std::move(server_info_map), last_quic_address,
+ std::move(quic_server_info_map),
+ std::move(broken_alternative_service_list),
+ std::move(recently_broken_alternative_services));
}
} // namespace net
diff --git a/chromium/net/http/http_server_properties_manager.h b/chromium/net/http/http_server_properties_manager.h
index 17d7d969455..73a3123658d 100644
--- a/chromium/net/http/http_server_properties_manager.h
+++ b/chromium/net/http/http_server_properties_manager.h
@@ -5,29 +5,24 @@
#ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_MANAGER_H_
#define NET_HTTP_HTTP_SERVER_PROPERTIES_MANAGER_H_
-#include <stdint.h>
-
#include <memory>
#include <string>
-#include <vector>
#include "base/callback.h"
-#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
-#include "base/time/default_tick_clock.h"
-#include "base/time/time.h"
-#include "base/timer/timer.h"
#include "net/base/host_port_pair.h"
#include "net/base/net_export.h"
+#include "net/http/alternative_service.h"
+#include "net/http/broken_alternative_services.h"
#include "net/http/http_server_properties.h"
-#include "net/http/http_server_properties_impl.h"
#include "net/log/net_log_with_source.h"
namespace base {
class DictionaryValue;
+class TickClock;
}
namespace net {
@@ -37,150 +32,103 @@ class IPAddress;
////////////////////////////////////////////////////////////////////////////////
// HttpServerPropertiesManager
-// The manager for creating and updating an HttpServerProperties (for example it
-// tracks if a server supports SPDY or not).
-class NET_EXPORT HttpServerPropertiesManager : public HttpServerProperties {
+// Class responsible for serializing/deserializing HttpServerProperties and
+// reading from/writing to preferences.
+class NET_EXPORT_PRIVATE HttpServerPropertiesManager {
public:
- // Provides an interface to interact with persistent preferences storage
- // implemented by the embedder. The prefs are assumed not to have been loaded
- // before HttpServerPropertiesManager construction.
- class NET_EXPORT PrefDelegate {
- public:
- virtual ~PrefDelegate();
-
- // Returns the branch of the preferences system for the server properties.
- // Returns nullptr if the pref system has no data for the server properties.
- virtual const base::DictionaryValue* GetServerProperties() const = 0;
-
- // Sets the server properties to the given value. If |callback| is
- // non-empty, flushes data to persistent storage and invokes |callback|
- // asynchronously when complete.
- virtual void SetServerProperties(const base::DictionaryValue& value,
- base::OnceClosure callback) = 0;
-
- // Starts listening for external storage changes. There will only be one
- // callback active at a time. The first time the |callback| is invoked is
- // expected to mean the initial pref store values have been loaded.
- virtual void StartListeningForUpdates(
- const base::RepeatingClosure& callback) = 0;
- };
+ // Called when prefs are loaded. If prefs completely failed to load,
+ // everything will be nullptr. Otherwise, everything will be populated, except
+ // |broken_alternative_service_list| and
+ // |recently_broken_alternative_services|, which may be null.
+ using OnPrefsLoadedCallback = base::OnceCallback<void(
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map,
+ const IPAddress& last_quic_address,
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map,
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services)>;
+
+ using GetCannonicalSuffix =
+ base::RepeatingCallback<const std::string*(const std::string& host)>;
// Create an instance of the HttpServerPropertiesManager.
//
- // Server propertise will be loaded from |pref_delegate| the first time it
- // notifies the HttpServerPropertiesManager of an update, indicating the prefs
- // have been loaded from disk.
+ // |on_prefs_loaded_callback| will be invoked with values loaded from
+ // |prefs_delegate| once prefs have been loaded from disk.
+ // If WriteToPrefs() is invoked before this happens,
+ // |on_prefs_loaded_callback| will never be invoked, since the written prefs
+ // take precedence over the ones previously stored on disk.
//
// |clock| is used for setting expiration times and scheduling the
- // expiration of broken alternative services. If null, the default clock will
- // be used.
- HttpServerPropertiesManager(std::unique_ptr<PrefDelegate> pref_delegate,
- NetLog* net_log,
- const base::TickClock* clock = nullptr);
-
- ~HttpServerPropertiesManager() override;
-
- // ----------------------------------
- // HttpServerProperties methods:
- // ----------------------------------
-
- void Clear(base::OnceClosure callback) override;
- bool SupportsRequestPriority(const url::SchemeHostPort& server) override;
- bool GetSupportsSpdy(const url::SchemeHostPort& server) override;
- void SetSupportsSpdy(const url::SchemeHostPort& server,
- bool support_spdy) override;
- bool RequiresHTTP11(const HostPortPair& server) override;
- void SetHTTP11Required(const HostPortPair& server) override;
- void MaybeForceHTTP11(const HostPortPair& server,
- SSLConfig* ssl_config) override;
- AlternativeServiceInfoVector GetAlternativeServiceInfos(
- const url::SchemeHostPort& origin) override;
- bool SetHttp2AlternativeService(const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration) override;
- bool SetQuicAlternativeService(
- const url::SchemeHostPort& origin,
- const AlternativeService& alternative_service,
- base::Time expiration,
- const quic::ParsedQuicVersionVector& advertised_versions) override;
- bool SetAlternativeServices(const url::SchemeHostPort& origin,
- const AlternativeServiceInfoVector&
- alternative_service_info_vector) override;
- void MarkAlternativeServiceBroken(
- const AlternativeService& alternative_service) override;
- void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- const AlternativeService& alternative_service) override;
- void MarkAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) override;
- bool IsAlternativeServiceBroken(
- const AlternativeService& alternative_service) const override;
- bool WasAlternativeServiceRecentlyBroken(
- const AlternativeService& alternative_service) override;
- void ConfirmAlternativeService(
- const AlternativeService& alternative_service) override;
- bool OnDefaultNetworkChanged() override;
- const AlternativeServiceMap& alternative_service_map() const override;
- std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue()
- const override;
- bool GetSupportsQuic(IPAddress* last_address) const override;
- void SetSupportsQuic(bool used_quic, const IPAddress& last_address) override;
- void SetServerNetworkStats(const url::SchemeHostPort& server,
- ServerNetworkStats stats) override;
- void ClearServerNetworkStats(const url::SchemeHostPort& server) override;
- const ServerNetworkStats* GetServerNetworkStats(
- const url::SchemeHostPort& server) override;
- const ServerNetworkStatsMap& server_network_stats_map() const override;
- bool SetQuicServerInfo(const quic::QuicServerId& server_id,
- const std::string& server_info) override;
- const std::string* GetQuicServerInfo(
- const quic::QuicServerId& server_id) override;
- const QuicServerInfoMap& quic_server_info_map() const override;
- size_t max_server_configs_stored_in_properties() const override;
- void SetMaxServerConfigsStoredInProperties(
- size_t max_server_configs_stored_in_properties) override;
- bool IsInitialized() const override;
-
- static base::TimeDelta GetUpdateCacheDelayForTesting();
- static base::TimeDelta GetUpdatePrefsDelayForTesting();
-
- void ScheduleUpdateCacheForTesting();
-
- protected:
- // These are used to delay updating of the cached data in
- // |http_server_properties_impl_| while the preferences are changing, and
- // execute only one update per simultaneous prefs changes.
- void ScheduleUpdateCache();
-
- // Update cached prefs in |http_server_properties_impl_| with data from
- // preferences.
- void UpdateCacheFromPrefs();
-
- // These are used to delay updating the preferences when cached data in
- // |http_server_properties_impl_| is changing, and execute only one update per
- // simultaneous changes.
- // |location| specifies where this method is called from.
- void ScheduleUpdatePrefs();
-
- // Update prefs::kHttpServerProperties in preferences with the cached data
- // from |http_server_properties_impl_|. Invokes |callback| when changes have
- // been committed, if non-null.
- void UpdatePrefsFromCache(base::OnceClosure callback);
+ // expiration of broken alternative services, and must not be nullptr.
+ HttpServerPropertiesManager(
+ std::unique_ptr<HttpServerProperties::PrefDelegate> pref_delegate,
+ OnPrefsLoadedCallback on_prefs_loaded_callback,
+ size_t max_server_configs_stored_in_properties,
+ NetLog* net_log,
+ const base::TickClock* clock = nullptr);
+
+ ~HttpServerPropertiesManager();
+
+ // Populates passed in objects with data from preferences. If pref data is not
+ // present, leaves all values alone. Otherwise, populates them all, with the
+ // possible exception of the two broken alt services lists.
+ //
+ // Corrupted data is ignored.
+ //
+ // TODO(mmenke): Consider always populating fields, unconditionally, for a
+ // simpler API.
+ void ReadPrefs(
+ std::unique_ptr<HttpServerProperties::ServerInfoMap>* server_info_map,
+ IPAddress* last_quic_address,
+ std::unique_ptr<QuicServerInfoMap>* quic_server_info_map,
+ std::unique_ptr<BrokenAlternativeServiceList>*
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>*
+ recently_broken_alternative_services);
+
+ void set_max_server_configs_stored_in_properties(
+ size_t max_server_configs_stored_in_properties) {
+ max_server_configs_stored_in_properties_ =
+ max_server_configs_stored_in_properties;
+ }
+
+ // Update preferences with caller-provided data. Invokes |callback| when
+ // changes have been committed, if non-null.
+ //
+ // If the OnPrefLoadCallback() passed to the constructor hasn't been invoked
+ // by the time this method is called, calling this will prevent it from ever
+ // being invoked, as this method will overwrite any previous preferences.
+ //
+ // Entries associated with NetworkIsolationKeys for opaque origins are not
+ // written to disk.
+ void WriteToPrefs(
+ const HttpServerProperties::ServerInfoMap& server_info_map,
+ const GetCannonicalSuffix& get_canonical_suffix,
+ const IPAddress& last_quic_address,
+ const QuicServerInfoMap& quic_server_info_map,
+ const BrokenAlternativeServiceList& broken_alternative_service_list,
+ const RecentlyBrokenAlternativeServices&
+ recently_broken_alternative_services,
+ base::OnceClosure callback);
private:
+ // TODO(mmenke): Remove these friend methods, and make all methods static that
+ // can be.
FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest,
- AddToAlternativeServiceMap);
+ ParseAlternativeServiceInfo);
FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest,
ReadAdvertisedVersionsFromPref);
FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest,
DoNotLoadAltSvcForInsecureOrigins);
FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest,
DoNotLoadExpiredAlternativeService);
- void OnHttpServerPropertiesChanged();
- bool AddServersData(const base::DictionaryValue& server_dict,
- SpdyServersMap* spdy_servers_map,
- AlternativeServiceMap* alternative_service_map,
- ServerNetworkStatsMap* network_stats_map);
+ void AddServerData(const base::DictionaryValue& server_dict,
+ HttpServerProperties::ServerInfoMap* server_info_map,
+ bool use_network_isolation_key);
+
// Helper method used for parsing an alternative service from JSON.
// |dict| is the JSON dictionary to be parsed. It should contain fields
// corresponding to members of AlternativeService.
@@ -190,26 +138,33 @@ class NET_EXPORT HttpServerPropertiesManager : public HttpServerProperties {
// should describe what section of the JSON prefs is currently being parsed.
// |alternative_service| is the output of parsing |dict|.
// Return value is true if parsing is successful.
- bool ParseAlternativeServiceDict(const base::DictionaryValue& dict,
- bool host_optional,
- const std::string& parsing_under,
- AlternativeService* alternative_service);
- bool ParseAlternativeServiceInfoDictOfServer(
+ static bool ParseAlternativeServiceDict(
+ const base::DictionaryValue& dict,
+ bool host_optional,
+ const std::string& parsing_under,
+ AlternativeService* alternative_service);
+
+ static bool ParseAlternativeServiceInfoDictOfServer(
const base::DictionaryValue& dict,
const std::string& server_str,
AlternativeServiceInfo* alternative_service_info);
- bool AddToAlternativeServiceMap(
+
+ // Attempts to populate |server_info|'s |alternative_service_info| field from
+ // |server_dict|. Returns true if the data was no corrupted (Lack of data is
+ // not considered corruption).
+ static bool ParseAlternativeServiceInfo(
const url::SchemeHostPort& server,
const base::DictionaryValue& server_dict,
- AlternativeServiceMap* alternative_service_map);
- bool ReadSupportsQuic(const base::DictionaryValue& server_dict,
+ HttpServerProperties::ServerInfo* server_info);
+
+ void ReadSupportsQuic(const base::DictionaryValue& server_dict,
IPAddress* last_quic_address);
- bool AddToNetworkStatsMap(const url::SchemeHostPort& server,
- const base::DictionaryValue& server_dict,
- ServerNetworkStatsMap* network_stats_map);
- bool AddToQuicServerInfoMap(const base::DictionaryValue& server_dict,
+ void ParseNetworkStats(const url::SchemeHostPort& server,
+ const base::DictionaryValue& server_dict,
+ HttpServerProperties::ServerInfo* server_info);
+ void AddToQuicServerInfoMap(const base::DictionaryValue& server_dict,
QuicServerInfoMap* quic_server_info_map);
- bool AddToBrokenAlternativeServices(
+ void AddToBrokenAlternativeServices(
const base::DictionaryValue& broken_alt_svc_entry_dict,
BrokenAlternativeServiceList* broken_alternative_service_list,
RecentlyBrokenAlternativeServices* recently_broken_alternative_services);
@@ -233,28 +188,23 @@ class NET_EXPORT HttpServerPropertiesManager : public HttpServerProperties {
recently_broken_alternative_services,
base::DictionaryValue* http_server_properties_dict);
- // Used to post cache update tasks.
- base::OneShotTimer pref_cache_update_timer_;
-
- std::unique_ptr<PrefDelegate> pref_delegate_;
- // Set to true while modifying prefs, to avoid loading those prefs again as a
- // result of them being changed by the changes just made by this class.
- bool setting_prefs_ = false;
+ void OnHttpServerPropertiesLoaded();
- const base::TickClock* clock_; // Unowned
+ std::unique_ptr<HttpServerProperties::PrefDelegate> pref_delegate_;
- // Set to true once the initial prefs have been loaded.
- bool is_initialized_ = false;
+ OnPrefsLoadedCallback on_prefs_loaded_callback_;
- // Used to post |prefs::kHttpServerProperties| pref update tasks.
- base::OneShotTimer network_prefs_update_timer_;
+ size_t max_server_configs_stored_in_properties_;
- std::unique_ptr<HttpServerPropertiesImpl> http_server_properties_impl_;
+ const base::TickClock* clock_; // Unowned
const NetLogWithSource net_log_;
SEQUENCE_CHECKER(sequence_checker_);
+ base::WeakPtrFactory<HttpServerPropertiesManager> pref_load_weak_ptr_factory_{
+ this};
+
DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManager);
};
diff --git a/chromium/net/http/http_server_properties_manager_unittest.cc b/chromium/net/http/http_server_properties_manager_unittest.cc
index 4921d2e610b..26dc69ca443 100644
--- a/chromium/net/http/http_server_properties_manager_unittest.cc
+++ b/chromium/net/http/http_server_properties_manager_unittest.cc
@@ -7,6 +7,7 @@
#include <utility>
#include "base/bind.h"
+#include "base/feature_list.h"
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/macros.h"
@@ -14,11 +15,16 @@
#include "base/single_thread_task_runner.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
+#include "base/test/bind_test_util.h"
+#include "base/test/scoped_feature_list.h"
#include "base/threading/thread_task_runner_handle.h"
+#include "base/time/default_tick_clock.h"
#include "base/values.h"
+#include "net/base/features.h"
#include "net/base/ip_address.h"
#include "net/http/http_network_session.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/http/http_server_properties.h"
+#include "net/test/test_with_task_environment.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
@@ -34,37 +40,77 @@ using ::testing::Invoke;
using ::testing::Mock;
using ::testing::StrictMock;
-class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate {
+enum class NetworkIsolationKeyMode {
+ kDisabled,
+ kTopFrameOriginOnly,
+ kTopFrameOriginAndFrameOrigin,
+};
+
+const NetworkIsolationKeyMode kNetworkIsolationKeyModes[] = {
+ NetworkIsolationKeyMode::kDisabled,
+ NetworkIsolationKeyMode::kTopFrameOriginOnly,
+ NetworkIsolationKeyMode::kTopFrameOriginAndFrameOrigin,
+};
+
+std::unique_ptr<base::test::ScopedFeatureList> SetNetworkIsolationKeyMode(
+ NetworkIsolationKeyMode mode) {
+ auto feature_list = std::make_unique<base::test::ScopedFeatureList>();
+ switch (mode) {
+ case NetworkIsolationKeyMode::kDisabled:
+ feature_list->InitAndDisableFeature(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
+ break;
+ case NetworkIsolationKeyMode::kTopFrameOriginOnly:
+ feature_list->InitWithFeatures(
+ // enabled_features
+ {features::kPartitionHttpServerPropertiesByNetworkIsolationKey},
+ // disabled_features
+ {features::kAppendFrameOriginToNetworkIsolationKey});
+ break;
+ case NetworkIsolationKeyMode::kTopFrameOriginAndFrameOrigin:
+ feature_list->InitWithFeatures(
+ // enabled_features
+ {features::kPartitionHttpServerPropertiesByNetworkIsolationKey,
+ features::kAppendFrameOriginToNetworkIsolationKey},
+ // disabled_features
+ {});
+ break;
+ }
+ return feature_list;
+}
+
+class MockPrefDelegate : public net::HttpServerProperties::PrefDelegate {
public:
MockPrefDelegate() = default;
~MockPrefDelegate() override = default;
- // HttpServerPropertiesManager::PrefDelegate implementation.
+ // HttpServerProperties::PrefDelegate implementation.
const base::DictionaryValue* GetServerProperties() const override {
return &prefs_;
}
+
void SetServerProperties(const base::DictionaryValue& value,
base::OnceClosure callback) override {
prefs_.Clear();
prefs_.MergeDictionary(&value);
++num_pref_updates_;
if (!prefs_changed_callback_.is_null())
- prefs_changed_callback_.Run();
+ std::move(prefs_changed_callback_).Run();
if (!extra_prefs_changed_callback_.is_null())
extra_prefs_changed_callback_.Run();
set_properties_callback_ = std::move(callback);
}
- void StartListeningForUpdates(const base::Closure& callback) override {
+
+ void WaitForPrefLoad(base::OnceClosure callback) override {
CHECK(prefs_changed_callback_.is_null());
- prefs_changed_callback_ = callback;
+ prefs_changed_callback_ = std::move(callback);
}
- void SetPrefs(const base::DictionaryValue& value) {
- // prefs_ = value;
+ void InitializePrefs(const base::DictionaryValue& value) {
+ ASSERT_FALSE(prefs_changed_callback_.is_null());
prefs_.Clear();
prefs_.MergeDictionary(&value);
- if (!prefs_changed_callback_.is_null())
- prefs_changed_callback_.Run();
+ std::move(prefs_changed_callback_).Run();
}
int GetAndClearNumPrefUpdates() {
@@ -87,7 +133,7 @@ class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate {
private:
base::DictionaryValue prefs_;
- base::Closure prefs_changed_callback_;
+ base::OnceClosure prefs_changed_callback_;
base::Closure extra_prefs_changed_callback_;
int num_pref_updates_ = 0;
@@ -96,14 +142,86 @@ class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate {
DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate);
};
+// Converts |server_info_map| to a base::Value by running it through an
+// HttpServerPropertiesManager. Other fields are left empty.
+base::Value ServerInfoMapToValue(
+ const HttpServerProperties::ServerInfoMap& server_info_map) {
+ std::unique_ptr<MockPrefDelegate> pref_delegate =
+ std::make_unique<MockPrefDelegate>();
+ MockPrefDelegate* unowned_pref_delegate = pref_delegate.get();
+ // Callback that shouldn't be invoked - this method short-circuits loading
+ // prefs by calling HttpServerPropertiesManager::WriteToPrefs() before prefs
+ // are loaded.
+ HttpServerPropertiesManager::OnPrefsLoadedCallback on_prefs_loaded_callback =
+ base::BindOnce(
+ [](std::unique_ptr<HttpServerProperties::ServerInfoMap>
+ server_info_map,
+ const IPAddress& last_quic_address,
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map,
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services) { ADD_FAILURE(); });
+ HttpServerPropertiesManager manager(
+ std::move(pref_delegate), std::move(on_prefs_loaded_callback),
+ 10 /* max_server_configs_stored_in_properties */, nullptr /* net_log */,
+ base::DefaultTickClock::GetInstance());
+ manager.WriteToPrefs(
+ server_info_map, HttpServerPropertiesManager::GetCannonicalSuffix(),
+ IPAddress() /* last_quic_address */, QuicServerInfoMap(10),
+ BrokenAlternativeServiceList(), RecentlyBrokenAlternativeServices(10),
+ base::OnceClosure());
+
+ return unowned_pref_delegate->GetServerProperties()->Clone();
+}
+
+// Does the inverse of ServerInfoMapToValue(). Ignores fields other than the
+// ServerInfoMap.
+std::unique_ptr<HttpServerProperties::ServerInfoMap> ValueToServerInfoMap(
+ const base::Value& value) {
+ const base::DictionaryValue* dictionary_value;
+ if (!value.GetAsDictionary(&dictionary_value))
+ return nullptr;
+
+ std::unique_ptr<MockPrefDelegate> pref_delegate =
+ std::make_unique<MockPrefDelegate>();
+ MockPrefDelegate* unowned_pref_delegate = pref_delegate.get();
+
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> out;
+ bool callback_invoked = false;
+ HttpServerPropertiesManager::OnPrefsLoadedCallback on_prefs_loaded_callback =
+ base::BindLambdaForTesting(
+ [&](std::unique_ptr<HttpServerProperties::ServerInfoMap>
+ server_info_map,
+ const IPAddress& last_quic_address,
+ std::unique_ptr<QuicServerInfoMap> quic_server_info_map,
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services) {
+ ASSERT_FALSE(callback_invoked);
+ callback_invoked = true;
+ out = std::move(server_info_map);
+ });
+
+ HttpServerPropertiesManager manager(
+ std::move(pref_delegate), std::move(on_prefs_loaded_callback),
+ 10 /* max_server_configs_stored_in_properties */, nullptr /* net_log */,
+ base::DefaultTickClock::GetInstance());
+
+ unowned_pref_delegate->InitializePrefs(*dictionary_value);
+ EXPECT_TRUE(callback_invoked);
+ return out;
+}
+
} // namespace
class HttpServerPropertiesManagerTest : public testing::Test,
- public WithScopedTaskEnvironment {
+ public WithTaskEnvironment {
protected:
HttpServerPropertiesManagerTest()
- : WithScopedTaskEnvironment(
- base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
+ : WithTaskEnvironment(
+ base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
void SetUp() override {
one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1);
@@ -111,30 +229,53 @@ class HttpServerPropertiesManagerTest : public testing::Test,
HttpNetworkSession::Params().quic_params.supported_versions;
pref_delegate_ = new MockPrefDelegate;
- http_server_props_manager_ = std::make_unique<HttpServerPropertiesManager>(
+ http_server_props_ = std::make_unique<HttpServerProperties>(
base::WrapUnique(pref_delegate_), /*net_log=*/nullptr,
GetMockTickClock());
- EXPECT_FALSE(http_server_props_manager_->IsInitialized());
- pref_delegate_->SetPrefs(base::DictionaryValue());
- EXPECT_TRUE(http_server_props_manager_->IsInitialized());
+ EXPECT_FALSE(http_server_props_->IsInitialized());
EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
}
+ // Wrapper around |pref_delegate_|'s InitializePrefs() method that has a
+ // couple extra expectations about whether any tasks are posted, and if a pref
+ // update is queued.
+ //
+ // |expect_pref_update| should be true if a pref update is expected to be
+ // queued in response to the load.
+ void InitializePrefs(
+ const base::DictionaryValue& dict = base::DictionaryValue(),
+ bool expect_pref_update = false) {
+ EXPECT_FALSE(http_server_props_->IsInitialized());
+ pref_delegate_->InitializePrefs(dict);
+ EXPECT_TRUE(http_server_props_->IsInitialized());
+ if (!expect_pref_update) {
+ EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+ } else {
+ EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+ FastForwardUntilNoTasksRemain();
+ EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
+ }
+ }
+
void TearDown() override {
// Run pending non-delayed tasks but don't FastForwardUntilNoTasksRemain()
// as some delayed tasks may forever repost (e.g. because impl doesn't use a
// mock clock and doesn't see timings as having expired, ref.
- // HttpServerPropertiesImpl::
+ // HttpServerProperties::
// ScheduleBrokenAlternateProtocolMappingsExpiration()).
base::RunLoop().RunUntilIdle();
- http_server_props_manager_.reset();
+ http_server_props_.reset();
}
- bool HasAlternativeService(const url::SchemeHostPort& server) {
+ bool HasAlternativeService(const url::SchemeHostPort& server,
+ const NetworkIsolationKey& network_isolation_key) {
const AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_props_manager_->GetAlternativeServiceInfos(server);
+ http_server_props_->GetAlternativeServiceInfos(server,
+ network_isolation_key);
return !alternative_service_info_vector.empty();
}
@@ -146,7 +287,7 @@ class HttpServerPropertiesManagerTest : public testing::Test,
}
MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager.
- std::unique_ptr<HttpServerPropertiesManager> http_server_props_manager_;
+ std::unique_ptr<HttpServerProperties> http_server_props_;
base::Time one_day_from_now_;
quic::ParsedQuicVersionVector advertised_versions_;
@@ -154,177 +295,6 @@ class HttpServerPropertiesManagerTest : public testing::Test,
DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest);
};
-TEST_F(HttpServerPropertiesManagerTest,
- SingleUpdateForTwoSpdyServerPrefChanges) {
- // Set up the prefs for https://www.google.com and https://mail.google.com and
- // then set it twice. Only expect a single cache update.
-
- auto server_pref_dict = std::make_unique<base::DictionaryValue>();
- url::SchemeHostPort google_server("https", "www.google.com", 443);
- url::SchemeHostPort mail_server("https", "mail.google.com", 443);
-
- // Set supports_spdy for https://www.google.com:443.
- server_pref_dict->SetBoolean("supports_spdy", true);
-
- // Set up alternative_services for https://www.google.com.
- auto alternative_service_dict0 = std::make_unique<base::DictionaryValue>();
- alternative_service_dict0->SetInteger("port", 443);
- alternative_service_dict0->SetString("protocol_str", "h2");
- auto alternative_service_dict1 = std::make_unique<base::DictionaryValue>();
- alternative_service_dict1->SetInteger("port", 1234);
- alternative_service_dict1->SetString("protocol_str", "quic");
- auto alternative_service_list0 = std::make_unique<base::ListValue>();
- alternative_service_list0->Append(std::move(alternative_service_dict0));
- alternative_service_list0->Append(std::move(alternative_service_dict1));
- server_pref_dict->SetWithoutPathExpansion(
- "alternative_service", std::move(alternative_service_list0));
-
- // Set up ServerNetworkStats for https://www.google.com.
- auto stats = std::make_unique<base::DictionaryValue>();
- stats->SetInteger("srtt", 10);
- server_pref_dict->SetWithoutPathExpansion("network_stats", std::move(stats));
-
- // Set the server preference for https://www.google.com.
- auto servers_dict = std::make_unique<base::DictionaryValue>();
- servers_dict->SetWithoutPathExpansion("https://www.google.com",
- std::move(server_pref_dict));
- auto servers_list = std::make_unique<base::ListValue>();
- servers_list->Append(std::move(servers_dict));
- servers_dict = std::make_unique<base::DictionaryValue>();
-
- // Set the preference for mail.google.com server.
- auto server_pref_dict1 = std::make_unique<base::DictionaryValue>();
-
- // Set supports_spdy for https://mail.google.com.
- server_pref_dict1->SetBoolean("supports_spdy", true);
-
- // Set up alternative_services for https://mail.google.com.
- auto alternative_service_dict2 = std::make_unique<base::DictionaryValue>();
- alternative_service_dict2->SetString("protocol_str", "h2");
- alternative_service_dict2->SetInteger("port", 444);
- auto alternative_service_list1 = std::make_unique<base::ListValue>();
- alternative_service_list1->Append(std::move(alternative_service_dict2));
- server_pref_dict1->SetWithoutPathExpansion(
- "alternative_service", std::move(alternative_service_list1));
-
- // Set up ServerNetworkStats for https://mail.google.com and it is the MRU
- // server.
- auto stats1 = std::make_unique<base::DictionaryValue>();
- stats1->SetInteger("srtt", 20);
- server_pref_dict1->SetWithoutPathExpansion("network_stats",
- std::move(stats1));
- // Set the server preference for https://mail.google.com.
- servers_dict->SetWithoutPathExpansion("https://mail.google.com",
- std::move(server_pref_dict1));
- servers_list->Append(std::move(servers_dict));
- base::DictionaryValue http_server_properties_dict = DictWithVersion();
- http_server_properties_dict.SetWithoutPathExpansion("servers",
- std::move(servers_list));
- auto supports_quic = std::make_unique<base::DictionaryValue>();
- supports_quic->SetBoolean("used_quic", true);
- supports_quic->SetString("address", "127.0.0.1");
- http_server_properties_dict.SetWithoutPathExpansion("supports_quic",
- std::move(supports_quic));
-
- // Set quic_server_info for https://www.google.com, https://mail.google.com
- // and https://play.google.com and verify the MRU.
- http_server_props_manager_->SetMaxServerConfigsStoredInProperties(3);
- auto quic_servers_dict = std::make_unique<base::DictionaryValue>();
- auto quic_server_pref_dict1 = std::make_unique<base::DictionaryValue>();
- std::string quic_server_info1("quic_server_info1");
- quic_server_pref_dict1->SetKey("server_info", base::Value(quic_server_info1));
- auto quic_server_pref_dict2 = std::make_unique<base::DictionaryValue>();
- std::string quic_server_info2("quic_server_info2");
- quic_server_pref_dict2->SetKey("server_info", base::Value(quic_server_info2));
- auto quic_server_pref_dict3 = std::make_unique<base::DictionaryValue>();
- std::string quic_server_info3("quic_server_info3");
- quic_server_pref_dict3->SetKey("server_info", base::Value(quic_server_info3));
- // Set the quic_server_info1 for https://www.google.com.
- quic::QuicServerId google_quic_server_id("www.google.com", 443, false);
- quic_servers_dict->SetWithoutPathExpansion("https://www.google.com",
- std::move(quic_server_pref_dict1));
- // Set the quic_server_info2 for https://mail.google.com.
- quic::QuicServerId mail_quic_server_id("mail.google.com", 443, false);
- quic_servers_dict->SetWithoutPathExpansion("https://mail.google.com",
- std::move(quic_server_pref_dict2));
- // Set the quic_server_info3 for https://play.google.com.
- quic::QuicServerId play_quic_server_id("play.google.com", 443, false);
- quic_servers_dict->SetWithoutPathExpansion("https://play.google.com",
- std::move(quic_server_pref_dict3));
- http_server_properties_dict.SetWithoutPathExpansion(
- "quic_servers", std::move(quic_servers_dict));
-
- // Set the same value for kHttpServerProperties multiple times.
- pref_delegate_->SetPrefs(http_server_properties_dict);
- pref_delegate_->SetPrefs(http_server_properties_dict);
-
- // Should be a delayed task to update the cache from the prefs file.
- EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- FastForwardUntilNoTasksRemain();
-
- // Verify SupportsSpdy.
- EXPECT_TRUE(
- http_server_props_manager_->SupportsRequestPriority(google_server));
- EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(mail_server));
- HostPortPair foo_host_port_pair =
- HostPortPair::FromString("foo.google.com:1337");
- url::SchemeHostPort foo_server("http", foo_host_port_pair.host(),
- foo_host_port_pair.port());
-
- EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority(foo_server));
-
- // Verify alternative service.
- const AlternativeServiceMap& map =
- http_server_props_manager_->alternative_service_map();
- ASSERT_EQ(2u, map.size());
-
- auto map_it = map.begin();
- EXPECT_EQ("www.google.com", map_it->first.host());
- ASSERT_EQ(2u, map_it->second.size());
- EXPECT_EQ(kProtoHTTP2, map_it->second[0].alternative_service().protocol);
- EXPECT_TRUE(map_it->second[0].alternative_service().host.empty());
- EXPECT_EQ(443, map_it->second[0].alternative_service().port);
- EXPECT_EQ(kProtoQUIC, map_it->second[1].alternative_service().protocol);
- EXPECT_TRUE(map_it->second[1].alternative_service().host.empty());
- EXPECT_EQ(1234, map_it->second[1].alternative_service().port);
- ++map_it;
- EXPECT_EQ("mail.google.com", map_it->first.host());
- ASSERT_EQ(1u, map_it->second.size());
- EXPECT_EQ(kProtoHTTP2, map_it->second[0].alternative_service().protocol);
- EXPECT_TRUE(map_it->second[0].alternative_service().host.empty());
- EXPECT_EQ(444, map_it->second[0].alternative_service().port);
-
- // Verify SupportsQuic.
- IPAddress last_address;
- EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&last_address));
- EXPECT_EQ("127.0.0.1", last_address.ToString());
-
- // Verify ServerNetworkStats.
- const ServerNetworkStats* stats2 =
- http_server_props_manager_->GetServerNetworkStats(google_server);
- EXPECT_EQ(10, stats2->srtt.ToInternalValue());
- const ServerNetworkStats* stats3 =
- http_server_props_manager_->GetServerNetworkStats(mail_server);
- EXPECT_EQ(20, stats3->srtt.ToInternalValue());
-
- // Verify QuicServerInfo.
- EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
- google_quic_server_id));
- EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo(
- mail_quic_server_id));
- EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo(
- play_quic_server_id));
-
- // Verify the MRU order.
- http_server_props_manager_->SetMaxServerConfigsStoredInProperties(2);
- EXPECT_EQ(nullptr, http_server_props_manager_->GetQuicServerInfo(
- google_quic_server_id));
- EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo(
- mail_quic_server_id));
- EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo(
- play_quic_server_id));
-}
-
TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) {
auto server_pref_dict = std::make_unique<base::DictionaryValue>();
@@ -367,13 +337,7 @@ TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) {
"quic_servers", std::move(quic_servers_dict));
// Set up the pref.
- pref_delegate_->SetPrefs(http_server_properties_dict);
-
- EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- FastForwardUntilNoTasksRemain();
- // Prefs should have been overwritten, due to the bad data.
- EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
+ InitializePrefs(http_server_properties_dict);
// Verify that nothing is set.
HostPortPair google_host_port_pair =
@@ -381,13 +345,13 @@ TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) {
url::SchemeHostPort gooler_server("http", google_host_port_pair.host(),
google_host_port_pair.port());
- EXPECT_FALSE(
- http_server_props_manager_->SupportsRequestPriority(gooler_server));
- EXPECT_FALSE(HasAlternativeService(gooler_server));
- const ServerNetworkStats* stats1 =
- http_server_props_manager_->GetServerNetworkStats(gooler_server);
+ EXPECT_FALSE(http_server_props_->SupportsRequestPriority(
+ gooler_server, NetworkIsolationKey()));
+ EXPECT_FALSE(HasAlternativeService(gooler_server, NetworkIsolationKey()));
+ const ServerNetworkStats* stats1 = http_server_props_->GetServerNetworkStats(
+ gooler_server, NetworkIsolationKey());
EXPECT_EQ(nullptr, stats1);
- EXPECT_EQ(0u, http_server_props_manager_->quic_server_info_map().size());
+ EXPECT_EQ(0u, http_server_props_->quic_server_info_map().size());
}
TEST_F(HttpServerPropertiesManagerTest, BadCachedAltProtocolPort) {
@@ -415,29 +379,26 @@ TEST_F(HttpServerPropertiesManagerTest, BadCachedAltProtocolPort) {
http_server_properties_dict.SetWithoutPathExpansion(
"servers", std::move(servers_list));
- // Set up the pref.
- pref_delegate_->SetPrefs(http_server_properties_dict);
+ // Set up the pref.
+ InitializePrefs(http_server_properties_dict);
- EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- FastForwardUntilNoTasksRemain();
- // Prefs should have been overwritten, due to the bad data.
- EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
-
- // Verify alternative service is not set.
- EXPECT_FALSE(
- HasAlternativeService(url::SchemeHostPort("http", "www.google.com", 80)));
+ // Verify alternative service is not set.
+ EXPECT_FALSE(
+ HasAlternativeService(url::SchemeHostPort("http", "www.google.com", 80),
+ NetworkIsolationKey()));
}
TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) {
+ InitializePrefs();
+
// Add mail.google.com:443 as a supporting spdy server.
url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
- EXPECT_FALSE(
- http_server_props_manager_->SupportsRequestPriority(spdy_server));
- http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+ EXPECT_FALSE(http_server_props_->SupportsRequestPriority(
+ spdy_server, NetworkIsolationKey()));
+ http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true);
// Setting the value to the same thing again should not trigger another pref
// update.
- http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+ http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true);
// Run the task.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -447,11 +408,12 @@ TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) {
// Setting the value to the same thing again should not trigger another pref
// update.
- http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+ http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true);
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
- EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
+ EXPECT_TRUE(http_server_props_->SupportsRequestPriority(
+ spdy_server, NetworkIsolationKey()));
}
// Regression test for crbug.com/670519. Test that there is only one pref update
@@ -460,23 +422,26 @@ TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) {
// completed.
TEST_F(HttpServerPropertiesManagerTest,
SinglePrefUpdateForTwoSpdyServerCacheChanges) {
+ InitializePrefs();
+
// Post an update task. SetSupportsSpdy calls ScheduleUpdatePrefs with a delay
// of 60ms.
url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
- EXPECT_FALSE(
- http_server_props_manager_->SupportsRequestPriority(spdy_server));
- http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+ EXPECT_FALSE(http_server_props_->SupportsRequestPriority(
+ spdy_server, NetworkIsolationKey()));
+ http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true);
// The pref update task should be scheduled.
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
// Move forward the task runner short by 20ms.
- FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() -
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting() -
base::TimeDelta::FromMilliseconds(20));
// Set another spdy server to trigger another call to
// ScheduleUpdatePrefs. There should be no new update posted.
url::SchemeHostPort spdy_server2("https", "drive.google.com", 443);
- http_server_props_manager_->SetSupportsSpdy(spdy_server2, true);
+ http_server_props_->SetSupportsSpdy(spdy_server2, NetworkIsolationKey(),
+ true);
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
// Move forward the extra 20ms. The pref update should be executed.
@@ -485,14 +450,16 @@ TEST_F(HttpServerPropertiesManagerTest,
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
- EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
- EXPECT_TRUE(
- http_server_props_manager_->SupportsRequestPriority(spdy_server2));
+ EXPECT_TRUE(http_server_props_->SupportsRequestPriority(
+ spdy_server, NetworkIsolationKey()));
+ EXPECT_TRUE(http_server_props_->SupportsRequestPriority(
+ spdy_server2, NetworkIsolationKey()));
// Set the third spdy server to trigger one more call to
// ScheduleUpdatePrefs. A new update task should be posted now since the
// previous one is completed.
url::SchemeHostPort spdy_server3("https", "maps.google.com", 443);
- http_server_props_manager_->SetSupportsSpdy(spdy_server3, true);
+ http_server_props_->SetSupportsSpdy(spdy_server3, NetworkIsolationKey(),
+ true);
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
// Run the task.
@@ -502,15 +469,19 @@ TEST_F(HttpServerPropertiesManagerTest,
}
TEST_F(HttpServerPropertiesManagerTest, GetAlternativeServiceInfos) {
+ InitializePrefs();
+
url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
443);
- http_server_props_manager_->SetHttp2AlternativeService(
- spdy_server_mail, alternative_service, one_day_from_now_);
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
// ExpectScheduleUpdatePrefs() should be called only once.
- http_server_props_manager_->SetHttp2AlternativeService(
- spdy_server_mail, alternative_service, one_day_from_now_);
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
// Run the task.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -519,15 +490,18 @@ TEST_F(HttpServerPropertiesManagerTest, GetAlternativeServiceInfos) {
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service,
alternative_service_info_vector[0].alternative_service());
}
TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) {
+ InitializePrefs();
+
url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
AlternativeServiceInfoVector alternative_service_info_vector;
const AlternativeService alternative_service1(kProtoHTTP2, "mail.google.com",
443);
@@ -539,11 +513,11 @@ TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) {
alternative_service_info_vector.push_back(
AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
alternative_service2, one_day_from_now_, advertised_versions_));
- http_server_props_manager_->SetAlternativeServices(
- spdy_server_mail, alternative_service_info_vector);
+ http_server_props_->SetAlternativeServices(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service_info_vector);
// ExpectScheduleUpdatePrefs() should be called only once.
- http_server_props_manager_->SetAlternativeServices(
- spdy_server_mail, alternative_service_info_vector);
+ http_server_props_->SetAlternativeServices(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service_info_vector);
// Run the task.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -551,7 +525,8 @@ TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) {
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
AlternativeServiceInfoVector alternative_service_info_vector2 =
- http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
ASSERT_EQ(2u, alternative_service_info_vector2.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector2[0].alternative_service());
@@ -560,50 +535,55 @@ TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) {
}
TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServicesEmpty) {
+ InitializePrefs();
+
url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
443);
- http_server_props_manager_->SetAlternativeServices(
- spdy_server_mail, AlternativeServiceInfoVector());
+ http_server_props_->SetAlternativeServices(
+ spdy_server_mail, NetworkIsolationKey(), AlternativeServiceInfoVector());
EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
}
TEST_F(HttpServerPropertiesManagerTest, ConfirmAlternativeService) {
+ InitializePrefs();
+
url::SchemeHostPort spdy_server_mail;
AlternativeService alternative_service;
spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
- http_server_props_manager_->SetHttp2AlternativeService(
- spdy_server_mail, alternative_service, one_day_from_now_);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
- http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service);
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->MarkAlternativeServiceBroken(alternative_service);
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
// In addition to the pref update task, there's now a task to mark the
// alternative service as no longer broken.
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
- http_server_props_manager_->ConfirmAlternativeService(alternative_service);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->ConfirmAlternativeService(alternative_service);
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -613,46 +593,147 @@ TEST_F(HttpServerPropertiesManagerTest, ConfirmAlternativeService) {
FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
}
+// Check the case that prefs are loaded only after setting alternative service
+// info. Prefs should not be written until after the load happens.
+TEST_F(HttpServerPropertiesManagerTest, LateLoadAlternativeServiceInfo) {
+ url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
+ const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
+ 443);
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
+
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+ EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+
+ AlternativeServiceInfoVector alternative_service_info_vector =
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
+ ASSERT_EQ(1u, alternative_service_info_vector.size());
+ EXPECT_EQ(alternative_service,
+ alternative_service_info_vector[0].alternative_service());
+
+ // Initializing prefs does not result in a task to write the prefs.
+ InitializePrefs(base::DictionaryValue(), true /* expect_pref_update */);
+ alternative_service_info_vector =
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
+ EXPECT_EQ(1u, alternative_service_info_vector.size());
+
+ // Updating the entry should result in a task to save prefs. Have to at least
+ // double (or half) the lifetime, to ensure the change triggers a save to
+ // prefs.
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_ + base::TimeDelta::FromDays(2));
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+ EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
+ FastForwardUntilNoTasksRemain();
+ EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
+ alternative_service_info_vector =
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
+ EXPECT_EQ(1u, alternative_service_info_vector.size());
+}
+
+// Check the case that prefs are cleared before they're loaded.
+TEST_F(HttpServerPropertiesManagerTest,
+ ClearPrefsBeforeLoadAlternativeServiceInfo) {
+ url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
+ const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
+ 443);
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
+
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+ EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
+ FastForwardUntilNoTasksRemain();
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+
+ AlternativeServiceInfoVector alternative_service_info_vector =
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
+ ASSERT_EQ(1u, alternative_service_info_vector.size());
+ EXPECT_EQ(alternative_service,
+ alternative_service_info_vector[0].alternative_service());
+
+ // Clearing prefs should result in a task to write the prefs.
+ bool callback_invoked_ = false;
+ http_server_props_->Clear(base::BindOnce(
+ [](bool* callback_invoked) {
+ EXPECT_FALSE(*callback_invoked);
+ *callback_invoked = true;
+ },
+ &callback_invoked_));
+ EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
+ EXPECT_FALSE(callback_invoked_);
+ std::move(pref_delegate_->GetSetPropertiesCallback()).Run();
+ EXPECT_TRUE(callback_invoked_);
+ alternative_service_info_vector =
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
+ EXPECT_EQ(0u, alternative_service_info_vector.size());
+
+ // Re-creating the entry should result in a task to save prefs.
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+ EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
+ FastForwardUntilNoTasksRemain();
+ EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
+ alternative_service_info_vector =
+ http_server_props_->GetAlternativeServiceInfos(spdy_server_mail,
+ NetworkIsolationKey());
+ EXPECT_EQ(1u, alternative_service_info_vector.size());
+}
+
TEST_F(HttpServerPropertiesManagerTest,
ConfirmBrokenUntilDefaultNetworkChanges) {
+ InitializePrefs();
+
url::SchemeHostPort spdy_server_mail;
AlternativeService alternative_service;
spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
- http_server_props_manager_->SetHttp2AlternativeService(
- spdy_server_mail, alternative_service, one_day_from_now_);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
- http_server_props_manager_
- ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- alternative_service);
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
+ alternative_service);
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
// In addition to the pref update task, there's now a task to mark the
// alternative service as no longer broken.
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
- http_server_props_manager_->ConfirmAlternativeService(alternative_service);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->ConfirmAlternativeService(alternative_service);
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -662,46 +743,48 @@ TEST_F(HttpServerPropertiesManagerTest,
FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
}
TEST_F(HttpServerPropertiesManagerTest,
OnDefaultNetworkChangedWithBrokenUntilDefaultNetworkChanges) {
+ InitializePrefs();
+
url::SchemeHostPort spdy_server_mail;
AlternativeService alternative_service;
spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
- http_server_props_manager_->SetHttp2AlternativeService(
- spdy_server_mail, alternative_service, one_day_from_now_);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
- http_server_props_manager_
- ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
- alternative_service);
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
+ alternative_service);
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
// In addition to the pref update task, there's now a task to mark the
// alternative service as no longer broken.
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
- http_server_props_manager_->OnDefaultNetworkChanged();
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->OnDefaultNetworkChanged();
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -711,43 +794,46 @@ TEST_F(HttpServerPropertiesManagerTest,
FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
}
TEST_F(HttpServerPropertiesManagerTest, OnDefaultNetworkChangedWithBrokenOnly) {
+ InitializePrefs();
+
url::SchemeHostPort spdy_server_mail;
AlternativeService alternative_service;
spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80);
- EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
+ EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey()));
alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
- http_server_props_manager_->SetHttp2AlternativeService(
- spdy_server_mail, alternative_service, one_day_from_now_);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->SetHttp2AlternativeService(
+ spdy_server_mail, NetworkIsolationKey(), alternative_service,
+ one_day_from_now_);
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
- http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service);
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->MarkAlternativeServiceBroken(alternative_service);
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
// In addition to the pref update task, there's now a task to mark the
// alternative service as no longer broken.
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
- http_server_props_manager_->OnDefaultNetworkChanged();
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ http_server_props_->OnDefaultNetworkChanged();
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -757,20 +843,22 @@ TEST_F(HttpServerPropertiesManagerTest, OnDefaultNetworkChangedWithBrokenOnly) {
FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- alternative_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(alternative_service));
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
alternative_service));
}
TEST_F(HttpServerPropertiesManagerTest, SupportsQuic) {
+ InitializePrefs();
+
IPAddress address;
- EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address));
+ EXPECT_FALSE(http_server_props_->GetSupportsQuic(&address));
IPAddress actual_address(127, 0, 0, 1);
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ http_server_props_->SetSupportsQuic(true, actual_address);
// Another task should not be scheduled.
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ http_server_props_->SetSupportsQuic(true, actual_address);
// Run the task.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -778,25 +866,29 @@ TEST_F(HttpServerPropertiesManagerTest, SupportsQuic) {
FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
+ EXPECT_TRUE(http_server_props_->GetSupportsQuic(&address));
EXPECT_EQ(actual_address, address);
// Another task should not be scheduled.
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ http_server_props_->SetSupportsQuic(true, actual_address);
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
}
TEST_F(HttpServerPropertiesManagerTest, ServerNetworkStats) {
+ InitializePrefs();
+
url::SchemeHostPort mail_server("http", "mail.google.com", 80);
- const ServerNetworkStats* stats =
- http_server_props_manager_->GetServerNetworkStats(mail_server);
+ const ServerNetworkStats* stats = http_server_props_->GetServerNetworkStats(
+ mail_server, NetworkIsolationKey());
EXPECT_EQ(nullptr, stats);
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(10);
- http_server_props_manager_->SetServerNetworkStats(mail_server, stats1);
+ http_server_props_->SetServerNetworkStats(mail_server, NetworkIsolationKey(),
+ stats1);
// Another task should not be scheduled.
- http_server_props_manager_->SetServerNetworkStats(mail_server, stats1);
+ http_server_props_->SetServerNetworkStats(mail_server, NetworkIsolationKey(),
+ stats1);
// Run the task.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -805,15 +897,17 @@ TEST_F(HttpServerPropertiesManagerTest, ServerNetworkStats) {
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
// Another task should not be scheduled.
- http_server_props_manager_->SetServerNetworkStats(mail_server, stats1);
+ http_server_props_->SetServerNetworkStats(mail_server, NetworkIsolationKey(),
+ stats1);
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_EQ(GetPendingMainThreadTaskCount(), 0u);
- const ServerNetworkStats* stats2 =
- http_server_props_manager_->GetServerNetworkStats(mail_server);
+ const ServerNetworkStats* stats2 = http_server_props_->GetServerNetworkStats(
+ mail_server, NetworkIsolationKey());
EXPECT_EQ(10, stats2->srtt.ToInternalValue());
- http_server_props_manager_->ClearServerNetworkStats(mail_server);
+ http_server_props_->ClearServerNetworkStats(mail_server,
+ NetworkIsolationKey());
// Run the task.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -821,20 +915,20 @@ TEST_F(HttpServerPropertiesManagerTest, ServerNetworkStats) {
FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_EQ(nullptr,
- http_server_props_manager_->GetServerNetworkStats(mail_server));
+ EXPECT_EQ(nullptr, http_server_props_->GetServerNetworkStats(
+ mail_server, NetworkIsolationKey()));
}
TEST_F(HttpServerPropertiesManagerTest, QuicServerInfo) {
+ InitializePrefs();
+
quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
EXPECT_EQ(nullptr,
- http_server_props_manager_->GetQuicServerInfo(mail_quic_server_id));
+ http_server_props_->GetQuicServerInfo(mail_quic_server_id));
std::string quic_server_info1("quic_server_info1");
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
// Another task should not be scheduled.
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
// Run the task.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -842,17 +936,18 @@ TEST_F(HttpServerPropertiesManagerTest, QuicServerInfo) {
FastForwardUntilNoTasksRemain();
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
- mail_quic_server_id));
+ EXPECT_EQ(quic_server_info1,
+ *http_server_props_->GetQuicServerInfo(mail_quic_server_id));
// Another task should not be scheduled.
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
}
TEST_F(HttpServerPropertiesManagerTest, Clear) {
+ InitializePrefs();
+
const url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
const IPAddress actual_address(127, 0, 0, 1);
const quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
@@ -869,95 +964,98 @@ TEST_F(HttpServerPropertiesManagerTest, Clear) {
alt_svc_info_vector.push_back(
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
broken_alternative_service, one_day_from_now_));
- http_server_props_manager_->SetAlternativeServices(spdy_server,
- alt_svc_info_vector);
+ http_server_props_->SetAlternativeServices(spdy_server, NetworkIsolationKey(),
+ alt_svc_info_vector);
- http_server_props_manager_->MarkAlternativeServiceBroken(
- broken_alternative_service);
- http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ http_server_props_->MarkAlternativeServiceBroken(broken_alternative_service);
+ http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true);
+ http_server_props_->SetSupportsQuic(true, actual_address);
ServerNetworkStats stats;
stats.srtt = base::TimeDelta::FromMicroseconds(10);
- http_server_props_manager_->SetServerNetworkStats(spdy_server, stats);
+ http_server_props_->SetServerNetworkStats(spdy_server, NetworkIsolationKey(),
+ stats);
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
// Advance time by just enough so that the prefs update task is executed but
// not the task to expire the brokenness of |broken_alternative_service|.
- FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting());
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
EXPECT_NE(0u, GetPendingMainThreadTaskCount());
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
+ EXPECT_TRUE(http_server_props_->IsAlternativeServiceBroken(
broken_alternative_service));
- EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
- EXPECT_TRUE(HasAlternativeService(spdy_server));
+ EXPECT_TRUE(http_server_props_->SupportsRequestPriority(
+ spdy_server, NetworkIsolationKey()));
+ EXPECT_TRUE(HasAlternativeService(spdy_server, NetworkIsolationKey()));
IPAddress address;
- EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
+ EXPECT_TRUE(http_server_props_->GetSupportsQuic(&address));
EXPECT_EQ(actual_address, address);
- const ServerNetworkStats* stats1 =
- http_server_props_manager_->GetServerNetworkStats(spdy_server);
+ const ServerNetworkStats* stats1 = http_server_props_->GetServerNetworkStats(
+ spdy_server, NetworkIsolationKey());
EXPECT_EQ(10, stats1->srtt.ToInternalValue());
- EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
- mail_quic_server_id));
+ EXPECT_EQ(quic_server_info1,
+ *http_server_props_->GetQuicServerInfo(mail_quic_server_id));
// Clear http server data, which should instantly update prefs.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
bool callback_invoked_ = false;
- http_server_props_manager_->Clear(
- base::BindOnce([](bool* callback_invoked) { *callback_invoked = true; },
- &callback_invoked_));
+ http_server_props_->Clear(base::BindOnce(
+ [](bool* callback_invoked) {
+ EXPECT_FALSE(*callback_invoked);
+ *callback_invoked = true;
+ },
+ &callback_invoked_));
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_FALSE(callback_invoked_);
std::move(pref_delegate_->GetSetPropertiesCallback()).Run();
EXPECT_TRUE(callback_invoked_);
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+ EXPECT_FALSE(http_server_props_->IsAlternativeServiceBroken(
broken_alternative_service));
- EXPECT_FALSE(
- http_server_props_manager_->SupportsRequestPriority(spdy_server));
- EXPECT_FALSE(HasAlternativeService(spdy_server));
- EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address));
- const ServerNetworkStats* stats2 =
- http_server_props_manager_->GetServerNetworkStats(spdy_server);
+ EXPECT_FALSE(http_server_props_->SupportsRequestPriority(
+ spdy_server, NetworkIsolationKey()));
+ EXPECT_FALSE(HasAlternativeService(spdy_server, NetworkIsolationKey()));
+ EXPECT_FALSE(http_server_props_->GetSupportsQuic(&address));
+ const ServerNetworkStats* stats2 = http_server_props_->GetServerNetworkStats(
+ spdy_server, NetworkIsolationKey());
EXPECT_EQ(nullptr, stats2);
EXPECT_EQ(nullptr,
- http_server_props_manager_->GetQuicServerInfo(mail_quic_server_id));
+ http_server_props_->GetQuicServerInfo(mail_quic_server_id));
}
// https://crbug.com/444956: Add 200 alternative_service servers followed by
// supports_quic and verify we have read supports_quic from prefs.
TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) {
- auto servers_dict = std::make_unique<base::DictionaryValue>();
std::unique_ptr<base::ListValue> servers_list =
std::make_unique<base::ListValue>();
for (int i = 1; i <= 200; ++i) {
// Set up alternative_service for www.google.com:i.
- auto alternative_service_dict = std::make_unique<base::DictionaryValue>();
- alternative_service_dict->SetString("protocol_str", "quic");
- alternative_service_dict->SetInteger("port", i);
- auto alternative_service_list = std::make_unique<base::ListValue>();
- alternative_service_list->Append(std::move(alternative_service_dict));
- auto server_pref_dict = std::make_unique<base::DictionaryValue>();
- server_pref_dict->SetWithoutPathExpansion(
- "alternative_service", std::move(alternative_service_list));
- servers_dict->SetWithoutPathExpansion(
- StringPrintf("https://www.google.com:%d", i),
- std::move(server_pref_dict));
- servers_list->AppendIfNotPresent(std::move(servers_dict));
- servers_dict = std::make_unique<base::DictionaryValue>();
+ base::Value server_dict(base::Value::Type::DICTIONARY);
+ base::Value alternative_service_dict(base::Value::Type::DICTIONARY);
+ alternative_service_dict.SetStringKey("protocol_str", "quic");
+ alternative_service_dict.SetIntKey("port", i);
+ base::Value alternative_service_list(base::Value::Type::LIST);
+ alternative_service_list.GetList().emplace_back(
+ std::move(alternative_service_dict));
+ server_dict.SetKey("alternative_service",
+ std::move(alternative_service_list));
+ server_dict.SetStringKey("server",
+ StringPrintf("https://www.google.com:%d", i));
+ server_dict.SetKey("isolation", base::Value(base::Value::Type::LIST));
+ servers_list->GetList().emplace_back(std::move(server_dict));
}
// Set the server preference for http://mail.google.com server.
- auto server_pref_dict1 = std::make_unique<base::DictionaryValue>();
- servers_dict->SetWithoutPathExpansion("https://mail.google.com",
- std::move(server_pref_dict1));
- servers_list->AppendIfNotPresent(std::move(servers_dict));
- base::DictionaryValue http_server_properties_dict = DictWithVersion();
- http_server_properties_dict.SetWithoutPathExpansion(
- "servers", std::move(servers_list));
+ base::Value server_dict2(base::Value::Type::DICTIONARY);
+ server_dict2.SetStringKey("server", "https://mail.google.com");
+ server_dict2.SetKey("isolation", base::Value(base::Value::Type::LIST));
+ servers_list->GetList().emplace_back(std::move(server_dict2));
+
+ base::DictionaryValue http_server_properties_dict = DictWithVersion();
+ http_server_properties_dict.SetWithoutPathExpansion("servers",
+ std::move(servers_list));
// Set up SupportsQuic for 127.0.0.1
auto supports_quic = std::make_unique<base::DictionaryValue>();
@@ -967,8 +1065,7 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) {
std::move(supports_quic));
// Set up the pref.
- pref_delegate_->SetPrefs(http_server_properties_dict);
- FastForwardUntilNoTasksRemain();
+ InitializePrefs(http_server_properties_dict);
// Verify alternative service.
for (int i = 1; i <= 200; ++i) {
@@ -976,7 +1073,8 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) {
server_gurl = GURL(StringPrintf("https://www.google.com:%d", i));
url::SchemeHostPort server(server_gurl);
AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_props_manager_->GetAlternativeServiceInfos(server);
+ http_server_props_->GetAlternativeServiceInfos(server,
+ NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(
kProtoQUIC,
@@ -986,11 +1084,13 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) {
// Verify SupportsQuic.
IPAddress address;
- ASSERT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
+ ASSERT_TRUE(http_server_props_->GetSupportsQuic(&address));
EXPECT_EQ("127.0.0.1", address.ToString());
}
TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
+ InitializePrefs();
+
const url::SchemeHostPort server_www("https", "www.google.com", 80);
const url::SchemeHostPort server_mail("https", "mail.google.com", 80);
@@ -1010,40 +1110,41 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
alternative_service_info_vector.push_back(
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
www_alternative_service2, expiration2));
- ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
- server_www, alternative_service_info_vector));
+ http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(),
+ alternative_service_info_vector);
AlternativeService mail_alternative_service(kProtoHTTP2, "foo.google.com",
444);
base::Time expiration3 = base::Time::Max();
- ASSERT_TRUE(http_server_props_manager_->SetHttp2AlternativeService(
- server_mail, mail_alternative_service, expiration3));
+ http_server_props_->SetHttp2AlternativeService(
+ server_mail, NetworkIsolationKey(), mail_alternative_service,
+ expiration3);
- http_server_props_manager_->MarkAlternativeServiceBroken(
- www_alternative_service2);
- http_server_props_manager_->MarkAlternativeServiceRecentlyBroken(
+ http_server_props_->MarkAlternativeServiceBroken(www_alternative_service2);
+ http_server_props_->MarkAlternativeServiceRecentlyBroken(
mail_alternative_service);
// #3: Set SPDY server map
- http_server_props_manager_->SetSupportsSpdy(server_www, false);
- http_server_props_manager_->SetSupportsSpdy(server_mail, true);
- http_server_props_manager_->SetSupportsSpdy(
- url::SchemeHostPort("http", "not_persisted.com", 80), false);
+ http_server_props_->SetSupportsSpdy(server_www, NetworkIsolationKey(), false);
+ http_server_props_->SetSupportsSpdy(server_mail, NetworkIsolationKey(), true);
+ http_server_props_->SetSupportsSpdy(
+ url::SchemeHostPort("http", "not_persisted.com", 80),
+ NetworkIsolationKey(), false);
// #4: Set ServerNetworkStats.
ServerNetworkStats stats;
stats.srtt = base::TimeDelta::FromInternalValue(42);
- http_server_props_manager_->SetServerNetworkStats(server_mail, stats);
+ http_server_props_->SetServerNetworkStats(server_mail, NetworkIsolationKey(),
+ stats);
// #5: Set quic_server_info string.
quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
std::string quic_server_info1("quic_server_info1");
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
// #6: Set SupportsQuic.
IPAddress actual_address(127, 0, 0, 1);
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ http_server_props_->SetSupportsQuic(true, actual_address);
base::Time time_before_prefs_update = base::Time::Now();
@@ -1054,7 +1155,7 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
// |broken_alternative_service|.
EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
- FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting());
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1097,7 +1198,7 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
ASSERT_TRUE(base::StringToInt64(expiration_string, &expiration_int64));
base::TimeDelta expiration_delta =
base::TimeDelta::FromMinutes(5) -
- HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting();
+ HttpServerProperties::GetUpdatePrefsDelayForTesting();
time_t time_t_of_prefs_update = static_cast<time_t>(expiration_int64);
EXPECT_LE((time_before_prefs_update + expiration_delta).ToTimeT(),
time_t_of_prefs_update);
@@ -1116,18 +1217,20 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
"{\"https://mail.google.com:80\":"
"{\"server_info\":\"quic_server_info1\"}},"
"\"servers\":["
- "{\"https://www.google.com:80\":{"
- "\"alternative_service\":[{\"advertised_versions\":[],"
+ "{\"alternative_service\":[{\"advertised_versions\":[],"
"\"expiration\":\"13756212000000000\",\"port\":443,"
"\"protocol_str\":\"h2\"},"
"{\"advertised_versions\":[],\"expiration\":\"13758804000000000\","
- "\"host\":\"www.google.com\",\"port\":1234,\"protocol_str\":\"h2\"}]}},"
- "{\"https://mail.google.com:80\":{"
- "\"alternative_service\":[{\"advertised_versions\":[],"
+ "\"host\":\"www.google.com\",\"port\":1234,\"protocol_str\":\"h2\"}],"
+ "\"isolation\":[],"
+ "\"server\":\"https://www.google.com:80\"},"
+ "{\"alternative_service\":[{\"advertised_versions\":[],"
"\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\","
"\"port\":444,\"protocol_str\":\"h2\"}],"
+ "\"isolation\":[],"
"\"network_stats\":{\"srtt\":42},"
- "\"supports_spdy\":true}}],"
+ "\"server\":\"https://mail.google.com:80\","
+ "\"supports_spdy\":true}],"
"\"supports_quic\":{\"address\":\"127.0.0.1\",\"used_quic\":true},"
"\"version\":5}";
@@ -1136,38 +1239,9 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) {
EXPECT_EQ(expected_json, preferences_json);
}
-TEST_F(HttpServerPropertiesManagerTest,
- SingleCacheUpdateForMultipleUpdatesScheduled) {
- EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
- // Update cache.
- http_server_props_manager_->ScheduleUpdateCacheForTesting();
- EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
-
- // Move forward the task runner short by 20ms.
- FastForwardBy(HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() -
- base::TimeDelta::FromMilliseconds(20));
- // Schedule a new cache update within the time window should be a no-op.
- http_server_props_manager_->ScheduleUpdateCacheForTesting();
- EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
-
- // Move forward the task runner the extra 20ms, now the cache update should be
- // executed.
- FastForwardBy(base::TimeDelta::FromMilliseconds(20));
-
- // Since this test has no pref corruption, there shouldn't be any pref update.
- EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
-
- // Schedule one more cache update. The task should be successfully scheduled
- // on the task runner.
- http_server_props_manager_->ScheduleUpdateCacheForTesting();
- EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
-
- FastForwardUntilNoTasksRemain();
- EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
-}
+TEST_F(HttpServerPropertiesManagerTest, ParseAlternativeServiceInfo) {
+ InitializePrefs();
-TEST_F(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) {
std::unique_ptr<base::Value> server_value = base::JSONReader::ReadDeprecated(
"{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"},"
"{\"port\":123,\"protocol_str\":\"quic\","
@@ -1179,13 +1253,13 @@ TEST_F(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) {
ASSERT_TRUE(server_value->GetAsDictionary(&server_dict));
const url::SchemeHostPort server("https", "example.com", 443);
- AlternativeServiceMap alternative_service_map;
- EXPECT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap(
- server, *server_dict, &alternative_service_map));
+ HttpServerProperties::ServerInfo server_info;
+ EXPECT_TRUE(HttpServerPropertiesManager::ParseAlternativeServiceInfo(
+ server, *server_dict, &server_info));
- auto it = alternative_service_map.Get(server);
- ASSERT_NE(alternative_service_map.end(), it);
- AlternativeServiceInfoVector alternative_service_info_vector = it->second;
+ ASSERT_TRUE(server_info.alternative_services.has_value());
+ AlternativeServiceInfoVector alternative_service_info_vector =
+ server_info.alternative_services.value();
ASSERT_EQ(3u, alternative_service_info_vector.size());
EXPECT_EQ(kProtoHTTP2,
@@ -1216,10 +1290,16 @@ TEST_F(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) {
base::Time::FromUTCString("2036-12-31 10:00:00", &expected_expiration));
EXPECT_EQ(expected_expiration,
alternative_service_info_vector[2].expiration());
+
+ // No other fields should have been populated.
+ server_info.alternative_services.reset();
+ EXPECT_TRUE(server_info.empty());
}
// Regression test for https://crbug.com/615497.
TEST_F(HttpServerPropertiesManagerTest, DoNotLoadAltSvcForInsecureOrigins) {
+ InitializePrefs();
+
std::unique_ptr<base::Value> server_value = base::JSONReader::ReadDeprecated(
"{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\","
"\"expiration\":\"9223372036854775807\"}]}");
@@ -1228,16 +1308,16 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotLoadAltSvcForInsecureOrigins) {
ASSERT_TRUE(server_value->GetAsDictionary(&server_dict));
const url::SchemeHostPort server("http", "example.com", 80);
- AlternativeServiceMap alternative_service_map;
- EXPECT_FALSE(http_server_props_manager_->AddToAlternativeServiceMap(
- server, *server_dict, &alternative_service_map));
-
- auto it = alternative_service_map.Get(server);
- EXPECT_EQ(alternative_service_map.end(), it);
+ HttpServerProperties::ServerInfo server_info;
+ EXPECT_FALSE(HttpServerPropertiesManager::ParseAlternativeServiceInfo(
+ server, *server_dict, &server_info));
+ EXPECT_TRUE(server_info.empty());
}
// Do not persist expired alternative service entries to disk.
TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) {
+ InitializePrefs();
+
AlternativeServiceInfoVector alternative_service_info_vector;
const AlternativeService broken_alternative_service(
@@ -1248,8 +1328,7 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) {
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
broken_alternative_service, time_one_day_later));
// #1: MarkAlternativeServiceBroken().
- http_server_props_manager_->MarkAlternativeServiceBroken(
- broken_alternative_service);
+ http_server_props_->MarkAlternativeServiceBroken(broken_alternative_service);
const AlternativeService expired_alternative_service(
kProtoHTTP2, "expired.example.com", 443);
@@ -1267,8 +1346,8 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) {
const url::SchemeHostPort server("https", "www.example.com", 443);
// #2: SetAlternativeServices().
- ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
- server, alternative_service_info_vector));
+ http_server_props_->SetAlternativeServices(server, NetworkIsolationKey(),
+ alternative_service_info_vector);
// |net_test_task_runner_| has a remaining pending task to expire
// |broken_alternative_service| at |time_one_day_later|. Fast forward enough
@@ -1276,7 +1355,7 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) {
// |broken_alternative_service|.
EXPECT_EQ(2U, GetPendingMainThreadTaskCount());
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
- FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting());
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
EXPECT_EQ(1U, GetPendingMainThreadTaskCount());
EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1289,13 +1368,18 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) {
const base::DictionaryValue* server_pref_dict;
ASSERT_TRUE(it->GetAsDictionary(&server_pref_dict));
- const base::DictionaryValue* example_pref_dict;
+ const std::string* server_str = server_pref_dict->FindStringKey("server");
+ ASSERT_TRUE(server_str);
+ EXPECT_EQ("https://www.example.com", *server_str);
- ASSERT_TRUE(server_pref_dict->GetDictionaryWithoutPathExpansion(
- "https://www.example.com", &example_pref_dict));
+ const base::Value* network_isolation_key_value =
+ server_pref_dict->FindKey("isolation");
+ ASSERT_TRUE(network_isolation_key_value);
+ ASSERT_EQ(base::Value::Type::LIST, network_isolation_key_value->type());
+ EXPECT_TRUE(network_isolation_key_value->GetList().empty());
const base::ListValue* altsvc_list;
- ASSERT_TRUE(example_pref_dict->GetList("alternative_service", &altsvc_list));
+ ASSERT_TRUE(server_pref_dict->GetList("alternative_service", &altsvc_list));
ASSERT_EQ(2u, altsvc_list->GetSize());
@@ -1313,6 +1397,8 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) {
// Test that expired alternative service entries on disk are ignored.
TEST_F(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) {
+ InitializePrefs();
+
auto alternative_service_list = std::make_unique<base::ListValue>();
auto expired_dict = std::make_unique<base::DictionaryValue>();
expired_dict->SetString("protocol_str", "h2");
@@ -1337,13 +1423,13 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) {
std::move(alternative_service_list));
const url::SchemeHostPort server("https", "example.com", 443);
- AlternativeServiceMap alternative_service_map;
- ASSERT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap(
- server, server_pref_dict, &alternative_service_map));
+ HttpServerProperties::ServerInfo server_info;
+ ASSERT_TRUE(HttpServerPropertiesManager::ParseAlternativeServiceInfo(
+ server, server_pref_dict, &server_info));
- auto it = alternative_service_map.Get(server);
- ASSERT_NE(alternative_service_map.end(), it);
- AlternativeServiceInfoVector alternative_service_info_vector = it->second;
+ ASSERT_TRUE(server_info.alternative_services.has_value());
+ AlternativeServiceInfoVector alternative_service_info_vector =
+ server_info.alternative_services.value();
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(kProtoHTTP2,
@@ -1352,18 +1438,26 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) {
alternative_service_info_vector[0].alternative_service().host);
EXPECT_EQ(443, alternative_service_info_vector[0].alternative_service().port);
EXPECT_EQ(one_day_from_now_, alternative_service_info_vector[0].expiration());
+
+ // No other fields should have been populated.
+ server_info.alternative_services.reset();
+ EXPECT_TRUE(server_info.empty());
}
// Make sure prefs are updated on destruction.
TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsOnShutdown) {
+ InitializePrefs();
+
int pref_updates = 0;
pref_delegate_->set_extra_update_prefs_callback(
base::Bind([](int* updates) { (*updates)++; }, &pref_updates));
- http_server_props_manager_.reset();
+ http_server_props_.reset();
EXPECT_EQ(1, pref_updates);
}
TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) {
+ InitializePrefs();
+
const url::SchemeHostPort server_www("https", "www.google.com", 80);
const url::SchemeHostPort server_mail("https", "mail.google.com", 80);
@@ -1389,30 +1483,30 @@ TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) {
alternative_service_info_vector.push_back(
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
h2_alternative_service, expiration2));
- ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
- server_www, alternative_service_info_vector));
+ http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(),
+ alternative_service_info_vector);
// Set another QUIC alternative service with a single advertised QUIC version.
AlternativeService mail_alternative_service(kProtoQUIC, "foo.google.com",
444);
base::Time expiration3 = base::Time::Max();
- ASSERT_TRUE(http_server_props_manager_->SetQuicAlternativeService(
- server_mail, mail_alternative_service, expiration3,
- advertised_versions_));
+ http_server_props_->SetQuicAlternativeService(
+ server_mail, NetworkIsolationKey(), mail_alternative_service, expiration3,
+ advertised_versions_);
// #3: Set ServerNetworkStats.
ServerNetworkStats stats;
stats.srtt = base::TimeDelta::FromInternalValue(42);
- http_server_props_manager_->SetServerNetworkStats(server_mail, stats);
+ http_server_props_->SetServerNetworkStats(server_mail, NetworkIsolationKey(),
+ stats);
// #4: Set quic_server_info string.
quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
std::string quic_server_info1("quic_server_info1");
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
// #5: Set SupportsQuic.
IPAddress actual_address(127, 0, 0, 1);
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ http_server_props_->SetSupportsQuic(true, actual_address);
// Update Prefs.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1424,15 +1518,20 @@ TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) {
const char expected_json[] =
"{\"quic_servers\":{\"https://mail.google.com:80\":{"
"\"server_info\":\"quic_server_info1\"}},\"servers\":["
- "{\"https://www.google.com:80\":{\"alternative_service\":[{"
+ "{\"alternative_service\":[{"
"\"advertised_versions\":[39,46],\"expiration\":\"13756212000000000\","
"\"port\":443,\"protocol_str\":\"quic\"},{\"advertised_versions\":[],"
"\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\","
- "\"port\":1234,\"protocol_str\":\"h2\"}]}},"
- "{\"https://mail.google.com:80\":{\"alternative_service\":[{"
+ "\"port\":1234,\"protocol_str\":\"h2\"}],"
+ "\"isolation\":[],"
+ "\"server\":\"https://www.google.com:80\"},"
+ "{\"alternative_service\":[{"
"\"advertised_versions\":[46],\"expiration\":\"9223372036854775807\","
"\"host\":\"foo.google.com\",\"port\":444,\"protocol_str\":\"quic\"}],"
- "\"network_stats\":{\"srtt\":42}}}],\"supports_quic\":{"
+ "\"isolation\":[],"
+ "\"network_stats\":{\"srtt\":42},"
+ "\"server\":\"https://mail.google.com:80\"}],"
+ "\"supports_quic\":{"
"\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}";
const base::Value* http_server_properties =
@@ -1444,6 +1543,8 @@ TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) {
}
TEST_F(HttpServerPropertiesManagerTest, ReadAdvertisedVersionsFromPref) {
+ InitializePrefs();
+
std::unique_ptr<base::Value> server_value = base::JSONReader::ReadDeprecated(
"{\"alternative_service\":["
"{\"port\":443,\"protocol_str\":\"quic\"},"
@@ -1455,13 +1556,13 @@ TEST_F(HttpServerPropertiesManagerTest, ReadAdvertisedVersionsFromPref) {
ASSERT_TRUE(server_value->GetAsDictionary(&server_dict));
const url::SchemeHostPort server("https", "example.com", 443);
- AlternativeServiceMap alternative_service_map;
- EXPECT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap(
- server, *server_dict, &alternative_service_map));
+ HttpServerProperties::ServerInfo server_info;
+ EXPECT_TRUE(HttpServerPropertiesManager::ParseAlternativeServiceInfo(
+ server, *server_dict, &server_info));
- auto it = alternative_service_map.Get(server);
- ASSERT_NE(alternative_service_map.end(), it);
- AlternativeServiceInfoVector alternative_service_info_vector = it->second;
+ ASSERT_TRUE(server_info.alternative_services.has_value());
+ AlternativeServiceInfoVector alternative_service_info_vector =
+ server_info.alternative_services.value();
ASSERT_EQ(2u, alternative_service_info_vector.size());
// Verify the first alternative service with no advertised version listed.
@@ -1492,10 +1593,16 @@ TEST_F(HttpServerPropertiesManagerTest, ReadAdvertisedVersionsFromPref) {
EXPECT_EQ(quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO,
quic::QUIC_VERSION_46),
loaded_advertised_versions[1]);
+
+ // No other fields should have been populated.
+ server_info.alternative_services.reset();
+ EXPECT_TRUE(server_info.empty());
}
TEST_F(HttpServerPropertiesManagerTest,
UpdatePrefWhenAdvertisedVersionsChange) {
+ InitializePrefs();
+
const url::SchemeHostPort server_www("https", "www.google.com", 80);
// #1: Set alternate protocol.
@@ -1508,18 +1615,17 @@ TEST_F(HttpServerPropertiesManagerTest,
alternative_service_info_vector.push_back(
AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
quic_alternative_service1, expiration1, advertised_versions_));
- ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
- server_www, alternative_service_info_vector));
+ http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(),
+ alternative_service_info_vector);
// Set quic_server_info string.
quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
std::string quic_server_info1("quic_server_info1");
- http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
- quic_server_info1);
+ http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
// Set SupportsQuic.
IPAddress actual_address(127, 0, 0, 1);
- http_server_props_manager_->SetSupportsQuic(true, actual_address);
+ http_server_props_->SetSupportsQuic(true, actual_address);
// Update Prefs.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1531,10 +1637,12 @@ TEST_F(HttpServerPropertiesManagerTest,
const char expected_json[] =
"{\"quic_servers\":{\"https://mail.google.com:80\":"
"{\"server_info\":\"quic_server_info1\"}},\"servers\":["
- "{\"https://www.google.com:80\":"
"{\"alternative_service\":[{\"advertised_versions\":[46],"
"\"expiration\":\"13756212000000000\",\"port\":443,"
- "\"protocol_str\":\"quic\"}]}}],\"supports_quic\":"
+ "\"protocol_str\":\"quic\"}],"
+ "\"isolation\":[],"
+ "\"server\":\"https://www.google.com:80\"}],"
+ "\"supports_quic\":"
"{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}";
const base::Value* http_server_properties =
@@ -1556,8 +1664,8 @@ TEST_F(HttpServerPropertiesManagerTest,
alternative_service_info_vector_2.push_back(
AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
quic_alternative_service1, expiration1, advertised_versions));
- ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
- server_www, alternative_service_info_vector_2));
+ http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(),
+ alternative_service_info_vector_2);
// Update Prefs.
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1569,10 +1677,12 @@ TEST_F(HttpServerPropertiesManagerTest,
const char expected_json_updated[] =
"{\"quic_servers\":{\"https://mail.google.com:80\":"
"{\"server_info\":\"quic_server_info1\"}},\"servers\":["
- "{\"https://www.google.com:80\":"
"{\"alternative_service\":[{\"advertised_versions\":[39,46],"
"\"expiration\":\"13756212000000000\",\"port\":443,"
- "\"protocol_str\":\"quic\"}]}}],\"supports_quic\":"
+ "\"protocol_str\":\"quic\"}],"
+ "\"isolation\":[],"
+ "\"server\":\"https://www.google.com:80\"}],"
+ "\"supports_quic\":"
"{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}";
EXPECT_TRUE(
base::JSONWriter::Write(*http_server_properties, &preferences_json));
@@ -1589,8 +1699,8 @@ TEST_F(HttpServerPropertiesManagerTest,
alternative_service_info_vector_3.push_back(
AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
quic_alternative_service1, expiration1, advertised_versions_2));
- ASSERT_FALSE(http_server_props_manager_->SetAlternativeServices(
- server_www, alternative_service_info_vector_3));
+ http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(),
+ alternative_service_info_vector_3);
// No Prefs update.
EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
@@ -1603,20 +1713,16 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
AlternativeService cached_recently_broken_service(kProtoQUIC,
"cached_rbroken", 443);
- http_server_props_manager_->MarkAlternativeServiceBroken(
- cached_broken_service);
- http_server_props_manager_->MarkAlternativeServiceBroken(
- cached_broken_service2);
- http_server_props_manager_->MarkAlternativeServiceRecentlyBroken(
+ http_server_props_->MarkAlternativeServiceBroken(cached_broken_service);
+ http_server_props_->MarkAlternativeServiceBroken(cached_broken_service2);
+ http_server_props_->MarkAlternativeServiceRecentlyBroken(
cached_recently_broken_service);
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
+ // There should be a task to remove remove alt services from the cache of
+ // broken alt services. There should be no task to update the prefs, since the
+ // prefs file hasn't been loaded yet.
EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- // Run the prefs update task but not the expiration task for
- // |cached_broken_service|.
- FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting());
- EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
// Load the |pref_delegate_| with some JSON to verify updating the cache from
// prefs. For the broken alternative services "www.google.com:1234" and
@@ -1643,21 +1749,23 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
"\"server_info\":\"quic_server_info1\"}"
"},"
"\"servers\":["
- "{\"https://www.google.com:80\":{"
+ "{\"server\":\"https://www.google.com:80\","
+ "\"isolation\":[],"
"\"alternative_service\":["
"{\"expiration\":\"13756212000000000\",\"port\":443,"
"\"protocol_str\":\"h2\"},"
"{\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\","
"\"port\":1234,\"protocol_str\":\"h2\"}"
"]"
- "}},"
- "{\"https://mail.google.com:80\":{"
+ "},"
+ "{\"server\":\"https://mail.google.com:80\","
+ "\"isolation\":[],"
"\"alternative_service\":["
"{\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\","
"\"port\":444,\"protocol_str\":\"h2\"}"
"],"
"\"network_stats\":{\"srtt\":42}"
- "}}"
+ "}"
"],"
"\"supports_quic\":"
"{\"address\":\"127.0.0.1\",\"used_quic\":true},"
@@ -1667,20 +1775,25 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
base::DictionaryValue* server_dict;
ASSERT_TRUE(server_value->GetAsDictionary(&server_dict));
- pref_delegate_->SetPrefs(*server_dict);
+ // Don't use the test fixture's InitializePrefs() method, since there are
+ // pending tasks. Initializing prefs should queue a pref update task, since
+ // prefs have been modified.
+ pref_delegate_->InitializePrefs(*server_dict);
+ EXPECT_TRUE(http_server_props_->IsInitialized());
+ EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
- EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- // Run the cache update task but not the expiration task for
- // |cached_broken_service|.
- FastForwardBy(NextMainThreadPendingTaskDelay());
+ // Run until prefs are updated.
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
+ EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_NE(0u, GetPendingMainThreadTaskCount());
//
// Verify alternative service info for https://www.google.com
//
AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_props_manager_->GetAlternativeServiceInfos(
- url::SchemeHostPort("https", "www.google.com", 80));
+ http_server_props_->GetAlternativeServiceInfos(
+ url::SchemeHostPort("https", "www.google.com", 80),
+ NetworkIsolationKey());
ASSERT_EQ(2u, alternative_service_info_vector.size());
EXPECT_EQ(kProtoHTTP2,
@@ -1708,8 +1821,9 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
// Verify alternative service info for https://mail.google.com
//
alternative_service_info_vector =
- http_server_props_manager_->GetAlternativeServiceInfos(
- url::SchemeHostPort("https", "mail.google.com", 80));
+ http_server_props_->GetAlternativeServiceInfos(
+ url::SchemeHostPort("https", "mail.google.com", 80),
+ NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(kProtoHTTP2,
@@ -1726,38 +1840,41 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
// Verify broken alternative services.
//
AlternativeService prefs_broken_service(kProtoHTTP2, "www.google.com", 1234);
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service2));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- prefs_broken_service));
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
+
// Verify brokenness expiration times.
// |cached_broken_service|'s expiration time should've been overwritten by the
// prefs to be approximately 1 day from now. |cached_broken_service2|'s
// expiration time should still be 5 minutes due to being marked broken.
// |prefs_broken_service|'s expiration time should be approximately 1 day from
// now which comes from the prefs.
- FastForwardBy(base::TimeDelta::FromMinutes(4));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service2));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- prefs_broken_service));
+ FastForwardBy(base::TimeDelta::FromMinutes(5) -
+ HttpServerProperties::GetUpdatePrefsDelayForTesting());
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
FastForwardBy(base::TimeDelta::FromDays(1));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service2));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- prefs_broken_service));
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
// Now that |prefs_broken_service|'s brokenness has expired, it should've
// been removed from the alternative services info vectors of all servers.
alternative_service_info_vector =
- http_server_props_manager_->GetAlternativeServiceInfos(
- url::SchemeHostPort("https", "www.google.com", 80));
+ http_server_props_->GetAlternativeServiceInfos(
+ url::SchemeHostPort("https", "www.google.com", 80),
+ NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
//
@@ -1772,90 +1889,504 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
// |cached_broken_service2| should have broken-count 1 from being marked
// broken.
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
prefs_broken_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
cached_recently_broken_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
cached_broken_service));
- EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+ EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
cached_broken_service2));
// Make sure |prefs_broken_service| has the right expiration delay when marked
// broken. Since |prefs_broken_service| had no broken_count specified in the
// prefs, a broken_count value of 1 should have been assumed by
- // |http_server_props_manager_|.
- http_server_props_manager_->MarkAlternativeServiceBroken(
- prefs_broken_service);
+ // |http_server_props_|.
+ http_server_props_->MarkAlternativeServiceBroken(prefs_broken_service);
EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
EXPECT_NE(0u, GetPendingMainThreadTaskCount());
FastForwardBy(base::TimeDelta::FromMinutes(10) -
base::TimeDelta::FromInternalValue(1));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- prefs_broken_service));
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
FastForwardBy(base::TimeDelta::FromInternalValue(1));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- prefs_broken_service));
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
// Make sure |cached_recently_broken_service| has the right expiration delay
// when marked broken.
- http_server_props_manager_->MarkAlternativeServiceBroken(
+ http_server_props_->MarkAlternativeServiceBroken(
cached_recently_broken_service);
EXPECT_NE(0u, GetPendingMainThreadTaskCount());
FastForwardBy(base::TimeDelta::FromMinutes(40) -
base::TimeDelta::FromInternalValue(1));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
+ EXPECT_TRUE(http_server_props_->IsAlternativeServiceBroken(
cached_recently_broken_service));
FastForwardBy(base::TimeDelta::FromInternalValue(1));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+ EXPECT_FALSE(http_server_props_->IsAlternativeServiceBroken(
cached_recently_broken_service));
// Make sure |cached_broken_service| has the right expiration delay when
// marked broken.
- http_server_props_manager_->MarkAlternativeServiceBroken(
- cached_broken_service);
- EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- FastForwardBy(base::TimeDelta::FromMinutes(20) -
- base::TimeDelta::FromInternalValue(1));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service));
- FastForwardBy(base::TimeDelta::FromInternalValue(1));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service));
- // Make sure |cached_broken_service2| has the right expiration delay when
- // marked broken.
- http_server_props_manager_->MarkAlternativeServiceBroken(
- cached_broken_service2);
- EXPECT_NE(0u, GetPendingMainThreadTaskCount());
- FastForwardBy(base::TimeDelta::FromMinutes(10) -
- base::TimeDelta::FromInternalValue(1));
- EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service2));
- FastForwardBy(base::TimeDelta::FromInternalValue(1));
- EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
- cached_broken_service2));
-
- //
- // Verify ServerNetworkStats.
- //
- const ServerNetworkStats* server_network_stats =
- http_server_props_manager_->GetServerNetworkStats(
- url::SchemeHostPort("https", "mail.google.com", 80));
- EXPECT_TRUE(server_network_stats);
- EXPECT_EQ(server_network_stats->srtt,
- base::TimeDelta::FromInternalValue(42));
-
- //
- // Verify QUIC server info.
- //
- const std::string* quic_server_info =
- http_server_props_manager_->GetQuicServerInfo(
- quic::QuicServerId("mail.google.com", 80, false));
- EXPECT_EQ("quic_server_info1", *quic_server_info);
-
- //
- // Verify supports QUIC.
- //
- IPAddress actual_address(127, 0, 0, 1);
- EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&actual_address));
- EXPECT_EQ(4, pref_delegate_->GetAndClearNumPrefUpdates());
+ http_server_props_->MarkAlternativeServiceBroken(cached_broken_service);
+ EXPECT_NE(0u, GetPendingMainThreadTaskCount());
+ FastForwardBy(base::TimeDelta::FromMinutes(20) -
+ base::TimeDelta::FromInternalValue(1));
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+ FastForwardBy(base::TimeDelta::FromInternalValue(1));
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+ // Make sure |cached_broken_service2| has the right expiration delay when
+ // marked broken.
+ http_server_props_->MarkAlternativeServiceBroken(cached_broken_service2);
+ EXPECT_NE(0u, GetPendingMainThreadTaskCount());
+ FastForwardBy(base::TimeDelta::FromMinutes(10) -
+ base::TimeDelta::FromInternalValue(1));
+ EXPECT_TRUE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+ FastForwardBy(base::TimeDelta::FromInternalValue(1));
+ EXPECT_FALSE(
+ http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+
+ //
+ // Verify ServerNetworkStats.
+ //
+ const ServerNetworkStats* server_network_stats =
+ http_server_props_->GetServerNetworkStats(
+ url::SchemeHostPort("https", "mail.google.com", 80),
+ NetworkIsolationKey());
+ EXPECT_TRUE(server_network_stats);
+ EXPECT_EQ(server_network_stats->srtt, base::TimeDelta::FromInternalValue(42));
+
+ //
+ // Verify QUIC server info.
+ //
+ const std::string* quic_server_info = http_server_props_->GetQuicServerInfo(
+ quic::QuicServerId("mail.google.com", 80, false));
+ EXPECT_EQ("quic_server_info1", *quic_server_info);
+
+ //
+ // Verify supports QUIC.
+ //
+ IPAddress actual_address(127, 0, 0, 1);
+ EXPECT_TRUE(http_server_props_->GetSupportsQuic(&actual_address));
+ EXPECT_EQ(4, pref_delegate_->GetAndClearNumPrefUpdates());
+}
+
+// Check the interaction of ForceHTTP11 with saving/restoring settings.
+// In particular, ForceHTTP11 is not saved, and it should not overwrite or be
+// overitten by loaded data.
+TEST_F(HttpServerPropertiesManagerTest, ForceHTTP11) {
+ const url::SchemeHostPort kServer1("https", "foo.test", 443);
+ const url::SchemeHostPort kServer2("https", "bar.test", 443);
+ const url::SchemeHostPort kServer3("https", "baz.test", 443);
+
+ // Create and initialize an HttpServerProperties with no state.
+ std::unique_ptr<MockPrefDelegate> pref_delegate =
+ std::make_unique<MockPrefDelegate>();
+ MockPrefDelegate* unowned_pref_delegate = pref_delegate.get();
+ std::unique_ptr<HttpServerProperties> properties =
+ std::make_unique<HttpServerProperties>(std::move(pref_delegate),
+ /*net_log=*/nullptr,
+ GetMockTickClock());
+ unowned_pref_delegate->InitializePrefs(base::DictionaryValue());
+
+ // Set kServer1 to support H2, but require HTTP/1.1. Set kServer2 to only
+ // require HTTP/1.1.
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey()));
+ properties->SetSupportsSpdy(kServer1, NetworkIsolationKey(), true);
+ properties->SetHTTP11Required(kServer1, NetworkIsolationKey());
+ properties->SetHTTP11Required(kServer2, NetworkIsolationKey());
+ EXPECT_TRUE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey()));
+ EXPECT_TRUE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey()));
+ EXPECT_TRUE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey()));
+
+ // Wait until the data's been written to prefs, and then tear down the
+ // HttpServerProperties.
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
+ std::unique_ptr<base::DictionaryValue> saved_value =
+ unowned_pref_delegate->GetServerProperties()->CreateDeepCopy();
+ properties.reset();
+
+ // Only information on kServer1 should have been saved to prefs.
+ std::string preferences_json;
+ base::JSONWriter::Write(*saved_value, &preferences_json);
+ EXPECT_EQ(
+ "{\"servers\":["
+ "{\"isolation\":[],"
+ "\"server\":\"https://foo.test\","
+ "\"supports_spdy\":true}],"
+ "\"version\":5}",
+ preferences_json);
+
+ // Create a new HttpServerProperties using the value saved to prefs above.
+ pref_delegate = std::make_unique<MockPrefDelegate>();
+ unowned_pref_delegate = pref_delegate.get();
+ properties = std::make_unique<HttpServerProperties>(
+ std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock());
+
+ // Before the data has loaded, set kServer1 and kServer3 as requiring
+ // HTTP/1.1.
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey()));
+ properties->SetHTTP11Required(kServer1, NetworkIsolationKey());
+ properties->SetHTTP11Required(kServer3, NetworkIsolationKey());
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey()));
+ EXPECT_TRUE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer3, NetworkIsolationKey()));
+ EXPECT_TRUE(properties->RequiresHTTP11(kServer3, NetworkIsolationKey()));
+
+ // The data loads.
+ unowned_pref_delegate->InitializePrefs(*saved_value);
+
+ // The properties should contain a combination of the old and new data.
+ EXPECT_TRUE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey()));
+ EXPECT_TRUE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey()));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer3, NetworkIsolationKey()));
+ EXPECT_TRUE(properties->RequiresHTTP11(kServer3, NetworkIsolationKey()));
+}
+
+TEST_F(HttpServerPropertiesManagerTest, NetworkIsolationKeyServerInfo) {
+ const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+ const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+ const url::Origin kOpaqueOrigin =
+ url::Origin::Create(GURL("data:text/plain,Hello World"));
+ const url::SchemeHostPort kServer("https", "baz.test", 443);
+ const url::SchemeHostPort kServer2("https", "zab.test", 443);
+
+ HttpServerProperties::ServerInfo server_info;
+ server_info.supports_spdy = true;
+
+ for (auto save_network_isolation_key_mode : kNetworkIsolationKeyModes) {
+ SCOPED_TRACE(static_cast<int>(save_network_isolation_key_mode));
+
+ // Save prefs using |save_network_isolation_key_mode|.
+ base::Value saved_value;
+ {
+ // Configure the the feature.
+ std::unique_ptr<base::test::ScopedFeatureList> feature_list =
+ SetNetworkIsolationKeyMode(save_network_isolation_key_mode);
+
+ // This parameter is normally calculated by HttpServerProperties based on
+ // the kPartitionHttpServerPropertiesByNetworkIsolationKey feature, but
+ // this test doesn't use that class.
+ bool use_network_isolation_key =
+ save_network_isolation_key_mode != NetworkIsolationKeyMode::kDisabled;
+
+ HttpServerProperties::ServerInfoMap server_info_map;
+
+ // Add server info entry using two origins with value of |server_info|.
+ // NetworkIsolationKey's constructor takes the state of the
+ // kAppendFrameOriginToNetworkIsolationKey feature into account, so need
+ // to make sure to call the constructor after setting up the feature
+ // above.
+ HttpServerProperties::ServerInfoMapKey server_info_key(
+ kServer, NetworkIsolationKey(kOrigin1, kOrigin2),
+ use_network_isolation_key);
+ server_info_map.Put(server_info_key, server_info);
+
+ // Also add an etry with an opaque origin, if |use_network_isolation_key|
+ // is true. This value should not be saved to disk, since opaque origins
+ // are only meaningful within a browsing session.
+ if (use_network_isolation_key) {
+ HttpServerProperties::ServerInfoMapKey server_info_key2(
+ kServer2, NetworkIsolationKey(kOpaqueOrigin, kOpaqueOrigin),
+ use_network_isolation_key);
+ server_info_map.Put(server_info_key2, server_info);
+ }
+
+ saved_value = ServerInfoMapToValue(server_info_map);
+ }
+
+ for (auto load_network_isolation_key_mode : kNetworkIsolationKeyModes) {
+ SCOPED_TRACE(static_cast<int>(load_network_isolation_key_mode));
+
+ std::unique_ptr<base::test::ScopedFeatureList> feature_list =
+ SetNetworkIsolationKeyMode(load_network_isolation_key_mode);
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map2 =
+ ValueToServerInfoMap(saved_value);
+ ASSERT_TRUE(server_info_map2);
+ if (save_network_isolation_key_mode ==
+ NetworkIsolationKeyMode::kDisabled) {
+ // If NetworkIsolationKey was disabled when saving, it was saved with an
+ // empty NetworkIsolationKey, which should always be loaded
+ // successfully. This is needed to continue to support consumers that
+ // don't use NetworkIsolationKeys.
+ ASSERT_EQ(1u, server_info_map2->size());
+ const HttpServerProperties::ServerInfoMapKey& server_info_key2 =
+ server_info_map2->begin()->first;
+ const HttpServerProperties::ServerInfo& server_info2 =
+ server_info_map2->begin()->second;
+ EXPECT_EQ(kServer, server_info_key2.server);
+ EXPECT_EQ(NetworkIsolationKey(),
+ server_info_key2.network_isolation_key);
+ EXPECT_EQ(server_info, server_info2);
+ } else if (save_network_isolation_key_mode ==
+ load_network_isolation_key_mode) {
+ // If the save and load modes are the same, the load should succeed, and
+ // the network isolation keys should match.
+ ASSERT_EQ(1u, server_info_map2->size());
+ const HttpServerProperties::ServerInfoMapKey& server_info_key2 =
+ server_info_map2->begin()->first;
+ const HttpServerProperties::ServerInfo& server_info2 =
+ server_info_map2->begin()->second;
+ EXPECT_EQ(kServer, server_info_key2.server);
+ EXPECT_EQ(NetworkIsolationKey(kOrigin1, kOrigin2),
+ server_info_key2.network_isolation_key);
+ EXPECT_EQ(server_info, server_info2);
+ } else {
+ // Otherwise, the NetworkIsolationKey doesn't make sense with the
+ // current feature values, so the ServerInfo should be discarded.
+ EXPECT_EQ(0u, server_info_map2->size());
+ }
+ }
+ }
+}
+
+// Tests a full round trip with a NetworkIsolationKey, using the
+// HttpServerProperties interface.
+TEST_F(HttpServerPropertiesManagerTest, NetworkIsolationKeyIntegration) {
+ const url::Origin kOrigin = url::Origin::Create(GURL("https://foo.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey(kOrigin, kOrigin);
+ const url::SchemeHostPort kServer("https", "baz.test", 443);
+
+ const url::Origin kOpaqueOrigin =
+ url::Origin::Create(GURL("data:text/plain,Hello World"));
+ const NetworkIsolationKey kOpaqueOriginNetworkIsolationKey(kOpaqueOrigin,
+ kOpaqueOrigin);
+ const url::SchemeHostPort kServer2("https", "zab.test", 443);
+
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
+
+ // Create and initialize an HttpServerProperties with no state.
+ std::unique_ptr<MockPrefDelegate> pref_delegate =
+ std::make_unique<MockPrefDelegate>();
+ MockPrefDelegate* unowned_pref_delegate = pref_delegate.get();
+ std::unique_ptr<HttpServerProperties> properties =
+ std::make_unique<HttpServerProperties>(std::move(pref_delegate),
+ /*net_log=*/nullptr,
+ GetMockTickClock());
+ unowned_pref_delegate->InitializePrefs(base::DictionaryValue());
+
+ // Set a values using kNetworkIsolationKey.
+ properties->SetSupportsSpdy(kServer, kNetworkIsolationKey, true);
+ EXPECT_TRUE(properties->GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(
+ properties->GetSupportsSpdy(kServer, kOpaqueOriginNetworkIsolationKey));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer, NetworkIsolationKey()));
+
+ // Opaque origins should works with HttpServerProperties, but not be persisted
+ // to disk.
+ properties->SetSupportsSpdy(kServer2, kOpaqueOriginNetworkIsolationKey, true);
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, kNetworkIsolationKey));
+ EXPECT_TRUE(
+ properties->GetSupportsSpdy(kServer2, kOpaqueOriginNetworkIsolationKey));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey()));
+
+ // Wait until the data's been written to prefs, and then tear down the
+ // HttpServerProperties.
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
+ std::unique_ptr<base::DictionaryValue> saved_value =
+ unowned_pref_delegate->GetServerProperties()->CreateDeepCopy();
+ properties.reset();
+
+ // Create a new HttpServerProperties using the value saved to prefs above.
+ pref_delegate = std::make_unique<MockPrefDelegate>();
+ unowned_pref_delegate = pref_delegate.get();
+ properties = std::make_unique<HttpServerProperties>(
+ std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock());
+ unowned_pref_delegate->InitializePrefs(*saved_value);
+
+ // The information set using kNetworkIsolationKey on the original
+ // HttpServerProperties should also be set on the restored
+ // HttpServerProperties.
+ EXPECT_TRUE(properties->GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(
+ properties->GetSupportsSpdy(kServer, kOpaqueOriginNetworkIsolationKey));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer, NetworkIsolationKey()));
+
+ // The information set using kOpaqueOriginNetworkIsolationKey should not have
+ // been restored.
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, kNetworkIsolationKey));
+ EXPECT_FALSE(
+ properties->GetSupportsSpdy(kServer2, kOpaqueOriginNetworkIsolationKey));
+ EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey()));
+}
+
+// Tests a full round trip to prefs and back in the canonical suffix case.
+// Enable NetworkIsolationKeys, as they have some interactions with the
+// canonical suffix logic.
+TEST_F(HttpServerPropertiesManagerTest,
+ CanonicalSuffixRoundTripWithNetworkIsolationKey) {
+ const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+ const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1);
+ const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2);
+ // Three servers with the same canonical suffix (".c.youtube.com").
+ const url::SchemeHostPort kServer1("https", "foo.c.youtube.com", 443);
+ const url::SchemeHostPort kServer2("https", "bar.c.youtube.com", 443);
+ const url::SchemeHostPort kServer3("https", "baz.c.youtube.com", 443);
+
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
+
+ // Create three alt service vectors of different lengths.
+ base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
+ AlternativeServiceInfo alt_service1 =
+ AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ AlternativeService(kProtoQUIC, "foopy.c.youtube.com", 1234),
+ expiration,
+ HttpNetworkSession::Params().quic_params.supported_versions);
+ AlternativeServiceInfo alt_service2 =
+ AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ AlternativeService(kProtoHTTP2, "foopy.c.youtube.com", 443),
+ expiration);
+ AlternativeServiceInfo alt_service3 =
+ AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ AlternativeService(kProtoHTTP2, "foopy2.c.youtube.com", 443),
+ expiration);
+ AlternativeServiceInfoVector alt_service_vector1 = {alt_service1};
+ AlternativeServiceInfoVector alt_service_vector2 = {alt_service1,
+ alt_service2};
+ AlternativeServiceInfoVector alt_service_vector3 = {
+ alt_service1, alt_service2, alt_service3};
+
+ // Create and initialize an HttpServerProperties with no state.
+ std::unique_ptr<MockPrefDelegate> pref_delegate =
+ std::make_unique<MockPrefDelegate>();
+ MockPrefDelegate* unowned_pref_delegate = pref_delegate.get();
+ std::unique_ptr<HttpServerProperties> properties =
+ std::make_unique<HttpServerProperties>(std::move(pref_delegate),
+ /*net_log=*/nullptr,
+ GetMockTickClock());
+ unowned_pref_delegate->InitializePrefs(base::DictionaryValue());
+
+ // Set alternative services for kServer1 using kNetworkIsolationKey1. That
+ // information should be retrieved when fetching information for any server
+ // with the same canonical suffix, when using kNetworkIsolationKey1.
+ properties->SetAlternativeServices(kServer1, kNetworkIsolationKey1,
+ alt_service_vector1);
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 0u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2)
+ .size());
+
+ // Set different alternative services for kServer2 using
+ // kNetworkIsolationKey1. It should not affect information retrieved for
+ // kServer1, but should for kServer2 and kServer3.
+ properties->SetAlternativeServices(kServer2, kNetworkIsolationKey1,
+ alt_service_vector2);
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 2u,
+ properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 2u,
+ properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 0u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2)
+ .size());
+
+ // Set different information for kServer1 using kNetworkIsolationKey2. It
+ // should not affect information stored for kNetworkIsolationKey1.
+ properties->SetAlternativeServices(kServer1, kNetworkIsolationKey2,
+ alt_service_vector3);
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 2u,
+ properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 2u,
+ properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 3u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2)
+ .size());
+ EXPECT_EQ(
+ 3u,
+ properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey2)
+ .size());
+ EXPECT_EQ(
+ 3u,
+ properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey2)
+ .size());
+
+ // Wait until the data's been written to prefs, and then tear down the
+ // HttpServerProperties.
+ FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
+ std::unique_ptr<base::DictionaryValue> saved_value =
+ unowned_pref_delegate->GetServerProperties()->CreateDeepCopy();
+ properties.reset();
+
+ // Create a new HttpServerProperties using the value saved to prefs above.
+ pref_delegate = std::make_unique<MockPrefDelegate>();
+ unowned_pref_delegate = pref_delegate.get();
+ properties = std::make_unique<HttpServerProperties>(
+ std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock());
+ unowned_pref_delegate->InitializePrefs(*saved_value);
+
+ // Only the first of the values learned for kNetworkIsolationKey1 should have
+ // been saved, and the value for kNetworkIsolationKey2 as well. The canonical
+ // suffix logic should still be respected.
+ //
+ // TODO(mmenke): Preferring the oldest value seems unexpected.
+ // https://crbug.com/994842.
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 1u,
+ properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1)
+ .size());
+ EXPECT_EQ(
+ 3u,
+ properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2)
+ .size());
+ EXPECT_EQ(
+ 3u,
+ properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey2)
+ .size());
+ EXPECT_EQ(
+ 3u,
+ properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey2)
+ .size());
}
} // namespace net
diff --git a/chromium/net/http/http_server_properties_impl_unittest.cc b/chromium/net/http/http_server_properties_unittest.cc
index 95aa25ddaf6..2eca2e469f0 100644
--- a/chromium/net/http/http_server_properties_impl_unittest.cc
+++ b/chromium/net/http/http_server_properties_unittest.cc
@@ -2,23 +2,26 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "net/http/http_server_properties_impl.h"
+#include "net/http/http_server_properties.h"
#include <memory>
#include <string>
#include <vector>
#include "base/bind.h"
+#include "base/feature_list.h"
#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/run_loop.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/scoped_feature_list.h"
#include "base/test/simple_test_clock.h"
+#include "base/test/task_environment.h"
#include "base/values.h"
+#include "net/base/features.h"
#include "net/base/host_port_pair.h"
#include "net/base/ip_address.h"
#include "net/http/http_network_session.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
@@ -36,10 +39,10 @@ const base::TimeDelta BROKEN_ALT_SVC_EXPIRE_DELAYS[10] = {
base::TimeDelta::FromSeconds(76800), base::TimeDelta::FromSeconds(153600),
};
-class HttpServerPropertiesImplPeer {
+class HttpServerPropertiesPeer {
public:
static void AddBrokenAlternativeServiceWithExpirationTime(
- HttpServerPropertiesImpl* impl,
+ HttpServerProperties* impl,
const AlternativeService& alternative_service,
base::TimeTicks when) {
BrokenAlternativeServiceList::iterator unused_it;
@@ -58,41 +61,53 @@ class HttpServerPropertiesImplPeer {
}
static void ExpireBrokenAlternateProtocolMappings(
- HttpServerPropertiesImpl* impl) {
+ HttpServerProperties* impl) {
impl->broken_alternative_services_.ExpireBrokenAlternateProtocolMappings();
}
};
namespace {
-class HttpServerPropertiesImplTest : public TestWithScopedTaskEnvironment {
+// Creates a ServerInfoMapKey without a NetworkIsolationKey.
+HttpServerProperties::ServerInfoMapKey CreateSimpleKey(
+ const url::SchemeHostPort& server) {
+ return HttpServerProperties::ServerInfoMapKey(
+ server, net::NetworkIsolationKey(),
+ false /* use_network_isolation_key */);
+}
+
+class HttpServerPropertiesTest : public TestWithTaskEnvironment {
protected:
- HttpServerPropertiesImplTest()
- : TestWithScopedTaskEnvironment(
- base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
+ HttpServerPropertiesTest()
+ : TestWithTaskEnvironment(
+ base::test::TaskEnvironment::TimeSource::MOCK_TIME),
test_tick_clock_(GetMockTickClock()),
- impl_(test_tick_clock_, &test_clock_) {
+ impl_(nullptr /* pref_delegate */,
+ nullptr /* net_log */,
+ test_tick_clock_,
+ &test_clock_) {
// Set |test_clock_| to some random time.
test_clock_.Advance(base::TimeDelta::FromSeconds(12345));
}
- bool HasAlternativeService(const url::SchemeHostPort& origin) {
+ bool HasAlternativeService(const url::SchemeHostPort& origin,
+ const NetworkIsolationKey& network_isolation_key) {
const AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(origin);
+ impl_.GetAlternativeServiceInfos(origin, network_isolation_key);
return !alternative_service_info_vector.empty();
}
- bool SetAlternativeService(const url::SchemeHostPort& origin,
+ void SetAlternativeService(const url::SchemeHostPort& origin,
const AlternativeService& alternative_service) {
const base::Time expiration =
test_clock_.Now() + base::TimeDelta::FromDays(1);
if (alternative_service.protocol == kProtoQUIC) {
- return impl_.SetQuicAlternativeService(
- origin, alternative_service, expiration,
+ impl_.SetQuicAlternativeService(
+ origin, NetworkIsolationKey(), alternative_service, expiration,
HttpNetworkSession::Params().quic_params.supported_versions);
} else {
- return impl_.SetHttp2AlternativeService(origin, alternative_service,
- expiration);
+ impl_.SetHttp2AlternativeService(origin, NetworkIsolationKey(),
+ alternative_service, expiration);
}
}
@@ -103,191 +118,363 @@ class HttpServerPropertiesImplTest : public TestWithScopedTaskEnvironment {
const base::TickClock* test_tick_clock_;
base::SimpleTestClock test_clock_;
- HttpServerPropertiesImpl impl_;
+ HttpServerProperties impl_;
};
-typedef HttpServerPropertiesImplTest SpdyServerPropertiesTest;
+TEST_F(HttpServerPropertiesTest, GetNormalizedSchemeHostPort) {
+ url::SchemeHostPort server =
+ HttpServerProperties::GetNormalizedSchemeHostPort(
+ GURL("https://foo.test/"));
+ EXPECT_EQ("https", server.scheme());
+ EXPECT_EQ("foo.test", server.host());
+ EXPECT_EQ(443, server.port());
+
+ server = HttpServerProperties::GetNormalizedSchemeHostPort(
+ GURL("wss://foo.test/"));
+ EXPECT_EQ("https", server.scheme());
+ EXPECT_EQ("foo.test", server.host());
+ EXPECT_EQ(443, server.port());
+
+ server = HttpServerProperties::GetNormalizedSchemeHostPort(
+ GURL("wss://bar.test:7/"));
+ EXPECT_EQ("https", server.scheme());
+ EXPECT_EQ("bar.test", server.host());
+ EXPECT_EQ(7, server.port());
+
+ server = HttpServerProperties::GetNormalizedSchemeHostPort(
+ GURL("http://foo.test/"));
+ EXPECT_EQ("http", server.scheme());
+ EXPECT_EQ("foo.test", server.host());
+ EXPECT_EQ(80, server.port());
+
+ server =
+ HttpServerProperties::GetNormalizedSchemeHostPort(GURL("ws://foo.test/"));
+ EXPECT_EQ("http", server.scheme());
+ EXPECT_EQ("foo.test", server.host());
+ EXPECT_EQ(80, server.port());
+
+ server = HttpServerProperties::GetNormalizedSchemeHostPort(
+ GURL("ws://bar.test:7/"));
+ EXPECT_EQ("http", server.scheme());
+ EXPECT_EQ("bar.test", server.host());
+ EXPECT_EQ(7, server.port());
+
+ // Neither of these should happen, except possibly when loading a bad
+ // properties file, but neither should crash.
+ server = HttpServerProperties::GetNormalizedSchemeHostPort(GURL());
+ EXPECT_EQ("", server.host());
+ server = HttpServerProperties::GetNormalizedSchemeHostPort(
+ GURL("file:///foo/bar"));
+ EXPECT_EQ(server, url::SchemeHostPort(GURL("file:///foo/bar")));
+}
-TEST_F(SpdyServerPropertiesTest, SetWithSchemeHostPort) {
+TEST_F(HttpServerPropertiesTest, SetSupportsSpdy) {
// Check spdy servers are correctly set with SchemeHostPort key.
url::SchemeHostPort https_www_server("https", "www.google.com", 443);
url::SchemeHostPort http_photo_server("http", "photos.google.com", 80);
+ url::SchemeHostPort https_mail_server("https", "mail.google.com", 443);
// Servers with port equal to default port in scheme will drop port components
// when calling Serialize().
- std::string spdy_server_g = https_www_server.Serialize();
- std::string spdy_server_p = http_photo_server.Serialize();
url::SchemeHostPort http_google_server("http", "www.google.com", 443);
url::SchemeHostPort https_photos_server("https", "photos.google.com", 443);
url::SchemeHostPort valid_google_server((GURL("https://www.google.com")));
- // Initializing https://www.google.com:443 and https://photos.google.com:443
- // as spdy servers.
- std::unique_ptr<SpdyServersMap> spdy_servers1 =
- std::make_unique<SpdyServersMap>();
- spdy_servers1->Put(spdy_server_g, true);
- spdy_servers1->Put(spdy_server_p, true);
- impl_.SetSpdyServers(std::move(spdy_servers1));
- EXPECT_TRUE(impl_.SupportsRequestPriority(http_photo_server));
- EXPECT_TRUE(impl_.SupportsRequestPriority(https_www_server));
- EXPECT_FALSE(impl_.SupportsRequestPriority(http_google_server));
- EXPECT_FALSE(impl_.SupportsRequestPriority(https_photos_server));
- EXPECT_TRUE(impl_.SupportsRequestPriority(valid_google_server));
+ impl_.SetSupportsSpdy(https_www_server, NetworkIsolationKey(), true);
+ impl_.SetSupportsSpdy(http_photo_server, NetworkIsolationKey(), true);
+ impl_.SetSupportsSpdy(https_mail_server, NetworkIsolationKey(), false);
+ EXPECT_TRUE(impl_.GetSupportsSpdy(https_www_server, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(https_www_server, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(http_photo_server, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(http_photo_server, NetworkIsolationKey()));
+ EXPECT_FALSE(impl_.GetSupportsSpdy(https_mail_server, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.SupportsRequestPriority(https_mail_server, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.GetSupportsSpdy(http_google_server, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.SupportsRequestPriority(http_google_server, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.GetSupportsSpdy(https_photos_server, NetworkIsolationKey()));
+ EXPECT_FALSE(impl_.SupportsRequestPriority(https_photos_server,
+ NetworkIsolationKey()));
+ EXPECT_TRUE(
+ impl_.GetSupportsSpdy(valid_google_server, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.SupportsRequestPriority(valid_google_server,
+ NetworkIsolationKey()));
+
+ // Flip values of two servers.
+ impl_.SetSupportsSpdy(https_www_server, NetworkIsolationKey(), false);
+ impl_.SetSupportsSpdy(https_mail_server, NetworkIsolationKey(), true);
+ EXPECT_FALSE(impl_.GetSupportsSpdy(https_www_server, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.SupportsRequestPriority(https_www_server, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(https_mail_server, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(https_mail_server, NetworkIsolationKey()));
}
-TEST_F(SpdyServerPropertiesTest, Set) {
- url::SchemeHostPort spdy_server_google("https", "www.google.com", 443);
- std::string spdy_server_g = spdy_server_google.Serialize();
+TEST_F(HttpServerPropertiesTest, SetSupportsSpdyWithNetworkIsolationKey) {
+ const url::SchemeHostPort kServer("https", "foo.test", 443);
+ const url::Origin kOrigin = url::Origin::Create(GURL("https://foo.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey(kOrigin, kOrigin);
+
+ EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+
+ // Without network isolation keys enabled for HttpServerProperties, passing in
+ // a NetworkIsolationKey should have no effect on behavior.
+ for (const auto network_isolation_key_to_set :
+ {NetworkIsolationKey(), kNetworkIsolationKey}) {
+ impl_.SetSupportsSpdy(kServer, network_isolation_key_to_set, true);
+ EXPECT_TRUE(impl_.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_TRUE(impl_.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+
+ impl_.SetSupportsSpdy(kServer, network_isolation_key_to_set, false);
+ EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+ }
- url::SchemeHostPort spdy_server_photos("https", "photos.google.com", 443);
- std::string spdy_server_p = spdy_server_photos.Serialize();
+ // With network isolation keys enabled for HttpServerProperties, the
+ // NetworkIsolationKey argument should be respected.
- url::SchemeHostPort spdy_server_docs("https", "docs.google.com", 443);
- std::string spdy_server_d = spdy_server_docs.Serialize();
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
+ // Since HttpServerProperties caches the feature value, have to create a new
+ // one.
+ HttpServerProperties properties(nullptr /* pref_delegate */,
+ nullptr /* net_log */, test_tick_clock_,
+ &test_clock_);
+
+ EXPECT_FALSE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(
+ properties.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ properties.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+
+ properties.SetSupportsSpdy(kServer, kNetworkIsolationKey, true);
+ EXPECT_TRUE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_TRUE(
+ properties.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ properties.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+
+ properties.SetSupportsSpdy(kServer, NetworkIsolationKey(), true);
+ EXPECT_TRUE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_TRUE(
+ properties.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_TRUE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ properties.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+
+ properties.SetSupportsSpdy(kServer, kNetworkIsolationKey, false);
+ EXPECT_FALSE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(
+ properties.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_TRUE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ properties.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+
+ properties.SetSupportsSpdy(kServer, NetworkIsolationKey(), false);
+ EXPECT_FALSE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(
+ properties.SupportsRequestPriority(kServer, kNetworkIsolationKey));
+ EXPECT_FALSE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ properties.SupportsRequestPriority(kServer, NetworkIsolationKey()));
+}
+TEST_F(HttpServerPropertiesTest, LoadSupportsSpdy) {
+ HttpServerProperties::ServerInfo supports_spdy;
+ supports_spdy.supports_spdy = true;
+ HttpServerProperties::ServerInfo no_spdy;
+ no_spdy.supports_spdy = false;
+
+ url::SchemeHostPort spdy_server_google("https", "www.google.com", 443);
+ url::SchemeHostPort spdy_server_photos("https", "photos.google.com", 443);
+ url::SchemeHostPort spdy_server_docs("https", "docs.google.com", 443);
url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443);
- std::string spdy_server_m = spdy_server_mail.Serialize();
// Check by initializing empty spdy servers.
- std::unique_ptr<SpdyServersMap> spdy_servers =
- std::make_unique<SpdyServersMap>();
- impl_.SetSpdyServers(std::move(spdy_servers));
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_google));
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers));
+ EXPECT_FALSE(
+ impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey()));
// Check by initializing www.google.com:443 and photos.google.com:443 as spdy
// servers.
- std::unique_ptr<SpdyServersMap> spdy_servers1 =
- std::make_unique<SpdyServersMap>();
- spdy_servers1->Put(spdy_server_g, true);
- spdy_servers1->Put(spdy_server_p, true);
- impl_.SetSpdyServers(std::move(spdy_servers1));
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers1 =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ spdy_servers1->Put(CreateSimpleKey(spdy_server_google), supports_spdy);
+ spdy_servers1->Put(CreateSimpleKey(spdy_server_photos), no_spdy);
+ impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers1));
// Note: these calls affect MRU order.
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_photos));
-
- // Verify spdy_server_g and spdy_server_d are in the list in MRU order.
- ASSERT_EQ(2U, impl_.spdy_servers_map().size());
- auto it = impl_.spdy_servers_map().begin();
- EXPECT_EQ(spdy_server_p, it->first);
- EXPECT_TRUE(it->second);
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.GetSupportsSpdy(spdy_server_photos, NetworkIsolationKey()));
+
+ // Verify google and photos are in the list in MRU order.
+ ASSERT_EQ(2U, impl_.server_info_map_for_testing().size());
+ auto it = impl_.server_info_map_for_testing().begin();
+ EXPECT_EQ(spdy_server_photos, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_FALSE(*it->second.supports_spdy);
++it;
- EXPECT_EQ(spdy_server_g, it->first);
- EXPECT_TRUE(it->second);
-
- // Check by initializing mail.google.com:443 and docs.google.com:443 as spdy
- // servers.
- std::unique_ptr<SpdyServersMap> spdy_servers2 =
- std::make_unique<SpdyServersMap>();
- spdy_servers2->Put(spdy_server_m, true);
- spdy_servers2->Put(spdy_server_d, true);
- impl_.SetSpdyServers(std::move(spdy_servers2));
+ EXPECT_EQ(spdy_server_google, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_TRUE(*it->second.supports_spdy);
+
+ // Check by initializing mail.google.com:443 and docs.google.com:443.
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers2 =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ spdy_servers2->Put(CreateSimpleKey(spdy_server_mail), supports_spdy);
+ spdy_servers2->Put(CreateSimpleKey(spdy_server_docs), supports_spdy);
+ impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers2));
// Verify all the servers are in the list in MRU order. Note that
- // SetSpdyServers will put existing spdy server entries in front of newly
- // added entries.
- ASSERT_EQ(4U, impl_.spdy_servers_map().size());
- it = impl_.spdy_servers_map().begin();
- EXPECT_EQ(spdy_server_p, it->first);
- EXPECT_TRUE(it->second);
+ // OnServerInfoLoadedForTesting will put existing spdy server entries in
+ // front of newly added entries.
+ ASSERT_EQ(4U, impl_.server_info_map_for_testing().size());
+ it = impl_.server_info_map_for_testing().begin();
+ EXPECT_EQ(spdy_server_photos, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_FALSE(*it->second.supports_spdy);
++it;
- EXPECT_EQ(spdy_server_g, it->first);
- EXPECT_TRUE(it->second);
+ EXPECT_EQ(spdy_server_google, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_TRUE(*it->second.supports_spdy);
++it;
- EXPECT_EQ(spdy_server_d, it->first);
- EXPECT_TRUE(it->second);
+ EXPECT_EQ(spdy_server_docs, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_TRUE(*it->second.supports_spdy);
++it;
- EXPECT_EQ(spdy_server_m, it->first);
- EXPECT_TRUE(it->second);
+ EXPECT_EQ(spdy_server_mail, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_TRUE(*it->second.supports_spdy);
// Check these in reverse MRU order so that MRU order stays the same.
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_mail));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_photos));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_docs, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.GetSupportsSpdy(spdy_server_photos, NetworkIsolationKey()));
- // Verify new data that is being initialized overwrites what is already in the
- // memory and also verify the recency list order.
- //
- // Change supports SPDY value for photos and mails servers and order of
- // initalization shouldn't matter.
- std::unique_ptr<SpdyServersMap> spdy_servers3 =
- std::make_unique<SpdyServersMap>();
- spdy_servers3->Put(spdy_server_m, false);
- spdy_servers3->Put(spdy_server_p, false);
- impl_.SetSpdyServers(std::move(spdy_servers3));
+ // Verify that old values loaded from disk take precedence over newer learned
+ // values and also verify the recency list order is unchanged.
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers3 =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ spdy_servers3->Put(CreateSimpleKey(spdy_server_mail), no_spdy);
+ spdy_servers3->Put(CreateSimpleKey(spdy_server_photos), supports_spdy);
+ impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers3));
// Verify the entries are in the same order.
- ASSERT_EQ(4U, impl_.spdy_servers_map().size());
- it = impl_.spdy_servers_map().begin();
- EXPECT_EQ(spdy_server_p, it->first);
- EXPECT_FALSE(it->second);
+ ASSERT_EQ(4U, impl_.server_info_map_for_testing().size());
+ it = impl_.server_info_map_for_testing().begin();
+ EXPECT_EQ(spdy_server_photos, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_TRUE(*it->second.supports_spdy);
++it;
- EXPECT_EQ(spdy_server_g, it->first);
- EXPECT_TRUE(it->second);
+ EXPECT_EQ(spdy_server_google, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_TRUE(*it->second.supports_spdy);
++it;
- EXPECT_EQ(spdy_server_d, it->first);
- EXPECT_TRUE(it->second);
+ EXPECT_EQ(spdy_server_docs, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_TRUE(*it->second.supports_spdy);
++it;
- EXPECT_EQ(spdy_server_m, it->first);
- EXPECT_FALSE(it->second);
-
- // Verify photos and mail servers don't support SPDY and other servers support
- // SPDY.
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_photos));
+ EXPECT_EQ(spdy_server_mail, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.supports_spdy.has_value());
+ EXPECT_FALSE(*it->second.supports_spdy);
+
+ // Verify photos server doesn't support SPDY and other servers support SPDY.
+ EXPECT_FALSE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_docs, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_photos, NetworkIsolationKey()));
}
-TEST_F(SpdyServerPropertiesTest, SupportsRequestPriorityTest) {
+TEST_F(HttpServerPropertiesTest, SupportsRequestPriority) {
url::SchemeHostPort spdy_server_empty("https", std::string(), 443);
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_empty));
+ EXPECT_FALSE(
+ impl_.SupportsRequestPriority(spdy_server_empty, NetworkIsolationKey()));
// Add www.google.com:443 as supporting SPDY.
url::SchemeHostPort spdy_server_google("https", "www.google.com", 443);
- impl_.SetSupportsSpdy(spdy_server_google, true);
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
+ impl_.SetSupportsSpdy(spdy_server_google, NetworkIsolationKey(), true);
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(spdy_server_google, NetworkIsolationKey()));
// Add mail.google.com:443 as not supporting SPDY.
url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443);
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail));
+ EXPECT_FALSE(
+ impl_.SupportsRequestPriority(spdy_server_mail, NetworkIsolationKey()));
// Add docs.google.com:443 as supporting SPDY.
url::SchemeHostPort spdy_server_docs("https", "docs.google.com", 443);
- impl_.SetSupportsSpdy(spdy_server_docs, true);
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs));
+ impl_.SetSupportsSpdy(spdy_server_docs, NetworkIsolationKey(), true);
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(spdy_server_docs, NetworkIsolationKey()));
// Add www.youtube.com:443 as supporting QUIC.
url::SchemeHostPort youtube_server("https", "www.youtube.com", 443);
const AlternativeService alternative_service1(kProtoQUIC, "www.youtube.com",
443);
SetAlternativeService(youtube_server, alternative_service1);
- EXPECT_TRUE(impl_.SupportsRequestPriority(youtube_server));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(youtube_server, NetworkIsolationKey()));
// Add www.example.com:443 with two alternative services, one supporting QUIC.
url::SchemeHostPort example_server("https", "www.example.com", 443);
const AlternativeService alternative_service2(kProtoHTTP2, "", 443);
SetAlternativeService(example_server, alternative_service2);
SetAlternativeService(example_server, alternative_service1);
- EXPECT_TRUE(impl_.SupportsRequestPriority(example_server));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(example_server, NetworkIsolationKey()));
// Verify all the entries are the same after additions.
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs));
- EXPECT_TRUE(impl_.SupportsRequestPriority(youtube_server));
- EXPECT_TRUE(impl_.SupportsRequestPriority(example_server));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(spdy_server_google, NetworkIsolationKey()));
+ EXPECT_FALSE(
+ impl_.SupportsRequestPriority(spdy_server_mail, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(spdy_server_docs, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(youtube_server, NetworkIsolationKey()));
+ EXPECT_TRUE(
+ impl_.SupportsRequestPriority(example_server, NetworkIsolationKey()));
}
-TEST_F(SpdyServerPropertiesTest, Clear) {
+TEST_F(HttpServerPropertiesTest, ClearSupportsSpdy) {
// Add www.google.com:443 and mail.google.com:443 as supporting SPDY.
url::SchemeHostPort spdy_server_google("https", "www.google.com", 443);
- impl_.SetSupportsSpdy(spdy_server_google, true);
+ impl_.SetSupportsSpdy(spdy_server_google, NetworkIsolationKey(), true);
url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443);
- impl_.SetSupportsSpdy(spdy_server_mail, true);
+ impl_.SetSupportsSpdy(spdy_server_mail, NetworkIsolationKey(), true);
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_mail));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey()));
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey()));
base::RunLoop run_loop;
bool callback_invoked_ = false;
@@ -297,8 +484,9 @@ TEST_F(SpdyServerPropertiesTest, Clear) {
std::move(quit_closure).Run();
},
&callback_invoked_, run_loop.QuitClosure()));
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_google));
- EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail));
+ EXPECT_FALSE(
+ impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey()));
+ EXPECT_FALSE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey()));
// Callback should be run asynchronously.
EXPECT_FALSE(callback_invoked_);
@@ -306,52 +494,55 @@ TEST_F(SpdyServerPropertiesTest, Clear) {
EXPECT_TRUE(callback_invoked_);
}
-TEST_F(SpdyServerPropertiesTest, MRUOfSpdyServersMap) {
+TEST_F(HttpServerPropertiesTest, MRUOfServerInfoMap) {
url::SchemeHostPort spdy_server_google("https", "www.google.com", 443);
- std::string spdy_server_g = spdy_server_google.Serialize();
url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443);
- std::string spdy_server_m = spdy_server_mail.Serialize();
// Add www.google.com:443 as supporting SPDY.
- impl_.SetSupportsSpdy(spdy_server_google, true);
- ASSERT_EQ(1u, impl_.spdy_servers_map().size());
- auto it = impl_.spdy_servers_map().begin();
- ASSERT_EQ(spdy_server_g, it->first);
+ impl_.SetSupportsSpdy(spdy_server_google, NetworkIsolationKey(), true);
+ ASSERT_EQ(1u, impl_.server_info_map_for_testing().size());
+ auto it = impl_.server_info_map_for_testing().begin();
+ ASSERT_EQ(spdy_server_google, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
// Add mail.google.com:443 as supporting SPDY. Verify mail.google.com:443 and
// www.google.com:443 are in the list.
- impl_.SetSupportsSpdy(spdy_server_mail, true);
- ASSERT_EQ(2u, impl_.spdy_servers_map().size());
- it = impl_.spdy_servers_map().begin();
- ASSERT_EQ(spdy_server_m, it->first);
+ impl_.SetSupportsSpdy(spdy_server_mail, NetworkIsolationKey(), true);
+ ASSERT_EQ(2u, impl_.server_info_map_for_testing().size());
+ it = impl_.server_info_map_for_testing().begin();
+ ASSERT_EQ(spdy_server_mail, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
++it;
- ASSERT_EQ(spdy_server_g, it->first);
+ ASSERT_EQ(spdy_server_google, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
// Get www.google.com:443. It should become the most-recently-used server.
- EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
- ASSERT_EQ(2u, impl_.spdy_servers_map().size());
- it = impl_.spdy_servers_map().begin();
- ASSERT_EQ(spdy_server_g, it->first);
+ EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey()));
+ ASSERT_EQ(2u, impl_.server_info_map_for_testing().size());
+ it = impl_.server_info_map_for_testing().begin();
+ ASSERT_EQ(spdy_server_google, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
++it;
- ASSERT_EQ(spdy_server_m, it->first);
+ ASSERT_EQ(spdy_server_mail, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
}
-typedef HttpServerPropertiesImplTest AlternateProtocolServerPropertiesTest;
+typedef HttpServerPropertiesTest AlternateProtocolServerPropertiesTest;
TEST_F(AlternateProtocolServerPropertiesTest, Basic) {
url::SchemeHostPort test_server("http", "foo", 80);
- EXPECT_FALSE(HasAlternativeService(test_server));
+ EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey()));
AlternativeService alternative_service(kProtoHTTP2, "foo", 443);
SetAlternativeService(test_server, alternative_service);
const AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service,
alternative_service_info_vector[0].alternative_service());
impl_.Clear(base::OnceClosure());
- EXPECT_FALSE(HasAlternativeService(test_server));
+ EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey()));
}
TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) {
@@ -380,10 +571,11 @@ TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) {
alternative_service_info_vector.push_back(alternative_service_info4);
url::SchemeHostPort test_server("https", "foo", 443);
- impl_.SetAlternativeServices(test_server, alternative_service_info_vector);
+ impl_.SetAlternativeServices(test_server, NetworkIsolationKey(),
+ alternative_service_info_vector);
const AlternativeServiceInfoVector alternative_service_info_vector2 =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(3u, alternative_service_info_vector2.size());
EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]);
EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]);
@@ -392,21 +584,20 @@ TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) {
TEST_F(AlternateProtocolServerPropertiesTest, Set) {
// |test_server1| has an alternative service, which will not be
- // affected by SetAlternativeServiceServers(), because
- // |alternative_service_map| does not have an entry for
+ // affected by OnServerInfoLoadedForTesting(), because
+ // |server_info_map| does not have an entry for
// |test_server1|.
url::SchemeHostPort test_server1("http", "foo1", 80);
const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443);
const base::Time now = test_clock_.Now();
base::Time expiration1 = now + base::TimeDelta::FromDays(1);
// 1st entry in the memory.
- impl_.SetHttp2AlternativeService(test_server1, alternative_service1,
- expiration1);
+ impl_.SetHttp2AlternativeService(test_server1, NetworkIsolationKey(),
+ alternative_service1, expiration1);
// |test_server2| has an alternative service, which will be
- // overwritten by SetAlternativeServiceServers(), because
- // |alternative_service_map| has an entry for
- // |test_server2|.
+ // overwritten by OnServerInfoLoadedForTesting(), because
+ // |server_info_map| has an entry for |test_server2|.
AlternativeServiceInfoVector alternative_service_info_vector;
const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443);
base::Time expiration2 = now + base::TimeDelta::FromDays(2);
@@ -415,21 +606,21 @@ TEST_F(AlternateProtocolServerPropertiesTest, Set) {
alternative_service2, expiration2));
url::SchemeHostPort test_server2("http", "foo2", 80);
// 0th entry in the memory.
- impl_.SetAlternativeServices(test_server2, alternative_service_info_vector);
+ impl_.SetAlternativeServices(test_server2, NetworkIsolationKey(),
+ alternative_service_info_vector);
- // Prepare |alternative_service_map| to be loaded by
- // SetAlternativeServiceServers().
- std::unique_ptr<AlternativeServiceMap> alternative_service_map =
- std::make_unique<AlternativeServiceMap>();
+ // Prepare |server_info_map| to be loaded by OnServerInfoLoadedForTesting().
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123);
base::Time expiration3 = now + base::TimeDelta::FromDays(3);
const AlternativeServiceInfo alternative_service_info1 =
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
alternative_service3, expiration3);
// Simulate updating data for 0th entry with data from Preferences.
- alternative_service_map->Put(
- test_server2,
- AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1));
+ server_info_map->GetOrPut(CreateSimpleKey(test_server2))
+ ->second.alternative_services =
+ AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1);
url::SchemeHostPort test_server3("http", "foo3", 80);
const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234);
@@ -439,37 +630,128 @@ TEST_F(AlternateProtocolServerPropertiesTest, Set) {
alternative_service4, expiration4);
// Add an old entry from Preferences, this will be added to end of recency
// list.
- alternative_service_map->Put(
- test_server3,
- AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2));
+ server_info_map->GetOrPut(CreateSimpleKey(test_server3))
+ ->second.alternative_services =
+ AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2);
// MRU list will be test_server2, test_server1, test_server3.
- impl_.SetAlternativeServiceServers(std::move(alternative_service_map));
+ impl_.OnServerInfoLoadedForTesting(std::move(server_info_map));
- // Verify alternative_service_map.
- const AlternativeServiceMap& map = impl_.alternative_service_map();
+ // Verify server_info_map.
+ const HttpServerProperties::ServerInfoMap& map =
+ impl_.server_info_map_for_testing();
ASSERT_EQ(3u, map.size());
auto map_it = map.begin();
- EXPECT_EQ(map_it->first, test_server2);
- ASSERT_EQ(1u, map_it->second.size());
- EXPECT_EQ(alternative_service3, map_it->second[0].alternative_service());
- EXPECT_EQ(expiration3, map_it->second[0].expiration());
+ EXPECT_EQ(test_server2, map_it->first.server);
+ EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(map_it->second.alternative_services.has_value());
+ const AlternativeServiceInfoVector* service_info =
+ &map_it->second.alternative_services.value();
+ ASSERT_EQ(1u, service_info->size());
+ EXPECT_EQ(alternative_service3, (*service_info)[0].alternative_service());
+ EXPECT_EQ(expiration3, (*service_info)[0].expiration());
+
++map_it;
- EXPECT_EQ(map_it->first, test_server1);
- ASSERT_EQ(1u, map_it->second.size());
- EXPECT_EQ(alternative_service1, map_it->second[0].alternative_service());
- EXPECT_EQ(expiration1, map_it->second[0].expiration());
+ EXPECT_EQ(test_server1, map_it->first.server);
+ EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(map_it->second.alternative_services.has_value());
+ service_info = &map_it->second.alternative_services.value();
+ ASSERT_EQ(1u, service_info->size());
+ EXPECT_EQ(alternative_service1, (*service_info)[0].alternative_service());
+ EXPECT_EQ(expiration1, (*service_info)[0].expiration());
+
++map_it;
- EXPECT_EQ(map_it->first, test_server3);
- ASSERT_EQ(1u, map_it->second.size());
- EXPECT_EQ(alternative_service4, map_it->second[0].alternative_service());
- EXPECT_EQ(expiration4, map_it->second[0].expiration());
+ EXPECT_EQ(map_it->first.server, test_server3);
+ EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(map_it->second.alternative_services.has_value());
+ service_info = &map_it->second.alternative_services.value();
+ ASSERT_EQ(1u, service_info->size());
+ EXPECT_EQ(alternative_service4, (*service_info)[0].alternative_service());
+ EXPECT_EQ(expiration4, (*service_info)[0].expiration());
+}
+
+TEST_F(AlternateProtocolServerPropertiesTest, SetWithNetworkIsolationKey) {
+ const url::SchemeHostPort kServer("https", "foo.test", 443);
+ const AlternativeServiceInfoVector kAlternativeServices(
+ {AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ AlternativeService(kProtoHTTP2, "foo", 443),
+ base::Time::Now() + base::TimeDelta::FromDays(1) /* expiration */)});
+ const url::Origin kOrigin = url::Origin::Create(GURL("https://foo.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey(kOrigin, kOrigin);
+
+ EXPECT_TRUE(
+ impl_.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey).empty());
+ EXPECT_TRUE(
+ impl_.GetAlternativeServiceInfos(kServer, NetworkIsolationKey()).empty());
+
+ // Without network isolation keys enabled for HttpServerProperties, passing in
+ // a NetworkIsolationKey should have no effect on behavior.
+ for (const auto network_isolation_key_to_set :
+ {NetworkIsolationKey(), kNetworkIsolationKey}) {
+ impl_.SetAlternativeServices(kServer, network_isolation_key_to_set,
+ kAlternativeServices);
+ EXPECT_EQ(kAlternativeServices,
+ impl_.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey));
+ EXPECT_EQ(kAlternativeServices,
+ impl_.GetAlternativeServiceInfos(kServer, NetworkIsolationKey()));
+
+ impl_.SetAlternativeServices(kServer, network_isolation_key_to_set,
+ AlternativeServiceInfoVector());
+ EXPECT_TRUE(impl_.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey)
+ .empty());
+ EXPECT_TRUE(impl_.GetAlternativeServiceInfos(kServer, NetworkIsolationKey())
+ .empty());
+ }
+
+ // Check that with network isolation keys enabled for HttpServerProperties,
+ // the NetworkIsolationKey argument is respected.
+
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
+ // Since HttpServerProperties caches the feature value, have to create a new
+ // one.
+ HttpServerProperties properties(nullptr /* pref_delegate */,
+ nullptr /* net_log */, test_tick_clock_,
+ &test_clock_);
+
+ properties.SetAlternativeServices(kServer, kNetworkIsolationKey,
+ kAlternativeServices);
+ EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos(
+ kServer, kNetworkIsolationKey));
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(kServer, NetworkIsolationKey())
+ .empty());
+
+ properties.SetAlternativeServices(kServer, NetworkIsolationKey(),
+ kAlternativeServices);
+ EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos(
+ kServer, kNetworkIsolationKey));
+ EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos(
+ kServer, NetworkIsolationKey()));
+
+ properties.SetAlternativeServices(kServer, kNetworkIsolationKey,
+ AlternativeServiceInfoVector());
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey)
+ .empty());
+ EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos(
+ kServer, NetworkIsolationKey()));
+
+ properties.SetAlternativeServices(kServer, NetworkIsolationKey(),
+ AlternativeServiceInfoVector());
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey)
+ .empty());
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(kServer, NetworkIsolationKey())
+ .empty());
}
// Regression test for https://crbug.com/504032:
-// SetAlternativeServiceServers() should not crash if there is an empty
-// hostname is the mapping.
+// OnServerInfoLoadedForTesting() should not crash if there is an
+// empty hostname is the mapping.
TEST_F(AlternateProtocolServerPropertiesTest, SetWithEmptyHostname) {
url::SchemeHostPort server("https", "foo", 443);
const AlternativeService alternative_service_with_empty_hostname(kProtoHTTP2,
@@ -479,21 +761,21 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetWithEmptyHostname) {
SetAlternativeService(server, alternative_service_with_empty_hostname);
impl_.MarkAlternativeServiceBroken(alternative_service_with_foo_hostname);
- std::unique_ptr<AlternativeServiceMap> alternative_service_map =
- std::make_unique<AlternativeServiceMap>();
- impl_.SetAlternativeServiceServers(std::move(alternative_service_map));
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ impl_.OnServerInfoLoadedForTesting(std::move(server_info_map));
EXPECT_TRUE(
impl_.IsAlternativeServiceBroken(alternative_service_with_foo_hostname));
const AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(server);
+ impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service_with_foo_hostname,
alternative_service_info_vector[0].alternative_service());
}
// Regression test for https://crbug.com/516486:
-// GetAlternativeServiceInfos() should remove |alternative_service_map_|
+// GetAlternativeServiceInfos() should remove |server_info_map_|
// elements with empty value.
TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) {
url::SchemeHostPort server("https", "foo", 443);
@@ -502,29 +784,31 @@ TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) {
const AlternativeServiceInfo alternative_service_info =
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
alternative_service, expiration);
- std::unique_ptr<AlternativeServiceMap> alternative_service_map =
- std::make_unique<AlternativeServiceMap>();
- alternative_service_map->Put(
- server,
- AlternativeServiceInfoVector(/*size=*/1, alternative_service_info));
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ server_info_map->GetOrPut(CreateSimpleKey(server))
+ ->second.alternative_services = AlternativeServiceInfoVector(
+ /*size=*/1, alternative_service_info);
- // Prepare |alternative_service_map_| with a single key that has a single
+ // Prepare |server_info_map_| with a single key that has a single
// AlternativeServiceInfo with identical hostname and port.
- impl_.SetAlternativeServiceServers(std::move(alternative_service_map));
+ impl_.OnServerInfoLoadedForTesting(std::move(server_info_map));
// GetAlternativeServiceInfos() should remove such AlternativeServiceInfo from
- // |alternative_service_map_|, emptying the AlternativeServiceInfoVector
+ // |server_info_map_|, emptying the AlternativeServiceInfoVector
// corresponding to |server|.
- ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty());
+ ASSERT_TRUE(
+ impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty());
// GetAlternativeServiceInfos() should remove this key from
- // |alternative_service_map_|, and SetAlternativeServices() should not crash.
+ // |server_info_map_|, and SetAlternativeServices() should not crash.
impl_.SetAlternativeServices(
- server,
+ server, NetworkIsolationKey(),
AlternativeServiceInfoVector(/*size=*/1, alternative_service_info));
// There should still be no alternative service assigned to |server|.
- ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty());
+ ASSERT_TRUE(
+ impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty());
}
// Regression test for https://crbug.com/516486 for the canonical host case.
@@ -536,31 +820,34 @@ TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) {
const AlternativeServiceInfo alternative_service_info =
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
alternative_service, expiration);
- std::unique_ptr<AlternativeServiceMap> alternative_service_map =
- std::make_unique<AlternativeServiceMap>();
- alternative_service_map->Put(
- canonical_server,
- AlternativeServiceInfoVector(/*size=*/1, alternative_service_info));
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ server_info_map->GetOrPut(CreateSimpleKey(canonical_server))
+ ->second.alternative_services =
+ AlternativeServiceInfoVector(/*size=*/1, alternative_service_info);
- // Prepare |alternative_service_map_| with a single key that has a single
+ // Prepare |server_info_map_| with a single key that has a single
// AlternativeServiceInfo with identical hostname and port.
- impl_.SetAlternativeServiceServers(std::move(alternative_service_map));
+ impl_.OnServerInfoLoadedForTesting(std::move(server_info_map));
// GetAlternativeServiceInfos() should remove such AlternativeServiceInfo from
- // |alternative_service_map_|, emptying the AlternativeServiceInfoVector
+ // |server_info_map_|, emptying the AlternativeServiceInfoVector
// corresponding to |canonical_server|, even when looking up
// alternative services for |server|.
- ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty());
+ ASSERT_TRUE(
+ impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty());
// GetAlternativeServiceInfos() should remove this key from
- // |alternative_service_map_|, and SetAlternativeServices() should not crash.
+ // |server_info_map_|, and SetAlternativeServices() should not crash.
impl_.SetAlternativeServices(
- canonical_server,
+ canonical_server, NetworkIsolationKey(),
AlternativeServiceInfoVector(/*size=*/1, alternative_service_info));
// There should still be no alternative service assigned to
// |canonical_server|.
- ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty());
+ ASSERT_TRUE(
+ impl_.GetAlternativeServiceInfos(canonical_server, NetworkIsolationKey())
+ .empty());
}
TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) {
@@ -574,12 +861,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) {
HttpNetworkSession::Params().quic_params.supported_versions);
impl_.SetAlternativeServices(
- canonical_server,
+ canonical_server, NetworkIsolationKey(),
AlternativeServiceInfoVector(/*size=*/1, alternative_service_info));
// Make sure the canonical service is returned for the other server.
const AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(server);
+ impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(kProtoQUIC,
alternative_service_info_vector[0].alternative_service().protocol);
@@ -588,10 +875,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) {
// Now clear the alternatives for the other server and make sure it stays
// cleared.
// GetAlternativeServices() should remove this key from
- // |alternative_service_map_|, and SetAlternativeServices() should not crash.
- impl_.SetAlternativeServices(server, AlternativeServiceInfoVector());
+ // |server_info_map_|, and SetAlternativeServices() should not crash.
+ impl_.SetAlternativeServices(server, NetworkIsolationKey(),
+ AlternativeServiceInfoVector());
- ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty());
+ ASSERT_TRUE(
+ impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty());
}
TEST_F(AlternateProtocolServerPropertiesTest, MRUOfGetAlternativeServiceInfos) {
@@ -602,23 +891,30 @@ TEST_F(AlternateProtocolServerPropertiesTest, MRUOfGetAlternativeServiceInfos) {
const AlternativeService alternative_service2(kProtoHTTP2, "foo2", 1234);
SetAlternativeService(test_server2, alternative_service2);
- const AlternativeServiceMap& map = impl_.alternative_service_map();
+ const HttpServerProperties::ServerInfoMap& map =
+ impl_.server_info_map_for_testing();
auto it = map.begin();
- EXPECT_EQ(it->first, test_server2);
- ASSERT_EQ(1u, it->second.size());
- EXPECT_EQ(alternative_service2, it->second[0].alternative_service());
+ EXPECT_EQ(test_server2, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.alternative_services.has_value());
+ ASSERT_EQ(1u, it->second.alternative_services->size());
+ EXPECT_EQ(alternative_service2,
+ it->second.alternative_services.value()[0].alternative_service());
const AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server1);
+ impl_.GetAlternativeServiceInfos(test_server1, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
// GetAlternativeServices should reorder the AlternateProtocol map.
it = map.begin();
- EXPECT_EQ(it->first, test_server1);
- ASSERT_EQ(1u, it->second.size());
- EXPECT_EQ(alternative_service1, it->second[0].alternative_service());
+ EXPECT_EQ(test_server1, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.alternative_services.has_value());
+ ASSERT_EQ(1u, it->second.alternative_services->size());
+ EXPECT_EQ(alternative_service1,
+ it->second.alternative_services.value()[0].alternative_service());
}
TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) {
@@ -626,7 +922,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) {
const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443);
SetAlternativeService(test_server, alternative_service1);
AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -635,7 +931,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) {
// GetAlternativeServiceInfos should return the broken alternative service.
impl_.MarkAlternativeServiceBroken(alternative_service1);
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -651,9 +947,10 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) {
alternative_service_info_vector2.push_back(
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
alternative_service2, expiration));
- impl_.SetAlternativeServices(test_server, alternative_service_info_vector2);
+ impl_.SetAlternativeServices(test_server, NetworkIsolationKey(),
+ alternative_service_info_vector2);
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(2u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -665,7 +962,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) {
// SetAlternativeService should add a broken alternative service to the map.
SetAlternativeService(test_server, alternative_service1);
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -678,7 +975,7 @@ TEST_F(AlternateProtocolServerPropertiesTest,
const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443);
SetAlternativeService(test_server, alternative_service1);
AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -689,7 +986,7 @@ TEST_F(AlternateProtocolServerPropertiesTest,
alternative_service1);
// The alternative service should be persisted and marked as broken.
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -705,9 +1002,10 @@ TEST_F(AlternateProtocolServerPropertiesTest,
alternative_service_info_vector2.push_back(
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
alternative_service2, expiration));
- impl_.SetAlternativeServices(test_server, alternative_service_info_vector2);
+ impl_.SetAlternativeServices(test_server, NetworkIsolationKey(),
+ alternative_service_info_vector2);
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(2u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -719,7 +1017,7 @@ TEST_F(AlternateProtocolServerPropertiesTest,
// SetAlternativeService should add a broken alternative service to the map.
SetAlternativeService(test_server, alternative_service1);
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(alternative_service1,
alternative_service_info_vector[0].alternative_service());
@@ -746,10 +1044,11 @@ TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) {
alternative_service2, now + one_day));
url::SchemeHostPort test_server("http", "foo", 80);
- impl_.SetAlternativeServices(test_server, alternative_service_info_vector);
+ impl_.SetAlternativeServices(test_server, NetworkIsolationKey(),
+ alternative_service_info_vector);
AlternativeServiceInfoVector alternative_service_info_vector2 =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector2.size());
EXPECT_EQ(alternative_service2,
alternative_service_info_vector2[0].alternative_service());
@@ -775,12 +1074,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) {
alternative_service2, now + one_day));
url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443);
- impl_.SetAlternativeServices(canonical_server,
+ impl_.SetAlternativeServices(canonical_server, NetworkIsolationKey(),
alternative_service_info_vector);
url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443);
AlternativeServiceInfoVector alternative_service_info_vector2 =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector2.size());
EXPECT_EQ(alternative_service2,
alternative_service_info_vector2[0].alternative_service());
@@ -799,29 +1098,47 @@ TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) {
alternative_service2, expiration));
// Set Alt-Svc list for |http_server|.
url::SchemeHostPort http_server("http", "foo", 80);
- impl_.SetAlternativeServices(http_server, alternative_service_info_vector);
+ impl_.SetAlternativeServices(http_server, NetworkIsolationKey(),
+ alternative_service_info_vector);
- const net::AlternativeServiceMap& map = impl_.alternative_service_map();
+ const net::HttpServerProperties::ServerInfoMap& map =
+ impl_.server_info_map_for_testing();
auto it = map.begin();
- EXPECT_EQ(it->first, http_server);
- ASSERT_EQ(2u, it->second.size());
- EXPECT_EQ(alternative_service1, it->second[0].alternative_service());
- EXPECT_EQ(alternative_service2, it->second[1].alternative_service());
+ EXPECT_EQ(http_server, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.alternative_services.has_value());
+ ASSERT_EQ(2u, it->second.alternative_services->size());
+ EXPECT_EQ(alternative_service1,
+ it->second.alternative_services.value()[0].alternative_service());
+ EXPECT_EQ(alternative_service2,
+ it->second.alternative_services.value()[1].alternative_service());
// Check Alt-Svc list should not be set for |https_server|.
url::SchemeHostPort https_server("https", "foo", 80);
- EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(https_server).size());
+ EXPECT_EQ(
+ 0u, impl_.GetAlternativeServiceInfos(https_server, NetworkIsolationKey())
+ .size());
// Set Alt-Svc list for |https_server|.
- impl_.SetAlternativeServices(https_server, alternative_service_info_vector);
- EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size());
- EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(http_server).size());
+ impl_.SetAlternativeServices(https_server, NetworkIsolationKey(),
+ alternative_service_info_vector);
+ EXPECT_EQ(
+ 2u, impl_.GetAlternativeServiceInfos(https_server, NetworkIsolationKey())
+ .size());
+ EXPECT_EQ(2u,
+ impl_.GetAlternativeServiceInfos(http_server, NetworkIsolationKey())
+ .size());
// Clear Alt-Svc list for |http_server|.
- impl_.SetAlternativeServices(http_server, AlternativeServiceInfoVector());
+ impl_.SetAlternativeServices(http_server, NetworkIsolationKey(),
+ AlternativeServiceInfoVector());
- EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size());
- EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size());
+ EXPECT_EQ(0u,
+ impl_.GetAlternativeServiceInfos(http_server, NetworkIsolationKey())
+ .size());
+ EXPECT_EQ(
+ 2u, impl_.GetAlternativeServiceInfos(https_server, NetworkIsolationKey())
+ .size());
}
TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) {
@@ -836,16 +1153,23 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) {
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
alternative_service2, expiration));
url::SchemeHostPort test_server("http", "foo", 80);
- impl_.SetAlternativeServices(test_server, alternative_service_info_vector);
+ impl_.SetAlternativeServices(test_server, NetworkIsolationKey(),
+ alternative_service_info_vector);
- const net::AlternativeServiceMap& map = impl_.alternative_service_map();
+ const net::HttpServerProperties::ServerInfoMap& map =
+ impl_.server_info_map_for_testing();
auto it = map.begin();
- EXPECT_EQ(it->first, test_server);
- ASSERT_EQ(2u, it->second.size());
- EXPECT_EQ(alternative_service1, it->second[0].alternative_service());
- EXPECT_EQ(alternative_service2, it->second[1].alternative_service());
+ EXPECT_EQ(test_server, it->first.server);
+ EXPECT_TRUE(it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(it->second.alternative_services.has_value());
+ ASSERT_EQ(2u, it->second.alternative_services->size());
+ EXPECT_EQ(alternative_service1,
+ it->second.alternative_services.value()[0].alternative_service());
+ EXPECT_EQ(alternative_service2,
+ it->second.alternative_services.value()[1].alternative_service());
- impl_.SetAlternativeServices(test_server, AlternativeServiceInfoVector());
+ impl_.SetAlternativeServices(test_server, NetworkIsolationKey(),
+ AlternativeServiceInfoVector());
EXPECT_TRUE(map.empty());
}
@@ -860,7 +1184,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, BrokenShadowsCanonical) {
"bar.c.youtube.com", 1234);
SetAlternativeService(canonical_server, canonical_alternative_service);
AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(canonical_alternative_service,
alternative_service_info_vector[0].alternative_service());
@@ -871,7 +1195,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, BrokenShadowsCanonical) {
SetAlternativeService(test_server, broken_alternative_service);
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(broken_alternative_service,
alternative_service_info_vector[0].alternative_service());
@@ -883,11 +1207,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearBroken) {
const AlternativeService alternative_service(kProtoHTTP2, "foo", 443);
SetAlternativeService(test_server, alternative_service);
impl_.MarkAlternativeServiceBroken(alternative_service);
- ASSERT_TRUE(HasAlternativeService(test_server));
+ ASSERT_TRUE(HasAlternativeService(test_server, NetworkIsolationKey()));
EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service));
// SetAlternativeServices should leave a broken alternative service marked
// as such.
- impl_.SetAlternativeServices(test_server, AlternativeServiceInfoVector());
+ impl_.SetAlternativeServices(test_server, NetworkIsolationKey(),
+ AlternativeServiceInfoVector());
EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service));
}
@@ -941,7 +1266,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, OnDefaultNetworkChanged) {
EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
// Default network change clears alt svc broken until default network changes.
- EXPECT_TRUE(impl_.OnDefaultNetworkChanged());
+ impl_.OnDefaultNetworkChanged();
EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service));
EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
@@ -956,7 +1281,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, OnDefaultNetworkChanged) {
// Default network change doesn't affect alt svc that was simply marked broken
// most recently.
- EXPECT_FALSE(impl_.OnDefaultNetworkChanged());
+ impl_.OnDefaultNetworkChanged();
EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service));
EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
@@ -968,17 +1293,17 @@ TEST_F(AlternateProtocolServerPropertiesTest, OnDefaultNetworkChanged) {
// Default network change clears alt svc that was marked broken until default
// network change most recently even if the alt svc was initially marked
// broken.
- EXPECT_TRUE(impl_.OnDefaultNetworkChanged());
+ impl_.OnDefaultNetworkChanged();
EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service));
EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
}
TEST_F(AlternateProtocolServerPropertiesTest, Canonical) {
url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443);
- EXPECT_FALSE(HasAlternativeService(test_server));
+ EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey()));
url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443);
- EXPECT_FALSE(HasAlternativeService(canonical_server));
+ EXPECT_FALSE(HasAlternativeService(canonical_server, NetworkIsolationKey()));
AlternativeServiceInfoVector alternative_service_info_vector;
const AlternativeService canonical_alternative_service1(
@@ -992,13 +1317,13 @@ TEST_F(AlternateProtocolServerPropertiesTest, Canonical) {
alternative_service_info_vector.push_back(
AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
canonical_alternative_service2, expiration));
- impl_.SetAlternativeServices(canonical_server,
+ impl_.SetAlternativeServices(canonical_server, NetworkIsolationKey(),
alternative_service_info_vector);
// Since |test_server| does not have an alternative service itself,
// GetAlternativeServiceInfos should return those of |canonical_server|.
AlternativeServiceInfoVector alternative_service_info_vector2 =
- impl_.GetAlternativeServiceInfos(test_server);
+ impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey());
ASSERT_EQ(2u, alternative_service_info_vector2.size());
EXPECT_EQ(canonical_alternative_service1,
alternative_service_info_vector2[0].alternative_service());
@@ -1014,9 +1339,10 @@ TEST_F(AlternateProtocolServerPropertiesTest, Canonical) {
alternative_service_info_vector2[1].alternative_service().port);
// Verify the canonical suffix.
- EXPECT_EQ(".c.youtube.com", *impl_.GetCanonicalSuffix(test_server.host()));
EXPECT_EQ(".c.youtube.com",
- *impl_.GetCanonicalSuffix(canonical_server.host()));
+ *impl_.GetCanonicalSuffixForTesting(test_server.host()));
+ EXPECT_EQ(".c.youtube.com",
+ *impl_.GetCanonicalSuffixForTesting(canonical_server.host()));
}
TEST_F(AlternateProtocolServerPropertiesTest, ClearCanonical) {
@@ -1026,9 +1352,99 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearCanonical) {
"bar.c.youtube.com", 1234);
SetAlternativeService(canonical_server, canonical_alternative_service);
- impl_.SetAlternativeServices(canonical_server,
+ impl_.SetAlternativeServices(canonical_server, NetworkIsolationKey(),
AlternativeServiceInfoVector());
- EXPECT_FALSE(HasAlternativeService(test_server));
+ EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey()));
+}
+
+TEST_F(AlternateProtocolServerPropertiesTest,
+ CanonicalWithNetworkIsolationKey) {
+ const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1);
+ const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2);
+
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
+ // Since HttpServerProperties caches the feature value, have to create a new
+ // one.
+ HttpServerProperties properties(nullptr /* pref_delegate */,
+ nullptr /* net_log */, test_tick_clock_,
+ &test_clock_);
+
+ url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443);
+ EXPECT_FALSE(HasAlternativeService(test_server, kNetworkIsolationKey1));
+
+ url::SchemeHostPort canonical_server1("https", "bar.c.youtube.com", 443);
+ EXPECT_FALSE(HasAlternativeService(canonical_server1, kNetworkIsolationKey1));
+
+ AlternativeServiceInfoVector alternative_service_info_vector;
+ const AlternativeService canonical_alternative_service1(
+ kProtoQUIC, "bar.c.youtube.com", 1234);
+ base::Time expiration = test_clock_.Now() + base::TimeDelta::FromDays(1);
+ alternative_service_info_vector.push_back(
+ AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ canonical_alternative_service1, expiration,
+ HttpNetworkSession::Params().quic_params.supported_versions));
+ const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443);
+ alternative_service_info_vector.push_back(
+ AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
+ canonical_alternative_service2, expiration));
+ properties.SetAlternativeServices(canonical_server1, kNetworkIsolationKey1,
+ alternative_service_info_vector);
+
+ // Since |test_server| does not have an alternative service itself,
+ // GetAlternativeServiceInfos should return those of |canonical_server|.
+ AlternativeServiceInfoVector alternative_service_info_vector2 =
+ properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1);
+ ASSERT_EQ(2u, alternative_service_info_vector2.size());
+ EXPECT_EQ(canonical_alternative_service1,
+ alternative_service_info_vector2[0].alternative_service());
+
+ // Canonical information should not be visible for other NetworkIsolationKeys.
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2)
+ .empty());
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
+
+ // Now add an alternative service entry for kNetworkIsolationKey2 for a
+ // different server and different NetworkIsolationKey, but with the same
+ // canonical suffix.
+ url::SchemeHostPort canonical_server2("https", "shrimp.c.youtube.com", 443);
+ properties.SetAlternativeServices(canonical_server2, kNetworkIsolationKey2,
+ {alternative_service_info_vector[0]});
+
+ // The canonical server information should reachable, and different, for both
+ // NetworkIsolationKeys.
+ EXPECT_EQ(
+ 1u,
+ properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2)
+ .size());
+ EXPECT_EQ(
+ 2u,
+ properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1)
+ .size());
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
+
+ // Clearing the alternate service state of kNetworkIsolationKey1's canonical
+ // server should only affect kNetworkIsolationKey1.
+ properties.SetAlternativeServices(canonical_server1, kNetworkIsolationKey1,
+ {});
+ EXPECT_EQ(
+ 1u,
+ properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2)
+ .size());
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1)
+ .empty());
+ EXPECT_TRUE(
+ properties.GetAlternativeServiceInfos(test_server, NetworkIsolationKey())
+ .empty());
}
TEST_F(AlternateProtocolServerPropertiesTest, CanonicalBroken) {
@@ -1038,9 +1454,9 @@ TEST_F(AlternateProtocolServerPropertiesTest, CanonicalBroken) {
"bar.c.youtube.com", 1234);
SetAlternativeService(canonical_server, canonical_alternative_service);
- EXPECT_TRUE(HasAlternativeService(test_server));
+ EXPECT_TRUE(HasAlternativeService(test_server, NetworkIsolationKey()));
impl_.MarkAlternativeServiceBroken(canonical_alternative_service);
- EXPECT_FALSE(HasAlternativeService(test_server));
+ EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey()));
}
TEST_F(AlternateProtocolServerPropertiesTest,
@@ -1051,10 +1467,10 @@ TEST_F(AlternateProtocolServerPropertiesTest,
"bar.c.youtube.com", 1234);
SetAlternativeService(canonical_server, canonical_alternative_service);
- EXPECT_TRUE(HasAlternativeService(test_server));
+ EXPECT_TRUE(HasAlternativeService(test_server, NetworkIsolationKey()));
impl_.MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
canonical_alternative_service);
- EXPECT_FALSE(HasAlternativeService(test_server));
+ EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey()));
}
// Adding an alternative service for a new host overrides canonical host.
@@ -1065,7 +1481,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, CanonicalOverride) {
1234);
SetAlternativeService(bar_server, bar_alternative_service);
AlternativeServiceInfoVector alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(foo_server);
+ impl_.GetAlternativeServiceInfos(foo_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(bar_alternative_service,
alternative_service_info_vector[0].alternative_service());
@@ -1075,7 +1491,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, CanonicalOverride) {
443);
SetAlternativeService(qux_server, qux_alternative_service);
alternative_service_info_vector =
- impl_.GetAlternativeServiceInfos(foo_server);
+ impl_.GetAlternativeServiceInfos(foo_server, NetworkIsolationKey());
ASSERT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(qux_alternative_service,
alternative_service_info_vector[0].alternative_service());
@@ -1089,7 +1505,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearWithCanonical) {
SetAlternativeService(canonical_server, canonical_alternative_service);
impl_.Clear(base::OnceClosure());
- EXPECT_FALSE(HasAlternativeService(test_server));
+ EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey()));
}
TEST_F(AlternateProtocolServerPropertiesTest,
@@ -1097,18 +1513,18 @@ TEST_F(AlternateProtocolServerPropertiesTest,
url::SchemeHostPort server("https", "foo", 443);
AlternativeService alternative_service(kProtoQUIC, "foo", 443);
SetAlternativeService(server, alternative_service);
- EXPECT_TRUE(HasAlternativeService(server));
+ EXPECT_TRUE(HasAlternativeService(server, NetworkIsolationKey()));
EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service));
EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
base::TimeTicks past =
test_tick_clock_->NowTicks() - base::TimeDelta::FromSeconds(42);
- HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime(
+ HttpServerPropertiesPeer::AddBrokenAlternativeServiceWithExpirationTime(
&impl_, alternative_service, past);
EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service));
EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
- HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(&impl_);
+ HttpServerPropertiesPeer::ExpireBrokenAlternateProtocolMappings(&impl_);
EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service));
EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
}
@@ -1118,33 +1534,33 @@ TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc) {
url::SchemeHostPort foo_server("https", "foo", 443);
AlternativeService bar_alternative_service(kProtoQUIC, "bar", 443);
SetAlternativeService(foo_server, bar_alternative_service);
- EXPECT_TRUE(HasAlternativeService(foo_server));
+ EXPECT_TRUE(HasAlternativeService(foo_server, NetworkIsolationKey()));
url::SchemeHostPort bar_server1("http", "bar", 80);
AlternativeService nohost_alternative_service(kProtoQUIC, "", 443);
SetAlternativeService(bar_server1, nohost_alternative_service);
- EXPECT_TRUE(HasAlternativeService(bar_server1));
+ EXPECT_TRUE(HasAlternativeService(bar_server1, NetworkIsolationKey()));
url::SchemeHostPort bar_server2("https", "bar", 443);
AlternativeService baz_alternative_service(kProtoQUIC, "baz", 1234);
SetAlternativeService(bar_server2, baz_alternative_service);
- EXPECT_TRUE(HasAlternativeService(bar_server2));
+ EXPECT_TRUE(HasAlternativeService(bar_server2, NetworkIsolationKey()));
// Mark "bar:443" as broken.
base::TimeTicks past =
test_tick_clock_->NowTicks() - base::TimeDelta::FromSeconds(42);
- HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime(
+ HttpServerPropertiesPeer::AddBrokenAlternativeServiceWithExpirationTime(
&impl_, bar_alternative_service, past);
// Expire brokenness of "bar:443".
- HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(&impl_);
+ HttpServerPropertiesPeer::ExpireBrokenAlternateProtocolMappings(&impl_);
// "foo:443" should have no alternative service now.
- EXPECT_FALSE(HasAlternativeService(foo_server));
+ EXPECT_FALSE(HasAlternativeService(foo_server, NetworkIsolationKey()));
// "bar:80" should have no alternative service now.
- EXPECT_FALSE(HasAlternativeService(bar_server1));
+ EXPECT_FALSE(HasAlternativeService(bar_server1, NetworkIsolationKey()));
// The alternative service of "bar:443" should be unaffected.
- EXPECT_TRUE(HasAlternativeService(bar_server2));
+ EXPECT_TRUE(HasAlternativeService(bar_server2, NetworkIsolationKey()));
EXPECT_TRUE(
impl_.WasAlternativeServiceRecentlyBroken(bar_alternative_service));
@@ -1209,6 +1625,33 @@ TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc2) {
EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2));
}
+// Regression test for https://crbug.com/994537. Having a ServerInfo entry
+// without a populated |alternative_services| value would cause
+// OnExpireBrokenAlternativeService() to hang..
+TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc3) {
+ // Add an altertive service entry.
+ const url::SchemeHostPort kServer1("https", "foo", 443);
+ const AlternativeService kAltService(kProtoQUIC, "bar", 443);
+ SetAlternativeService(kServer1, kAltService);
+ EXPECT_TRUE(HasAlternativeService(kServer1, NetworkIsolationKey()));
+
+ // Add an entry to ServerInfo for another server, without an alternative
+ // service value.
+ const url::SchemeHostPort kServer2("http", "bar", 80);
+ impl_.SetSupportsSpdy(kServer2, NetworkIsolationKey(), false);
+
+ // Mark kAltService as broken.
+ base::TimeTicks past =
+ test_tick_clock_->NowTicks() - base::TimeDelta::FromSeconds(42);
+ HttpServerPropertiesPeer::AddBrokenAlternativeServiceWithExpirationTime(
+ &impl_, kAltService, past);
+
+ // Expire brokenness of kAltService. This call should not hang.
+ HttpServerPropertiesPeer::ExpireBrokenAlternateProtocolMappings(&impl_);
+
+ EXPECT_FALSE(HasAlternativeService(kServer1, NetworkIsolationKey()));
+}
+
TEST_F(AlternateProtocolServerPropertiesTest,
GetAlternativeServiceInfoAsValue) {
base::Time::Exploded now_exploded;
@@ -1242,6 +1685,7 @@ TEST_F(AlternateProtocolServerPropertiesTest,
HttpNetworkSession::Params().quic_params.supported_versions));
impl_.SetAlternativeServices(url::SchemeHostPort("https", "youtube.com", 443),
+ NetworkIsolationKey(),
alternative_service_info_vector);
impl_.MarkAlternativeServiceBroken(
@@ -1256,6 +1700,7 @@ TEST_F(AlternateProtocolServerPropertiesTest,
AlternativeService(kProtoHTTP2, "foo2", 443),
now + base::TimeDelta::FromDays(1)));
impl_.SetAlternativeServices(url::SchemeHostPort("http", "test.com", 80),
+ NetworkIsolationKey(),
alternative_service_info_vector);
const char expected_json[] =
@@ -1263,6 +1708,7 @@ TEST_F(AlternateProtocolServerPropertiesTest,
"{"
"\"alternative_service\":"
"[\"h2 foo2:443, expires 2018-01-25 15:12:53\"],"
+ "\"network_isolation_key\":\"null\","
"\"server\":\"http://test.com\""
"},"
"{"
@@ -1272,6 +1718,7 @@ TEST_F(AlternateProtocolServerPropertiesTest,
" (broken until 2018-01-24 15:17:53)\","
"\"quic baz:443, expires 2018-01-24 16:12:53"
" (broken until 2018-01-24 15:17:53)\"],"
+ "\"network_isolation_key\":\"null\","
"\"server\":\"https://youtube.com\""
"}"
"]";
@@ -1284,14 +1731,14 @@ TEST_F(AlternateProtocolServerPropertiesTest,
EXPECT_EQ(expected_json, alternative_service_info_json);
}
-typedef HttpServerPropertiesImplTest SupportsQuicServerPropertiesTest;
+typedef HttpServerPropertiesTest SupportsQuicServerPropertiesTest;
TEST_F(SupportsQuicServerPropertiesTest, Set) {
HostPortPair quic_server_google("www.google.com", 443);
// Check by initializing empty address.
IPAddress initial_address;
- impl_.SetSupportsQuic(initial_address);
+ impl_.OnSupportsQuicLoadedForTesting(initial_address);
IPAddress address;
EXPECT_FALSE(impl_.GetSupportsQuic(&address));
@@ -1299,7 +1746,7 @@ TEST_F(SupportsQuicServerPropertiesTest, Set) {
// Check by initializing with a valid address.
initial_address = IPAddress::IPv4Localhost();
- impl_.SetSupportsQuic(initial_address);
+ impl_.OnSupportsQuicLoadedForTesting(initial_address);
EXPECT_TRUE(impl_.GetSupportsQuic(&address));
EXPECT_EQ(initial_address, address);
@@ -1321,112 +1768,128 @@ TEST_F(SupportsQuicServerPropertiesTest, SetSupportsQuic) {
EXPECT_FALSE(impl_.GetSupportsQuic(&address));
}
-typedef HttpServerPropertiesImplTest ServerNetworkStatsServerPropertiesTest;
-
-TEST_F(ServerNetworkStatsServerPropertiesTest, Set) {
+TEST_F(HttpServerPropertiesTest, LoadServerNetworkStats) {
url::SchemeHostPort google_server("https", "www.google.com", 443);
// Check by initializing empty ServerNetworkStats.
- std::unique_ptr<ServerNetworkStatsMap> init_server_network_stats_map =
- std::make_unique<ServerNetworkStatsMap>();
- impl_.SetServerNetworkStats(std::move(init_server_network_stats_map));
- const ServerNetworkStats* stats = impl_.GetServerNetworkStats(google_server);
- EXPECT_EQ(NULL, stats);
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> load_server_info_map =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ impl_.OnServerInfoLoadedForTesting(std::move(load_server_info_map));
+ const ServerNetworkStats* stats =
+ impl_.GetServerNetworkStats(google_server, NetworkIsolationKey());
+ EXPECT_EQ(nullptr, stats);
// Check by initializing with www.google.com:443.
ServerNetworkStats stats_google;
stats_google.srtt = base::TimeDelta::FromMicroseconds(10);
stats_google.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(100);
- init_server_network_stats_map = std::make_unique<ServerNetworkStatsMap>();
- init_server_network_stats_map->Put(google_server, stats_google);
- impl_.SetServerNetworkStats(std::move(init_server_network_stats_map));
+ load_server_info_map =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
+ load_server_info_map->GetOrPut(CreateSimpleKey(google_server))
+ ->second.server_network_stats = stats_google;
+ impl_.OnServerInfoLoadedForTesting(std::move(load_server_info_map));
// Verify data for www.google.com:443.
- ASSERT_EQ(1u, impl_.server_network_stats_map().size());
- EXPECT_EQ(stats_google, *(impl_.GetServerNetworkStats(google_server)));
+ ASSERT_EQ(1u, impl_.server_info_map_for_testing().size());
+ EXPECT_EQ(stats_google, *(impl_.GetServerNetworkStats(
+ google_server, NetworkIsolationKey())));
// Test recency order and overwriting of data.
//
// |docs_server| has a ServerNetworkStats, which will be overwritten by
- // SetServerNetworkStats(), because |server_network_stats_map| has an
+ // OnServerInfoLoadedForTesting(), because |server_network_stats_map| has an
// entry for |docs_server|.
url::SchemeHostPort docs_server("https", "docs.google.com", 443);
ServerNetworkStats stats_docs;
stats_docs.srtt = base::TimeDelta::FromMicroseconds(20);
stats_docs.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(200);
// Recency order will be |docs_server| and |google_server|.
- impl_.SetServerNetworkStats(docs_server, stats_docs);
+ impl_.SetServerNetworkStats(docs_server, NetworkIsolationKey(), stats_docs);
- // Prepare |server_network_stats_map| to be loaded by
- // SetServerNetworkStats().
- std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map =
- std::make_unique<ServerNetworkStatsMap>();
+ // Prepare |server_info_map| to be loaded by OnServerInfoLoadedForTesting().
+ std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map =
+ std::make_unique<HttpServerProperties::ServerInfoMap>();
// Change the values for |docs_server|.
ServerNetworkStats new_stats_docs;
new_stats_docs.srtt = base::TimeDelta::FromMicroseconds(25);
new_stats_docs.bandwidth_estimate =
quic::QuicBandwidth::FromBitsPerSecond(250);
- server_network_stats_map->Put(docs_server, new_stats_docs);
+ server_info_map->GetOrPut(CreateSimpleKey(docs_server))
+ ->second.server_network_stats = new_stats_docs;
// Add data for mail.google.com:443.
url::SchemeHostPort mail_server("https", "mail.google.com", 443);
ServerNetworkStats stats_mail;
stats_mail.srtt = base::TimeDelta::FromMicroseconds(30);
stats_mail.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(300);
- server_network_stats_map->Put(mail_server, stats_mail);
+ server_info_map->GetOrPut(CreateSimpleKey(mail_server))
+ ->second.server_network_stats = stats_mail;
// Recency order will be |docs_server|, |google_server| and |mail_server|.
- impl_.SetServerNetworkStats(std::move(server_network_stats_map));
+ impl_.OnServerInfoLoadedForTesting(std::move(server_info_map));
- const ServerNetworkStatsMap& map = impl_.server_network_stats_map();
+ const HttpServerProperties::ServerInfoMap& map =
+ impl_.server_info_map_for_testing();
ASSERT_EQ(3u, map.size());
auto map_it = map.begin();
- EXPECT_EQ(map_it->first, docs_server);
- EXPECT_EQ(new_stats_docs, map_it->second);
+ EXPECT_EQ(docs_server, map_it->first.server);
+ EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(map_it->second.server_network_stats.has_value());
+ EXPECT_EQ(new_stats_docs, *map_it->second.server_network_stats);
++map_it;
- EXPECT_EQ(map_it->first, google_server);
- EXPECT_EQ(stats_google, map_it->second);
+ EXPECT_EQ(google_server, map_it->first.server);
+ EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(map_it->second.server_network_stats.has_value());
+ EXPECT_EQ(stats_google, *map_it->second.server_network_stats);
++map_it;
- EXPECT_EQ(map_it->first, mail_server);
- EXPECT_EQ(stats_mail, map_it->second);
+ EXPECT_EQ(mail_server, map_it->first.server);
+ EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty());
+ ASSERT_TRUE(map_it->second.server_network_stats.has_value());
+ EXPECT_EQ(stats_mail, *map_it->second.server_network_stats);
}
-TEST_F(ServerNetworkStatsServerPropertiesTest, SetServerNetworkStats) {
+TEST_F(HttpServerPropertiesTest, SetServerNetworkStats) {
url::SchemeHostPort foo_http_server("http", "foo", 443);
url::SchemeHostPort foo_https_server("https", "foo", 443);
- EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_http_server));
- EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_https_server));
+ EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_http_server,
+ NetworkIsolationKey()));
+ EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server,
+ NetworkIsolationKey()));
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(10);
stats1.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(100);
- impl_.SetServerNetworkStats(foo_http_server, stats1);
+ impl_.SetServerNetworkStats(foo_http_server, NetworkIsolationKey(), stats1);
const ServerNetworkStats* stats2 =
- impl_.GetServerNetworkStats(foo_http_server);
+ impl_.GetServerNetworkStats(foo_http_server, NetworkIsolationKey());
EXPECT_EQ(10, stats2->srtt.ToInternalValue());
EXPECT_EQ(100, stats2->bandwidth_estimate.ToBitsPerSecond());
// Https server should have nothing set for server network stats.
- EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_https_server));
+ EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server,
+ NetworkIsolationKey()));
impl_.Clear(base::OnceClosure());
- EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_http_server));
- EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_https_server));
+ EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_http_server,
+ NetworkIsolationKey()));
+ EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server,
+ NetworkIsolationKey()));
}
-TEST_F(ServerNetworkStatsServerPropertiesTest, ClearServerNetworkStats) {
+TEST_F(HttpServerPropertiesTest, ClearServerNetworkStats) {
ServerNetworkStats stats;
stats.srtt = base::TimeDelta::FromMicroseconds(10);
stats.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(100);
url::SchemeHostPort foo_https_server("https", "foo", 443);
- impl_.SetServerNetworkStats(foo_https_server, stats);
+ impl_.SetServerNetworkStats(foo_https_server, NetworkIsolationKey(), stats);
- impl_.ClearServerNetworkStats(foo_https_server);
- EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server));
+ impl_.ClearServerNetworkStats(foo_https_server, NetworkIsolationKey());
+ EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server,
+ NetworkIsolationKey()));
}
-typedef HttpServerPropertiesImplTest QuicServerInfoServerPropertiesTest;
+typedef HttpServerPropertiesTest QuicServerInfoServerPropertiesTest;
TEST_F(QuicServerInfoServerPropertiesTest, Set) {
quic::QuicServerId google_quic_server_id("www.google.com", 443, true);
@@ -1438,7 +1901,8 @@ TEST_F(QuicServerInfoServerPropertiesTest, Set) {
// Check empty map.
std::unique_ptr<QuicServerInfoMap> init_quic_server_info_map =
std::make_unique<QuicServerInfoMap>(kMaxQuicServerEntries);
- impl_.SetQuicServerInfoMap(std::move(init_quic_server_info_map));
+ impl_.OnQuicServerInfoMapLoadedForTesting(
+ std::move(init_quic_server_info_map));
EXPECT_EQ(0u, impl_.quic_server_info_map().size());
// Check by initializing with www.google.com:443.
@@ -1446,7 +1910,8 @@ TEST_F(QuicServerInfoServerPropertiesTest, Set) {
init_quic_server_info_map =
std::make_unique<QuicServerInfoMap>(kMaxQuicServerEntries);
init_quic_server_info_map->Put(google_quic_server_id, google_server_info);
- impl_.SetQuicServerInfoMap(std::move(init_quic_server_info_map));
+ impl_.OnQuicServerInfoMapLoadedForTesting(
+ std::move(init_quic_server_info_map));
// Verify data for www.google.com:443.
EXPECT_EQ(1u, impl_.quic_server_info_map().size());
@@ -1483,7 +1948,7 @@ TEST_F(QuicServerInfoServerPropertiesTest, Set) {
quic::QuicServerId mail_quic_server_id("mail.google.com", 443, true);
std::string mail_server_info("mail_quic_server_info");
quic_server_info_map->Put(mail_quic_server_id, mail_server_info);
- impl_.SetQuicServerInfoMap(std::move(quic_server_info_map));
+ impl_.OnQuicServerInfoMapLoadedForTesting(std::move(quic_server_info_map));
// Recency order will be |docs_server|, |google_server| and |mail_server|.
const QuicServerInfoMap& memory_map = impl_.quic_server_info_map();
@@ -1645,7 +2110,7 @@ TEST_F(QuicServerInfoServerPropertiesTest, TestCanonicalSuffixMatchSetInfoMap) {
new QuicServerInfoMap(kMaxQuicServerEntries));
quic_server_info_map->Put(h2_server_id, h2_server_info);
quic_server_info_map->Put(h3_server_id, h3_server_info);
- impl_.SetQuicServerInfoMap(std::move(quic_server_info_map));
+ impl_.OnQuicServerInfoMapLoadedForTesting(std::move(quic_server_info_map));
// Check that the server info from the memory cache is returned since unique
// entries from the memory cache are added after entries from the
diff --git a/chromium/net/http/http_stream_factory.cc b/chromium/net/http/http_stream_factory.cc
index 51bcae28729..55df8648cbb 100644
--- a/chromium/net/http/http_stream_factory.cc
+++ b/chromium/net/http/http_stream_factory.cc
@@ -20,6 +20,7 @@
#include "base/trace_event/process_memory_dump.h"
#include "net/base/host_mapping_rules.h"
#include "net/base/host_port_pair.h"
+#include "net/base/network_isolation_key.h"
#include "net/base/parse_number.h"
#include "net/base/port_util.h"
#include "net/http/http_network_session.h"
@@ -40,6 +41,11 @@
namespace net {
+namespace {
+const char kAlternativeServiceHeader[] = "Alt-Svc";
+
+} // namespace
+
HttpStreamFactory::HttpStreamFactory(HttpNetworkSession* session)
: session_(session), job_factory_(std::make_unique<JobFactory>()) {}
@@ -47,6 +53,7 @@ HttpStreamFactory::~HttpStreamFactory() {}
void HttpStreamFactory::ProcessAlternativeServices(
HttpNetworkSession* session,
+ const net::NetworkIsolationKey& network_isolation_key,
const HttpResponseHeaders* headers,
const url::SchemeHostPort& http_server) {
if (!headers->HasHeader(kAlternativeServiceHeader))
@@ -62,49 +69,13 @@ void HttpStreamFactory::ProcessAlternativeServices(
return;
}
- // Convert spdy::SpdyAltSvcWireFormat::AlternativeService entries
- // to net::AlternativeServiceInfo.
- AlternativeServiceInfoVector alternative_service_info_vector;
- for (const spdy::SpdyAltSvcWireFormat::AlternativeService&
- alternative_service_entry : alternative_service_vector) {
- NextProto protocol =
- NextProtoFromString(alternative_service_entry.protocol_id);
- if (!IsAlternateProtocolValid(protocol) ||
- !session->IsProtocolEnabled(protocol) ||
- !IsPortValid(alternative_service_entry.port)) {
- continue;
- }
- // Check if QUIC version is supported. Filter supported QUIC versions.
- quic::ParsedQuicVersionVector advertised_versions;
- if (protocol == kProtoQUIC && !alternative_service_entry.version.empty()) {
- advertised_versions = FilterSupportedAltSvcVersions(
- alternative_service_entry,
- session->params().quic_params.supported_versions,
- session->params().quic_params.support_ietf_format_quic_altsvc);
- if (advertised_versions.empty())
- continue;
- }
- AlternativeService alternative_service(protocol,
- alternative_service_entry.host,
- alternative_service_entry.port);
- base::Time expiration =
- base::Time::Now() +
- base::TimeDelta::FromSeconds(alternative_service_entry.max_age);
- AlternativeServiceInfo alternative_service_info;
- if (protocol == kProtoQUIC) {
- alternative_service_info =
- AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
- alternative_service, expiration, advertised_versions);
- } else {
- alternative_service_info =
- AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
- alternative_service, expiration);
- }
- alternative_service_info_vector.push_back(alternative_service_info);
- }
-
session->http_server_properties()->SetAlternativeServices(
- RewriteHost(http_server), alternative_service_info_vector);
+ RewriteHost(http_server), network_isolation_key,
+ net::ProcessAlternativeServices(
+ alternative_service_vector, session->params().enable_http2,
+ session->params().enable_quic,
+ session->params().quic_params.supported_versions,
+ session->params().quic_params.support_ietf_format_quic_altsvc));
}
url::SchemeHostPort HttpStreamFactory::RewriteHost(
@@ -199,7 +170,7 @@ void HttpStreamFactory::PreconnectStreams(int num_streams,
SSLConfig server_ssl_config;
SSLConfig proxy_ssl_config;
- session_->GetSSLConfig(request_info, &server_ssl_config, &proxy_ssl_config);
+ session_->GetSSLConfig(&server_ssl_config, &proxy_ssl_config);
auto job_controller = std::make_unique<JobController>(
this, nullptr, session_, job_factory_.get(), request_info,
@@ -302,8 +273,11 @@ bool HttpStreamFactory::ProxyServerSupportsPriorities(
url::SchemeHostPort scheme_host_port("https", host_port_pair.host(),
host_port_pair.port());
+ // TODO(https://crbug.com/993517): Figure out what NetworkIsolationKey() to
+ // use here, and what to do about this and |preconnecting_proxy_servers_|,
+ // which leaks data across NetworkIsolationKeys.
return session_->http_server_properties()->SupportsRequestPriority(
- scheme_host_port);
+ scheme_host_port, NetworkIsolationKey());
}
void HttpStreamFactory::DumpMemoryStats(
diff --git a/chromium/net/http/http_stream_factory.h b/chromium/net/http/http_stream_factory.h
index 067b6e5348c..b7909cc036a 100644
--- a/chromium/net/http/http_stream_factory.h
+++ b/chromium/net/http/http_stream_factory.h
@@ -62,9 +62,11 @@ class NET_EXPORT HttpStreamFactory {
explicit HttpStreamFactory(HttpNetworkSession* session);
virtual ~HttpStreamFactory();
- void ProcessAlternativeServices(HttpNetworkSession* session,
- const HttpResponseHeaders* headers,
- const url::SchemeHostPort& http_server);
+ void ProcessAlternativeServices(
+ HttpNetworkSession* session,
+ const net::NetworkIsolationKey& network_isolation_key,
+ const HttpResponseHeaders* headers,
+ const url::SchemeHostPort& http_server);
// Request a stream.
// Will call delegate->OnStreamReady on successful completion.
diff --git a/chromium/net/http/http_stream_factory_job.cc b/chromium/net/http/http_stream_factory_job.cc
index ed7b2346906..6dc97fa5f73 100644
--- a/chromium/net/http/http_stream_factory_job.cc
+++ b/chromium/net/http/http_stream_factory_job.cc
@@ -250,7 +250,8 @@ int HttpStreamFactory::Job::Preconnect(int num_streams) {
!http_server_properties->IsInitialized() &&
request_info_.url.SchemeIsCryptographic();
if (connect_one_stream || http_server_properties->SupportsRequestPriority(
- url::SchemeHostPort(request_info_.url))) {
+ url::SchemeHostPort(request_info_.url),
+ request_info_.network_isolation_key)) {
num_streams_ = 1;
} else {
num_streams_ = num_streams;
@@ -390,7 +391,9 @@ bool HttpStreamFactory::Job::CanUseExistingSpdySession() const {
DCHECK(!using_quic_);
if (proxy_info_.is_direct() &&
- session_->http_server_properties()->RequiresHTTP11(destination_)) {
+ session_->http_server_properties()->RequiresHTTP11(
+ HttpServerProperties::GetNormalizedSchemeHostPort(request_info_.url),
+ request_info_.network_isolation_key)) {
return false;
}
@@ -764,9 +767,8 @@ int HttpStreamFactory::Job::DoInitConnectionImpl() {
// delay the main job.
delegate_->MaybeSetWaitTimeForMainJob(
quic_request_.GetTimeDelayForWaitingJob());
- expect_on_quic_host_resolution_ =
- quic_request_.WaitForHostResolution(base::BindRepeating(
- &Job::OnQuicHostResolution, base::Unretained(this)));
+ expect_on_quic_host_resolution_ = quic_request_.WaitForHostResolution(
+ base::BindOnce(&Job::OnQuicHostResolution, base::Unretained(this)));
}
return rv;
}
@@ -840,10 +842,16 @@ int HttpStreamFactory::Job::DoInitConnectionImpl() {
HttpServerProperties* http_server_properties =
session_->http_server_properties();
if (http_server_properties) {
- http_server_properties->MaybeForceHTTP11(destination_, &server_ssl_config_);
- if (proxy_info_.is_http() || proxy_info_.is_https()) {
+ http_server_properties->MaybeForceHTTP11(
+ HttpServerProperties::GetNormalizedSchemeHostPort(request_info_.url),
+ request_info_.network_isolation_key, &server_ssl_config_);
+ if (proxy_info_.is_https()) {
http_server_properties->MaybeForceHTTP11(
- proxy_info_.proxy_server().host_port_pair(), &proxy_ssl_config_);
+ url::SchemeHostPort(
+ url::kHttpsScheme,
+ proxy_info_.proxy_server().host_port_pair().host(),
+ proxy_info_.proxy_server().host_port_pair().port()),
+ request_info_.network_isolation_key, &proxy_ssl_config_);
}
}
@@ -1143,8 +1151,11 @@ int HttpStreamFactory::Job::DoCreateStream() {
HttpServerProperties* http_server_properties =
session_->http_server_properties();
- if (http_server_properties)
- http_server_properties->SetSupportsSpdy(scheme_host_port, true);
+ if (http_server_properties) {
+ http_server_properties->SetSupportsSpdy(scheme_host_port,
+ request_info_.network_isolation_key,
+ true /* supports_spdy */);
+ }
// Create a SpdyHttpStream or a BidirectionalStreamImpl attached to the
// session.
@@ -1336,7 +1347,8 @@ bool HttpStreamFactory::Job::ShouldThrottleConnectForSpdy() const {
spdy_session_key_.host_port_pair().host(),
spdy_session_key_.host_port_pair().port());
// Only throttle the request if the server is believed to support H2.
- return session_->http_server_properties()->GetSupportsSpdy(scheme_host_port);
+ return session_->http_server_properties()->GetSupportsSpdy(
+ scheme_host_port, request_info_.network_isolation_key);
}
} // namespace net
diff --git a/chromium/net/http/http_stream_factory_job_controller.cc b/chromium/net/http/http_stream_factory_job_controller.cc
index 45a9e840014..0d0665b085e 100644
--- a/chromium/net/http/http_stream_factory_job_controller.cc
+++ b/chromium/net/http/http_stream_factory_job_controller.cc
@@ -627,7 +627,7 @@ int HttpStreamFactory::JobController::DoResolveProxy() {
GURL origin_url = ApplyHostMappingRules(request_info_.url, &destination);
CompletionOnceCallback io_callback =
- base::Bind(&JobController::OnIOComplete, base::Unretained(this));
+ base::BindOnce(&JobController::OnIOComplete, base::Unretained(this));
return session_->proxy_resolution_service()->ResolveProxy(
origin_url, request_info_.method, &proxy_info_, std::move(io_callback),
&proxy_resolve_request_, net_log_);
@@ -993,7 +993,8 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal(
HttpServerProperties& http_server_properties =
*session_->http_server_properties();
const AlternativeServiceInfoVector alternative_service_info_vector =
- http_server_properties.GetAlternativeServiceInfos(origin);
+ http_server_properties.GetAlternativeServiceInfos(
+ origin, request_info.network_isolation_key);
if (alternative_service_info_vector.empty())
return AlternativeServiceInfo();
@@ -1079,7 +1080,7 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal(
destination))
return alternative_service_info;
- if (!IsQuicWhitelistedForHost(destination.host()))
+ if (!IsQuicAllowedForHost(destination.host()))
continue;
// Cache this entry if we don't have a non-broken Alt-Svc yet.
@@ -1205,8 +1206,8 @@ int HttpStreamFactory::JobController::ReconsiderProxyAfterError(Job* job,
if (request_info_.load_flags & LOAD_BYPASS_PROXY)
return error;
- if (proxy_info_.is_https() && proxy_ssl_config_.send_client_cert) {
- session_->ssl_client_auth_cache()->Remove(
+ if (proxy_info_.is_https()) {
+ session_->ssl_client_context()->ClearClientCertificate(
proxy_info_.proxy_server().host_port_pair());
}
@@ -1233,15 +1234,15 @@ int HttpStreamFactory::JobController::ReconsiderProxyAfterError(Job* job,
return OK;
}
-bool HttpStreamFactory::JobController::IsQuicWhitelistedForHost(
+bool HttpStreamFactory::JobController::IsQuicAllowedForHost(
const std::string& host) {
- const base::flat_set<std::string>& host_whitelist =
- session_->params().quic_host_whitelist;
- if (host_whitelist.empty())
+ const base::flat_set<std::string>& host_allowlist =
+ session_->params().quic_host_allowlist;
+ if (host_allowlist.empty())
return true;
std::string lowered_host = base::ToLowerASCII(host);
- return base::Contains(host_whitelist, lowered_host);
+ return base::Contains(host_allowlist, lowered_host);
}
} // namespace net
diff --git a/chromium/net/http/http_stream_factory_job_controller.h b/chromium/net/http/http_stream_factory_job_controller.h
index 783759ead81..d91a559c768 100644
--- a/chromium/net/http/http_stream_factory_job_controller.h
+++ b/chromium/net/http/http_stream_factory_job_controller.h
@@ -282,8 +282,8 @@ class HttpStreamFactory::JobController
// given error code is simply returned.
int ReconsiderProxyAfterError(Job* job, int error);
- // Returns true if QUIC is whitelisted for |host|.
- bool IsQuicWhitelistedForHost(const std::string& host);
+ // Returns true if QUIC is allowed for |host|.
+ bool IsQuicAllowedForHost(const std::string& host);
HttpStreamFactory* factory_;
HttpNetworkSession* session_;
diff --git a/chromium/net/http/http_stream_factory_job_controller_unittest.cc b/chromium/net/http/http_stream_factory_job_controller_unittest.cc
index b3407f02428..9d3c0521512 100644
--- a/chromium/net/http/http_stream_factory_job_controller_unittest.cc
+++ b/chromium/net/http/http_stream_factory_job_controller_unittest.cc
@@ -16,16 +16,19 @@
#include "base/strings/stringprintf.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/task_environment.h"
#include "base/test/test_mock_time_task_runner.h"
#include "base/threading/platform_thread.h"
#include "net/base/completion_once_callback.h"
+#include "net/base/features.h"
#include "net/base/host_port_pair.h"
#include "net/base/proxy_server.h"
#include "net/base/test_proxy_delegate.h"
#include "net/dns/mock_host_resolver.h"
#include "net/http/http_basic_stream.h"
#include "net/http/http_network_session_peer.h"
+#include "net/http/http_server_properties.h"
+#include "net/http/http_server_properties_manager.h"
#include "net/http/http_stream_factory.h"
#include "net/http/http_stream_factory_job.h"
#include "net/http/http_stream_factory_test_util.h"
@@ -44,13 +47,14 @@
#include "net/socket/socket_test_util.h"
#include "net/spdy/spdy_session_key.h"
#include "net/spdy/spdy_test_util_common.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "net/third_party/quiche/src/quic/core/quic_utils.h"
#include "net/third_party/quiche/src/quic/test_tools/mock_random.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gmock_mutant.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "url/origin.h"
using ::testing::_;
using ::testing::Contains;
@@ -97,12 +101,23 @@ class FailingProxyResolverFactory : public ProxyResolverFactory {
}
};
-// A mock HttpServerProperties that always returns false for IsInitialized().
-class MockHttpServerProperties : public HttpServerPropertiesImpl {
+// A mock HttpServerProperties::PrefDelegate that never finishes loading, so
+// HttpServerProperties::IsInitialized() always returns false.
+class MockPrefDelegate : public HttpServerProperties::PrefDelegate {
public:
- MockHttpServerProperties() = default;
- ~MockHttpServerProperties() override = default;
- bool IsInitialized() const override { return false; }
+ MockPrefDelegate() = default;
+ ~MockPrefDelegate() override = default;
+
+ // HttpServerProperties::PrefDelegate implementation:
+ const base::DictionaryValue* GetServerProperties() const override {
+ return nullptr;
+ }
+ void SetServerProperties(const base::DictionaryValue& value,
+ base::OnceClosure callback) override {}
+ void WaitForPrefLoad(base::OnceClosure pref_loaded_callback) override {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate);
};
} // anonymous namespace
@@ -172,12 +187,11 @@ class JobControllerPeer {
}
};
-class HttpStreamFactoryJobControllerTest
- : public TestWithScopedTaskEnvironment {
+class HttpStreamFactoryJobControllerTest : public TestWithTaskEnvironment {
public:
HttpStreamFactoryJobControllerTest()
- : TestWithScopedTaskEnvironment(
- base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {
+ : TestWithTaskEnvironment(
+ base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
session_deps_.enable_quic = true;
session_deps_.host_resolver->set_synchronous_mode(true);
}
@@ -272,11 +286,11 @@ class HttpStreamFactoryJobControllerTest
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
if (alternative_service.protocol == kProtoQUIC) {
session_->http_server_properties()->SetQuicAlternativeService(
- server, alternative_service, expiration,
+ server, NetworkIsolationKey(), alternative_service, expiration,
session_->params().quic_params.supported_versions);
} else {
session_->http_server_properties()->SetHttp2AlternativeService(
- server, alternative_service, expiration);
+ server, NetworkIsolationKey(), alternative_service, expiration);
}
}
@@ -284,7 +298,8 @@ class HttpStreamFactoryJobControllerTest
bool should_mark_broken) {
const url::SchemeHostPort server(request_info.url);
const AlternativeServiceInfoVector alternative_service_info_vector =
- session_->http_server_properties()->GetAlternativeServiceInfos(server);
+ session_->http_server_properties()->GetAlternativeServiceInfos(
+ server, NetworkIsolationKey());
EXPECT_EQ(1u, alternative_service_info_vector.size());
EXPECT_EQ(should_mark_broken,
session_->http_server_properties()->IsAlternativeServiceBroken(
@@ -702,7 +717,8 @@ TEST_F(JobControllerReconsiderProxyAfterErrorTest,
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromSeconds(100);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("http://www.example.com")), stats1);
+ url::SchemeHostPort(GURL("http://www.example.com")),
+ NetworkIsolationKey(), stats1);
// Prepare the mocked data.
MockQuicData quic_data(
@@ -841,7 +857,7 @@ TEST_F(HttpStreamFactoryJobControllerTest,
AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
session_->http_server_properties()->SetQuicAlternativeService(
- server, alternative_service, expiration,
+ server, NetworkIsolationKey(), alternative_service, expiration,
{quic::UnsupportedQuicVersion()});
request_ =
@@ -1030,7 +1046,12 @@ TEST_F(HttpStreamFactoryJobControllerTest,
AltJobSucceedsMainJobBlockedControllerDestroyed) {
quic_data_ = std::make_unique<MockQuicData>(
HttpNetworkSession::Params().quic_params.supported_versions.front());
- quic_data_->AddWrite(SYNCHRONOUS, client_maker_.MakeInitialSettingsPacket(1));
+ if (VersionUsesQpack(HttpNetworkSession::Params()
+ .quic_params.supported_versions.front()
+ .transport_version)) {
+ quic_data_->AddWrite(SYNCHRONOUS,
+ client_maker_.MakeInitialSettingsPacket(1));
+ }
quic_data_->AddRead(ASYNC, OK);
HttpRequestInfo request_info;
@@ -1698,7 +1719,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, HostResolutionHang) {
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(10);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://www.google.com")), stats1);
+ url::SchemeHostPort(GURL("https://www.google.com")),
+ NetworkIsolationKey(), stats1);
url::SchemeHostPort server(request_info.url);
AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
@@ -1771,7 +1793,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, DelayedTCP) {
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(10);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://www.google.com")), stats1);
+ url::SchemeHostPort(GURL("https://www.google.com")),
+ NetworkIsolationKey(), stats1);
url::SchemeHostPort server(request_info.url);
AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
@@ -1834,7 +1857,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, ResumeMainJobLaterCanceled) {
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(10);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://www.google.com")), stats1);
+ url::SchemeHostPort(GURL("https://www.google.com")),
+ NetworkIsolationKey(), stats1);
url::SchemeHostPort server(request_info.url);
AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
@@ -1912,7 +1936,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, DelayedTCPWithLargeSrtt) {
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromSeconds(100);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://www.google.com")), stats1);
+ url::SchemeHostPort(GURL("https://www.google.com")),
+ NetworkIsolationKey(), stats1);
url::SchemeHostPort server(request_info.url);
AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
@@ -1972,7 +1997,8 @@ TEST_F(HttpStreamFactoryJobControllerTest,
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(10);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://www.google.com")), stats1);
+ url::SchemeHostPort(GURL("https://www.google.com")),
+ NetworkIsolationKey(), stats1);
url::SchemeHostPort server(request_info.url);
AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
@@ -2094,7 +2120,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, DelayedTCPAlternativeProxy) {
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(10);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://myproxy.org")), stats1);
+ url::SchemeHostPort(GURL("https://myproxy.org")), NetworkIsolationKey(),
+ stats1);
url::SchemeHostPort server(request_info.url);
AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
@@ -2164,7 +2191,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, FailAlternativeProxy) {
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://myproxy.org")), stats1);
+ url::SchemeHostPort(GURL("https://myproxy.org")), NetworkIsolationKey(),
+ stats1);
request_ =
job_controller_->Start(&request_delegate_, nullptr, net_log_.bound(),
@@ -2216,7 +2244,8 @@ TEST_F(HttpStreamFactoryJobControllerTest,
ServerNetworkStats stats1;
stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000);
session_->http_server_properties()->SetServerNetworkStats(
- url::SchemeHostPort(GURL("https://myproxy.org")), stats1);
+ url::SchemeHostPort(GURL("https://myproxy.org")), NetworkIsolationKey(),
+ stats1);
request_ =
job_controller_->Start(&request_delegate_, nullptr, net_log_.bound(),
@@ -2297,9 +2326,13 @@ TEST_F(HttpStreamFactoryJobControllerTest,
}
TEST_F(HttpStreamFactoryJobControllerTest, PreconnectToHostWithValidAltSvc) {
- quic_data_ = std::make_unique<MockQuicData>(
- HttpNetworkSession::Params().quic_params.supported_versions.front());
- quic_data_->AddWrite(SYNCHRONOUS, client_maker_.MakeInitialSettingsPacket(1));
+ auto version =
+ HttpNetworkSession::Params().quic_params.supported_versions.front();
+ quic_data_ = std::make_unique<MockQuicData>(version);
+ if (VersionUsesQpack(version.transport_version)) {
+ quic_data_->AddWrite(SYNCHRONOUS,
+ client_maker_.MakeInitialSettingsPacket(1));
+ }
quic_data_->AddRead(ASYNC, OK);
HttpRequestInfo request_info;
@@ -2337,7 +2370,8 @@ TEST_F(HttpStreamFactoryJobControllerTest,
// Sets server support HTTP/2.
url::SchemeHostPort server(request_info.url);
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
job_controller_->Preconnect(/*num_streams=*/5);
// Only one job is started.
@@ -2353,6 +2387,95 @@ TEST_F(HttpStreamFactoryJobControllerTest,
EXPECT_TRUE(HttpStreamFactoryPeer::IsJobControllerDeleted(factory_));
}
+// Check that the logic to only preconnect a single socket to servers with H2
+// support respects NetworkIsolationKeys.
+TEST_F(HttpStreamFactoryJobControllerTest,
+ PreconnectMultipleStreamsToH2ServerWithNetworkIsolationKey) {
+ base::test::ScopedFeatureList feature_list;
+ // It's not strictly necessary to enable
+ // |kPartitionConnectionsByNetworkIsolationKey|, but the second phase of the
+ // test would only make 4 connections, reusing the first connection, without
+ // it.
+ feature_list.InitWithFeatures(
+ {// enabled_features
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey,
+ features::kPartitionConnectionsByNetworkIsolationKey},
+ // disabled_features
+ {});
+ // Need to re-create HttpServerProperties after enabling the field trial,
+ // since it caches the field trial value on construction.
+ session_deps_.http_server_properties =
+ std::make_unique<HttpServerProperties>();
+
+ const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1);
+ const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2);
+
+ tcp_data_ = std::make_unique<SequencedSocketData>();
+ tcp_data_->set_connect_data(MockConnect(ASYNC, OK));
+ SetPreconnect();
+
+ HttpRequestInfo request_info;
+ request_info.method = "GET";
+ request_info.url = GURL("http://www.example.com");
+ request_info.network_isolation_key = kNetworkIsolationKey1;
+ Initialize(request_info);
+
+ // Sets server support HTTP/2, using kNetworkIsolationKey.
+ url::SchemeHostPort server(request_info.url);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, kNetworkIsolationKey1, true);
+
+ job_controller_->Preconnect(/*num_streams=*/5);
+ // Only one job is started.
+ EXPECT_TRUE(job_controller_->main_job());
+ EXPECT_FALSE(job_controller_->alternative_job());
+ EXPECT_EQ(HttpStreamFactory::PRECONNECT,
+ job_controller_->main_job()->job_type());
+ // There is only 1 connect even though multiple streams were requested.
+ EXPECT_EQ(
+ 1, HttpStreamFactoryJobPeer::GetNumStreams(job_controller_->main_job()));
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(HttpStreamFactoryPeer::IsJobControllerDeleted(factory_));
+
+ // Now try using two different NetworkIsolationKeys, one empty, one not, and
+ // make sure that 5 sockets are preconnected with each one.
+ std::vector<std::unique_ptr<SequencedSocketData>> socket_data;
+ for (auto other_network_isolation_key :
+ {NetworkIsolationKey(), kNetworkIsolationKey2}) {
+ for (int i = 0; i < 5; ++i) {
+ socket_data.emplace_back(std::make_unique<SequencedSocketData>(
+ MockConnect(ASYNC, OK), base::span<const MockRead>(),
+ base::span<const MockWrite>()));
+ session_deps_.socket_factory->AddSocketDataProvider(
+ socket_data.back().get());
+ }
+
+ request_info.network_isolation_key = other_network_isolation_key;
+ MockHttpStreamRequestDelegate request_delegate;
+ HttpStreamFactory::JobController* job_controller =
+ new HttpStreamFactory::JobController(
+ factory_, &request_delegate, session_.get(), &job_factory_,
+ request_info, is_preconnect_, false /* is_websocket */,
+ enable_ip_based_pooling_, enable_alternative_services_, SSLConfig(),
+ SSLConfig());
+ HttpStreamFactoryPeer::AddJobController(factory_, job_controller);
+ job_controller->Preconnect(/*num_streams=*/5);
+ // Five jobs should be started.
+ EXPECT_TRUE(job_controller->main_job());
+ EXPECT_FALSE(job_controller->alternative_job());
+ EXPECT_EQ(HttpStreamFactory::PRECONNECT,
+ job_controller->main_job()->job_type());
+ EXPECT_EQ(
+ 5, HttpStreamFactoryJobPeer::GetNumStreams(job_controller->main_job()));
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(HttpStreamFactoryPeer::IsJobControllerDeleted(factory_));
+ }
+}
+
// Check the case that while a preconnect is waiting in the H2 request queue,
// and a SPDY session appears, the job completes successfully.
TEST_F(HttpStreamFactoryJobControllerTest, SpdySessionInterruptsPreconnect) {
@@ -2372,7 +2495,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, SpdySessionInterruptsPreconnect) {
// Sets server support HTTP/2.
url::SchemeHostPort server(request_info.url);
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
// Start a non-preconnect request.
std::unique_ptr<HttpStreamRequest> stream_request = job_controller_->Start(
@@ -2442,7 +2566,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequests) {
// Sets server support HTTP/2.
url::SchemeHostPort server(request_info.url);
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates;
std::vector<std::unique_ptr<HttpStreamRequest>> requests;
@@ -2480,6 +2605,98 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequests) {
}
}
+// Check that throttling simultaneous requests to a single H2 server respects
+// NetworkIsolationKeys.
+TEST_F(JobControllerLimitMultipleH2Requests,
+ MultipleRequestsNetworkIsolationKey) {
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitWithFeatures(
+ {// enabled_features
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey,
+ features::kPartitionConnectionsByNetworkIsolationKey},
+ // disabled_features
+ {});
+ // Need to re-create HttpServerProperties after enabling the field trial,
+ // since it caches the field trial value on construction.
+ session_deps_.http_server_properties =
+ std::make_unique<HttpServerProperties>();
+
+ const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1);
+ const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2);
+
+ tcp_data_ = std::make_unique<SequencedSocketData>(
+ MockConnect(SYNCHRONOUS, ERR_IO_PENDING), base::span<MockRead>(),
+ base::span<MockWrite>());
+ HttpRequestInfo request_info;
+ request_info.method = "GET";
+ request_info.url = GURL("https://www.example.com");
+ Initialize(request_info);
+
+ // Sets server support HTTP/2.
+ url::SchemeHostPort server(request_info.url);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, kNetworkIsolationKey1, true);
+
+ std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates;
+ std::vector<std::unique_ptr<HttpStreamRequest>> requests;
+ std::vector<std::unique_ptr<SequencedSocketData>> socket_data;
+ for (int i = 0; i < kNumRequests; ++i) {
+ // Shouldn't matter whether requests are interleaved by NetworkIsolationKey
+ // or not.
+ for (const auto& network_isolation_key :
+ {NetworkIsolationKey(), kNetworkIsolationKey1,
+ kNetworkIsolationKey2}) {
+ request_info.network_isolation_key = network_isolation_key;
+ // For kNetworkIsolationKey1, all requests but the first will be
+ // throttled.
+ if (i == 0 || network_isolation_key != kNetworkIsolationKey1) {
+ socket_data.emplace_back(std::make_unique<SequencedSocketData>(
+ MockConnect(ASYNC, OK), base::span<const MockRead>(),
+ base::span<const MockWrite>()));
+ session_deps_.socket_factory->AddSocketDataProvider(
+ socket_data.back().get());
+ }
+ request_delegates.emplace_back(
+ std::make_unique<MockHttpStreamRequestDelegate>());
+ HttpStreamFactory::JobController* job_controller =
+ new HttpStreamFactory::JobController(
+ factory_, request_delegates[i].get(), session_.get(),
+ &job_factory_, request_info, is_preconnect_,
+ false /* is_websocket */, enable_ip_based_pooling_,
+ enable_alternative_services_, SSLConfig(), SSLConfig());
+ HttpStreamFactoryPeer::AddJobController(factory_, job_controller);
+ auto request = job_controller->Start(
+ request_delegates[i].get(), nullptr, net_log_.bound(),
+ HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
+ EXPECT_TRUE(job_controller->main_job());
+ EXPECT_FALSE(job_controller->alternative_job());
+ requests.push_back(std::move(request));
+ }
+ }
+ TransportClientSocketPool* socket_pool =
+ reinterpret_cast<TransportClientSocketPool*>(session_->GetSocketPool(
+ HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct()));
+ ClientSocketPool::GroupId group_id0(HostPortPair::FromURL(request_info.url),
+ ClientSocketPool::SocketType::kSsl,
+ request_info.privacy_mode,
+ NetworkIsolationKey());
+ ClientSocketPool::GroupId group_id1(HostPortPair::FromURL(request_info.url),
+ ClientSocketPool::SocketType::kSsl,
+ request_info.privacy_mode,
+ kNetworkIsolationKey1);
+ ClientSocketPool::GroupId group_id2(HostPortPair::FromURL(request_info.url),
+ ClientSocketPool::SocketType::kSsl,
+ request_info.privacy_mode,
+ kNetworkIsolationKey2);
+ EXPECT_EQ(static_cast<uint32_t>(kNumRequests),
+ socket_pool->NumConnectJobsInGroupForTesting(group_id0));
+ EXPECT_EQ(1u, socket_pool->NumConnectJobsInGroupForTesting(group_id1));
+ EXPECT_EQ(static_cast<uint32_t>(kNumRequests),
+ socket_pool->NumConnectJobsInGroupForTesting(group_id2));
+}
+
TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequestsFirstRequestHang) {
// First socket connect hang.
SequencedSocketData hangdata;
@@ -2514,7 +2731,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequestsFirstRequestHang) {
// Sets server support HTTP/2.
url::SchemeHostPort server(request_info.url);
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates;
std::vector<std::unique_ptr<HttpStreamRequest>> requests;
@@ -2587,7 +2805,8 @@ TEST_F(JobControllerLimitMultipleH2Requests,
// Sets server support HTTP/2.
url::SchemeHostPort server(request_info.url);
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates;
std::vector<std::unique_ptr<HttpStreamRequest>> requests;
@@ -2642,7 +2861,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultiplePreconnects) {
// Sets server support HTTP/2.
url::SchemeHostPort server(request_info.url);
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates;
for (int i = 0; i < kNumRequests; ++i) {
@@ -2688,7 +2908,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, H1NegotiatedForFirstRequest) {
// Sets server support HTTP/2.
url::SchemeHostPort server(request_info.url);
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates;
std::vector<std::unique_ptr<HttpStreamRequest>> requests;
@@ -2753,7 +2974,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, QuicJobNotThrottled) {
SetAlternativeService(request_info, alternative_service);
// Sets server support HTTP/2.
- session_->http_server_properties()->SetSupportsSpdy(server, true);
+ session_->http_server_properties()->SetSupportsSpdy(
+ server, NetworkIsolationKey(), true);
// Use default job factory so that Resume() is not mocked out.
HttpStreamFactory::JobFactory default_job_factory;
@@ -2792,11 +3014,14 @@ TEST_P(HttpStreamFactoryJobControllerMisdirectedRequestRetry,
const bool enable_ip_based_pooling = ::testing::get<0>(GetParam());
const bool enable_alternative_services = ::testing::get<1>(GetParam());
if (enable_alternative_services) {
- quic_data_ = std::make_unique<MockQuicData>(
- HttpNetworkSession::Params().quic_params.supported_versions.front());
+ auto version =
+ HttpNetworkSession::Params().quic_params.supported_versions.front();
+ quic_data_ = std::make_unique<MockQuicData>(version);
quic_data_->AddConnect(SYNCHRONOUS, OK);
- quic_data_->AddWrite(SYNCHRONOUS,
- client_maker_.MakeInitialSettingsPacket(1));
+ if (VersionUsesQpack(version.transport_version)) {
+ quic_data_->AddWrite(SYNCHRONOUS,
+ client_maker_.MakeInitialSettingsPacket(1));
+ }
quic_data_->AddRead(ASYNC, OK);
}
tcp_data_ = std::make_unique<SequencedSocketData>();
@@ -2847,7 +3072,8 @@ class HttpStreamFactoryJobControllerPreconnectTest
void Initialize() {
session_deps_.http_server_properties =
- std::make_unique<MockHttpServerProperties>();
+ std::make_unique<HttpServerProperties>(
+ std::make_unique<MockPrefDelegate>(), nullptr /* net_log */);
session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
factory_ = session_->http_stream_factory();
request_info_.method = "GET";
@@ -2917,7 +3143,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) {
// Set alternative service with no advertised version.
session_->http_server_properties()->SetQuicAlternativeService(
- server, alternative_service, expiration, quic::ParsedQuicVersionVector());
+ server, NetworkIsolationKey(), alternative_service, expiration,
+ quic::ParsedQuicVersionVector());
AlternativeServiceInfo alt_svc_info =
JobControllerPeer::GetAlternativeServiceInfoFor(
@@ -2930,8 +3157,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) {
// that is supported.
quic::ParsedQuicVersionVector supported_versions =
session_->params().quic_params.supported_versions;
- ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
- server, alternative_service, expiration, supported_versions));
+ session_->http_server_properties()->SetQuicAlternativeService(
+ server, NetworkIsolationKey(), alternative_service, expiration,
+ supported_versions);
alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
job_controller_, request_info, &request_delegate_,
@@ -2966,8 +3194,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) {
quic::ParsedQuicVersionVector mixed_quic_versions = {
unsupported_version_1,
session_->params().quic_params.supported_versions[0]};
- ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
- server, alternative_service, expiration, mixed_quic_versions));
+ session_->http_server_properties()->SetQuicAlternativeService(
+ server, NetworkIsolationKey(), alternative_service, expiration,
+ mixed_quic_versions);
alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
job_controller_, request_info, &request_delegate_,
@@ -2983,9 +3212,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) {
// Set alternative service for the same server with two unsupported QUIC
// versions: |unsupported_version_1|, |unsupported_version_2|.
- ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
- server, alternative_service, expiration,
- {unsupported_version_1, unsupported_version_2}));
+ session_->http_server_properties()->SetQuicAlternativeService(
+ server, NetworkIsolationKey(), alternative_service, expiration,
+ {unsupported_version_1, unsupported_version_2});
alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
job_controller_, request_info, &request_delegate_,
@@ -2995,19 +3224,19 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) {
EXPECT_EQ(0u, alt_svc_info.advertised_versions().size());
}
-// Tests that if HttpNetworkSession has a non-empty QUIC host whitelist,
+// Tests that if HttpNetworkSession has a non-empty QUIC host allowlist,
// then GetAlternativeServiceFor() will not return any QUIC alternative service
-// that's not on the whitelist.
-TEST_F(HttpStreamFactoryJobControllerTest, QuicHostWhitelist) {
+// that's not on the allowlist.
+TEST_F(HttpStreamFactoryJobControllerTest, QuicHostAllowlist) {
HttpRequestInfo request_info;
request_info.method = "GET";
request_info.url = GURL("https://www.google.com");
Initialize(request_info);
- // Set HttpNetworkSession's QUIC host whitelist to only have www.example.com
+ // Set HttpNetworkSession's QUIC host allowlist to only have www.example.com
HttpNetworkSessionPeer session_peer(session_.get());
- session_peer.params()->quic_host_whitelist.insert("www.example.com");
+ session_peer.params()->quic_host_allowlist.insert("www.example.com");
session_peer.params()->quic_params.allow_remote_alt_svc = true;
// Set alternative service for www.google.com to be www.example.com over QUIC.
@@ -3016,8 +3245,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, QuicHostWhitelist) {
quic::ParsedQuicVersionVector supported_versions =
session_->params().quic_params.supported_versions;
session_->http_server_properties()->SetQuicAlternativeService(
- server, AlternativeService(kProtoQUIC, "www.example.com", 443),
- expiration, supported_versions);
+ server, NetworkIsolationKey(),
+ AlternativeService(kProtoQUIC, "www.example.com", 443), expiration,
+ supported_versions);
AlternativeServiceInfo alt_svc_info =
JobControllerPeer::GetAlternativeServiceInfoFor(
@@ -3033,8 +3263,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, QuicHostWhitelist) {
EXPECT_EQ(supported_versions, alt_svc_info.advertised_versions());
session_->http_server_properties()->SetQuicAlternativeService(
- server, AlternativeService(kProtoQUIC, "www.example.org", 443),
- expiration, supported_versions);
+ server, NetworkIsolationKey(),
+ AlternativeService(kProtoQUIC, "www.example.org", 443), expiration,
+ supported_versions);
alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
job_controller_, request_info, &request_delegate_,
diff --git a/chromium/net/http/http_stream_factory_unittest.cc b/chromium/net/http/http_stream_factory_unittest.cc
index be453dc1fa3..e4226c36d77 100644
--- a/chromium/net/http/http_stream_factory_unittest.cc
+++ b/chromium/net/http/http_stream_factory_unittest.cc
@@ -22,6 +22,7 @@
#include "build/build_config.h"
#include "net/base/completion_once_callback.h"
#include "net/base/features.h"
+#include "net/base/network_isolation_key.h"
#include "net/base/port_util.h"
#include "net/base/privacy_mode.h"
#include "net/base/proxy_server.h"
@@ -40,7 +41,6 @@
#include "net/http/http_proxy_connect_job.h"
#include "net/http/http_request_info.h"
#include "net/http/http_server_properties.h"
-#include "net/http/http_server_properties_impl.h"
#include "net/http/http_stream.h"
#include "net/http/transport_security_state.h"
#include "net/log/net_log_with_source.h"
@@ -69,22 +69,22 @@
#include "net/test/cert_test_util.h"
#include "net/test/gtest_util.h"
#include "net/test/test_data_directory.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "net/third_party/quiche/src/quic/core/quic_server_id.h"
#include "net/third_party/quiche/src/quic/core/quic_utils.h"
#include "net/third_party/quiche/src/quic/test_tools/crypto_test_utils.h"
#include "net/third_party/quiche/src/quic/test_tools/mock_random.h"
#include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/origin.h"
// This file can be included from net/http even though
// it is in net/websockets because it doesn't
// introduce any link dependency to net/websockets.
#include "net/websockets/websocket_handshake_stream_base.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
using ::testing::Contains;
using ::testing::ElementsAre;
using ::testing::IsEmpty;
@@ -407,8 +407,7 @@ class CapturePreconnectsTransportSocketPool : public TransportClientSocketPool {
base::TimeDelta(),
ProxyServer::Direct(),
false /* is_for_websockets */,
- common_connect_job_params,
- nullptr /* ssl_config_service */),
+ common_connect_job_params),
last_num_streams_(-1) {}
int last_num_streams() const { return last_num_streams_; }
@@ -481,7 +480,7 @@ class CapturePreconnectsTransportSocketPool : public TransportClientSocketPool {
ClientSocketPool::GroupId last_group_id_;
};
-using HttpStreamFactoryTest = TestWithScopedTaskEnvironment;
+using HttpStreamFactoryTest = TestWithTaskEnvironment;
// TODO(950069): Add testing for frame_origin in NetworkIsolationKey using
// kAppendInitiatingFrameOriginToNetworkIsolationKey.
@@ -791,7 +790,7 @@ TEST_F(HttpStreamFactoryTest, QuicProxyMarkedAsBad) {
HttpNetworkSession::Context session_context;
SSLConfigServiceDefaults ssl_config_service;
- HttpServerPropertiesImpl http_server_properties;
+ HttpServerProperties http_server_properties;
MockClientSocketFactory socket_factory;
session_context.client_socket_factory = &socket_factory;
MockHostResolver host_resolver;
@@ -924,7 +923,7 @@ void SetupForQuicAlternativeProxyTest(
MockClientSocketFactory* socket_factory,
ProxyResolutionService* proxy_resolution_service,
TestProxyDelegate* test_proxy_delegate,
- HttpServerPropertiesImpl* http_server_properties,
+ HttpServerProperties* http_server_properties,
MockCertVerifier* cert_verifier,
CTPolicyEnforcer* ct_policy_enforcer,
MultiLogCTVerifier* ct_verifier,
@@ -973,7 +972,7 @@ TEST_F(HttpStreamFactoryTest, WithQUICAlternativeProxyMarkedAsBad) {
"HTTPS badproxy:99; HTTPS badfallbackproxy:98; DIRECT",
TRAFFIC_ANNOTATION_FOR_TESTS);
TestProxyDelegate test_proxy_delegate;
- HttpServerPropertiesImpl http_server_properties;
+ HttpServerProperties http_server_properties;
MockCertVerifier cert_verifier;
DefaultCTPolicyEnforcer ct_policy_enforcer;
MultiLogCTVerifier ct_verifier;
@@ -1087,7 +1086,7 @@ TEST_F(HttpStreamFactoryTest, WithQUICAlternativeProxyNotMarkedAsBad) {
ProxyResolutionService::CreateFixedFromPacResult(
"HTTPS badproxy:99; DIRECT", TRAFFIC_ANNOTATION_FOR_TESTS);
TestProxyDelegate test_proxy_delegate;
- HttpServerPropertiesImpl http_server_properties;
+ HttpServerProperties http_server_properties;
MockCertVerifier cert_verifier;
DefaultCTPolicyEnforcer ct_policy_enforcer;
MultiLogCTVerifier ct_verifier;
@@ -1182,7 +1181,7 @@ TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) {
session_params.enable_quic = true;
// Set up QUIC as alternative_service.
- HttpServerPropertiesImpl http_server_properties;
+ HttpServerProperties http_server_properties;
const AlternativeService alternative_service(kProtoQUIC, url.host().c_str(),
url.IntPort());
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
@@ -1190,7 +1189,7 @@ TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) {
url::SchemeHostPort server("https", host_port_pair.host(),
host_port_pair.port());
http_server_properties.SetQuicAlternativeService(
- server, alternative_service, expiration,
+ server, NetworkIsolationKey(), alternative_service, expiration,
session_params.quic_params.supported_versions);
HttpNetworkSession::Context session_context =
@@ -1228,10 +1227,11 @@ TEST_F(HttpStreamFactoryTest, OnlyOnePreconnectToProxyServer) {
"HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS);
// Set up the proxy server as a server that supports request priorities.
- HttpServerPropertiesImpl http_server_properties;
+ HttpServerProperties http_server_properties;
if (set_http_server_properties) {
url::SchemeHostPort spdy_server("https", "myproxy.org", 443);
- http_server_properties.SetSupportsSpdy(spdy_server, true);
+ http_server_properties.SetSupportsSpdy(spdy_server,
+ NetworkIsolationKey(), true);
}
SpdySessionDependencies session_deps;
@@ -1312,10 +1312,11 @@ TEST_F(HttpStreamFactoryTest, ProxyServerPreconnectDifferentPrivacyModes) {
"HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS);
// Set up the proxy server as a server that supports request priorities.
- HttpServerPropertiesImpl http_server_properties;
+ HttpServerProperties http_server_properties;
url::SchemeHostPort spdy_server("https", "myproxy.org", 443);
- http_server_properties.SetSupportsSpdy(spdy_server, true);
+ http_server_properties.SetSupportsSpdy(spdy_server, NetworkIsolationKey(),
+ true);
SpdySessionDependencies session_deps;
HttpNetworkSession::Params session_params =
@@ -1382,11 +1383,11 @@ namespace {
// Return count of distinct groups in given socket pool.
int GetSocketPoolGroupCount(ClientSocketPool* pool) {
int count = 0;
- std::unique_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", ""));
- EXPECT_TRUE(dict != nullptr);
- base::DictionaryValue* groups = nullptr;
- if (dict->GetDictionary("groups", &groups) && (groups != nullptr)) {
- count = static_cast<int>(groups->size());
+ base::Value dict = pool->GetInfoAsValue("", "");
+ EXPECT_TRUE(dict.is_dict());
+ const base::Value* groups = dict.FindDictKey("groups");
+ if (groups) {
+ count = groups->DictSize();
}
return count;
}
@@ -1403,12 +1404,9 @@ int GetSpdySessionCount(HttpNetworkSession* session) {
// Return count of sockets handed out by a given socket pool.
int GetHandedOutSocketCount(ClientSocketPool* pool) {
- int count = 0;
- std::unique_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", ""));
- EXPECT_TRUE(dict != nullptr);
- if (!dict->GetInteger("handed_out_socket_count", &count))
- return -1;
- return count;
+ base::Value dict = pool->GetInfoAsValue("", "");
+ EXPECT_TRUE(dict.is_dict());
+ return dict.FindIntKey("handed_out_socket_count").value_or(-1);
}
#if defined(OS_ANDROID)
@@ -1710,9 +1708,10 @@ TEST_F(HttpStreamFactoryTest, RequestHttpStreamOverProxyWithPreconnects) {
"https://myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS));
// Set up the proxy server as a server that supports request priorities.
- auto http_server_properties = std::make_unique<HttpServerPropertiesImpl>();
+ auto http_server_properties = std::make_unique<HttpServerProperties>();
url::SchemeHostPort spdy_server("https", "myproxy.org", 443);
- http_server_properties->SetSupportsSpdy(spdy_server, true);
+ http_server_properties->SetSupportsSpdy(spdy_server, NetworkIsolationKey(),
+ true);
session_deps.http_server_properties = std::move(http_server_properties);
StaticSocketDataProvider socket_data;
@@ -1991,7 +1990,8 @@ TEST_F(HttpStreamFactoryTest, RequestSpdyHttpStreamHttpURL) {
HttpServerProperties* http_server_properties =
session->spdy_session_pool()->http_server_properties();
- EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port));
+ EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port,
+ NetworkIsolationKey()));
// Now request a stream.
HttpRequestInfo request_info;
@@ -2018,7 +2018,84 @@ TEST_F(HttpStreamFactoryTest, RequestSpdyHttpStreamHttpURL) {
0, GetSocketPoolGroupCount(session->GetSocketPool(
HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct())));
EXPECT_FALSE(waiter.used_proxy_info().is_direct());
- EXPECT_TRUE(http_server_properties->GetSupportsSpdy(scheme_host_port));
+ EXPECT_TRUE(http_server_properties->GetSupportsSpdy(scheme_host_port,
+ NetworkIsolationKey()));
+}
+
+// Same as above, but checks HttpServerProperties is updated using the correct
+// NetworkIsolationKey. When/if NetworkIsolationKey is enabled by default, this
+// should probably be merged into the above test.
+TEST_F(HttpStreamFactoryTest,
+ RequestSpdyHttpStreamHttpURLWithNetworkIsolationKey) {
+ const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1);
+ const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+ const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2);
+
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(
+ features::kPartitionHttpServerPropertiesByNetworkIsolationKey);
+
+ url::SchemeHostPort scheme_host_port("http", "myproxy.org", 443);
+ auto session_deps = std::make_unique<SpdySessionDependencies>(
+ ProxyResolutionService::CreateFixedFromPacResult(
+ "HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS));
+ std::unique_ptr<ProxyResolutionService> proxy_resolution_service =
+ ProxyResolutionService::CreateFixedFromPacResult(
+ "HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS);
+
+ MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING);
+ SequencedSocketData socket_data(base::make_span(&mock_read, 1),
+ base::span<MockWrite>());
+ socket_data.set_connect_data(MockConnect(ASYNC, OK));
+ session_deps->socket_factory->AddSocketDataProvider(&socket_data);
+
+ SSLSocketDataProvider ssl_socket_data(ASYNC, OK);
+ ssl_socket_data.next_proto = kProtoHTTP2;
+ session_deps->socket_factory->AddSSLSocketDataProvider(&ssl_socket_data);
+ session_deps->proxy_resolution_service = std::move(proxy_resolution_service);
+
+ std::unique_ptr<HttpNetworkSession> session(
+ SpdySessionDependencies::SpdyCreateSession(session_deps.get()));
+
+ HttpServerProperties* http_server_properties =
+ session->spdy_session_pool()->http_server_properties();
+ EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port,
+ kNetworkIsolationKey1));
+
+ // Now request a stream.
+ HttpRequestInfo request_info;
+ request_info.method = "GET";
+ request_info.url = GURL("http://www.google.com");
+ request_info.load_flags = 0;
+ request_info.network_isolation_key = kNetworkIsolationKey1;
+ request_info.traffic_annotation =
+ MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+
+ SSLConfig ssl_config;
+ StreamRequestWaiter waiter;
+ std::unique_ptr<HttpStreamRequest> request(
+ session->http_stream_factory()->RequestStream(
+ request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+ /* enable_ip_based_pooling = */ true,
+ /* enable_alternative_services = */ true, NetLogWithSource()));
+ waiter.WaitForStream();
+ EXPECT_TRUE(waiter.stream_done());
+ EXPECT_TRUE(nullptr == waiter.websocket_stream());
+ ASSERT_TRUE(nullptr != waiter.stream());
+
+ EXPECT_EQ(1, GetSpdySessionCount(session.get()));
+ EXPECT_EQ(
+ 0, GetSocketPoolGroupCount(session->GetSocketPool(
+ HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct())));
+ EXPECT_FALSE(waiter.used_proxy_info().is_direct());
+ EXPECT_TRUE(http_server_properties->GetSupportsSpdy(scheme_host_port,
+ kNetworkIsolationKey1));
+ // Other NetworkIsolationKeys should not be recorded as supporting SPDY.
+ EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port,
+ NetworkIsolationKey()));
+ EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port,
+ kNetworkIsolationKey2));
}
// Tests that when a new SpdySession is established, duplicated idle H2 sockets
@@ -2222,7 +2299,7 @@ TEST_F(HttpStreamFactoryTest, RequestBidirectionalStreamImpl) {
}
class HttpStreamFactoryBidirectionalQuicTest
- : public TestWithScopedTaskEnvironment,
+ : public TestWithTaskEnvironment,
public ::testing::WithParamInterface<
std::tuple<quic::ParsedQuicVersion, bool>> {
protected:
@@ -2301,7 +2378,8 @@ class HttpStreamFactoryBidirectionalQuicTest
443);
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
http_server_properties_.SetQuicAlternativeService(
- url::SchemeHostPort(default_url_), alternative_service, expiration,
+ url::SchemeHostPort(default_url_), NetworkIsolationKey(),
+ alternative_service, expiration,
session_->params().quic_params.supported_versions);
}
@@ -2338,7 +2416,7 @@ class HttpStreamFactoryBidirectionalQuicTest
MockCertVerifier cert_verifier_;
ProofVerifyDetailsChromium verify_details_;
MockCryptoClientStreamFactory crypto_client_stream_factory_;
- HttpServerPropertiesImpl http_server_properties_;
+ HttpServerProperties http_server_properties_;
TransportSecurityState transport_security_state_;
MultiLogCTVerifier ct_verifier_;
DefaultCTPolicyEnforcer ct_policy_enforcer_;
@@ -2360,9 +2438,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest,
spdy::SpdyPriority priority =
ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
size_t spdy_headers_frame_length;
- mock_quic_data.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1));
+ int packet_num = 1;
+ if (VersionUsesQpack(version().transport_version)) {
+ mock_quic_data.AddWrite(
+ client_packet_maker().MakeInitialSettingsPacket(packet_num++));
+ }
mock_quic_data.AddWrite(client_packet_maker().MakeRequestHeadersPacket(
- 2, GetNthClientInitiatedBidirectionalStreamId(0),
+ packet_num++, GetNthClientInitiatedBidirectionalStreamId(0),
/*should_include_version=*/true,
/*fin=*/true, priority,
client_packet_maker().GetRequestHeaders("GET", "https", "/"),
@@ -2485,9 +2567,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest,
spdy::SpdyPriority priority =
ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
size_t spdy_headers_frame_length;
- mock_quic_data.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1));
+ int packet_num = 1;
+ if (VersionUsesQpack(version().transport_version)) {
+ mock_quic_data.AddWrite(
+ client_packet_maker().MakeInitialSettingsPacket(packet_num++));
+ }
mock_quic_data.AddWrite(client_packet_maker().MakeRequestHeadersPacket(
- 2, GetNthClientInitiatedBidirectionalStreamId(0),
+ packet_num++, GetNthClientInitiatedBidirectionalStreamId(0),
/*should_include_version=*/true,
/*fin=*/true, priority,
client_packet_maker().GetRequestHeaders("GET", "https", "/"),
@@ -2736,9 +2822,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest, Tag) {
spdy::SpdyPriority priority =
ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
size_t spdy_headers_frame_length;
- mock_quic_data.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1));
+ int packet_num = 1;
+ if (VersionUsesQpack(version().transport_version)) {
+ mock_quic_data.AddWrite(
+ client_packet_maker().MakeInitialSettingsPacket(packet_num++));
+ }
mock_quic_data.AddWrite(client_packet_maker().MakeRequestHeadersPacket(
- 2, GetNthClientInitiatedBidirectionalStreamId(0),
+ packet_num++, GetNthClientInitiatedBidirectionalStreamId(0),
/*should_include_version=*/true,
/*fin=*/true, priority,
client_packet_maker().GetRequestHeaders("GET", "https", "/"),
@@ -2755,9 +2845,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest, Tag) {
// Prepare mock QUIC data for a second session establishment.
client_packet_maker().Reset();
MockQuicData mock_quic_data2(version());
- mock_quic_data2.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1));
+ packet_num = 1;
+ if (VersionUsesQpack(version().transport_version)) {
+ mock_quic_data2.AddWrite(
+ client_packet_maker().MakeInitialSettingsPacket(packet_num++));
+ }
mock_quic_data2.AddWrite(client_packet_maker().MakeRequestHeadersPacket(
- 2, GetNthClientInitiatedBidirectionalStreamId(0),
+ packet_num++, GetNthClientInitiatedBidirectionalStreamId(0),
/*should_include_version=*/true,
/*fin=*/true, priority,
client_packet_maker().GetRequestHeaders("GET", "https", "/"),
@@ -3354,6 +3448,188 @@ TEST_F(HttpStreamFactoryTest, MultiIPAliases) {
HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct())));
}
+class ProcessAlternativeServicesTest : public TestWithTaskEnvironment {
+ public:
+ ProcessAlternativeServicesTest() {
+ session_params_.enable_quic = true;
+
+ session_context_.proxy_resolution_service = proxy_resolution_service_.get();
+ session_context_.host_resolver = &host_resolver_;
+ session_context_.cert_verifier = &cert_verifier_;
+ session_context_.transport_security_state = &transport_security_state_;
+ session_context_.cert_transparency_verifier = &ct_verifier_;
+ session_context_.client_socket_factory = &socket_factory_;
+ session_context_.ct_policy_enforcer = &ct_policy_enforcer_;
+ session_context_.ssl_config_service = &ssl_config_service_;
+ session_context_.http_server_properties = &http_server_properties_;
+ }
+
+ protected:
+ HttpNetworkSession::Params session_params_;
+ HttpNetworkSession::Context session_context_;
+ std::unique_ptr<HttpNetworkSession> session_;
+ HttpServerProperties http_server_properties_;
+
+ private:
+ std::unique_ptr<ProxyResolutionService> proxy_resolution_service_ =
+ ProxyResolutionService::CreateDirect();
+ SSLConfigServiceDefaults ssl_config_service_;
+ MockClientSocketFactory socket_factory_;
+ MockHostResolver host_resolver_;
+ MockCertVerifier cert_verifier_;
+ TransportSecurityState transport_security_state_;
+ MultiLogCTVerifier ct_verifier_;
+ DefaultCTPolicyEnforcer ct_policy_enforcer_;
+};
+
+TEST_F(ProcessAlternativeServicesTest, ProcessEmptyAltSvc) {
+ session_ =
+ std::make_unique<HttpNetworkSession>(session_params_, session_context_);
+ url::SchemeHostPort origin;
+ NetworkIsolationKey network_isolation_key;
+
+ scoped_refptr<HttpResponseHeaders> headers(
+ base::MakeRefCounted<HttpResponseHeaders>(""));
+ session_->http_stream_factory()->ProcessAlternativeServices(
+ session_.get(), network_isolation_key, headers.get(), origin);
+
+ AlternativeServiceInfoVector alternatives =
+ http_server_properties_.GetAlternativeServiceInfos(origin,
+ network_isolation_key);
+ EXPECT_TRUE(alternatives.empty());
+}
+
+TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcClear) {
+ session_ =
+ std::make_unique<HttpNetworkSession>(session_params_, session_context_);
+ url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443);
+ ;
+ NetworkIsolationKey network_isolation_key(
+ url::Origin::Create(GURL("https://example.com")),
+ url::Origin::Create(GURL("https://example.com")));
+
+ http_server_properties_.SetAlternativeServices(
+ origin, network_isolation_key,
+ {AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
+ {kProtoQUIC, "", 443},
+ base::Time::Now() + base::TimeDelta::FromSeconds(30),
+ quic::AllSupportedVersions())});
+
+ EXPECT_FALSE(http_server_properties_
+ .GetAlternativeServiceInfos(origin, network_isolation_key)
+ .empty());
+
+ scoped_refptr<HttpResponseHeaders> headers(
+ base::MakeRefCounted<HttpResponseHeaders>(""));
+ headers->AddHeader("alt-svc: clear");
+
+ session_->http_stream_factory()->ProcessAlternativeServices(
+ session_.get(), network_isolation_key, headers.get(), origin);
+
+ AlternativeServiceInfoVector alternatives =
+ http_server_properties_.GetAlternativeServiceInfos(origin,
+ network_isolation_key);
+ EXPECT_TRUE(alternatives.empty());
+}
+
+TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcQuic) {
+ session_params_.quic_params.supported_versions = quic::AllSupportedVersions();
+ session_ =
+ std::make_unique<HttpNetworkSession>(session_params_, session_context_);
+ url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443);
+
+ NetworkIsolationKey network_isolation_key(
+ url::Origin::Create(GURL("https://example.com")),
+ url::Origin::Create(GURL("https://example.com")));
+
+ scoped_refptr<HttpResponseHeaders> headers(
+ base::MakeRefCounted<HttpResponseHeaders>(""));
+ headers->AddHeader("alt-svc: quic=\":443\"; v=\"99,48,47,46,43,39\"");
+
+ session_->http_stream_factory()->ProcessAlternativeServices(
+ session_.get(), network_isolation_key, headers.get(), origin);
+
+ AlternativeServiceInfoVector alternatives =
+ http_server_properties_.GetAlternativeServiceInfos(origin,
+ network_isolation_key);
+ ASSERT_EQ(1u, alternatives.size());
+ EXPECT_EQ(kProtoQUIC, alternatives[0].protocol());
+ EXPECT_EQ(HostPortPair("example.com", 443), alternatives[0].host_port_pair());
+ EXPECT_EQ(quic::AllSupportedVersions().size(),
+ alternatives[0].advertised_versions().size());
+ for (quic::ParsedQuicVersion version : quic::AllSupportedVersions()) {
+ EXPECT_TRUE(base::Contains(alternatives[0].advertised_versions(), version))
+ << version;
+ }
+}
+
+TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcQuicIetf) {
+ session_params_.quic_params.supported_versions = quic::AllSupportedVersions();
+ session_ =
+ std::make_unique<HttpNetworkSession>(session_params_, session_context_);
+ url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443);
+
+ NetworkIsolationKey network_isolation_key(
+ url::Origin::Create(GURL("https://example.com")),
+ url::Origin::Create(GURL("https://example.com")));
+
+ scoped_refptr<HttpResponseHeaders> headers(
+ base::MakeRefCounted<HttpResponseHeaders>(""));
+ headers->AddHeader(
+ "alt-svc: "
+ "h3-Q099=\":443\",h3-Q048=\":443\",h3-Q047=\":443\",h3-Q043=\":443\",h3-"
+ "Q039=\":443\"");
+
+ session_->http_stream_factory()->ProcessAlternativeServices(
+ session_.get(), network_isolation_key, headers.get(), origin);
+
+ quic::ParsedQuicVersionVector versions = {
+ {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_99},
+ {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_48},
+ {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_47},
+ {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_43},
+ {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_39},
+ };
+ AlternativeServiceInfoVector alternatives =
+ http_server_properties_.GetAlternativeServiceInfos(origin,
+ network_isolation_key);
+ ASSERT_EQ(versions.size(), alternatives.size());
+ for (size_t i = 0; i < alternatives.size(); ++i) {
+ EXPECT_EQ(kProtoQUIC, alternatives[i].protocol());
+ EXPECT_EQ(HostPortPair("example.com", 443),
+ alternatives[i].host_port_pair());
+ EXPECT_EQ(1u, alternatives[i].advertised_versions().size());
+ EXPECT_EQ(versions[i], alternatives[i].advertised_versions()[0]);
+ }
+}
+
+TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcHttp2) {
+ session_params_.quic_params.supported_versions = quic::AllSupportedVersions();
+ session_ =
+ std::make_unique<HttpNetworkSession>(session_params_, session_context_);
+ url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443);
+
+ NetworkIsolationKey network_isolation_key(
+ url::Origin::Create(GURL("https://example.com")),
+ url::Origin::Create(GURL("https://example.com")));
+
+ scoped_refptr<HttpResponseHeaders> headers(
+ base::MakeRefCounted<HttpResponseHeaders>(""));
+ headers->AddHeader("alt-svc: h2=\"other.example.com:443\"");
+
+ session_->http_stream_factory()->ProcessAlternativeServices(
+ session_.get(), network_isolation_key, headers.get(), origin);
+
+ AlternativeServiceInfoVector alternatives =
+ http_server_properties_.GetAlternativeServiceInfos(origin,
+ network_isolation_key);
+ ASSERT_EQ(1u, alternatives.size());
+ EXPECT_EQ(kProtoHTTP2, alternatives[0].protocol());
+ EXPECT_EQ(HostPortPair("other.example.com", 443),
+ alternatives[0].host_port_pair());
+ EXPECT_EQ(0u, alternatives[0].advertised_versions().size());
+}
+
} // namespace
} // namespace net
diff --git a/chromium/net/http/http_stream_parser_fuzzer.cc b/chromium/net/http/http_stream_parser_fuzzer.cc
index 3f99250d7a9..bb5543a399d 100644
--- a/chromium/net/http/http_stream_parser_fuzzer.cc
+++ b/chromium/net/http/http_stream_parser_fuzzer.cc
@@ -7,6 +7,8 @@
#include <stddef.h>
#include <stdint.h>
+#include <fuzzer/FuzzedDataProvider.h>
+
#include <algorithm>
#include <memory>
#include <string>
@@ -24,7 +26,6 @@
#include "net/log/test_net_log.h"
#include "net/socket/fuzzed_socket.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
-#include "third_party/libFuzzer/src/utils/FuzzedDataProvider.h"
#include "url/gurl.h"
// Fuzzer for HttpStreamParser.
diff --git a/chromium/net/http/http_stream_parser_unittest.cc b/chromium/net/http/http_stream_parser_unittest.cc
index a74972cfe23..81fbaac2d70 100644
--- a/chromium/net/http/http_stream_parser_unittest.cc
+++ b/chromium/net/http/http_stream_parser_unittest.cc
@@ -19,7 +19,7 @@
#include "base/run_loop.h"
#include "base/stl_util.h"
#include "base/strings/string_piece.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/task_environment.h"
#include "base/threading/thread_task_runner_handle.h"
#include "net/base/chunked_upload_data_stream.h"
#include "net/base/elements_upload_data_stream.h"
@@ -153,7 +153,7 @@ TEST(HttpStreamParser, DataReadErrorSynchronous) {
}
TEST(HttpStreamParser, DataReadErrorAsynchronous) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockWrite writes[] = {
MockWrite(ASYNC, 0, "POST / HTTP/1.1\r\n"),
@@ -219,7 +219,7 @@ class InitAsyncUploadDataStream : public ChunkedUploadDataStream {
};
TEST(HttpStreamParser, InitAsynchronousUploadDataStream) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
InitAsyncUploadDataStream upload_data_stream(0);
@@ -370,8 +370,8 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) {
}
TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) {
- base::test::ScopedTaskEnvironment scoped_task_environment(
- base::test::ScopedTaskEnvironment::MainThreadType::IO);
+ base::test::TaskEnvironment task_environment(
+ base::test::TaskEnvironment::MainThreadType::IO);
// Create an empty temporary file.
base::ScopedTempDir temp_dir;
@@ -600,7 +600,7 @@ TEST(HttpStreamParser, SentBytesPost) {
}
TEST(HttpStreamParser, SentBytesChunkedPostError) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
static const char kChunk[] = "Chunk 1";
@@ -657,7 +657,7 @@ TEST(HttpStreamParser, SentBytesChunkedPostError) {
// when sending a request with a chunked body with only one chunk that becomes
// available asynchronously.
TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
static const char kChunk[] = "Chunk";
@@ -739,7 +739,7 @@ TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) {
// when sending a request with a chunked body with only one chunk that is
// available synchronously.
TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
static const char kChunk[] = "Chunk";
@@ -818,7 +818,7 @@ TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) {
// asynchronously.
// This is a regression test for http://crbug.com/132243
TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
// The chunks that will be written in the request, as reflected in the
// MockWrites below.
@@ -916,7 +916,7 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) {
// when there's only one "chunk" with 0 bytes, and is received from the
// UploadStream only after sending the request headers successfully.
TEST(HttpStreamParser, AsyncEmptyChunkedUpload) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockWrite writes[] = {
MockWrite(ASYNC, 0,
@@ -993,7 +993,7 @@ TEST(HttpStreamParser, AsyncEmptyChunkedUpload) {
// when there's only one "chunk" with 0 bytes, which was already appended before
// the request was started.
TEST(HttpStreamParser, SyncEmptyChunkedUpload) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
MockWrite writes[] = {
MockWrite(ASYNC, 0,
diff --git a/chromium/net/http/http_stream_request_unittest.cc b/chromium/net/http/http_stream_request_unittest.cc
index 031cb77ddc5..1b6f0d17ac7 100644
--- a/chromium/net/http/http_stream_request_unittest.cc
+++ b/chromium/net/http/http_stream_request_unittest.cc
@@ -7,7 +7,7 @@
#include <utility>
#include "base/run_loop.h"
-#include "base/test/scoped_task_environment.h"
+#include "base/test/task_environment.h"
#include "net/http/http_stream_factory.h"
#include "net/http/http_stream_factory_job.h"
#include "net/http/http_stream_factory_job_controller.h"
@@ -22,7 +22,7 @@ namespace net {
// Make sure that Request passes on its priority updates to its jobs.
TEST(HttpStreamRequestTest, SetPriority) {
- base::test::ScopedTaskEnvironment scoped_task_environment;
+ base::test::TaskEnvironment task_environment;
SequencedSocketData data;
data.set_connect_data(MockConnect(ASYNC, OK));
diff --git a/chromium/net/http/http_transaction.h b/chromium/net/http/http_transaction.h
index f8ddc87879c..aa496f5924f 100644
--- a/chromium/net/http/http_transaction.h
+++ b/chromium/net/http/http_transaction.h
@@ -128,14 +128,6 @@ class NET_EXPORT_PRIVATE HttpTransaction {
// ignore.
virtual void StopCaching() = 0;
- // Gets the full request headers sent to the server. This is guaranteed to
- // work only if Start returns success and the underlying transaction supports
- // it. (Right now, this is only network transactions, not cache ones.)
- //
- // Returns true and overwrites headers if it can get the request headers;
- // otherwise, returns false and does not modify headers.
- virtual bool GetFullRequestHeaders(HttpRequestHeaders* headers) const = 0;
-
// Get the number of bytes received from network.
virtual int64_t GetTotalReceivedBytes() const = 0;
diff --git a/chromium/net/http/http_transaction_test_util.cc b/chromium/net/http/http_transaction_test_util.cc
index 28b65dd1704..5f75d668b8b 100644
--- a/chromium/net/http/http_transaction_test_util.cc
+++ b/chromium/net/http/http_transaction_test_util.cc
@@ -195,9 +195,11 @@ TestTransactionConsumer::~TestTransactionConsumer() = default;
void TestTransactionConsumer::Start(const HttpRequestInfo* request,
const NetLogWithSource& net_log) {
state_ = STARTING;
- int result = trans_->Start(
- request, base::Bind(&TestTransactionConsumer::OnIOComplete,
- base::Unretained(this)), net_log);
+ int result =
+ trans_->Start(request,
+ base::BindOnce(&TestTransactionConsumer::OnIOComplete,
+ base::Unretained(this)),
+ net_log);
if (result != ERR_IO_PENDING)
DidStart(result);
}
@@ -229,10 +231,10 @@ void TestTransactionConsumer::DidFinish(int result) {
void TestTransactionConsumer::Read() {
state_ = READING;
read_buf_ = base::MakeRefCounted<IOBuffer>(1024);
- int result = trans_->Read(read_buf_.get(),
- 1024,
- base::Bind(&TestTransactionConsumer::OnIOComplete,
- base::Unretained(this)));
+ int result =
+ trans_->Read(read_buf_.get(), 1024,
+ base::BindOnce(&TestTransactionConsumer::OnIOComplete,
+ base::Unretained(this)));
if (result != ERR_IO_PENDING)
DidRead(result);
}
@@ -368,11 +370,6 @@ void MockNetworkTransaction::StopCaching() {
transaction_factory_->TransactionStopCaching();
}
-bool MockNetworkTransaction::GetFullRequestHeaders(
- HttpRequestHeaders* headers) const {
- return false;
-}
-
int64_t MockNetworkTransaction::GetTotalReceivedBytes() const {
return received_bytes_;
}
@@ -501,6 +498,11 @@ int MockNetworkTransaction::StartInternal(const HttpRequestInfo* request,
if (request_->load_flags & LOAD_PREFETCH)
response_.unused_since_prefetch = true;
+ if (request_->load_flags & LOAD_RESTRICTED_PREFETCH) {
+ DCHECK(response_.unused_since_prefetch);
+ response_.restricted_prefetch = true;
+ }
+
// Pause and resume.
if (!before_network_start_callback_.is_null()) {
bool defer = false;
diff --git a/chromium/net/http/http_transaction_test_util.h b/chromium/net/http/http_transaction_test_util.h
index f1724b0b4bd..513d8715039 100644
--- a/chromium/net/http/http_transaction_test_util.h
+++ b/chromium/net/http/http_transaction_test_util.h
@@ -31,7 +31,6 @@
namespace net {
-class HttpRequestHeaders;
class IOBuffer;
class SSLPrivateKey;
class X509Certificate;
@@ -209,8 +208,6 @@ class MockNetworkTransaction
void StopCaching() override;
- bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override;
-
int64_t GetTotalReceivedBytes() const override;
int64_t GetTotalSentBytes() const override;
diff --git a/chromium/net/http/mock_http_cache.cc b/chromium/net/http/mock_http_cache.cc
index 3ab7e86742f..b9cc0fc71ec 100644
--- a/chromium/net/http/mock_http_cache.cc
+++ b/chromium/net/http/mock_http_cache.cc
@@ -17,6 +17,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "net/base/features.h"
#include "net/base/net_errors.h"
+#include "net/disk_cache/disk_cache_test_util.h"
#include "net/http/http_cache_writers.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -84,7 +85,7 @@ MockDiskEntry::MockDiskEntry(const std::string& key)
max_file_size_(std::numeric_limits<int>::max()),
doomed_(false),
sparse_(false),
- fail_requests_(false),
+ fail_requests_(0),
fail_sparse_requests_(false),
busy_(false),
delayed_(false),
@@ -127,7 +128,7 @@ int MockDiskEntry::ReadData(int index,
DCHECK(index >= 0 && index < kNumCacheEntryDataIndices);
DCHECK(!callback.is_null());
- if (fail_requests_)
+ if (fail_requests_ & FAIL_READ)
return ERR_CACHE_READ_FAILURE;
if (offset < 0 || offset > static_cast<int>(data_[index].size()))
@@ -169,7 +170,7 @@ int MockDiskEntry::WriteData(int index,
DCHECK(!callback.is_null());
DCHECK(truncate);
- if (fail_requests_) {
+ if (fail_requests_ & FAIL_WRITE) {
CallbackLater(std::move(callback), ERR_CACHE_READ_FAILURE);
return ERR_IO_PENDING;
}
@@ -211,7 +212,7 @@ int MockDiskEntry::ReadSparseData(int64_t offset,
if (offset < 0)
return ERR_FAILED;
- if (fail_requests_)
+ if (fail_requests_ & FAIL_READ_SPARSE)
return ERR_CACHE_READ_FAILURE;
DCHECK(offset < std::numeric_limits<int32_t>::max());
@@ -251,7 +252,7 @@ int MockDiskEntry::WriteSparseData(int64_t offset,
if (!buf_len)
return 0;
- if (fail_requests_)
+ if (fail_requests_ & FAIL_WRITE_SPARSE)
return ERR_CACHE_READ_FAILURE;
DCHECK(offset < std::numeric_limits<int32_t>::max());
@@ -280,7 +281,7 @@ int MockDiskEntry::GetAvailableRange(int64_t offset,
if (offset < 0)
return ERR_FAILED;
- if (fail_requests_)
+ if (fail_requests_ & FAIL_GET_AVAILABLE_RANGE)
return ERR_CACHE_READ_FAILURE;
*start = offset;
@@ -417,14 +418,13 @@ MockDiskCache::MockDiskCache()
doomed_count_(0),
max_file_size_(std::numeric_limits<int>::max()),
fail_requests_(false),
- soft_failures_(false),
- soft_failures_one_instance_(false),
+ soft_failures_(0),
+ soft_failures_one_instance_(0),
double_create_check_(true),
fail_sparse_requests_(false),
support_in_memory_entry_data_(true),
force_fail_callback_later_(false),
- defer_op_(MockDiskEntry::DEFER_NONE),
- resume_return_code_(0) {}
+ defer_op_(MockDiskEntry::DEFER_NONE) {}
MockDiskCache::~MockDiskCache() {
ReleaseAll();
@@ -434,95 +434,97 @@ int32_t MockDiskCache::GetEntryCount() const {
return static_cast<int32_t>(entries_.size());
}
-net::Error MockDiskCache::OpenOrCreateEntry(
+disk_cache::EntryResult MockDiskCache::OpenOrCreateEntry(
const std::string& key,
net::RequestPriority request_priority,
- disk_cache::EntryWithOpened* entry_struct,
- CompletionOnceCallback callback) {
+ EntryResultCallback callback) {
DCHECK(!callback.is_null());
- base::RepeatingCallback<void(int)> copyable_callback;
+ base::RepeatingCallback<void(EntryResult)> copyable_callback;
if (callback)
copyable_callback = base::AdaptCallbackForRepeating(std::move(callback));
if (force_fail_callback_later_) {
- CallbackLater(copyable_callback, ERR_CACHE_OPEN_OR_CREATE_FAILURE);
- return ERR_IO_PENDING;
+ CallbackLater(base::BindOnce(
+ copyable_callback,
+ EntryResult::MakeError(ERR_CACHE_OPEN_OR_CREATE_FAILURE)));
+ return EntryResult::MakeError(ERR_IO_PENDING);
}
if (fail_requests_)
- return ERR_CACHE_OPEN_OR_CREATE_FAILURE;
+ return EntryResult::MakeError(ERR_CACHE_OPEN_OR_CREATE_FAILURE);
- disk_cache::Entry** entry = &(entry_struct->entry);
+ EntryResult result;
// First try opening the entry.
- entry_struct->opened = true;
- net::Error rv = OpenEntry(key, request_priority, entry, copyable_callback);
- if (rv == OK || rv == ERR_IO_PENDING)
- return rv;
+ result = OpenEntry(key, request_priority, copyable_callback);
+ if (result.net_error() == OK || result.net_error() == ERR_IO_PENDING)
+ return result;
// Unable to open, try creating the entry.
- entry_struct->opened = false;
- rv = CreateEntry(key, request_priority, entry, copyable_callback);
- if (rv == OK || rv == ERR_IO_PENDING)
- return rv;
+ result = CreateEntry(key, request_priority, copyable_callback);
+ if (result.net_error() == OK || result.net_error() == ERR_IO_PENDING)
+ return result;
- return ERR_CACHE_OPEN_OR_CREATE_FAILURE;
+ return EntryResult::MakeError(ERR_CACHE_OPEN_OR_CREATE_FAILURE);
}
-net::Error MockDiskCache::OpenEntry(const std::string& key,
- net::RequestPriority request_priority,
- disk_cache::Entry** entry,
- CompletionOnceCallback callback) {
+disk_cache::EntryResult MockDiskCache::OpenEntry(
+ const std::string& key,
+ net::RequestPriority request_priority,
+ EntryResultCallback callback) {
DCHECK(!callback.is_null());
if (force_fail_callback_later_) {
- CallbackLater(std::move(callback), ERR_CACHE_OPEN_FAILURE);
- return ERR_IO_PENDING;
+ CallbackLater(base::BindOnce(
+ std::move(callback), EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE)));
+ return EntryResult::MakeError(ERR_IO_PENDING);
}
if (fail_requests_)
- return ERR_CACHE_OPEN_FAILURE;
+ return EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE);
auto it = entries_.find(key);
if (it == entries_.end())
- return ERR_CACHE_OPEN_FAILURE;
+ return EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE);
if (it->second->is_doomed()) {
it->second->Release();
entries_.erase(it);
- return ERR_CACHE_OPEN_FAILURE;
+ return EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE);
}
open_count_++;
- it->second->AddRef();
- *entry = it->second;
+ MockDiskEntry* entry = it->second;
+ entry->AddRef();
if (soft_failures_ || soft_failures_one_instance_) {
- it->second->set_fail_requests();
- soft_failures_one_instance_ = false;
+ entry->set_fail_requests(soft_failures_ | soft_failures_one_instance_);
+ soft_failures_one_instance_ = 0;
}
- it->second->set_max_file_size(max_file_size_);
+ entry->set_max_file_size(max_file_size_);
+ EntryResult result = EntryResult::MakeOpened(entry);
if (GetTestModeForEntry(key) & TEST_MODE_SYNC_CACHE_START)
- return OK;
+ return result;
- CallbackLater(std::move(callback), OK);
- return ERR_IO_PENDING;
+ CallbackLater(base::BindOnce(std::move(callback), std::move(result)));
+ return EntryResult::MakeError(ERR_IO_PENDING);
}
-net::Error MockDiskCache::CreateEntry(const std::string& key,
- net::RequestPriority request_priority,
- disk_cache::Entry** entry,
- CompletionOnceCallback callback) {
+disk_cache::EntryResult MockDiskCache::CreateEntry(
+ const std::string& key,
+ net::RequestPriority request_priority,
+ EntryResultCallback callback) {
DCHECK(!callback.is_null());
if (force_fail_callback_later_) {
- CallbackLater(std::move(callback), ERR_CACHE_CREATE_FAILURE);
- return ERR_IO_PENDING;
+ CallbackLater(base::BindOnce(
+ std::move(callback), EntryResult::MakeError(ERR_CACHE_CREATE_FAILURE)));
+ return EntryResult::MakeError(ERR_IO_PENDING);
}
if (fail_requests_)
- return ERR_CACHE_CREATE_FAILURE;
+ return EntryResult::MakeError(ERR_CACHE_CREATE_FAILURE);
auto it = entries_.find(key);
if (it != entries_.end()) {
@@ -530,7 +532,7 @@ net::Error MockDiskCache::CreateEntry(const std::string& key,
if (double_create_check_)
NOTREACHED();
else
- return ERR_CACHE_CREATE_FAILURE;
+ return EntryResult::MakeError(ERR_CACHE_CREATE_FAILURE);
}
it->second->Release();
entries_.erase(it);
@@ -544,11 +546,10 @@ net::Error MockDiskCache::CreateEntry(const std::string& key,
entries_[key] = new_entry;
new_entry->AddRef();
- *entry = new_entry;
if (soft_failures_ || soft_failures_one_instance_) {
- new_entry->set_fail_requests();
- soft_failures_one_instance_ = false;
+ new_entry->set_fail_requests(soft_failures_ | soft_failures_one_instance_);
+ soft_failures_one_instance_ = 0;
}
if (fail_sparse_requests_)
@@ -556,19 +557,19 @@ net::Error MockDiskCache::CreateEntry(const std::string& key,
new_entry->set_max_file_size(max_file_size_);
+ EntryResult result = EntryResult::MakeCreated(new_entry);
if (GetTestModeForEntry(key) & TEST_MODE_SYNC_CACHE_START)
- return OK;
+ return result;
// Pause and resume.
if (defer_op_ == MockDiskEntry::DEFER_CREATE) {
defer_op_ = MockDiskEntry::DEFER_NONE;
- resume_callback_ = std::move(callback);
- resume_return_code_ = OK;
- return ERR_IO_PENDING;
+ resume_callback_ = base::BindOnce(std::move(callback), std::move(result));
+ return EntryResult::MakeError(ERR_IO_PENDING);
}
- CallbackLater(std::move(callback), OK);
- return ERR_IO_PENDING;
+ CallbackLater(base::BindOnce(std::move(callback), std::move(result)));
+ return EntryResult::MakeError(ERR_IO_PENDING);
}
net::Error MockDiskCache::DoomEntry(const std::string& key,
@@ -576,7 +577,7 @@ net::Error MockDiskCache::DoomEntry(const std::string& key,
CompletionOnceCallback callback) {
DCHECK(!callback.is_null());
if (force_fail_callback_later_) {
- CallbackLater(std::move(callback), ERR_CACHE_DOOM_FAILURE);
+ CallbackLater(base::BindOnce(std::move(callback), ERR_CACHE_DOOM_FAILURE));
return ERR_IO_PENDING;
}
@@ -593,7 +594,7 @@ net::Error MockDiskCache::DoomEntry(const std::string& key,
if (GetTestModeForEntry(key) & TEST_MODE_SYNC_CACHE_START)
return OK;
- CallbackLater(std::move(callback), OK);
+ CallbackLater(base::BindOnce(std::move(callback), OK));
return ERR_IO_PENDING;
}
@@ -619,9 +620,8 @@ int64_t MockDiskCache::CalculateSizeOfAllEntries(
class MockDiskCache::NotImplementedIterator : public Iterator {
public:
- net::Error OpenNextEntry(disk_cache::Entry** next_entry,
- CompletionOnceCallback callback) override {
- return ERR_NOT_IMPLEMENTED;
+ EntryResult OpenNextEntry(EntryResultCallback callback) override {
+ return EntryResult::MakeError(ERR_NOT_IMPLEMENTED);
}
};
@@ -668,9 +668,8 @@ void MockDiskCache::ReleaseAll() {
entries_.clear();
}
-void MockDiskCache::CallbackLater(CompletionOnceCallback callback, int result) {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::BindOnce(std::move(callback), result));
+void MockDiskCache::CallbackLater(base::OnceClosure callback) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(callback));
}
bool MockDiskCache::IsDiskEntryDoomed(const std::string& key) {
@@ -683,8 +682,7 @@ bool MockDiskCache::IsDiskEntryDoomed(const std::string& key) {
void MockDiskCache::ResumeCacheOperation() {
DCHECK(!resume_callback_.is_null());
- CallbackLater(std::move(resume_callback_), resume_return_code_);
- resume_return_code_ = 0;
+ CallbackLater(std::move(resume_callback_));
}
scoped_refptr<MockDiskEntry> MockDiskCache::GetDiskEntryRef(
@@ -790,17 +788,31 @@ bool MockHttpCache::WriteResponseInfo(disk_cache::Entry* disk_entry,
bool MockHttpCache::OpenBackendEntry(const std::string& key,
disk_cache::Entry** entry) {
- TestCompletionCallback cb;
- int rv = backend()->OpenEntry(key, net::HIGHEST, entry, cb.callback());
- return (cb.GetResult(rv) == OK);
+ TestEntryResultCompletionCallback cb;
+ disk_cache::EntryResult result =
+ backend()->OpenEntry(key, net::HIGHEST, cb.callback());
+ result = cb.GetResult(std::move(result));
+ if (result.net_error() == OK) {
+ *entry = result.ReleaseEntry();
+ return true;
+ } else {
+ return false;
+ }
}
bool MockHttpCache::CreateBackendEntry(const std::string& key,
disk_cache::Entry** entry,
NetLog* net_log) {
- TestCompletionCallback cb;
- int rv = backend()->CreateEntry(key, net::HIGHEST, entry, cb.callback());
- return (cb.GetResult(rv) == OK);
+ TestEntryResultCompletionCallback cb;
+ disk_cache::EntryResult result =
+ backend()->CreateEntry(key, net::HIGHEST, cb.callback());
+ result = cb.GetResult(std::move(result));
+ if (result.net_error() == OK) {
+ *entry = result.ReleaseEntry();
+ return true;
+ } else {
+ return false;
+ }
}
// Static.
@@ -848,11 +860,11 @@ int MockHttpCache::GetCountWriterTransactions(const std::string& key) {
//-----------------------------------------------------------------------------
-net::Error MockDiskCacheNoCB::CreateEntry(const std::string& key,
- net::RequestPriority request_priority,
- disk_cache::Entry** entry,
- CompletionOnceCallback callback) {
- return ERR_IO_PENDING;
+disk_cache::EntryResult MockDiskCacheNoCB::CreateEntry(
+ const std::string& key,
+ net::RequestPriority request_priority,
+ EntryResultCallback callback) {
+ return EntryResult::MakeError(ERR_IO_PENDING);
}
//-----------------------------------------------------------------------------
diff --git a/chromium/net/http/mock_http_cache.h b/chromium/net/http/mock_http_cache.h
index f4fa2e7af54..f0736c17e69 100644
--- a/chromium/net/http/mock_http_cache.h
+++ b/chromium/net/http/mock_http_cache.h
@@ -40,6 +40,16 @@ class MockDiskEntry : public disk_cache::Entry,
DEFER_WRITE,
};
+ // Bit mask used for set_fail_requests().
+ enum FailOp {
+ FAIL_READ = 0x01,
+ FAIL_WRITE = 0x02,
+ FAIL_READ_SPARSE = 0x04,
+ FAIL_WRITE_SPARSE = 0x08,
+ FAIL_GET_AVAILABLE_RANGE = 0x10,
+ FAIL_ALL = 0xFF
+ };
+
explicit MockDiskEntry(const std::string& key);
bool is_doomed() const { return doomed_; }
@@ -82,8 +92,8 @@ class MockDiskEntry : public disk_cache::Entry,
uint8_t in_memory_data() const { return in_memory_data_; }
void set_in_memory_data(uint8_t val) { in_memory_data_ = val; }
- // Fail most subsequent requests.
- void set_fail_requests() { fail_requests_ = true; }
+ // Fail subsequent requests, specified via FailOp bits.
+ void set_fail_requests(int mask) { fail_requests_ = mask; }
void set_fail_sparse_requests() { fail_sparse_requests_ = true; }
@@ -132,7 +142,7 @@ class MockDiskEntry : public disk_cache::Entry,
int max_file_size_;
bool doomed_;
bool sparse_;
- bool fail_requests_;
+ int fail_requests_;
bool fail_sparse_requests_;
bool busy_;
bool delayed_;
@@ -152,18 +162,15 @@ class MockDiskCache : public disk_cache::Backend {
~MockDiskCache() override;
int32_t GetEntryCount() const override;
- net::Error OpenOrCreateEntry(const std::string& key,
- net::RequestPriority request_priority,
- disk_cache::EntryWithOpened* entry_struct,
- CompletionOnceCallback callback) override;
- net::Error OpenEntry(const std::string& key,
- net::RequestPriority request_priority,
- disk_cache::Entry** entry,
- CompletionOnceCallback callback) override;
- net::Error CreateEntry(const std::string& key,
- net::RequestPriority request_priority,
- disk_cache::Entry** entry,
- CompletionOnceCallback callback) override;
+ EntryResult OpenOrCreateEntry(const std::string& key,
+ net::RequestPriority request_priority,
+ EntryResultCallback callback) override;
+ EntryResult OpenEntry(const std::string& key,
+ net::RequestPriority request_priority,
+ EntryResultCallback callback) override;
+ EntryResult CreateEntry(const std::string& key,
+ net::RequestPriority request_priority,
+ EntryResultCallback callback) override;
net::Error DoomEntry(const std::string& key,
net::RequestPriority request_priority,
CompletionOnceCallback callback) override;
@@ -198,11 +205,13 @@ class MockDiskCache : public disk_cache::Backend {
void set_fail_requests(bool value) { fail_requests_ = value; }
// Return entries that fail some of their requests.
- void set_soft_failures(bool value) { soft_failures_ = value; }
+ // The value is formed as a bitmask of MockDiskEntry::FailOp.
+ void set_soft_failures_mask(int value) { soft_failures_ = value; }
// Returns entries that fail some of their requests, but only until
- // the entry is re-created.
- void set_soft_failures_one_instance(bool value) {
+ // the entry is re-created. The value is formed as a bitmask of
+ // MockDiskEntry::FailOp.
+ void set_soft_failures_one_instance(int value) {
soft_failures_one_instance_ = value;
}
@@ -251,7 +260,7 @@ class MockDiskCache : public disk_cache::Backend {
using EntryMap = std::map<std::string, MockDiskEntry*>;
class NotImplementedIterator;
- void CallbackLater(CompletionOnceCallback callback, int result);
+ void CallbackLater(base::OnceClosure callback);
EntryMap entries_;
std::vector<std::string> external_cache_hits_;
@@ -260,8 +269,8 @@ class MockDiskCache : public disk_cache::Backend {
int doomed_count_;
int max_file_size_;
bool fail_requests_;
- bool soft_failures_;
- bool soft_failures_one_instance_;
+ int soft_failures_;
+ int soft_failures_one_instance_;
bool double_create_check_;
bool fail_sparse_requests_;
bool support_in_memory_entry_data_;
@@ -269,8 +278,7 @@ class MockDiskCache : public disk_cache::Backend {
// Used for pause and restart.
MockDiskEntry::DeferOp defer_op_;
- CompletionOnceCallback resume_callback_;
- int resume_return_code_;
+ base::OnceClosure resume_callback_;
};
class MockBackendFactory : public HttpCache::BackendFactory {
@@ -351,10 +359,9 @@ class MockHttpCache {
// This version of the disk cache doesn't invoke CreateEntry callbacks.
class MockDiskCacheNoCB : public MockDiskCache {
- net::Error CreateEntry(const std::string& key,
- net::RequestPriority request_priority,
- disk_cache::Entry** entry,
- CompletionOnceCallback callback) override;
+ EntryResult CreateEntry(const std::string& key,
+ net::RequestPriority request_priority,
+ EntryResultCallback callback) override;
};
class MockBackendNoCbFactory : public HttpCache::BackendFactory {
diff --git a/chromium/net/http/mock_sspi_library_win.cc b/chromium/net/http/mock_sspi_library_win.cc
index 1d3379cd278..95a3deb27f4 100644
--- a/chromium/net/http/mock_sspi_library_win.cc
+++ b/chromium/net/http/mock_sspi_library_win.cc
@@ -4,16 +4,108 @@
#include "net/http/mock_sspi_library_win.h"
+#include <algorithm>
+#include <cstring>
+#include <memory>
+
+#include "base/logging.h"
+#include "base/strings/string16.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"
+// Comparator so we can use CredHandle and CtxtHandle with std::set. Both of
+// those classes are typedefs for _SecHandle.
+bool operator<(const _SecHandle left, const _SecHandle right) {
+ return left.dwUpper < right.dwUpper || left.dwLower < right.dwLower;
+}
+
namespace net {
+namespace {
+
+int uniquifier_ = 0;
+
+struct MockCredential {
+ base::string16 source_principal;
+ base::string16 package;
+ bool has_explicit_credentials = false;
+ int uniquifier = ++uniquifier_;
+
+ // CredHandle and CtxtHandle both shared the following definition:
+ //
+ // typedef struct _SecHandle {
+ // ULONG_PTR dwLower;
+ // ULONG_PTR dwUpper;
+ // } SecHandle, * PSecHandle;
+ //
+ // ULONG_PTR type can hold a pointer. This function stuffs |this| into dwUpper
+ // and adds a uniquifier to dwLower. This ensures that all PCredHandles issued
+ // by this method during the lifetime of this process is unique.
+ void StoreInHandle(PCredHandle handle) {
+ DCHECK(uniquifier > 0);
+ EXPECT_FALSE(SecIsValidHandle(handle));
+
+ handle->dwLower = uniquifier;
+ handle->dwUpper = reinterpret_cast<ULONG_PTR>(this);
+
+ DCHECK(SecIsValidHandle(handle));
+ }
+
+ static MockCredential* FromHandle(PCredHandle handle) {
+ return reinterpret_cast<MockCredential*>(handle->dwUpper);
+ }
+};
+
+struct MockContext {
+ MockCredential* credential = nullptr;
+ base::string16 target_principal;
+ int uniquifier = ++uniquifier_;
+ int rounds = 0;
+
+ // CredHandle and CtxtHandle both shared the following definition:
+ //
+ // typedef struct _SecHandle {
+ // ULONG_PTR dwLower;
+ // ULONG_PTR dwUpper;
+ // } SecHandle, * PSecHandle;
+ //
+ // ULONG_PTR type can hold a pointer. This function stuffs |this| into dwUpper
+ // and adds a uniquifier to dwLower. This ensures that all PCredHandles issued
+ // by this method during the lifetime of this process is unique.
+ void StoreInHandle(PCtxtHandle handle) {
+ EXPECT_FALSE(SecIsValidHandle(handle));
+ DCHECK(uniquifier > 0);
+
+ handle->dwLower = uniquifier;
+ handle->dwUpper = reinterpret_cast<ULONG_PTR>(this);
+
+ DCHECK(SecIsValidHandle(handle));
+ }
+
+ std::string ToString() const {
+ return base::StringPrintf(
+ "%s's token #%d for %S",
+ base::UTF16ToUTF8(credential->source_principal).c_str(), rounds + 1,
+ base::as_wcstr(target_principal));
+ }
+
+ static MockContext* FromHandle(PCtxtHandle handle) {
+ return reinterpret_cast<MockContext*>(handle->dwUpper);
+ }
+};
+
+} // namespace
+
MockSSPILibrary::MockSSPILibrary() {
}
MockSSPILibrary::~MockSSPILibrary() {
EXPECT_TRUE(expected_package_queries_.empty());
EXPECT_TRUE(expected_freed_packages_.empty());
+ EXPECT_TRUE(active_credentials_.empty());
+ EXPECT_TRUE(active_contexts_.empty());
}
SECURITY_STATUS MockSSPILibrary::AcquireCredentialsHandle(
@@ -26,8 +118,21 @@ SECURITY_STATUS MockSSPILibrary::AcquireCredentialsHandle(
void* pvGetKeyArgument,
PCredHandle phCredential,
PTimeStamp ptsExpiry) {
- // Fill in phCredential with arbitrary value.
- phCredential->dwLower = phCredential->dwUpper = ((ULONG_PTR) ((INT_PTR)0));
+ DCHECK(!SecIsValidHandle(phCredential));
+ auto* credential = new MockCredential;
+ credential->source_principal = pszPrincipal ? base::as_u16cstr(pszPrincipal)
+ : STRING16_LITERAL("<Default>");
+ credential->package = base::as_u16cstr(pszPackage);
+ credential->has_explicit_credentials = !!pvAuthData;
+
+ credential->StoreInHandle(phCredential);
+
+ if (ptsExpiry) {
+ ptsExpiry->LowPart = 0xBAA5B780;
+ ptsExpiry->HighPart = 0x01D54E17;
+ }
+
+ active_credentials_.insert(*phCredential);
return SEC_E_OK;
}
@@ -44,19 +149,88 @@ SECURITY_STATUS MockSSPILibrary::InitializeSecurityContext(
PSecBufferDesc pOutput,
unsigned long* contextAttr,
PTimeStamp ptsExpiry) {
- // Fill in the outbound buffer with garbage data.
+ MockContext* new_context = new MockContext;
+ new_context->credential = MockCredential::FromHandle(phCredential);
+ new_context->target_principal = base::as_u16cstr(pszTargetName);
+ new_context->rounds = 0;
+
+ // Always rotate contexts. That way tests will fail if the caller's context
+ // management is broken.
+ if (phContext && SecIsValidHandle(phContext)) {
+ std::unique_ptr<MockContext> old_context{
+ MockContext::FromHandle(phContext)};
+ EXPECT_EQ(old_context->credential, new_context->credential);
+ EXPECT_EQ(1u, active_contexts_.erase(*phContext));
+
+ new_context->rounds = old_context->rounds + 1;
+ SecInvalidateHandle(phContext);
+ }
+
+ new_context->StoreInHandle(phNewContext);
+ active_contexts_.insert(*phNewContext);
+
+ auto token = new_context->ToString();
PSecBuffer out_buffer = pOutput->pBuffers;
- out_buffer->cbBuffer = 2;
- uint8_t* buf = reinterpret_cast<uint8_t*>(out_buffer->pvBuffer);
- buf[0] = 0xAB;
- buf[1] = 0xBA;
-
- // Fill in phNewContext with arbitrary value if it's invalid.
- if (phNewContext != phContext)
- phNewContext->dwLower = phNewContext->dwUpper = ((ULONG_PTR) ((INT_PTR)0));
+ out_buffer->cbBuffer = std::min<ULONG>(out_buffer->cbBuffer, token.size());
+ std::memcpy(out_buffer->pvBuffer, token.data(), out_buffer->cbBuffer);
+
+ if (ptsExpiry) {
+ ptsExpiry->LowPart = 0xBAA5B780;
+ ptsExpiry->HighPart = 0x01D54E15;
+ }
return SEC_E_OK;
}
+SECURITY_STATUS MockSSPILibrary::QueryContextAttributesEx(PCtxtHandle phContext,
+ ULONG ulAttribute,
+ PVOID pBuffer,
+ ULONG cbBuffer) {
+ static const SecPkgInfoW kNegotiatedPackage = {
+ 0,
+ 0,
+ 0,
+ 0,
+ const_cast<SEC_WCHAR*>(L"Itsa me Kerberos!!"),
+ const_cast<SEC_WCHAR*>(L"I like turtles")};
+
+ auto* context = MockContext::FromHandle(phContext);
+
+ switch (ulAttribute) {
+ case SECPKG_ATTR_NATIVE_NAMES: {
+ auto* native_names =
+ reinterpret_cast<SecPkgContext_NativeNames*>(pBuffer);
+ DCHECK_EQ(sizeof(*native_names), cbBuffer);
+ native_names->sClientName =
+ base::as_writable_wcstr(context->credential->source_principal);
+ native_names->sServerName =
+ base::as_writable_wcstr(context->target_principal);
+ return SEC_E_OK;
+ }
+
+ case SECPKG_ATTR_NEGOTIATION_INFO: {
+ auto* negotiation_info =
+ reinterpret_cast<SecPkgContext_NegotiationInfo*>(pBuffer);
+ DCHECK_EQ(sizeof(*negotiation_info), cbBuffer);
+ negotiation_info->PackageInfo =
+ const_cast<SecPkgInfoW*>(&kNegotiatedPackage);
+ negotiation_info->NegotiationState = (context->rounds == 1)
+ ? SECPKG_NEGOTIATION_COMPLETE
+ : SECPKG_NEGOTIATION_IN_PROGRESS;
+ return SEC_E_OK;
+ }
+
+ case SECPKG_ATTR_AUTHORITY: {
+ auto* authority = reinterpret_cast<SecPkgContext_Authority*>(pBuffer);
+ DCHECK_EQ(sizeof(*authority), cbBuffer);
+ authority->sAuthorityName = const_cast<SEC_WCHAR*>(L"Dodgy Server");
+ return SEC_E_OK;
+ }
+
+ default:
+ return SEC_E_UNSUPPORTED_FUNCTION;
+ }
+}
+
SECURITY_STATUS MockSSPILibrary::QuerySecurityPackageInfo(
LPWSTR pszPackageName, PSecPkgInfoW *pkgInfo) {
EXPECT_TRUE(!expected_package_queries_.empty());
@@ -72,15 +246,17 @@ SECURITY_STATUS MockSSPILibrary::QuerySecurityPackageInfo(
SECURITY_STATUS MockSSPILibrary::FreeCredentialsHandle(
PCredHandle phCredential) {
- EXPECT_TRUE(phCredential->dwLower == ((ULONG_PTR) ((INT_PTR) 0)));
- EXPECT_TRUE(phCredential->dwUpper == ((ULONG_PTR) ((INT_PTR) 0)));
+ DCHECK(SecIsValidHandle(phCredential));
+ EXPECT_EQ(1u, active_credentials_.erase(*phCredential));
+ std::unique_ptr<MockCredential> owned{
+ MockCredential::FromHandle(phCredential)};
SecInvalidateHandle(phCredential);
return SEC_E_OK;
}
SECURITY_STATUS MockSSPILibrary::DeleteSecurityContext(PCtxtHandle phContext) {
- EXPECT_TRUE(phContext->dwLower == ((ULONG_PTR) ((INT_PTR) 0)));
- EXPECT_TRUE(phContext->dwUpper == ((ULONG_PTR) ((INT_PTR) 0)));
+ std::unique_ptr<MockContext> context{MockContext::FromHandle(phContext)};
+ EXPECT_EQ(1u, active_contexts_.erase(*phContext));
SecInvalidateHandle(phContext);
return SEC_E_OK;
}
diff --git a/chromium/net/http/mock_sspi_library_win.h b/chromium/net/http/mock_sspi_library_win.h
index c0b76925c38..d3b82d3218c 100644
--- a/chromium/net/http/mock_sspi_library_win.h
+++ b/chromium/net/http/mock_sspi_library_win.h
@@ -19,9 +19,12 @@ class MockSSPILibrary : public SSPILibrary {
MockSSPILibrary();
~MockSSPILibrary() override;
- // TODO(cbentzel): Only QuerySecurityPackageInfo and FreeContextBuffer
- // are properly handled currently.
// SSPILibrary methods:
+
+ // AcquireCredentialsHandle() returns a handle that must be freed using
+ // FreeCredentialsHandle(). The credentials handle records the principal name.
+ //
+ // On return ptsExpiry is set to a constant.
SECURITY_STATUS AcquireCredentialsHandle(LPWSTR pszPrincipal,
LPWSTR pszPackage,
unsigned long fCredentialUse,
@@ -31,6 +34,26 @@ class MockSSPILibrary : public SSPILibrary {
void* pvGetKeyArgument,
PCredHandle phCredential,
PTimeStamp ptsExpiry) override;
+
+ // InitializeSecurityContext() returns a handle in phContext that must be
+ // freed via FreeContextBuffer() or by passing it into another
+ // InitializeSecurityContext() call.
+ //
+ // On return ptsExpiry is set to a constant.
+ //
+ // The output buffer will contain a token consisting of the ASCII string:
+ //
+ // "<source principal>'s token #<n> for <target principal>"
+ //
+ // <source principal> is the security principal derived from explicit
+ // credentials that were passed to a prior AcquireCredentialsHandle() call, or
+ // the string "<Default>" if ambient credentials were requested.
+ //
+ // <n> is the 1-based invocation counter for InitializeSecurityContext() for
+ // the same context.
+ //
+ // <target principal> is the contents of the pszTargetName. Note that the
+ // function expects the same target name on every invocation.
SECURITY_STATUS InitializeSecurityContext(PCredHandle phCredential,
PCtxtHandle phContext,
SEC_WCHAR* pszTargetName,
@@ -43,6 +66,14 @@ class MockSSPILibrary : public SSPILibrary {
PSecBufferDesc pOutput,
unsigned long* contextAttr,
PTimeStamp ptsExpiry) override;
+
+ // QueryContextAttributesEx() supports querying the same attributes as
+ // required by HttpAuthSSPI.
+ SECURITY_STATUS QueryContextAttributesEx(PCtxtHandle phContext,
+ ULONG ulAttribute,
+ PVOID pBuffer,
+ ULONG cbBuffer) override;
+
SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName,
PSecPkgInfoW* pkgInfo) override;
SECURITY_STATUS FreeCredentialsHandle(PCredHandle phCredential) override;
@@ -104,6 +135,10 @@ class MockSSPILibrary : public SSPILibrary {
// Set of packages which should be freed.
std::set<PSecPkgInfoW> expected_freed_packages_;
+
+ // These sets keep track of active credentials and contexts.
+ std::set<CredHandle> active_credentials_;
+ std::set<CtxtHandle> active_contexts_;
};
using MockAuthLibrary = MockSSPILibrary;
diff --git a/chromium/net/http/transport_security_persister_unittest.cc b/chromium/net/http/transport_security_persister_unittest.cc
index e74c84198c9..178ff97e74b 100644
--- a/chromium/net/http/transport_security_persister_unittest.cc
+++ b/chromium/net/http/transport_security_persister_unittest.cc
@@ -12,12 +12,12 @@
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
+#include "base/message_loop/message_loop_current.h"
#include "base/run_loop.h"
#include "base/test/scoped_feature_list.h"
#include "base/threading/thread_task_runner_handle.h"
#include "net/http/transport_security_state.h"
-#include "net/test/test_with_scoped_task_environment.h"
+#include "net/test/test_with_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
@@ -26,7 +26,7 @@ namespace {
const char kReportUri[] = "http://www.example.test/report";
-class TransportSecurityPersisterTest : public TestWithScopedTaskEnvironment {
+class TransportSecurityPersisterTest : public TestWithTaskEnvironment {
public:
TransportSecurityPersisterTest() = default;
diff --git a/chromium/net/http/transport_security_state.cc b/chromium/net/http/transport_security_state.cc
index 275553cd42b..460b958531f 100644
--- a/chromium/net/http/transport_security_state.cc
+++ b/chromium/net/http/transport_security_state.cc
@@ -25,6 +25,7 @@
#include "base/time/time.h"
#include "base/time/time_to_iso8601.h"
#include "base/values.h"
+#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "crypto/sha2.h"
#include "net/base/hash_value.h"
@@ -41,6 +42,9 @@
namespace net {
+const base::Feature kEnforceCTForNewCerts{"EnforceCTForNewCerts",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
namespace {
#include "net/http/transport_security_state_ct_policies.inc"
@@ -66,10 +70,6 @@ const size_t kReportCacheKeyLength = 16;
// 1: Unless a delegate says otherwise, require CT.
int g_ct_required_for_testing = 0;
-// Controls whether or not Certificate Transparency should be enforced for
-// newly-issued certificates.
-const base::Feature kEnforceCTForNewCerts{"EnforceCTForNewCerts",
- base::FEATURE_DISABLED_BY_DEFAULT};
// The date (as the number of seconds since the Unix Epoch) to enforce CT for
// new certificates.
constexpr base::FeatureParam<int> kEnforceCTForNewCertsDate{
@@ -404,6 +404,10 @@ void SetTransportSecurityStateSourceForTesting(
}
TransportSecurityState::TransportSecurityState()
+ : TransportSecurityState(std::vector<std::string>()) {}
+
+TransportSecurityState::TransportSecurityState(
+ std::vector<std::string> hsts_host_bypass_list)
: enable_static_pins_(true),
enable_static_expect_ct_(true),
enable_pkp_bypass_for_local_trust_anchors_(true),
@@ -411,10 +415,15 @@ TransportSecurityState::TransportSecurityState()
sent_expect_ct_reports_cache_(kMaxReportCacheEntries) {
// Static pinning is only enabled for official builds to make sure that
// others don't end up with pins that cannot be easily updated.
-#if !defined(GOOGLE_CHROME_BUILD) || defined(OS_ANDROID) || defined(OS_IOS)
+#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) || defined(OS_ANDROID) || defined(OS_IOS)
enable_static_pins_ = false;
enable_static_expect_ct_ = false;
#endif
+ // Check that there no invalid entries in the static HSTS bypass list.
+ for (auto& host : hsts_host_bypass_list) {
+ DCHECK(host.find('.') == std::string::npos);
+ hsts_host_bypass_list_.insert(host);
+ }
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
}
@@ -1140,7 +1149,8 @@ bool TransportSecurityState::GetStaticDomainState(const std::string& host,
if (!DecodeHSTSPreload(host, &result))
return false;
- if (result.force_https) {
+ if (hsts_host_bypass_list_.find(host) == hsts_host_bypass_list_.end() &&
+ result.force_https) {
sts_result->domain = host.substr(result.hostname_offset);
sts_result->include_subdomains = result.sts_include_subdomains;
sts_result->last_observed = base::GetBuildTime();
diff --git a/chromium/net/http/transport_security_state.h b/chromium/net/http/transport_security_state.h
index 48ccb74e2e1..5758da25065 100644
--- a/chromium/net/http/transport_security_state.h
+++ b/chromium/net/http/transport_security_state.h
@@ -34,6 +34,10 @@ class HostPortPair;
class SSLInfo;
class X509Certificate;
+// Controls whether or not Certificate Transparency should be enforced for
+// newly-issued certificates.
+extern const NET_EXPORT_PRIVATE base::Feature kEnforceCTForNewCerts;
+
void NET_EXPORT_PRIVATE SetTransportSecurityStateSourceForTesting(
const TransportSecurityStateSource* source);
@@ -330,6 +334,13 @@ class NET_EXPORT TransportSecurityState {
static const base::Feature kDynamicExpectCTFeature;
TransportSecurityState();
+
+ // Creates a TransportSecurityState object that will skip the check to force
+ // HTTPS from static entries for the given set of hosts. All hostnames in the
+ // bypass list must consist of a single label, i.e. they must be a TLD.
+ explicit TransportSecurityState(
+ std::vector<std::string> hsts_host_bypass_list);
+
~TransportSecurityState();
// These functions search for static and dynamic STS and PKP states, and
@@ -655,6 +666,8 @@ class NET_EXPORT TransportSecurityState {
ReportCache sent_hpkp_reports_cache_;
ReportCache sent_expect_ct_reports_cache_;
+ std::set<std::string> hsts_host_bypass_list_;
+
THREAD_CHECKER(thread_checker_);
DISALLOW_COPY_AND_ASSIGN(TransportSecurityState);
diff --git a/chromium/net/http/transport_security_state_static.json b/chromium/net/http/transport_security_state_static.json
index abd1519f4a1..5992995c8de 100644
--- a/chromium/net/http/transport_security_state_static.json
+++ b/chromium/net/http/transport_security_state_static.json
@@ -353,7 +353,8 @@
{ "name": "crosbug.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" },
{ "name": "crrev.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" },
{ "name": "firebaseio.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" },
- { "name": "g.co", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" },
+ { "name": "g.co", "policy": "google", "mode": "force-https", "pins": "google" },
+ { "name": "www.g.co", "policy": "google", "mode": "force-https", "pins": "google" },
{ "name": "g4w.co", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" },
{ "name": "gmail.com", "policy": "google", "mode": "force-https", "pins": "google" },
{ "name": "goo.gl", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" },
@@ -848,7 +849,6 @@
{ "name": "carezone.com", "policy": "custom", "mode": "force-https" },
{ "name": "bcrook.com", "policy": "custom", "mode": "force-https" },
{ "name": "lumi.do", "policy": "custom", "mode": "force-https" },
- { "name": "bitbucket.org", "policy": "custom", "mode": "force-https" },
{ "name": "kinsights.com", "policy": "custom", "mode": "force-https" },
{ "name": "simbolo.co.uk", "policy": "custom", "mode": "force-https" },
{ "name": "www.simbolo.co.uk", "policy": "custom", "mode": "force-https" },
@@ -1303,7 +1303,6 @@
{ "name": "irische-segenswuensche.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "it-schwerin.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "janus-engineering.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "jfreitag.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "julian-kipka.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kardize24.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kernel-error.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -1375,7 +1374,6 @@
{ "name": "thepaymentscompany.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xps2pdf.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ansdell.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "brunosouza.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bugzil.la", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ethitter.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "firemail.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -1796,7 +1794,6 @@
{ "name": "johners.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kdyby.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kupschke.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "leibniz-remscheid.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "manicode.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ouvirmusica.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pharmaboard.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -1809,7 +1806,6 @@
{ "name": "snakehosting.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "srevilak.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "strasweb.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "todesschaf.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "twisto.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "webassadors.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wundi.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -2055,7 +2051,6 @@
{ "name": "bonitabrazilian.co.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "brandbuilderwebsites.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "breeswish.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "bundaberg.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bustimes.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "calories.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "capitaltg.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -2551,7 +2546,6 @@
{ "name": "festember.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "fidelapp.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "floweslawncare.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "foxelbox.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "getcolor.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "getsello.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gheorghesarcov.ga", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -3588,7 +3582,6 @@
{ "name": "ehipaa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ehipaadev.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "emanuelduss.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "enjen.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "envygeeks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "envygeeks.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "fayolle.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -3912,7 +3905,6 @@
{ "name": "ulrik.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "utopians.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vanetv.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "varunagw.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vistb.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vyber-odhadce.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "webyazilimankara.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -4909,7 +4901,6 @@
{ "name": "file-pdf.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "findtutorsnearme.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "flawlesscowboy.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "floorball-haunwoehr.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "flowersandclouds.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "fmarchal.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "frankierprofi.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -4955,7 +4946,6 @@
{ "name": "jayharris.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jcraft.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jennythebaker.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "jobss.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jonaskjodt.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jonathan-apps.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jonathancarter.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -5697,7 +5687,6 @@
{ "name": "clarkeaward.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "classicday.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cldly.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "clearkonjac.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "clsimplex.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "clywedogmaths.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cocaine.ninja", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -5727,7 +5716,6 @@
{ "name": "cubeserver.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cubua.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cuibonobo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "cuisinezest.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "curlyroots.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "custe.rs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "daduke.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -6516,7 +6504,6 @@
{ "name": "0x.cx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "1022996493.rsc.cdn77.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "14it.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "1stcapital.com.sg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "24ip.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "28spots.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "2or3.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -7039,7 +7026,6 @@
{ "name": "soumikghosh.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "soundforsound.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sovereignshare.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "sportwette.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "spot-events.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "spuffin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "spydersec.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -7219,7 +7205,6 @@
{ "name": "empleostampico.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "enteente.club", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "enteente.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "eskriett.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "fakeletters.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "familie-sander.rocks", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "fargtorget.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -7350,7 +7335,6 @@
{ "name": "tescoirelandpayslips.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thelapine.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "themostexpensiveworkofart.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "thetechnical.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thinkcoding.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thomasnet.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tictactux.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -7644,11 +7628,9 @@
{ "name": "gifzilla.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "glubbforum.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "godesigner.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "goerner.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "goldmark.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "graciousmay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "greatnet.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "grunex.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "grytics.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gtlfsonlinepay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gunwatch.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -7834,7 +7816,6 @@
{ "name": "sampoznay.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sandviks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sardegnatirocini.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "sat4all.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "schont.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "schwarzkopfforyou.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "serveradminz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -8198,7 +8179,6 @@
{ "name": "aberdeenjudo.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "abilitylist.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "abthorpe.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "accelerole.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "acheritage.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "acisonline.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "acritelli.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -8617,8 +8597,6 @@
{ "name": "ctpe.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cultiv.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "curacao-license.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "cyberguerrilla.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "cyberguerrilla.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cyberwire.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cybozu.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cyclebeads.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -8716,7 +8694,6 @@
{ "name": "doku-gilde.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dolarcanadense.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "domadillo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "donotspellitgav.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dontcageus.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "doodledraw.ninja", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "doordecor.bg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -8746,7 +8723,6 @@
{ "name": "e-teacher.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "e3amn2l.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "e3kids.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "eagleridgecampground.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "earga.sm", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "easyconstat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "easycosmetic.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -9155,7 +9131,6 @@
{ "name": "informatiebeveiliging.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "infotics.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "inkable.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "inkstory.gr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "insightera.co.th", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "inspire-av.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "instantdev.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -9346,7 +9321,6 @@
{ "name": "leesilvey.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "legarage.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "leilonorte.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "leitner.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "leiyun.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lengzzz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lenovogaming.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -9587,7 +9561,6 @@
{ "name": "networkingphoenix.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "netzwerkwerk.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "neuronasdigitales.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "never-afk.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "newedivideo.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "newlooknow.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "newstone-tech.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -9653,7 +9626,6 @@
{ "name": "okutama.in.th", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "olcso-vps-szerver.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ollehbizev.co.kr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "olymp-arts.world", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "omniasl.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onefour.ga", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "oneweb.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -10045,7 +10017,6 @@
{ "name": "slowfood.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "slxh.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "slxh.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "smallplanet.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "smart-ov.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "smartftp.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "smarthdd.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -10371,7 +10342,6 @@
{ "name": "vdrpro.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "venturepro.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vetdnacenter.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "victorjacobs.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "videogamesartwork.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "videotogel.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vidid.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -10590,7 +10560,6 @@
{ "name": "amerimex.cc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "alpencam.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "aluroof.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "affordableazdivorce.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "alpencams.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "amihub.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "antons.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -11119,7 +11088,6 @@
{ "name": "marriottvetcareers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mastellone.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "maxmilton.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "markoh.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lsp-sports.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "masteringtheterminal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "marines-shop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -11206,7 +11174,6 @@
{ "name": "neuhaus-city.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "new-process.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "newpathintegratedtherapy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "netsigna.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nfrost.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "netzzwerg4u.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "newtonhaus.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -11559,7 +11526,6 @@
{ "name": "typeblog.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "uesociedadlimitada.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "unitedcyberdevelopment.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "truebred-labradors.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "unisyssecurity.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "uniq.site", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ungegamere.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -11939,7 +11905,6 @@
{ "name": "hpbn.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "hsts-preload-test.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ime.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "imitza.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "immunicity.date", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "immunicity.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "immunicity.press", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -12178,7 +12143,6 @@
{ "name": "rentbrowser.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "reuter-shop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "reuter.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "ricardobalk.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "richardb.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "rickweijers.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "right2.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -12212,7 +12176,6 @@
{ "name": "sefru.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "seoinc.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "seon.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "septillion.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "server-bg.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "server-daten.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "settleapp.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -12809,7 +12772,6 @@
{ "name": "enigmacpt.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "enlightened.si", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "entrainr.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "epoch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "equalparts.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "equidam.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ericbond.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -12922,7 +12884,6 @@
{ "name": "genie-seiner-generation.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gerwinvanderkamp.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ges-bo.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "get4x.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "getbooks.co.il", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "getgeek.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "getmondo.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -13102,7 +13063,6 @@
{ "name": "jing.su", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jlhmedia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jncde.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "jncie.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jncip.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "joehenry.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "johannes-sprink.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -13533,7 +13493,6 @@
{ "name": "qwikdash.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ra4wvpn.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "radioilusion.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "railgun.com.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "raissarobles.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ralfs-zusizone.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ranzbak.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -14236,7 +14195,6 @@
{ "name": "bws16.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "campaign.gov.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "c-webdesign.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "calc.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "captianseb.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "beehive42.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "beehive42.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -14357,7 +14315,6 @@
{ "name": "directinsure.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "danielmostertman.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "devcu.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "cybertu.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "danielmostertman.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "domenic.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "designville.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -14850,7 +14807,6 @@
{ "name": "lefebvristes.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "leseditionsbraquage.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "livi.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "lojix.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "listahu.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "laussat.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lawly.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15082,7 +15038,6 @@
{ "name": "mssys.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nerds-gegen-stephan.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "oddnumber.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "niehage.name", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nsworks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nickstories.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nethruster.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15153,7 +15108,6 @@
{ "name": "partyvan.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "opensource-cms.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "parckwart.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "osao.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pa-w.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "plusstreamfeed.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "paw.cloud", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15438,7 +15392,6 @@
{ "name": "stammtisch.domains", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "storyland.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "stevensheffey.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "spacecafe.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sobieray.dyndns.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "snip.host", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sperohub.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15500,10 +15453,8 @@
{ "name": "studybay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tetrarch.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "studio-panic.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "sudaraka.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "teamtrack.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "solariiknight.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "techace.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "suckmyan.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "talun.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tidmore.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15599,7 +15550,6 @@
{ "name": "unrealircd.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ticfleet.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "toool.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "tremolosoftware.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tuja.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tomend.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "unblocked.vip", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15662,7 +15612,6 @@
{ "name": "wanybug.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "whitworth.nyc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "volcain.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "weizenspr.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "udbhav.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wybmabiity.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--detrkl13b9sbv53j.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15758,7 +15707,6 @@
{ "name": "ximens.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xp2.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "yunjishou.pro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "zopyx.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "we-bb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "zymbit.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "zulu.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -15875,7 +15823,6 @@
{ "name": "andrea-wirthensohn.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "7x24servis.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bobobox.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "advanced.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "amsterdamian.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "burgers.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bradler.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -16495,7 +16442,6 @@
{ "name": "mdma.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "matthewkenny.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "marksouthall.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "kinniyaonlus.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "martins.im", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "marmotte.love", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "liuboznaiko.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17005,7 +16951,6 @@
{ "name": "vrijstaandhuis-in-zwartewaterland-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "weltverschwoerung.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wormdisk.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "wrbunderwriting.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ukrigging.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wardow.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vscale.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17035,7 +16980,6 @@
{ "name": "yux.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wmfinanz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--3px.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "wkz.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wuji.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "yourciso.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--80aocgsfei.xn--p1ai", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17298,7 +17242,6 @@
{ "name": "bgenlisted.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "autodalmacija.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "boiadeirodeberna.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "blameomar.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bestcellular.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "belge.rs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "beauty24.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17514,7 +17457,6 @@
{ "name": "cryptoshot.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "codedump.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "countryoutlaws.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "codebrahma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "chorkley.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "coresolutions.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "crockett.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17582,7 +17524,6 @@
{ "name": "damedrogy.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dehydrated.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dcl.re", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "dejure.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "davepage.me.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "daku.gdn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "datenschutztag.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17814,7 +17755,6 @@
{ "name": "fojtova.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "flauschig.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "felixhefner.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "famvsomeren.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ehomusicgear.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "fojtovi.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "central4.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17885,7 +17825,6 @@
{ "name": "g-rickroll-o.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "graphsearchengine.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "geschmacksache.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "grepmaste.rs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gradients.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gramati.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gracetini.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -18351,7 +18290,6 @@
{ "name": "matthias-muenzner.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lorenadumitrascu.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lovelyblogacademy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "manufacturing.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mentalhealth.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "laurelblack.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "melhorproduto.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -18402,7 +18340,6 @@
{ "name": "meanevo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "minitrucktalk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mexican.dating", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "mgrossklaus.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "michaelsulzer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "minenash.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mikori.sk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -18467,7 +18404,6 @@
{ "name": "naughty.audio", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kinmunity.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "newday.host", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "mlvbphotography.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ncands.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "n8ch.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mosfet.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -18568,7 +18504,6 @@
{ "name": "newhdmovies.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "numm.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ocad.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "orangetravel.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pastordocaucaso.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pastorbelgagroenendael.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pastorcanadense.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -18639,7 +18574,6 @@
{ "name": "parabhairavayoga.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "paulrotter.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "physicalism.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "pamaniqu.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pinpayments.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "paulrobertlloyd.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pi-eng.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -18684,7 +18618,6 @@
{ "name": "r-rickroll-u.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "rally-base.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "novurania.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "nandex.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "qqj.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "rasagiline.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "questsocial.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -18708,7 +18641,6 @@
{ "name": "relaybox.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "recurly.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "rhodesianridgeback.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "policedriver.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pwfrance.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "rei.ki", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pugovka72.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19142,7 +19074,6 @@
{ "name": "uctarna.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "utilitarianism.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "twee-onder-een-kap-woning-in-leeuwarden-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "uggedal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "twee-onder-een-kap-woning-in-zwartewaterland-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "twee-onder-een-kap-woning-in-sudwest-fryslan-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "trixexpressweb.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19150,7 +19081,6 @@
{ "name": "twee-onder-een-kap-woning-in-veendam-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tweeondereenkapwoningverkopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tussengelegenwoningverkopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "unblocked.world", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "usmint.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "twee-onder-een-kap-woning-in-alphen-aan-den-rijn-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "twee-onder-een-kap-woning-in-de-friese-meren-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19323,7 +19253,6 @@
{ "name": "yingatech.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ywei.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vanacht.co.za", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "xiazhanjian.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "zohar.link", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "zh1.li", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "zabszk.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19443,7 +19372,6 @@
{ "name": "analteengirls.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "allcloud.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "allshousedesigns.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "3bakayottu.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "analpantyhose.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "aliacraft.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "aicial.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19475,7 +19403,6 @@
{ "name": "actilove.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "andersonshatch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ameza.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "anderskp.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "alexs.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "androidtamer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "andarpersassi.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19711,7 +19638,6 @@
{ "name": "bragasoft.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cdmhp.org.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bsktweetup.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "censys.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "canalsidehouse.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "caipai.fm", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "buyshoe.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19755,7 +19681,6 @@
{ "name": "beersandco.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "chatxtutti.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "chriswbarry.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "ccl-sti.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "chocolatesandhealth.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "canlidoviz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "chatt-gratis.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19817,7 +19742,6 @@
{ "name": "clovissantos.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "codelitmus.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "craigwfox.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "craftyguy.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cnbs.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "coreum.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "confuddledpenguin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -20065,7 +19989,6 @@
{ "name": "educators.co.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "erudicia.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "erethon.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "englishstudio.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "embellir-aroma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "erudicia.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "erudicia.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -20601,7 +20524,6 @@
{ "name": "kueche-co.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "l18.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "knowdebt.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "kaisakura.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "knigadel.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "koha.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jichi.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -20817,7 +20739,6 @@
{ "name": "modehaus-marionk.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "moosemanstudios.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mkfs.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "moa.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mofohome.dyndns.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lucasgaland.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "miya.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -21542,7 +21463,6 @@
{ "name": "thejobauction.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "startuppeople.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "techday.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "thefox.com.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thairehabassociation.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sportchirp-internal.azurewebsites.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "techday.co.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -21813,9 +21733,7 @@
{ "name": "yuxingxin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "yagi2.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--80azelb.xn--p1ai", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "zfo.gg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "zhangsir.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "yogoeasy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "zhen-chen.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xxiz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xombitgames.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -21996,7 +21914,6 @@
{ "name": "bloomzoomy.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "boatme.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bocamo.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "bookluk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "booq.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "boozinyan.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bottaerisposta.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -22822,7 +22739,6 @@
{ "name": "vackerbetong.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vacuumpump.co.id", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vadodesign.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "valesdigital.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vandeput.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vaphone.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vawebsite.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -23029,7 +22945,6 @@
{ "name": "acme.beer", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "acrepairdrippingsprings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "acs-chantal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "actgruppe.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "actiontowingroundrock.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "active-escape.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "addicional.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -23050,7 +22965,6 @@
{ "name": "aetherc0r3.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "afdkompakt.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "affiliatetest.azurewebsites.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "affinity.vc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "affordablemudjacking.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "affordableracingparts.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ag-websolutions.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -23210,7 +23124,6 @@
{ "name": "atviras.lt", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "audialbuquerqueparts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "augen-seite.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "augenblicke-blog.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "auri.ga", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "aurora-terraria.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "aurorarecordings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -23567,7 +23480,6 @@
{ "name": "cmskeyholding.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cmskeyholding.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cmskh.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "cncfraises.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cnetw.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "co-driversphoto.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "co-factor.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -24102,7 +24014,6 @@
{ "name": "freeasyshop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "freedev.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "freegutters.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "freela.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "freifahrt.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "freifunk-in-solingen.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "freifunk-lindlar.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -24130,7 +24041,6 @@
{ "name": "furkot.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "furkot.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "furkot.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "furlan.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "furnishedproperty.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "furtivelook.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "futbolvivo.tv", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -24212,7 +24122,6 @@
{ "name": "goedeke.ml", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gofoiayourself.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "goldendawnapersonalaffair.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "gomiblog.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gondawa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gongjianwei.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gongjuhao.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -24507,7 +24416,6 @@
{ "name": "isowosi.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "issue.watch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "istsi.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "isuzupartscenter.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "isv.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "itactiq.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "itamservices.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -24643,7 +24551,6 @@
{ "name": "keyinfo.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "khaganat.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kheshtar.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "kiapartscenter.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kibibit.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kibriscicek.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kickasscanadians.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -25122,7 +25029,6 @@
{ "name": "nanubo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nanubo.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "napolinissanctparts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "narko.space", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "naroska.name", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nastoletni.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nataliedawnhanson.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -25246,7 +25152,6 @@
{ "name": "onionscan.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "online-consulting-corp.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onlinecasinobluebook.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "onlinestoreninjas.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onmyoji.biz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onsennuie.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ontheboard.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -25751,7 +25656,6 @@
{ "name": "security201.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "securitykey.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "seefirm.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "seekers.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sehnenweh.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "seiler-bad.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "seiryokuzai-ch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26445,7 +26349,6 @@
{ "name": "xn--wmq.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xnaas.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xs2a.no", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "xts3636.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xtu2.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xupeng.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "xxffo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26612,7 +26515,6 @@
{ "name": "abn-consultants.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "0005.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "adprospb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "abcdef.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "affordablepapers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "africantourer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "3778xl.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26642,7 +26544,6 @@
{ "name": "abox-kb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "afrikarl.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "alexandros.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "airclass.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ahiru3.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "adamas-magicus.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "8azino777.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26673,7 +26574,6 @@
{ "name": "alex97000.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "anime1video.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "anime1.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "andschwa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ampledesigners.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "alusta.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "alarmcomplete.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26798,7 +26698,6 @@
{ "name": "avspot.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "andrea-m.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "audiolibri.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "auvernet.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "autos-retro-plaisir.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "360live.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "b-boom.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26966,7 +26865,6 @@
{ "name": "booktracker-org.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "brenden.net.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "brightonchilli.org.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "botserver.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "boutiquedecanetas.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "brrd.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bubhub.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26981,7 +26879,6 @@
{ "name": "burnerfitness.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "burlapsac.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bulgarien.guide", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "bunzy.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bubba.cc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "buergerdialog.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "britelocate.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -27122,7 +27019,6 @@
{ "name": "codeux.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "codesyncro.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "codeux.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "communityflow.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "clubfamily.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "collegepaperworld.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "colorsbycarin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -27133,7 +27029,6 @@
{ "name": "cobaltgp.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "computehealth.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "coincealed.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "chocolat-suisse.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cloudfren.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "cncbazar365.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "conservados.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -27195,7 +27090,6 @@
{ "name": "creeks-coworking.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "costa-rica-reisen.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "crunchy.rocks", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "cuongthach.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "currynissanmaparts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "customwritingservice.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "chasafilli.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -27329,7 +27223,6 @@
{ "name": "domycreativewritings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dogft.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "diamondcare.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "digiworks.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "domainsilk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "domydissertations.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "domyessay.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -27409,7 +27302,6 @@
{ "name": "echoanalytics.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dejw.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "drastosasports.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "e3q.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "durdle.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "divvymonkey.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "eesistumine2017.ee", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -27989,7 +27881,6 @@
{ "name": "itis.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "iskai.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ichasco.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "interview-suite.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ilamparas.mx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "islief.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ipal.tel", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -28154,7 +28045,6 @@
{ "name": "kuruppa.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kolizaskrap.bg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kovspace.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "knight-industries.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kpop.re", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "labrasaq8.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "koalapress.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -28465,7 +28355,6 @@
{ "name": "mirch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "meremeti-online.gr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "moresw.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "markus.design", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mattbsg.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mamastore.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mostlyinfinite.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -28507,7 +28396,6 @@
{ "name": "minamo.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mundodapoesia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mumbaionlinegifts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "mrjooz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mtrock.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "movienang.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "myfreemp3.click", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -28586,7 +28474,6 @@
{ "name": "nicolasiung.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "night2stay.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nebulae.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "nexgeneration-solutions.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "night2stay.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "net4it.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "night2stay.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -28616,7 +28503,6 @@
{ "name": "myspicer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nodeselect.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nirvanashop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "nipe-systems.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nihon-no-sake.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ngtoys.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "normalady.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -28708,7 +28594,6 @@
{ "name": "paizinhovirgula.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "owapi.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "p3.marketing", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "paavolastudio.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "one-s.co.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "otako.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "p4chivtac.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -28794,7 +28679,6 @@
{ "name": "peterandjoelle.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pinterest.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pera.gs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "pietechsf.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "philipdb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "orthotictransfers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pips.rocks", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -29038,7 +28922,6 @@
{ "name": "rockhounds.co.za", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "runebet.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "rustbyexample.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "rubytune.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ristorantefattoamano.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "roryneville.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "rob006.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -29184,7 +29067,6 @@
{ "name": "shieldofachilles.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "shichibukai.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sexshopnet.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "sheying.tm", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "shining.gifts", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "shadowsocks.vc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "showmethemoney.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -29783,7 +29665,6 @@
{ "name": "wsup.social", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "writing-expert.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "writecustomessay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "wpturnedup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "victoreriksson.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "writingcities.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wpdirecto.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -30102,7 +29983,6 @@
{ "name": "amoozesh98.ir", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "arox.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "azlo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "arxell.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "astral.gq", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "acendealuz.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "amorimendes.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -30358,7 +30238,6 @@
{ "name": "colyakootees.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "datatree.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "coverdat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "cssps.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dashboard.run", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dandymrsb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "danielzuzevich.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -30450,7 +30329,6 @@
{ "name": "drogoz.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dosomeworks.biz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "droidgyan.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "dorfbrunnen.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "discoveryottawa.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "dukec.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "eashwar.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -31100,7 +30978,6 @@
{ "name": "michel.pt", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "miss-platinum.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mjmnagy.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "marketing.limited", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mj420.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "madeinstudio3.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "minorshadows.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -31588,7 +31465,6 @@
{ "name": "sidongkim.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sepie.gob.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "serienstream.to", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "simpip.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sfg-nordholz.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sheratan.web.id", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sellmoretires.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -31685,7 +31561,6 @@
{ "name": "svc-sitec.com.mx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "stuttgart-gablenberg.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "streamer.tips", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "suareforma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "studentforums.biz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "summa-prefis.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "straka.name", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -31706,7 +31581,6 @@
{ "name": "spdepartamentos.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "stayme.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sunn.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "termitemounds.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "telugu4u.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "svm-basketball.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "t-net.org.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -31904,7 +31778,6 @@
{ "name": "weareincognito.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "valentineapparel.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wearewithyou.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "vonborstelboerner.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tutiendarosa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "vw-touranclub.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "walk.onl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32249,7 +32122,6 @@
{ "name": "searchbrothers.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "secumail.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "world-education-association.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "promohunt.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "8522.am", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "snapserv.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "limeres.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32358,7 +32230,6 @@
{ "name": "emporiodosperfumes.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "equinecoaching.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "equipeferramentas.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "equityflows.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "esite.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "esprit-cloture.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "faciledireto.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32495,7 +32366,6 @@
{ "name": "pontodogame.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "portalkla.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "powerdent.net.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "prelogica.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "prestonandsons.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "provitec.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "pwm.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32651,18 +32521,15 @@
{ "name": "avidcruiser.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "aviv.nyc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ayatk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "b9110.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "badai.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bandally.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "basilicaknights.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bass-pro.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "bat909.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bcnet.com.hk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "beehive.govt.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ben2.co.il", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bengalurugifts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "besthotsales.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "bet-99.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "beyondtodaymediagroup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bfrailwayclub.cf", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "bilimoe.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32785,7 +32652,6 @@
{ "name": "fzx750.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gaines-sodiamex.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gamoice.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "geekclubbooks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "geertdegraaf.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gehreslaw.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "genia-life.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32833,7 +32699,6 @@
{ "name": "houtinee.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "howmanymilesfrom.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "htlball.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "hua-in.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "humanesources.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "huzurmetal.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "hybridiyhdistys.fi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32860,7 +32725,6 @@
{ "name": "jakewalker.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "janada.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jeremy-chen.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "jevisite.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jinmaguoji.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "jm22.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "joespaintingpgh.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -32939,7 +32803,6 @@
{ "name": "mosaic-design.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "moube.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mrpropop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "mubiflex.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "multimail.work", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "multivpn.com.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "my-host.ovh", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -33162,7 +33025,6 @@
{ "name": "voltimax.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "voxfilmeonline.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wahidhasan.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "waka88.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "wandercue.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "warschild.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "washingtonregisteredagent.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -33290,7 +33152,6 @@
{ "name": "ma-eir.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "mail4geek.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "malte-kiefer.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "maslife365.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "masterhelenaroma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "matchboxdesigngroup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "maynardnetworks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -33798,7 +33659,6 @@
{ "name": "ereader.uno", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ericorporation.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "erspro.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.tv", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "eshepperd.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "esp.community", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "esslm.sk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -33948,7 +33808,6 @@
{ "name": "gs93.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "gtravers-basketmaker.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "guarajubaimoveis.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "guardianproject.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "guelphhydropool.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "guid2steamid.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "guidedselling.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -34144,7 +34003,6 @@
{ "name": "krasavchik.by", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "krokodent.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kudo.co.id", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "kuehnel-online.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kupid.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kusochi.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kutus.ee", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -34177,7 +34035,6 @@
{ "name": "learnplayground.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ledzom.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "leideninternationalreview.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "leinfelder.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lennyfaces.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "leon.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "lexpartsofac.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -34401,7 +34258,6 @@
{ "name": "onestepfootcare.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onlinebillingform.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onlinecasino.vlaanderen", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "onlinerollout.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onlineth.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "onsite4u.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ontdekhetzelf.nu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -34732,7 +34588,6 @@
{ "name": "tc.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tcb-a.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tcb-b.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "tdchrom.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "teatrarium.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "techask.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "technoinfogroup.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -34749,7 +34604,6 @@
{ "name": "thecuriouscat.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thedrunkencabbage.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "theeducationchannel.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "theevergreen.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thefrk.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thehookup.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thestoritplace.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -35320,7 +35174,6 @@
{ "name": "kimamass.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kinnikinnick.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kogro.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "kollect.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "kredit-abzocke.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "krypt.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "ktw.lv", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -35386,13 +35239,11 @@
{ "name": "nagashi.ma", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nawir.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nbriresearch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "netweaver.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nevntech.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nfl.dedyn.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nfl.duckdns.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "niagarafallsmuseums.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "noslite.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "novinhabucetuda.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nsdev.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "nsmail.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "oblondata.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -35484,7 +35335,6 @@
{ "name": "seedsofangelica.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "seltendoof.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "seo-analyse.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "server-datenrettung.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sewinginsight.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "shift-record.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "shokola.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -35509,7 +35359,6 @@
{ "name": "spasicilia.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "splarty.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "sportnesia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "ssl.doctor", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "steborio.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "stephenj.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "stevenz.science", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -35531,7 +35380,6 @@
{ "name": "teyssedre.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tgamobility.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "tgtv.tn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
- { "name": "thanabh.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thebigbitch.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thecolumnist.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
{ "name": "thecskr.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -36358,7 +36206,6 @@
{ "name": "inpas.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "insgesamt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "integrityoklahoma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "intensifyrsvp.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "interimages.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "internaluse.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "investarholding.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -36488,7 +36335,6 @@
{ "name": "laindonleisure.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lakehavasucitynews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lakesherwoodelectrical.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lanonfire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lasseleegaard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lasseleegaard.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lasseleegaard.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -37570,7 +37416,6 @@
{ "name": "maly.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mamadoma.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mamiecouscous.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mamochka.org.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "manawill.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "manuelrueger.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "maquettage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -37817,7 +37662,6 @@
{ "name": "vollans.id.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vosgym.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vreeman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vrsgames.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wacky.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "waf.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wallpaperup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -38116,7 +37960,6 @@
{ "name": "ims-sargans.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "inixal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "inkvisual.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "iserv.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "isfriday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "isotope.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "isotopes.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -38360,7 +38203,6 @@
{ "name": "ur.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "urcentral.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vaindil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vales.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vapecom-shop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vectro.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "venninvestorplatform.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -38948,37 +38790,12 @@
{ "name": "yurinet.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z-coder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zenics.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00100010.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00120012.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00130013.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00140014.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00150015.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00160016.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00180018.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "00190019.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "00330033.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00440044.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00550055.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "00660066.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00770077.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "00880088.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "110110110.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "112112112.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "113113113.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "118118118.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481481.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481481.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481482.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481482.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481483.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481483.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481485.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481485.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1481486.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1481486.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "168bet9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "168bo9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "168bo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "168esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "174343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1day1ac.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -38992,35 +38809,15 @@
{ "name": "404.guide", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "439050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4flex.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "5214889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "5214889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "52b9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "52b9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "5310899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "5310899.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "53ningen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "546802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "598598598.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "788da.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "81uc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8888esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8901178.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8901178.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8910899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8910899.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8917168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8917168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8917818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8917818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8951889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8951889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8992088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8992088.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9617818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9617818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9696178.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9696178.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9bingo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "a-1basements.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aa6688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "abckam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39079,7 +38876,6 @@
{ "name": "amosng.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "andariegocusco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "andys-place.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ankya9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ansermfg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "antennisti.milano.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anthony.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39133,70 +38929,17 @@
{ "name": "avietech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "awxg.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ayon.group", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b0618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b0618.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b0868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b0868.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b1236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b1758.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b1758.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b1768.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b1768.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b1788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b1rd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b2486.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b2486.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5189.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5189.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5289.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b5289.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b5989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5989.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b61688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b8591.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b8591.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b8979.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b8979.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9018.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9108.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9108.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9110.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9112.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9112.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b911gt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b911gt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b91688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b91688.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b91688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b91688.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9175.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9175.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9258.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9258.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9318.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9418.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9418.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9428.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9428.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9453.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9453.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9468.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9468.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9488.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9488.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9498.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9498.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9518.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9518.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9518.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9528.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9528.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9538.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9538.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9568.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9586.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9588.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39205,15 +38948,7 @@
{ "name": "b9598.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9598.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9658.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b96899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9758.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9758.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9858.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9858.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9883.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9884.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9885.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39223,62 +38958,38 @@
{ "name": "b9888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b98886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9920.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9930.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9948.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9948.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b99520.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9960.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9980.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b99881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b99882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b99883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b99885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b99886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9best.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9best.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9king.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9king.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9king.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9winner.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b9winner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b9winner.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bachata.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "baka-gamer.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ballinarsl.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bamboorelay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "banduhn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "banknet.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bao-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bao-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "baodan666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "baptistedeleris.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "barabrume.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "barryswebdesign.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bat909.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bat9vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bat9vip.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "batvip9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bayz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bbnbb.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bbswin9.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bbswin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bbxin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bbxin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bcdonadio.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bcdonadio.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bcodeur.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "be9418.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be9418.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "be9418.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be9418.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be9458.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be9458.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be9458.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be9458.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "be958.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be958.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "be958.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be958.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be9966.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bealpha.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39294,21 +39005,12 @@
{ "name": "bessettenotaire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestattorney.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestbatteriesonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bestesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestinductioncooktop.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestoffert.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bet-99.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bet-99.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bet168wy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bet168wy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bet909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bet990.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bet9bet9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "betgo9.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "betterjapanese.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "betwin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "betwin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "beylikduzum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "beylikduzuvaillant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bh.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39319,8 +39021,6 @@
{ "name": "biletyplus.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "biletyplus.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bill-nye-the.science", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "binbin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "binbin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bingo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "binkanhada.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "biocheminee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39330,16 +39030,10 @@
{ "name": "bitenose.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bitenose.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bitgrapes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bjl5689.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bjl5689.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bkhayes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blackislegroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blackscreen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blazing.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bling9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bling999.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bling999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bling999.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blip.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blobfolio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blockshopauto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39351,16 +39045,6 @@
{ "name": "blunderify.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bluproducts.com.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bmriv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo1689.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo1689.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9club.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9club.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9club.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9fun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9fun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9game.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9game.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bo9king.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boards.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bodypainting.waw.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bolgarnyelv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39401,7 +39085,6 @@
{ "name": "bytema.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bytema.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bythen.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bywin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "caarecord.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cadams.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "calcedge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39588,14 +39271,7 @@
{ "name": "e-techsolution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "e-techsolutions.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "e-vo-linka.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e1488.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "e4metech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e52888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e52888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e53888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e53888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e59888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e59888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eagle.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eaglemessaging.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eastsidecottages.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39620,7 +39296,6 @@
{ "name": "eleicoes2018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "elektronickakancelar.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eleonorengland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "eline168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "elviraszabo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "elwix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "elysiria.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39638,115 +39313,42 @@
{ "name": "equinetherapy.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eroimatome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "erwinpaal.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "es888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "es8888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "es888999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "es9999.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb-top.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb-top.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb1314.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb1668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb168168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb168168.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb168168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb168168.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1688.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1688.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1688.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb16888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1711.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1711.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1788.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1788.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb1788.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb17888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb2013.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb2013.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb2099.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb2099.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb222.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb258.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb325.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb333.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb433.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb553.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb555.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb555.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb556.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb5889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb5889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb6.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb666.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb66666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb677.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb68888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb775.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb777.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb777.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb777.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb777.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb777.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb777.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb8886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb9527.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb9588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb9588.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb9588.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb999.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb999.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esb999.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esb999.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esba11.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esba11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esba11.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esba11.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esba11.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.bz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esball.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball518.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball518.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esball518.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esball888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esballs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbbon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbbon.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbfun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbfun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esbgood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbin.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbjon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbjon.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbm4.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esbm5.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esmoney.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "esmoney.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "etech-solution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "etech-solution.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "etech-solutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39787,12 +39389,9 @@
{ "name": "feeriedesign-event.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "feetpa.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "felger-times.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "feng-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "feng-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "feudaltactics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "feuerwehr-mehring.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ffiec.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "fibo-forex.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "filanthropystar.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "finchnest.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fingerscrossed.style", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39837,8 +39436,6 @@
{ "name": "frejasdal.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frugal-millennial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fs-community.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "fu-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "fu-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fullhost.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "futurehack.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fwest98.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39867,11 +39464,6 @@
{ "name": "glaciernursery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gladystudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "globalgovernancewatch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "god-esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "godbo9.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "godbo9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "godbo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "godesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "goedkopeonesies.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "goetic.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "goozp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39879,8 +39471,6 @@
{ "name": "gorgias.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gorognyelv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gotrail.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "gowin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "gowin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "grahamcluley.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gram.tips", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "grandcafetwist.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39927,7 +39517,6 @@
{ "name": "helpwithmybank.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "henkboelman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hermann.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "herrenmuehle-wein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "heute.training", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "heyjournal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hf-tekst.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39950,18 +39539,12 @@
{ "name": "hope-line-earth.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "horizonmoto.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "horvatnyelvkonyv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hotesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hotesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "housekeeperlondon.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "howgoodwasmysex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hstspreload.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hua-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hua-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hua-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "huangting.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hubrecht.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hui-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hui-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "huislijn.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "humboldtmfg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hunstoncanoeclub.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -39990,8 +39573,6 @@
{ "name": "inetsoftware.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "infinite.hosting", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "infruction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ing89.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ing89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ingatlanneked.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ingi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "inmoodforsex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40033,8 +39614,6 @@
{ "name": "jexler.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jfsa.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jiid.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "jing-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "jing-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jiosongs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jldp.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jlot.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40081,7 +39660,6 @@
{ "name": "kin.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kinderjugendfreizeitverein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kirwandigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kissesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kissesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kivitelezesbiztositas.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "klseet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40145,15 +39723,11 @@
{ "name": "letempsdunefleur.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "leviaan.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lhajn.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lian-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lian-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "liang-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "liang-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "librarytools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "libre-service.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lichttechnik-tumler.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lieblingsholz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lieuu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lifeinsurances.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lifeinsurances24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "light-up.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40173,8 +39747,6 @@
{ "name": "loket.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loli.ski", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "losangelestown.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lovebo9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lovebo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lovingpenguin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lswim.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ltaake.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40305,8 +39877,6 @@
{ "name": "nationalbank.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nationalbanknet.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nay.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "nba669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "nba686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nbad.al", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nc-beautypro.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nc-formation.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40367,7 +39937,6 @@
{ "name": "online-calculator.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "online-stopwatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "online.net.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "onlyesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "onlyesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "onsgenoegen-waz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "onspring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40462,10 +40031,8 @@
{ "name": "praktijkdevecht.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pritchett.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "privatecapsecurity.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pro-esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pro-esb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "prodware.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "proesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "proesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "projectl1b1t1na.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "promotioncentre.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40506,9 +40073,6 @@
{ "name": "raucris.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "raviparekh.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "raystark.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "raywin168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "raywin168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "raywin88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "recipex.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "red-trigger.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "red2fred2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40527,7 +40091,6 @@
{ "name": "roboth.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rodarion.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "roelbazuin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "roligprylar.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rollercoasteritalia.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rollingbarge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rook-playz.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40647,8 +40210,6 @@
{ "name": "spotrebitelskecentrum.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sr-33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ssbgportal.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ssc8689.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ssc8689.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ssdservers.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ssready.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "staktrace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40690,8 +40251,6 @@
{ "name": "szlovennyelv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tacklinglife.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tadluedtke.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tai-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tai-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "takebackyourstate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "takebackyourstate.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "takebackyourstate.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40752,9 +40311,7 @@
{ "name": "tomosm.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "toolkits.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "toothdoc.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "top-esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "topbilan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "topesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "topicdesk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "toponlinecasinosites.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "topwindowcleaners.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40837,9 +40394,6 @@
{ "name": "vinogradovka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vintagebandfestival.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vintagesouthernpicks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vipesball.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vipesball.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vipesball.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vipesball.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "visit-montenegro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vizija-nepremicnine.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40850,10 +40404,6 @@
{ "name": "vucdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vynedmusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w84.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wai-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "waka168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "waka168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "waka88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wakiminblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "waltzmanplasticsurgery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "walvi.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40868,8 +40418,6 @@
{ "name": "webwednesday.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "weiltoast.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "weld.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wen-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wen-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "werkenvoorphiladelphia.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wezl.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "whistler-transfers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40895,9 +40443,6 @@
{ "name": "wzfetish.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xanadu-taxi.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xilegames.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xin-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xin-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xing-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xinghuokeji.xin", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--lnakuten-9za.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--n8jubz39q0g0afpa985c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40908,13 +40453,9 @@
{ "name": "xn--zr9h.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xnu.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xsec.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xuan-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xuan-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xxxlbox.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yacineboumaza.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yannick.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "yao-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "yao-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ybscareers.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yenibilgi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yetishirt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40941,7 +40482,6 @@
{ "name": "zeroseteatacado.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zgan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhiwei.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zhuweiyou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zitseng.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zorki.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zrnieckapresny.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -41242,7 +40782,6 @@
{ "name": "europeanpreppers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "evamachkova.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "evenementenhoekvanholland.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "evoting.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "examsmate.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "expoort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "expoort.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -41270,7 +40809,6 @@
{ "name": "frankedier.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frankierfachmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frankierstar.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "frauenarzt-niendorf.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frebib.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frebib.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frebib.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -41371,7 +40909,6 @@
{ "name": "ip-tanz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ipv6.jetzt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "isakssons.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ispitrade.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "issala.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "itaiferber.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jak-na-les.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -41407,7 +40944,6 @@
{ "name": "klinkenberg.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "knitfarious.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "knmv.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "knop.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "koecollege.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kr0n.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kralovskapradelna.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -41426,7 +40962,6 @@
{ "name": "leadinfo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "led-tl-wereld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ledscontato.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lesjardinsdemathieu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lesterchan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "linkthis.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "linuxos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -41452,7 +40987,6 @@
{ "name": "marxmyths.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "masrur.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "massagetainha-hanoi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mattiascibien.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mauerwerkstag.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mcpro.games", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "medhy.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -41774,7 +41308,6 @@
{ "name": "toerclub-ing-arnhem.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tokka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tokugai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tomkwok.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "toms.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tonguetechnology.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tontonnews.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -42160,7 +41693,6 @@
{ "name": "generator.creditcard", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "genocidediary.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gesundheitswelt24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "giegler.software", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "git.tt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "glabiatoren-kst.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "globalcanineregistry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -42800,7 +42332,6 @@
{ "name": "buyritefairview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cadre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "caibi.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "callanbryant.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "canadian-nurse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cannahealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "carbontv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -42831,7 +42362,6 @@
{ "name": "cna-aiic.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cnaprograms.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cnatraining.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "codigo-bonus-bet.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "codigodelbonusbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "coins2001.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "colpacpackaging.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -42886,7 +42416,6 @@
{ "name": "dubbingkursus.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "duckduck.horse", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dupree.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dyn-dnhensel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dzsibi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "e-baraxolka.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "easydumpsterrental.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -42980,7 +42509,6 @@
{ "name": "greenhats.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "groentebesteld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "guides-et-admin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "guildbase.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hakaru.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hamburgerbesteld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "happydietplan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -43059,7 +42587,6 @@
{ "name": "kx197.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lakehavasuhomes.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lamp.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "landrovermerriamparts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "laparoscopia.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "laranjada.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "larbertbaptist.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -43114,7 +42641,6 @@
{ "name": "megauction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "meine-reise-gut-versichert.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "menudieta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mercedespartscenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "meshok.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mfacko.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mgtbaas.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44048,7 +43574,6 @@
{ "name": "peinard.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pensionpilot.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "philsown.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pilot.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pilotgrowth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pix-geeks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "playyou.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44091,7 +43616,6 @@
{ "name": "shlmail.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "showroom.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "showroom.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "shrug.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "silvobeat.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "simark.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sjv4u.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44134,7 +43658,6 @@
{ "name": "transfers.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tsukeawase.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tulenceria.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tungstenroyce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "uclip.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "uktw.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ulovdomov.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44175,7 +43698,6 @@
{ "name": "xn--80aejljbfwxn.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--dk8haaa.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--lckwg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xn--wq9h.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xy1919.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xy6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xy6262.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44375,7 +43897,6 @@
{ "name": "ddns-test.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "decis.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deepaero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "denbkh.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "detski.center", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deuchnord.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deutschebusiness.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44688,9 +44209,7 @@
{ "name": "plastovelehatko.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "plob.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "plumbingglenvista.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pluscbdoil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pmf.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "polly.spdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "poloniex.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "porkel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "porte.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44763,7 +44282,6 @@
{ "name": "sho-tanaka.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "show-stream.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "signal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "simplithai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sirencallofficial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sisseastumine.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sistemos.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44867,7 +44385,6 @@
{ "name": "wsadek.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "www-9822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wyrimaps.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wzfou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xbrl.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xiaxuejin.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--eckle6c0exa0b0modc7054g7h8ajw6f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -45184,7 +44701,6 @@
{ "name": "grunwaldzki.center", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gudangpangan.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "guidepointsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "guidesetc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gurucomi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hackerone.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hackmeimfamo.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -45335,7 +44851,6 @@
{ "name": "moucloud.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "moyu.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mr-coffee.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "msopopop.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "multitec.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "murashun.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "my4thtelco.com.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -45443,7 +44958,6 @@
{ "name": "prodietix.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "prosperontheweb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ps-sale.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pscr.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pself.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "psicologasandrabernal.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "psychiq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -45605,7 +45119,6 @@
{ "name": "vysvetluju.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wanderzoom.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wangyubao.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "watchpci.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "waxlrs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wbut.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "web-art.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -45708,7 +45221,6 @@
{ "name": "catalystapp.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "certfa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cfdcre5.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "cgpe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chapelaria.tf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chaussenot.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cjhzp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -45869,7 +45381,6 @@
{ "name": "productoinnovador.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pureitsolutionsllp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "quangngaimedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "realoteam.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rebelrebel.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "regenerapoint.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "renthelper.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -46083,7 +45594,6 @@
{ "name": "megarex.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "megustariasaber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "miki-boras.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mirfire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "motoreflex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "musikzentrale.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "my4thtelco.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -46247,7 +45757,6 @@
{ "name": "aluoblog.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "amisderodin.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "andre-lategan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "angelremigene.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anime-tip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anthonyloop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "antifraud.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -46287,7 +45796,6 @@
{ "name": "bluestardiabetes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bokka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boltbeat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bonsaimedia.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bookingentertainment.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boonehenry.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boote.wien", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -46323,7 +45831,6 @@
{ "name": "cheapcaribbean.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chenkun.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "childstats.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "christopherandcharlotte.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ci-suite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cinay.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cineplex.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -46760,7 +46267,6 @@
{ "name": "purbd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qazcloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qoml.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "qoor.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "quic.stream", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qx.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rahadiana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -46778,7 +46284,6 @@
{ "name": "reimaginebelonging.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rekisuta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rencontres-erotiques.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "retetop95.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "retrovideospiele.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "revisit.date", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rheinturm.nrw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -46830,7 +46335,6 @@
{ "name": "sircon.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sisgopro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sistov.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "skrivande.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "smit.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "smithchow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "smmcab.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -47164,7 +46668,6 @@
{ "name": "emby.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "er-mgmt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "etch.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "eugeneyan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eve.ac", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eveswell.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "extensionschallenge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -47361,7 +46864,6 @@
{ "name": "kipa.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kirkforillinois.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kitchenalley.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kitchenalley.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "knetterbak.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kommaer.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kooli.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -47756,7 +47258,6 @@
{ "name": "aaronhorler.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "acgtalktw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "actc.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "actiefgeld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "acy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "acyfxasia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "addisoncrump.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -47867,7 +47368,6 @@
{ "name": "cheezflix.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chenqinghua.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chiropraktik-riemann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "christianillies.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cio-ciso-interchange.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cipri.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cipri.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -47911,7 +47411,6 @@
{ "name": "dafnik.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danselibre.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dariaburger.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "darkwebkittens.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "datenschutz-consult.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "david-mallett.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "davidsopas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -48217,7 +47716,6 @@
{ "name": "maguire.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "maijia800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "majkassab.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "manufacturingusa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "maoi.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mapservices.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "marianelaisashi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -48315,7 +47813,6 @@
{ "name": "niklasanderson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ninesix.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "niqex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "nocmd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nonametheme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "notepad.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nowitzki.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -48379,7 +47876,6 @@
{ "name": "pointsgame.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "polymorph.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ponydesignclub.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "popeyes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "porniwi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pornloupe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pors-sw.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -48791,7 +48287,6 @@
{ "name": "cwgaming.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cyber.je", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d-eisenbahn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "daniellockyer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danny-tittel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "daylight-dream.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deepcode.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -49074,7 +48569,6 @@
{ "name": "ldjb.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "learningman.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lebendige-heilkunst.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "legissa.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "leter.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "letskick.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "liberdademg.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -49428,7 +48922,6 @@
{ "name": "villa-anna-cilento.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vip4553.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "viseum.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vivoregularizafacil.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "viza.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "voidzehn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "von-lien-aluprofile.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -49471,7 +48964,6 @@
{ "name": "xn--cfa.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--fp8h58f.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--y-5ga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xo7.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xposedornot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yawen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yell.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -49756,7 +49248,6 @@
{ "name": "potenzmittelblog.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "privelust.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "programistka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "prophiler.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "prosurveillancegear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "prowebcenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pru.com.hk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -49916,7 +49407,6 @@
{ "name": "aftab-alam.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aisance-co.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ak-webit.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "akhealthconnection.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "alaskajewelry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "alicemaywebdesign.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "alvis-audio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -50016,7 +49506,6 @@
{ "name": "classictheatrecumbria.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cleaningservicejulai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cloudns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "cloudservices.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cocodroid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "colinsnaith.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "collectorsystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -50468,7 +49957,6 @@
{ "name": "rctalk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rdv-prefecture.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rebtoor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "receiliart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rectecforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "redcatrampageforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "reher.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -50697,7 +50185,6 @@
{ "name": "wumai.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wundernas.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wuppertal-2018.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wuppertaler-kurrende.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "www.org.gg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xants.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xdawn.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -50750,7 +50237,6 @@
{ "name": "alquiaga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "amcangroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "amyfoundhermann.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "andrewbdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anegabawa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "angelesydemonios.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "animan.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51079,7 +50565,6 @@
{ "name": "52hentai.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "55797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "656088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "66136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "666omg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "755k3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7570.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51198,9 +50683,6 @@
{ "name": "baytalebaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bazos.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bbkaforum.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bc416.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bc418.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bc419.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "beardic.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bebout.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "benhchuyenkhoa.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51304,9 +50786,7 @@
{ "name": "cispeo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cjdby.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cjean.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "cloudlessdreams.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "clsfoundationrepairandwaterproofing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "clubcorsavenezuela.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cobcode.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "codejots.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "codexpo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51358,9 +50838,6 @@
{ "name": "danielran.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dansdiscounttools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dappworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "darkerlystormy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "darkerstormy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "darknessflickers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dashwebconsulting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dasteichwerk.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "davesharpe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51370,7 +50847,6 @@
{ "name": "dawgs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dbjc.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ddy.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "deathofspring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dentistesdarveauetrioux.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "der-fliesenzauberer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dereddingsklos.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51793,7 +51269,6 @@
{ "name": "mobisium.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "modulex-gmbh.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "moeyoo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "moeyun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mojizuri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "moneoci.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "moneybird.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51921,7 +51396,6 @@
{ "name": "pintosplumbing.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pizza-show.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pj009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pj02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pkisolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "plaisirdumouvement.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "planetsoftware.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52054,7 +51528,6 @@
{ "name": "saxotex.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sbrownbourne.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "scene.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "schbebtv.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "schottenland.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "schutterijschinveld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sciencehouse.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52070,7 +51543,6 @@
{ "name": "selectsplat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "semiread.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "septentrionalist.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "serbianclimbing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "serversfrom.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sethjust.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "seventwentynine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52100,7 +51572,6 @@
{ "name": "smartietop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "smtpdev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "snaptier.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "sngallery.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "snowpaws.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "snowyluma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "social-media-strategy.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52221,7 +51692,6 @@
{ "name": "treinmagazine.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "treinmagazine.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "trevsanders.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tribe.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "troyhunt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "truncus-encephali.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ts3-legenda.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52232,7 +51702,6 @@
{ "name": "turl.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tweetfinity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tweetfinityapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tz56789.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ulgc.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "unicorn-systems.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "universal.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52253,7 +51722,6 @@
{ "name": "vandorenscholars.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vandyhacks.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vangoghcoaching.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "varalwamp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vendermicasarapido.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "verifiedjoseph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "verifiny.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52512,7 +51980,6 @@
{ "name": "fashiondays.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fashiondays.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fatecdevday.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "fearby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "feildel.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fitinclass.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "flavo.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52680,7 +52147,6 @@
{ "name": "mcon.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mds-paris.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "meditel.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "medmarkt24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "medvedikorenka.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "merchant-automotive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "merlinsoap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52770,7 +52236,6 @@
{ "name": "pmheart.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "politicachubut.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "polska-robota.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "potenzprobleme-info.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "potzwonen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "poundwholesale.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "powerplaywashers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -53373,7 +52838,6 @@
{ "name": "vretmaskin.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wb256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "weekvandemediawijsheid.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "weixiaojun.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wezartt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wpccu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wxzm.sx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -53570,7 +53034,6 @@
{ "name": "cdshining.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cedarslodge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "centromasterin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "cflsystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cg.al", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cgurtner.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chabik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -53612,7 +53075,6 @@
{ "name": "darkrisks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dasignsource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "davidtiffany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dbjc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "debkleinteam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "decoating.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deftig-und-fein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -53888,7 +53350,6 @@
{ "name": "martin-loewer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "matdogs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mathematris.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mathfinder.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "matome-surume.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mcfipvt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mediabackoffice.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -53897,7 +53358,6 @@
{ "name": "medsindex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "memesbee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "meric-graphisme.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "merloat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "meupainel.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mfz.mk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mhadot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54020,7 +53480,6 @@
{ "name": "obesidadlavega.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ohmayonnaise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ohol.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "oi-wiki.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "oldno07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "olfnewcastle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "omarsuniagamusic.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54295,7 +53754,6 @@
{ "name": "tsgkc1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tuasaude.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "turf-experts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "u-martfoods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ultrautoparts.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "unblocked.gdn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ungeek.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54307,7 +53765,6 @@
{ "name": "uptechbrasil.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "utahtravelcenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "uuid.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "uv.uy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "v2ray6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "v2ray66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "v2ray666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54357,7 +53814,6 @@
{ "name": "wwww.me.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--obt757c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--trdler-xxa.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "yannic.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ymoah.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ynxfh.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yoast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54556,7 +54012,6 @@
{ "name": "bridgedirectoutreach.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "briffoud.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "browserleaks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "brunoproduit.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "brycecanyonnationalpark.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bso-buitengewoon.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bubblin.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54567,7 +54022,6 @@
{ "name": "buy-out.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "byhe.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "caldoletto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "calendar.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cambridgesecuritygroup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "campaignhelpdesk.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "camshowverse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54748,7 +54202,6 @@
{ "name": "geography-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "geology-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "georgepancescu.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "getenv.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gettopquality.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gifudodo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gishiko.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54758,7 +54211,6 @@
{ "name": "goedkopelaptopshardenberg.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "goldenruleemail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gondelvaartdwarsgracht.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goodquote.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "graphic-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "greatskillchecks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "greenwaylog.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -54967,7 +54419,6 @@
{ "name": "miniwallaby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mitdip-mit-group-ch.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mizucoffee.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mkjl.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mlii.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "moe.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "moeali.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55046,7 +54497,6 @@
{ "name": "pcreparatiehardenberg.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "peertube.social", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "peintrenomade.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "peoplerange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "performing-art-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "petroleum-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "petrotranz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55100,7 +54550,6 @@
{ "name": "pxl-mailtracker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "q1q2q3.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qdabogados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "quote.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "r1a.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rada-group.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "radegundisfest.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55121,7 +54570,6 @@
{ "name": "resinflooringcompany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "respecttheflame.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "revivalprayerfellowship.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "rhetorical.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "riverbendroofingnd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "riverridgecc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "robbiecrash.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55237,12 +54685,10 @@
{ "name": "theatre-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thepharm.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "therapiemi.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "therhetorical.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thermorecetas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thestyleforme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thetotalemaildelivery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "theverybusyoffice.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "thevoya.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thewayofthedojo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ticketdriver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tlyphed.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55333,16 +54779,10 @@
{ "name": "wuwuwu.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xmodule.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn----8sbjfacqfqshbh7afyeg.xn--80asehdb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xn--158h.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xn--57h.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xn--8bi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xn--et8h.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xn--is8h6d.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xr1s.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xss.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xsuper.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xtrememidlife.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xuehao.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xuehuang666.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xxxred.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xxxsuper.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55359,7 +54799,6 @@
{ "name": "zeestraten.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zenram.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zjyifa.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zoop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zp25.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zqstudio.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zyzsdy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55485,7 +54924,6 @@
{ "name": "eco2u.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "efipsactiva.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ekostrateg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "eldercare.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "elderjustice.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eletor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eletor.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55626,7 +55064,6 @@
{ "name": "mambas.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "manti.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "maquininhamercadopoint.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "marinecadastre.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mariskavankasbergen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "marketingbrandingnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "marksmanhomes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55913,7 +55350,6 @@
{ "name": "bothellwaygarage.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bryggebladet.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bulktshirtsjohannesburg.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bungee.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bungee.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "butteramotors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "buyebook.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55936,7 +55372,6 @@
{ "name": "citizenslasvegas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "civicforum.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cleaningbyrosie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "codyscafesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "coffeetime.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cognicom-gaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "communitymanagertorrejon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -56173,7 +55608,6 @@
{ "name": "petermaar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "philipzhan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "philslab.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "photosquare.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "piratebay.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "planview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "plumbingandheatingspecialistnw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -56510,7 +55944,6 @@
{ "name": "chrisplankhomes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chrissx.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chshouyu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "chuill.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "churchofscb.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ciania.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ciaracode.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -56572,14 +56005,12 @@
{ "name": "darwinsearch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "datajobs.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "davidfetveit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ddoser.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "decay24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "demiranda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "desktopd.eu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "detecmon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "detuprovincia.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dev-gutools.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "deviser.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "devstroke.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "devtty.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dicksakowicz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -56762,7 +56193,6 @@
{ "name": "gmacedo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "golang.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "goodth.ink", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goover.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "goproinspectiongroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gpureport.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "grantplatform.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -56914,7 +56344,6 @@
{ "name": "lisanzauomo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "livingkingsinc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lonestarlandandcommercial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "looker.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loricozengeller.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loungepapillon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "luca-steeb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -57089,7 +56518,6 @@
{ "name": "qianmo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "radioactivenetwork.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "raku.bzh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "reads.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "realestate-in-uruguay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "realestatecentralcoast.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "realestatemarketingblog.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -57215,13 +56643,11 @@
{ "name": "spikelands.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "splnk.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "spnitalianfestival.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "sportwetten-anbieter.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sprax2013.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "springhillmaine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "src-el-main.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "staffexcellence.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stantabler.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "stanthony-yonkers.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "staparishgm.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "starttls-everywhere.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "static.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -57397,7 +56823,6 @@
{ "name": "wcrca.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wcsi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "web-thinker.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "webcasinos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "webnetforce.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "webstart.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wedg.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -57506,7 +56931,6 @@
{ "name": "absolutcruceros.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "absolutviajes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "abublog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "abundanteconomy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "academiadebomberosonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "accpl.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "actheater.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -57735,7 +57159,6 @@
{ "name": "christian-fischer.pictures", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "christian-folini.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "christiancoleman.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "christopher.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chybeck.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cibercactus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cierreperimetral.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -58309,7 +57732,6 @@
{ "name": "loveai.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lovemiku.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lsy.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lucianoalbanes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lugimax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "luloboutique.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lunalove.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -58935,7 +58357,6 @@
{ "name": "topvision.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "torfbahn.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "torsquad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "toutelathailande.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tower.land", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "toycu.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "trackfeed.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -59390,7 +58811,6 @@
{ "name": "scarvespalace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "schmitt-etienne.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "schwano-dent.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "scorpowines.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "seb-net.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "see.asso.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sesrdcem.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -59528,7 +58948,6 @@
{ "name": "adapptlabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "adativos.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "adelianz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "adiehard.party", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "administrator.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "adnolesh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "adresults.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -59599,7 +59018,6 @@
{ "name": "biblethoughts.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bigshopper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bigshopper.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "biomin.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bishopscourt-hawarden.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "biznesonline.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bizzdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -59705,7 +59123,6 @@
{ "name": "dnskeep.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dnskeeper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "doanhnhanplus.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "docudanang.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dodds.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dodomu.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "donnajeanbooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60046,14 +59463,12 @@
{ "name": "proformer.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "propertysales-almeria.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "proxybay.bet", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pulsarsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pulsnitzer-lebkuchen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pumpandcash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pvamg.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pwt.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pxgamer.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qarea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "qiukong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "quickrelations.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "quietboy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rabbitinternet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60440,7 +59855,6 @@
{ "name": "aenterprise.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aeonct.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aff.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "aflam4you.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "african-bay.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agenciamdg.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aimonline.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60542,7 +59956,6 @@
{ "name": "bluepromocode.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blueswandaily.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bookzaga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "booplab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boothlabs.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bootsschule-weiss.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boreo.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60685,7 +60098,6 @@
{ "name": "damjanovic.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danfromit.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danfromit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dara-berlin.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "datingsite-vergelijken.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "daveops.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "davidandrewcoaching.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60713,7 +60125,6 @@
{ "name": "deli-tochigi.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deltawolf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "depedtambayan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "desenfans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deskguide.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dev-greavesindia.pantheonsite.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "devils-point.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60868,7 +60279,6 @@
{ "name": "grenlandkiropraktor.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "grupodatco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gtn-pravda.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "gx3.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gyakori.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gzriedstadt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "haancommunity.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60965,7 +60375,6 @@
{ "name": "itseeze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ivotemahdi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "iwascoding.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "iyn.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "iyoumu.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "izanah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "j-robertson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -61301,7 +60710,6 @@
{ "name": "pearlsonly.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pearlsonly.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pearlsonly.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "peatsbeast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "peckcloths.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "peepsfoundation.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pencil2d.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -61344,14 +60752,12 @@
{ "name": "publi-all.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "punchlinetheatre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "puntcunts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "puppo.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "purejewels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "purityclothing.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qaq.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qq885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qrpatrol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "quallo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "qunzi.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qvq.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "qxzg.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "radiolla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -61410,7 +60816,6 @@
{ "name": "rxguide.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ryuanerin.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "saga-umzuege.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "sajtoskal.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "samorazvitie.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sangyoui.health", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sanovnik.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -61441,7 +60846,6 @@
{ "name": "seriousaboutsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "servicerequesthub.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "servidoresadmin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "shahar.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sharefox.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sharefox.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shopcord.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -61807,7 +61211,6 @@
{ "name": "cupoane-reducere.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cursosypostgrados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cvutdecin.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "cyberonesol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d-imitacion.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d2qa61rbluifiq.cloudfront.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danielfeau.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62249,7 +61652,6 @@
{ "name": "lolitalechat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "luclu7.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "m-gaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "magbt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "managedhosting.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mayorcahill.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mb-server.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62284,7 +61686,6 @@
{ "name": "oxdl.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "palace-bayreuth.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "paolotagliaferri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pareachat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "payjunction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pebblepointapartmentsstl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "persiart.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62370,7 +61771,6 @@
{ "name": "thebirchwoods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thermia.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thermia.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "thing.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tio.run", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tipsport.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tokoplugin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62424,7 +61824,6 @@
{ "name": "yourtime.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yumikori.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zenus-biometrics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zhang.fm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhangxuhu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zstu.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zumub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62576,7 +61975,6 @@
{ "name": "frsnpwr.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fruityfitness.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gakdigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "gamerwares.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "garbagedisposalguides.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gestsal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "giftlist.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62591,7 +61989,6 @@
{ "name": "hawawa.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "healthyrecharge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "heikohessenkemper.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "helpwithinsomnia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hokung.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hostco.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hsg-kreuzberg.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62813,7 +62210,6 @@
{ "name": "tryplo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "turingmind.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tusmedicamentos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "twoleftsticks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "u-chan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "u29dc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "uitvaartvrouwenfriesland.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62957,7 +62353,6 @@
{ "name": "energysolutionstech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "esu.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "etnoria.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "evoting-test.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "farvisun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "feestbierfusten.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "firstnetworksouth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62965,7 +62360,6 @@
{ "name": "foroaranda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "foxbnc.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "foyer-laique-segre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "frankfurt-coworking.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frietzombie.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "funkfernbedienung-industrie.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "funknotaus.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63009,7 +62403,6 @@
{ "name": "khg-orchester.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kibbesfusion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kindesfreude.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "krrn.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kt3i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kys.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "laceysfarm.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63055,7 +62448,6 @@
{ "name": "monitoringd.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mozilla-hispano.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mpu-ibbi.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mrhee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "muffs.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mussalains.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mxdvl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63155,7 +62547,6 @@
{ "name": "symposium.beer", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "teamtmgb.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "techgadgetry.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tekanswer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "termee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tessierashpool.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "texasabrasiveblasting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63302,7 +62693,6 @@
{ "name": "continental-zermatt.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "contourheating.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "controllertech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "cradle.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "crowdspire.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "current-usa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cyberdiscoverycommunity.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63434,7 +62824,6 @@
{ "name": "lecannabiste.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ledwereld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lenalio.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "letshome.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lmsuitespagna.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lockoutgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loliblogs.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63487,7 +62876,6 @@
{ "name": "nootroic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "noteboat.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nsoft.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "obzoroff.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "octomist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "olgcc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "olofsson.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63993,7 +63381,6 @@
{ "name": "wangqr.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wanmen.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wardslager.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "webleedpixels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "weblegion.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "webmaster-infographiste-lyon.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "websa.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64187,7 +63574,6 @@
{ "name": "gameres.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gaycamvids.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "getintopc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "giemall.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "globalinvestigations.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gmuh.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gr8engineer2b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64247,7 +63633,6 @@
{ "name": "kevindavid.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "keywalker.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kfz-service-wachtmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kindconcentrates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kitpartners.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kjmedia.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kk.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64301,7 +63686,6 @@
{ "name": "myhostvm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mytime.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "namu.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ndx.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nekorektni.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "netzklad.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "newburghhistoryblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64388,7 +63772,6 @@
{ "name": "starryvoid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "steamosaic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stefanfriedli.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "stopmodacruel.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stucki-bagger.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sun1218.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sun1245.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64534,7 +63917,6 @@
{ "name": "bnusd.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bobbyhensley.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bol.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "booktoan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "botmastery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bovworkplacepensions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boxlink.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64624,7 +64006,6 @@
{ "name": "haju.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hamikala.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hatcher.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hauntedfieldsofglory.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hellenicmusicacademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hikawa.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hillier-swift.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64645,7 +64026,6 @@
{ "name": "isabelmurillo-ordonez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "islightdown.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "istitutovivaldi.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "izt.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "izttech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jacksball.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "james.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64661,7 +64041,6 @@
{ "name": "kaizencraft.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kakacon.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kassa.expert", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kenshobox.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kep-sbt.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kepsbt.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kodamail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -64844,7 +64223,6 @@
{ "name": "xn--anyd-7na.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--int-ru8ea.xn--6qq986b3xl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--kkcon-fwab.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xtremeperformance.co.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xtri.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ys6888.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zahnarzt-drvogel-rosenheim.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -65063,7 +64441,6 @@
{ "name": "mt4programming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mydnshost.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "navigator.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "neasahourigan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nebuso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nederdraad.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nephology.net.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -65570,7 +64947,6 @@
{ "name": "website-traffic.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wgdp.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "whatsthisword.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "whoit.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wir-machen-druck.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "with.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "woodminstermanagement.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -66226,7 +65602,6 @@
{ "name": "blackbam.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blackcountrymetalworks.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bloombrown.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "blueangel.org.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bluecanvas.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bluffplumber.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boltenergy.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -66491,7 +65866,6 @@
{ "name": "hamiltonweather.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "haruhi.org.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "headlinesclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "helm-pokale.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "henryocallaghan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hentaipornography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "herbolarigranvida.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -66592,7 +65966,6 @@
{ "name": "kexino.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "keymicrosystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "keynes.id.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kf5252.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "khetmaal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kievkiralikotel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kimitang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -66611,7 +65984,6 @@
{ "name": "korem011-tniad.mil.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "krikorianconstruction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks5000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks88.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ksoc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kumbayops.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -66927,7 +66299,6 @@
{ "name": "roussosmanos.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rrailto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rs-solution.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "rtmoran.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rubbleremovalhillcrest.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rubenruiz.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rw-invest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -66970,7 +66341,6 @@
{ "name": "sharer.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shieldblaze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shiji.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "shinomiya.group", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shopfazz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shopunilever.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shsh.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67033,7 +66403,6 @@
{ "name": "stadsbos013.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "star-one.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "startloop.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "stb-lemke.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stehlik.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stephycom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "storm-family.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67075,7 +66444,6 @@
{ "name": "tenthousandbottoms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "test1websiteboost.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "theblacklock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "theciso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thefizz.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thejoneshub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thekodester.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67295,7 +66663,6 @@
{ "name": "736381.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "961621.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "977hghg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9988ty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aaa-racing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aaa-racing.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aaa-racing.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67330,7 +66697,6 @@
{ "name": "basketforex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bazari.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "berkat-luqs.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bestartshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bf5.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bfh.science", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bibliotecadeseguranca.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67366,7 +66732,6 @@
{ "name": "controlambientalbogota.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "counterenlol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "crazypowered.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "createcpanama.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ctoin.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "czwartybrat.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dale-west.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67399,7 +66764,6 @@
{ "name": "finanziero.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "findcheapmusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "flameworked.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "fontedoprazer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "franziskaherbert.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frappant.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "freexmovie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67425,7 +66789,6 @@
{ "name": "herrfirm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hi.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hmnd.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hookxlab.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "htdcomputer.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "i-voting.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "icetravellers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67483,13 +66846,11 @@
{ "name": "lonwan.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lunite.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "luosonghao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lvtrafficticketguy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lycetre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "magicroom.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "malenaamatomd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "maniaiti.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mantachiepharmacy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "maridonlaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "marie-pettenbeck-schule.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "marxists.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "massconsultores.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67545,7 +66906,6 @@
{ "name": "rbin.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rbs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rcmstream.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "rdwh.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "recyclebin.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "redcarpetmonday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "reidsupply.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67656,7 +67016,6 @@
{ "name": "xbjt11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--80ahclcaoccacrhfebi0dcn5c1jh.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xpertcube.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xrp.pp.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xylerfox.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yulaiz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zanshinkankarate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67669,7 +67028,6 @@
{ "name": "0380l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "0531009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "0999sfce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0x0000.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "100086ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1049578.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1265353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -67887,7 +67245,6 @@
{ "name": "aramloebmd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "art-et-tonneaux.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "artigianociao.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "assetbacked.capital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "associatedwomenshealthcare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "asu.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "atf.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68046,7 +67403,6 @@
{ "name": "gladiac.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "globe-flight.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "globologic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "gomelagromashplus.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "grapheneos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "guytarrant.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "haarstudiok99.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68124,7 +67480,6 @@
{ "name": "llsv666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "localcryptopremium.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "londonindustryshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long228.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "longdie88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loteamentoabertoamparo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "louisvillefibroids.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68372,7 +67727,6 @@
{ "name": "yusukesakai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yuvibrands.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zanzariere.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zcwtl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhengqiangonglue.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhouzeng1314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zjh6888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68381,7 +67735,6 @@
{ "name": "zz0036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "066816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "09elektrik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "111zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1sand0s.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "293921.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3615jacky.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68440,9 +67793,6 @@
{ "name": "5197zz.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "726127.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "790security.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8203d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8228d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8230d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "842844.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9297a.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68680,7 +68030,6 @@
{ "name": "allcleaningservice.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "am-liaotian.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "animefire.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "anyi.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aquamarin.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "archematerial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "armadale.wa.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68732,7 +68081,6 @@
{ "name": "christianadventurecamps.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "chwilrank.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "clearpay.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "clearwaterbidets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "co-founder-stuttgart.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "competencyassessment.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "conftree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -68943,7 +68291,6 @@
{ "name": "location-appartement-dakar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "luminary.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lushan.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lust.works", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "luxurydistribution.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "m5197.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -69468,7 +68815,6 @@
{ "name": "cyclonebikes.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cyphar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "czech.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dadafterforty.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danielvanassen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "debraydesign.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -69498,7 +68844,6 @@
{ "name": "employeemanual.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eneko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "englishtofrench.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "englishtype.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "epicfail.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eventerlebnis.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "exaktus.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -69582,16 +68927,12 @@
{ "name": "j95xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "j95zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jaiestate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "jake.wales", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "jake1.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jakewales.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jbeta.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "johngmchenrymd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "juristique.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kagicomb.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "katalogkapsli.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "koboldmalade.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kotke.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kouponboket.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70047,7 +69388,6 @@
{ "name": "shadowoftheoldgods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "short.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sicz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "sillypoohbear.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "simon-czech.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sis.net.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sismit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70180,9 +69520,7 @@
{ "name": "yoelelbaz.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yr8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zingpetfood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl9889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "01918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "05am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "06918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "08918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "09btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70381,9 +69719,6 @@
{ "name": "7ka.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "86btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "876666365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8826ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8858ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8868ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "88btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "89btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70400,10 +69735,7 @@
{ "name": "91891856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91891878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918aak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ajj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918akk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918amj.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918att.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bbm.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bcf.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70420,7 +69752,6 @@
{ "name": "918dc16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918dp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ej.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918fq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918fr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70498,7 +69829,6 @@
{ "name": "b6729.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bahadirh.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "barankababra.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bb6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bb6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bc-reloaded.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70518,32 +69848,20 @@
{ "name": "bta55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt-39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt0303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt1212.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt138g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt2020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt2121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt213.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt219.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt225.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt381g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt529g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt8.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt88818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt891.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt8989a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt907.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt945g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt9898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btta13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btta15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btta27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btta30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bttna.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bttt222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bttt333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70737,7 +70055,6 @@
{ "name": "joinhahobby.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "joshjanzen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jttech.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "jw1.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "k6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "k6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "k6957.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70749,7 +70066,6 @@
{ "name": "kk6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kk6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kli.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks0776.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kupiewszystkieauta.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "l6729.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70944,7 +70260,6 @@
{ "name": "tappezzeria.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "taunusstein.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tda602-secure-login.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tegtech.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tentech.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "termoidraulica.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "thealchemistatelier.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71103,18 +70418,10 @@
{ "name": "6957pp.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6957q.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6957rr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918axx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bhh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918byy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dc19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918qs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918qz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918sa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918te.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918xe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "999btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "a1post.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "a6729.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "adamlee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71186,45 +70493,7 @@
{ "name": "bishoptx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bongbabyhouse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boxlink.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt1111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt1313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt263.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt268.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt3311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt351.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt352.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt355.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt358.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt359.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt361.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt362.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt368.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt371.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt372.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt375.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt376.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt378.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt379.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt381.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt645g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt7676.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt775.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt818g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "buyusa.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bwin2288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "caetanobenet.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71238,7 +70507,6 @@
{ "name": "carmelon-digital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cashontime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cesarparedespacora.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "chancekorte.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "christianwitts.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "clarkelectricalservices.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "clocklab.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71249,7 +70517,6 @@
{ "name": "contouring.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "crackheros.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cruicky.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "crypto-clix.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cyber-core.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cybercustodian.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71277,7 +70544,6 @@
{ "name": "dimomaint-sav.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dimosoftware.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "disabled-world.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "discountpokale.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "discountpokale.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "distortmotion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "divisasexpress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71292,7 +70558,6 @@
{ "name": "dunyahalleri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "e-mandataires.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "e-michiganinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ebooknetworking.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "echo-in.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eddy-vh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "edvinaspaliskis.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71420,7 +70685,6 @@
{ "name": "munich-eventlocations.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "muntproever.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mvion.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mychancekorte.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mysam.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mysql-real-escape-string.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "naberiusmedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71580,35 +70844,20 @@
{ "name": "znakcomstva.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zoso.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zz6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "000btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "015kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "016kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "026kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "055kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "056kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "058kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "066kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "068kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "071k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0760ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0763ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "076k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "077k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "078kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "109k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "113k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "13-th.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "133ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "135416.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "159ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "160763.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1661618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "170376.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "170386.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "178kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "178ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "181k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "182ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "185k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "192569.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "210k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71619,13 +70868,8 @@
{ "name": "2isk.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3333k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36594.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "398kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "39w66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "508kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "518k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "565kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "585kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "616btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "660887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "66619991.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "666k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71637,31 +70881,12 @@
{ "name": "76668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7666898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "76669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "787kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "806kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "819kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "856kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "869kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8801ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8859ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "885kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "886k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8885ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8886ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88kash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9108.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918aac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ayy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eej.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918yy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "97735.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "977kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9800.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "985kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "99989796.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "99989796.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9998k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71678,11 +70903,7 @@
{ "name": "advancedpestspecialists.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ag88086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag978.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks133.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agks19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aglc8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agworkers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71719,10 +70940,7 @@
{ "name": "brettpostin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "broadyexpress.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bsimyanmar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt0707.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt269g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt932g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "butterflycare.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bytheglass.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "campaignlake.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71822,7 +71040,6 @@
{ "name": "hallaminternet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hanyingw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "hashtagswimwear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "hdwalldownloads.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "he.kg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "healthyhomesofmichigan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "heijmans.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71859,7 +71076,6 @@
{ "name": "jobit.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "joeldbolivarc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "johnsongenealogy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "judaicaganeden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jumpbuttonnorth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "juszczak.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jvdz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71913,15 +71129,6 @@
{ "name": "k8dc17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "k8md01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "k8md12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi006.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8844.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8864.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8875.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8897.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kebhanamyanmar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kf-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kf0000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -71934,77 +71141,7 @@
{ "name": "kodikom.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "koreanrandom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kr.cm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0098.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0388.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0550.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0577.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0599.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks0858.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks098.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks15.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks16.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks16.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks1608.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks200.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2000.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks28.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks28.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks32.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks36.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks55.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks58.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks66.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6601.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6602.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6605.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6609.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6612.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6615.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6617.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6619.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6620.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6621.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6623.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6625.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6627.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6628.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6629.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6630.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6631.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6632.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6637.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6638.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6650.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6653.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6659.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6670.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6671.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks68.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks81.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks86.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks86.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks888.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks89.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks958.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks98.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ladakhtrip.tours", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lasterhub.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lc1588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72205,7 +71342,6 @@
{ "name": "010777a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "010kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "010ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "143918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2030411.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3040519.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "35898a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72245,15 +71381,11 @@
{ "name": "7sdre.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "809kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8208d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "861kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8812ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8818ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8819ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8890ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8892ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bbt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bby.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "98d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aartsplastics.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "acg.vc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72277,15 +71409,12 @@
{ "name": "australianstrongmanalliance.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "axin888.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ayvalikgezgini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "baeckerei-wohlgemuth.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bank-tour.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "barca-movie.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "becquerelgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestsingingbowls.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blogkuliah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boren.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt0707a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bttt111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "buybutton.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "buycccam.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "casinorobots.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72312,7 +71441,6 @@
{ "name": "costarellos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "coveredinspiders.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "crosswords123.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "cryptoclix.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cyberme.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cyberpathogen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cyllos.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72444,7 +71572,6 @@
{ "name": "ks0788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks081.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks6665.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks680.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks8802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72529,7 +71656,6 @@
{ "name": "rfxt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rheijmans.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "richie.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "rthsoftware.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ru-e-business.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "russianrandom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "russianrandom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72573,7 +71699,6 @@
{ "name": "tomthorogood.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "toparkinfo.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tourdatenarchiv.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "tranvia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "unclebens-specials.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "universovalve.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "upmon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72612,7 +71737,6 @@
{ "name": "10365a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "135374.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "17187q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "177ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1ag777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1ag88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1ticks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72642,7 +71766,6 @@
{ "name": "aeksistem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aetherlink.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "afterpay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ag0101g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag0202a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag0707a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag1515a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72671,7 +71794,6 @@
{ "name": "ag80880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag855.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag87777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ag88-guide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag88001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag88018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag88028.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72776,7 +71898,6 @@
{ "name": "colombiajeans.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "connexfilter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "contact.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "copticexchange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "corriel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "creationsgate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "creermonsite-wp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72796,7 +71917,6 @@
{ "name": "doublelist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dreatho.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "drogavista.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "droperplus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dsgvo-analyse.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dziaduch.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ebteam.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -72880,25 +72000,17 @@
{ "name": "jwr.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "k-sails.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kawaiicon.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb0283.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb1717.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb2929.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb3636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb7373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb848.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb9292.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kbcso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kiokoman.eu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kk575757.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "konfekcjonowanie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "koreanrandom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks3636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kusadasiforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "labworks.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lamujerquesoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lelux.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "leminhduong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lenafonster.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73015,7 +72127,6 @@
{ "name": "selfiehome.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "serviciodebarralibreparaeventos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sewing-world.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "sharingphotos.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shelvacu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sice-si.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sikademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73072,7 +72183,6 @@
{ "name": "venetkaarsenovart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vigorspa.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "viki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vinktwebdesign.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vkwebsite.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vontainment.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "voshod.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73139,7 +72249,6 @@
{ "name": "axa.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b-tree.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "banfor.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "banguilacoquette.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "barbe-n-blues.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "basebyte.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bbcomcdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73185,7 +72294,6 @@
{ "name": "cyberweightloss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d3dev.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dadycandoit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dandia.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "datatruckers.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "datatruckers.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "decipe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73229,7 +72337,6 @@
{ "name": "eternalparking.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eternalparking.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eternalparking.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "eth1.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "exeye.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "f00f.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "f5la.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73240,7 +72347,6 @@
{ "name": "filmcrewdb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "financecontrol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "floridawaterapparel.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "fmm-creative.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "forsaleinedmonton.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fossdaily.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "freelancemw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73377,10 +72483,7 @@
{ "name": "moowdesign.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "murmashi.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "myexams.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mylifeinsurancechoices.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "myplaystation.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nanshy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "natcheflife.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "naturalbijou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "navroopsahdev.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nerofox.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73622,66 +72725,12 @@
{ "name": "zalaxx.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zerocash.msk.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl2020.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0011d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0013d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0014d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0015d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0020d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "002d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "003d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "004d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "005d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "007d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "00d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "022kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "02d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "03d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "03d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "04d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "05d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "06d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "06d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "07d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "07d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "09am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "09d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "09d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "0d111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "100up.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "100up.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1120313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1120327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1120328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1120330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73745,11 +72794,7 @@
{ "name": "1220348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1220349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1220350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "127ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "131ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "132kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "136ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "151ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1520301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1520302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1520303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73767,138 +72812,13 @@
{ "name": "1520325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1520326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1520327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520340.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520341.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520342.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520347.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "153z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "156ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620340.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620341.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620342.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1661618.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1720302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1720303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1720312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720322.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1720336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720340.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720341.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720342.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720347.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "175ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820322.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -73918,109 +72838,35 @@
{ "name": "1820344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "182kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "182ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "182zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "185zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "187kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "188zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1920301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1920302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1920303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1920304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1920305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2030404.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "222zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3040507.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3040508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3040517.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "333zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "33btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "35d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "365d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "37879.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3dtootmine.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "4050601.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "4050607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "4050620.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "432web.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "456zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "46d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "46d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "47d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "47d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "48d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "518zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "555zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "588e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "58w66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "618btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "61d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "62222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "64d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "64d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "65d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "666zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "66d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "70872.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "70d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "74d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7minutemiles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8001d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8002d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8006d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8006d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8007d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8008d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8010d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8011d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8012d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8013d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8015d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8016d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8017d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8019d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8021d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8022d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8027d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8030d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8038d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8039d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8050d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8051d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8053d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8059d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8060d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8071d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8071d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8072d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8077d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8078d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8092d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8100d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8102d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8109d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8116d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8121d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8153d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8170d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8173d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8197d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8198d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8200d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8202d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8216d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8217d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8222d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8223d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8226d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8227d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8229d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8229d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8230d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8802ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8805ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8809ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8830ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "886666b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74047,54 +72893,22 @@
{ "name": "886666y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "886666z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "88btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918aah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918aaj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ahh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918awx.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bio.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918caa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ccb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ccy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cqq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918db.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dc20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ddk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ddy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dgg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ess.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ffk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918hs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918hzoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918og.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918pn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918rh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918tx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ug.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ui.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918vk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918vs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918wv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918za.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91milk.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "999zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k228.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k287.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k295.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k586.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k587.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k589.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k632.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "a2os.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "acapadena.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "accadia.academy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "acilicraft.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aftonpravdan.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag173168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag2983.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74114,7 +72928,6 @@
{ "name": "amerion.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "amtsinfo.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "andrewjphotography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "animekaizoku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anxietyspecialistsofatlanta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anythinggraphic.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aptekakolska.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74144,22 +72957,11 @@
{ "name": "bolamarela.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boughariosbros.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "boxtreeclinic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bread.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "brickadia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btopc.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt043g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt192.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt217.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt285.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt289.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt6262a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt776.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt8383a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt918.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt9292a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt9595.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt99.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btta18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "buysoft.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "byfeldt.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "c886666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74188,128 +72990,40 @@
{ "name": "codedynasty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cointosh.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "comedimagrire.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "computerguardians.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "corsisicurezza.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cuteselfie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d8812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8812.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8813.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8815.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8817.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d881vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d882vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d883vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d884vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d8850.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d885188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8852.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8853.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8856.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8857.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d885vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d8860.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d8861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8861.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d886119.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8863.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8865.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d886vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d8870.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8873.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8876.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8879.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88801.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d888508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88870.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d888vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d8890.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8891.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8892.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8893.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8897.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d889vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc04.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88dc09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc14.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88girls.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88md03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md14.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88md24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88md29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88promo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88zl.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "daidr.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danel.ski", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danelska.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "danelski.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "datasafeassurance.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "datatypes.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd112d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd118d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd11d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd201d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd202d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd203d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd204d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd205d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd207d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd208d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd209d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd210d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd212d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd214d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd215d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd22d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd33d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dd44d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd55d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd66d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd77d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deepnet.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dekasegi-supportcenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dentistryateastpiedmont.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74384,7 +73098,6 @@
{ "name": "issoexiste.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "itdutchie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jaculus.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "japansm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jehelpdesk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jeps.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jeroendev.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74396,8 +73109,6 @@
{ "name": "kartikmohta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kashbet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb4393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb882.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb88818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74415,69 +73126,41 @@
{ "name": "klupper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "korob-ok.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kreyolgym.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks-29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks-89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks068.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks1519.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks162.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks181.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks204.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks382.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks388.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks608.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks8805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8810.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks8851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks8881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks8883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks901.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks905.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks907.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks920.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ksvip15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kuscheln.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "larpkalender.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "larryandprisca.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lebanonbitcoin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lichtletters-huren.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lilai2222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lilai5566.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lilai838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lilai99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "linosky.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "littles.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lkw-servis.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ll8807.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "llyq8866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "llyq9988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lofstad.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loheprobado.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long-8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long266.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long510.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long566.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long68.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "long8097.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loteamentoabertocapivari.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ludovic-frank.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74487,14 +73170,12 @@
{ "name": "manuelguerra.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "marisasitaliankitchen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "markandev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "marsble.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "maxmuen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mcstaralliance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mcwrapper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mdconnect.asia", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mens-health.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "meodihoang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mercelo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mhcdesignstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "micluz.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "microjovem.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74518,7 +73199,6 @@
{ "name": "negativeentropy.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "negocios-imatore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "newworldnewlife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "nguyenminhhung.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nhv-vintagelemans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "noites.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "notariuszprzybylowicz.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74585,7 +73265,6 @@
{ "name": "setptusa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sheilagranger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "shigaben.or.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "simple-e-world.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "siscompt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "skelleypiano.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "skinstyleglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74656,27 +73335,17 @@
{ "name": "voevm.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "volvoconnect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w0185.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w0189.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w0191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w0195.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w0198.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w0202w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w4040w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w5050w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6609.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w661122.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66133.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w66136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66138.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w661616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w66191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66191.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w662211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w663w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6698.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wallisch.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wearefrantic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "websiteboost.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74712,94 +73381,28 @@
{ "name": "yamei9955.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yourbetterkitchen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yuer.sytes.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8010.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8011.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8013.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8015.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8021.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8026.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8027.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8028.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8032.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8062.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8063.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8066.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8068.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8079.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8081.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8082.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zi5.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl-49.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl-69.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl-79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl0783.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl0iu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl0sz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl1038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl16h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2704.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl3289.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl3597.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl3782.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl4231.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl4290.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl4454.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl4538.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl638.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl6xw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl7393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl7615.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl9052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl9372.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlam2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlf8h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zllpa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlong6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlong6.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlong888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlong888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zls9p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlvd7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zunlong0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zunlong918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "glassrom.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0016d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0017d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0019d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "003zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "006d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "008d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "009d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "009zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "010203.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "010ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "011zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "012zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "013zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "015zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "017zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "018zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "019zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "020ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "020ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "022ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "025ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "029kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "029ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "03637.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "05d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0799ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "08kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1020302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "10365001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "10365002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "10365003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74816,77 +73419,27 @@
{ "name": "10365f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "10365g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "10365h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1120325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1120334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "113ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "116ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "116vip.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "118vip.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1220315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1220324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1220327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1220346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "122kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "130ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "133ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "135ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "147ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1520328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1520344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "154kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "155kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "156ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "158ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "159ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1620349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "16agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "170ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "171ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1720332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "173ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "180ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "181ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820347.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1820348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1820349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "183ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "183zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "185ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "186kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "186ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "188kb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "18agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1941-45.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "198ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "199ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1blazing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1onehouse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "200ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "217778.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "23ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "285551.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "288kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "288kb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "288ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "28agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "28ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "299ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2blazing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "301ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "33kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "355ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36506000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36506011.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36506022.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74902,231 +73455,40 @@
{ "name": "36506555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36506777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36506999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "399ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3elife.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "404ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "428northampton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "456666365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4761.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4762.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "499ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "51club8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "52dashboard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "58agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "58ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "599ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "5agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "66.tn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "668ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "66agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "68agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "698ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "69agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "69ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "6agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "6wbz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7214.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7214.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8001d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8013d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8057d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8061d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8069d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8083d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8092d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8093d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8109d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8111d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8115d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8130d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8133d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8133d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8135d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8139d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8150d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8151d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8158d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8171d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8176d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8178d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8181d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8182d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8183d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8190d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8191d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8192d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8193d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8193d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8195d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8196d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8197d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8198d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8199d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8207d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8209d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8210d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8211d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8215d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8216d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8217d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8218d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8219d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8219d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8220d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8221d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8223d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8225d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8227d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8228d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8232d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8236d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "82kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "83kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "85kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "866ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "86kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "87kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8805d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8806d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8809d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8815d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8815ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8816d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8816d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8816ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8817d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8822d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8826d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8826d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8827d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8828d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8828ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8829d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8829d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8831ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8832ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8835ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8838ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8850d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8850d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8850ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8851d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8852d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8852ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8855d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8856d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8856d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8856ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8857d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8857d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8858d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8859d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8860d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8860d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8860ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8861ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8862ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8866d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8869ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8880ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8881ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8882ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8887ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8889ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8891ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8895ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8896ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8898ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "889999vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88zl.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8918d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8925d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8926d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8927d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8927d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8928d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8929d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "898ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "89kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d32.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d35.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d36.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d37.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d38.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d50.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d51.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d52.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d53.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d56.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d57.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d60.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d61.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d62.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d63.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d65.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d67.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d69.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d70.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d71.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d72.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d73.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d77.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d80.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d83.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d85.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d87.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d90.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d93.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d96.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d97.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d98.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "92kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "93kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "95kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "96kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "98agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "98kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "98ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "99agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "99kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k223.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k225.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k227.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k229.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k232.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k235.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k237.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k238.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75156,7 +73518,6 @@
{ "name": "9k322.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75189,25 +73550,14 @@
{ "name": "9k569.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k572.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k573.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k577.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k579.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k582.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k583.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k592.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k622.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k623.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k625.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k627.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k629.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k633.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k637.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k639.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k653.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75219,8 +73569,6 @@
{ "name": "9k668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k672.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k673.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k675.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k677.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k679.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k682.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75231,7 +73579,6 @@
{ "name": "9k693.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k698.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k699.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k823.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k825.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75265,66 +73612,24 @@
{ "name": "9k892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k893.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "aaex.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "acacia-gardens.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aceitedelcampo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ad4msan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ad4msan.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "adonai.eti.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "advens.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ag518518.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag58ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag68ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ag818818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ag818818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ag88ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks006.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks007.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks112.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks114.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks115.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agks131.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks132.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks134.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agks136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks137.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks138.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks150.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agks18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agks188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agks96.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "airanyumi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "allthings.how", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "americorps.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "amtcd88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "andesnevadotours.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "angelinaangulo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anhqv.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75335,14 +73640,11 @@
{ "name": "areis.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "arsenal-charodeya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "artlabdentistry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "as395.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "as397.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ashtonbromleyceramics.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "assosfi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "athomedeco.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "atlanticyellowpages.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "auditready.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "babyboutique.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "baka.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "barashek.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "barnettville.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75358,13 +73660,10 @@
{ "name": "birkenwasser.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bitking-trading.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bizlatinhub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bk622.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bk725.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "blockchainmagazine.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bryanfalchuk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btshenqi.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btsou.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "budgetinsurance.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "buhex.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "burbankdental.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75397,38 +73696,9 @@
{ "name": "cuentamecomopaso.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "curexengine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "cybernetivdigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d868.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d881.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88118.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8867.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d887.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d8875.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88811.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88871.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88873.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88dc27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88siteintro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "david-merkel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "daysinnaustin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd206d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd213d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dd99d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deedyinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "delvickokolo.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dizzie.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75440,28 +73710,12 @@
{ "name": "dogboarding.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dogeboy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "draemar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon00.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon53.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon57.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon61.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon63.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon67.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon70.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon75.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon80.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon81.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon85.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon87.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "drcp.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dressingmaternity.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "droidchart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "drthalhammer.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ds915.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dumb-laws.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dwilawyer.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "e7180.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eichinger-stelzl.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "eismaschine-vergleich.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "electrolivefest.spb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75502,22 +73756,6 @@
{ "name": "get-quick-bits-fast-2018.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gielectrical.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "goeikan.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug78.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gpfitness.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gqyyingshi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gqyyy.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75553,7 +73791,6 @@
{ "name": "infotelecharge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ingestion.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "injurylawyer.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "innotab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "innovacoachgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "inoio.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "insanelyelegant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75565,7 +73802,6 @@
{ "name": "javiscoffee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jerome.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jewelers.expert", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "jiangzhuyun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jiji.co.ke", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jijistatic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jiu99shipin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75574,158 +73810,33 @@
{ "name": "juweliervanwillegen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "k81.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kaanhaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi005.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "karodos.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kashsports.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kathy.lgbt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kawaii.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kayit.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb0101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb0202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb03.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb0404.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb05.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb059.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb0707.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb0909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb091.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb096.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb1313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb2121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb2323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb2626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb3030.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb3232.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb367.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb372.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb3737.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb3838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4040.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb415.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb4545.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb458.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4646.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4783.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb481.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4949.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb514.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb545.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5454.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5648.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5757.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb5959.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb6060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb659.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb709.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb7171.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb750.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb756.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb7575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb7979.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8181.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8383.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb840.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8484.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8803.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb881.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8810.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8813.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8817.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8831.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8841.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8846.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb885.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8855.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb886119.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8871.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8872.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb888508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb8892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md14.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb9191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb9494.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb952.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb957.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb9595.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kbjri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kidonng.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kieskundig.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kimkhisaigon.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75736,10 +73847,6 @@
{ "name": "kokosnusswasser.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kreditkoll.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "krumpf.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks168158.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks181.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks208.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ksvip07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kubabrussel.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kyotokitsune.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lacuerba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75756,23 +73863,10 @@
{ "name": "lohvinau.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lolcloud.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lolio.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long-6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long0310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long0316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long0317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long0318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long186.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8021.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8026.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8040.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8076.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8078.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long88.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lotc.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lts-tec.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lulua.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lyness.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "m271809.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "magebrawl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "majormedicalinsurance.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "malond.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75802,7 +73896,6 @@
{ "name": "moosikapp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "moraffpritchard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mundosuiri.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mygg32235.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mynaturalmood.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mysteriesandmargaritasblogspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nachrichten-heute.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75837,7 +73930,6 @@
{ "name": "plaintextpledge.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "plaintextpledge.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pmi.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "premrev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "productliabilityinsurance.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "proeski.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "proseo4u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75846,11 +73938,9 @@
{ "name": "providential.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "puteulanus.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "raqoo.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ratedever.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "re-crawl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "reindersfoodfashion.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "richieheijmans.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "rixcloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "robertnankervis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "rottamazioni.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "roughtime.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75944,15 +74034,12 @@
{ "name": "webmail.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "weissdorntee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wermuttee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wf336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "whojoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "willi-roth-holzbau.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "williejackson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wism.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "workersshop.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "workthings.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wtprecife.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wxxcxd88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xinetwork.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xlyingyuan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn---35-6cdk1dnenygj.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -75975,66 +74062,15 @@
{ "name": "yourkrabivilla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yporti.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yuzu-tee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z66.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8023.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8031.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8056.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8059.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8067.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8075.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8078.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8083.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8087.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8089.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8093.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8095.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8097.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8099.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8106.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8109.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8120.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8122.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8125.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8130.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8132.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8133.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8137.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8138.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8155.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8162.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8170.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8182.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8195.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8196.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8199.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8200.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8207.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8208.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8209.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8210.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8212.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8215.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8217.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8225.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8821.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8865.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8905.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8906.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8922.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76042,12 +74078,7 @@
{ "name": "z8929.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zaffke.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zakonu.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd0808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd1616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd1717.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd203.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd205.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76070,7 +74101,6 @@
{ "name": "zd267.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd270.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd273.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd275.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd276.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd279.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76092,123 +74122,48 @@
{ "name": "zd3232.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd3939.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd4747.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd4848.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd5252.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6893.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd7575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8836.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8858.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd8878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd8898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhis.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhou28d88vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhuktrans.msk.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zigarn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zinniazorgverlening.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ziqijiang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zitronengras-tee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl-19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl-29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl-89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl016.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl0202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl026.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl031.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl056.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl071.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl072.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl073.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl076.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl0909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl1010.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl1212.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl1616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl2020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2424.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2525.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2929.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl3737.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl3838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl6475.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl6868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl7171.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl738.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl760.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl7979.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8181.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8484.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl850.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl8686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl8824.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl8862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8870.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8897.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl9191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl9292.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl969.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl9898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zlhgc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zlhuodong.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zltymacau.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "00004048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "000a1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "000a2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76286,22 +74241,15 @@
{ "name": "068663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "071552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "0737399.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "0768ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "078663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "083832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "084552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "085851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "093113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1-345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1003365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "100pudov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "100visits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "107996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "10n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1112365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1116365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1119365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "111b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1120344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1188bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76367,68 +74315,19 @@
{ "name": "1517883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1517886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1517889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "153kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "154552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "154922.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "16-qw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "16qw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "16region.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "178btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1831365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1832365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1834365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1837365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "188kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "1981365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990gg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990hh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "19990kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990oo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990rr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990uu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "19990zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1baks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1cprosto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1hfree.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1malaysian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "2-678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2012review.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2013review.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2015review.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76459,13 +74358,8 @@
{ "name": "2033x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2033y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2033z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "205jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "207ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "207vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "209vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "20n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2155hg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "216vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "22245j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "22256j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "22267j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76475,8 +74369,6 @@
{ "name": "2288bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "22b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "23454048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "23732.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "240vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "241552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "242552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "246773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76541,13 +74433,9 @@
{ "name": "2evip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2kvn.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2lovebirdsblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3-789.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3-800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3006789.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "30n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3165365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3175365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "317811111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "31782222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "317822222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76596,16 +74484,9 @@
{ "name": "33b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "33n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "348663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "350vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "351365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3539783.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3557365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3558365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3559365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "360365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "362590.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3650607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3658200.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36588801.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365888012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "36588812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76629,8 +74510,6 @@
{ "name": "365888dddd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3659801.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3659867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3659868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3659869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3659980.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365eib.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76662,12 +74541,9 @@
{ "name": "365y9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365y99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365ypw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "365zg.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365zg.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365zzz.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "369-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "37987.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3800611.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "380111000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "380111111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "380111222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76750,68 +74626,13 @@
{ "name": "3970700.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3970800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3970900.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970gg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970hh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970oo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970pp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970qq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970rr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970uu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "39news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3danimation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3djava.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3w-solutions.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4001365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4002365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "4003365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "4004365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "4005365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4025360.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4025361.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4025362.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76900,12 +74721,10 @@
{ "name": "4345.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "436773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "438663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "443658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "444b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4455bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "44b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "451365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "456-3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "45674048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "458663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "476773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76916,8 +74735,6 @@
{ "name": "4dillusion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4evip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4tgw34.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "5-600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "5-890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "500wordessay.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5017503.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76957,7 +74774,6 @@
{ "name": "52002x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "52002y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "520xpjxpj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "538vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "55554048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "555b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5566bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76966,7 +74782,6 @@
{ "name": "55n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "56784048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5898657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "593-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "59759vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "59759z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5981168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77024,20 +74839,13 @@
{ "name": "598877.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "59rus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5ilg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "6-600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "6-800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "605vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "60n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "611121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "611125.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "611165.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "611195.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "616675.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "616btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "621nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "621vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "628vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "635-488.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "635-588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "635-788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77108,7 +74916,6 @@
{ "name": "6396hhh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6396iii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6396jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "6520265.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "657843.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "66321aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "66321bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77161,7 +74968,6 @@
{ "name": "6669255.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "666999bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "666b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "666btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6671365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6672365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6673365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77179,7 +74985,6 @@
{ "name": "678678365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "67894048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "67y7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "681vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "68522.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "68522c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "68522k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77190,17 +74995,13 @@
{ "name": "68622b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "6863070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "68722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "7-890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "70365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "70n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "7111365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "71365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "721aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "733575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "73365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "74365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "753-9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "75365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "755204.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "755243.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77221,7 +75022,6 @@
{ "name": "77018ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "77774048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "77789j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "777btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7788bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "77b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "78365aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77243,7 +75043,6 @@
{ "name": "792ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "793ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "80365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "805vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "80651a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "80n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "811121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77301,12 +75100,10 @@
{ "name": "842365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "846773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "848663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "852-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8521.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8521.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8602012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8602013.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "860vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "861365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "861365.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "861365a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77362,35 +75159,7 @@
{ "name": "878365mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "878365nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "878989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8810ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8836ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8855650.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8855950.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8866012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "88740n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88740z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8881234j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8882345j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "888234j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77410,117 +75179,34 @@
{ "name": "8me.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9009019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "906vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "908vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "90920.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "90n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9110365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9111365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918-siteinfo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918101.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918aait.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918aav.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918aff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918agr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918arr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918baa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bbd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bbg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bdd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bip.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bis.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918bit.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bkk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918bzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918cce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ccq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ccs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ccu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ccv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ccw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ccz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cdd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cgg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cmm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918crr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918css.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ctt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cvv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918cxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dbb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dcc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dde.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ddf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ddj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ddo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ddp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ddq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ddr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ddw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ddx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dkk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918dpp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ebb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ecc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918edd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eef.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918een.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eeq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ees.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eew.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ejj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918emm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918epp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918err.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918euu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918fdd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918fee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ffa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ffb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ffc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ffd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ffe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ffh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918ffn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918hi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918hw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918iwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ji.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918jt.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918jwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918lwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918mh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918mo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918mz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918mzoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918pt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918qg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918qi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918rs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918rt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918sj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "918ze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d91.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "940365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "946773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "953-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "956jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "96002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "961705.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "96678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77570,7 +75256,6 @@
{ "name": "a6695.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aa4888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aa7666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "aa793.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "aadv.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "abanilla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "abc-solutions.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77613,20 +75298,6 @@
{ "name": "agarioforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agenux.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agiosthomas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks135.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks158.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks966.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks998.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agrargruppe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agroplas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77754,22 +75425,9 @@
{ "name": "b03aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b03bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b03cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b0607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b0708.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b1111.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b3177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b31aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b31bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b31cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b31dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b31ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b31ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b3333.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b3390.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b3391.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b3392.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b33app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b36510.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b36512.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b36513.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77783,12 +75441,6 @@
{ "name": "b365h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b365k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b538.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5706.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5707.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5708.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b5709.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b57bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b57cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b58365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b58app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b58appb58app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77803,39 +75455,9 @@
{ "name": "b5908.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b5909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b5910.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62103.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62104.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b62g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b62h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6701.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6702.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6703.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6704.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6705.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b6710.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b6720.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6730.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6740.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b6750.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b67771.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b67772.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b67773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b67774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b67775.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b68.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b7306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b73app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77843,15 +75465,6 @@
{ "name": "b73dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b73ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b73ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b750.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7501.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7502.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7503.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7507.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b7509.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b83.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b830.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b83aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77865,7 +75478,6 @@
{ "name": "b83ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b83jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b83kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "b8831.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b88aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b88cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "b88dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77904,8 +75516,6 @@
{ "name": "bazar.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bb057.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bb087.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bb211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bb321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bb882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "be4lead.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "beachpoint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -77921,7 +75531,6 @@
{ "name": "benazir-reaction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "benetcasablancas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "berksnetworking.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bernudrebes.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "best-book.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestboot.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bestechgadgets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78000,7 +75609,6 @@
{ "name": "betaa6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "betaa8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "betaa9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "betb33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "betb73.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "betxx1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "betxx2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78073,42 +75681,27 @@
{ "name": "bt3655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bt3657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bt3658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bta22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "bta88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bte365app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bteapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt0101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt11.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt175.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt187.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt216.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt221.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt222g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt2323a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt238.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt2525.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt273g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt2929a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt494g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt583g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt6363a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt6868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt690g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt7272a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt7878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt830g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt8787a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt888g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt889g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btt918958.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt9494.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btta16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btta26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "bttp7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78213,7 +75806,6 @@
{ "name": "codesgroup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "coeurdesushi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "coginti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "colchonminicuna.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "colley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "comeoneileen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "comlipa.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78271,7 +75863,6 @@
{ "name": "d-soft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d365.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d588.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "daemon-hentai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dahobo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78329,16 +75920,6 @@
{ "name": "devcore.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "devildog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "devils-co.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5103.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5104.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "df5ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dfc52.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dieta-figura.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "differentgirleveryday.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78384,7 +75965,6 @@
{ "name": "doubleness.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "downloadfiles.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "doxycyclineprices.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dranik.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dream-pools.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dreamcrack.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78428,11 +76008,6 @@
{ "name": "ee396.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ee397.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ee575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ee631.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ee632.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ee651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ee652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ee653.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ee735.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ee736.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ee951.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78610,10 +76185,6 @@
{ "name": "goquiqstatus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gorodrostov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gosaavd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "goug7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gougeaway.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gpswebsoft.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "gpz500s.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78785,14 +76356,6 @@
{ "name": "j51365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "j5563.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "j5573.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j70111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j70222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j70333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j70444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j7051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j7052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j7053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "j70555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "j8846.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "j9943.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jackrussel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78844,13 +76407,6 @@
{ "name": "kabachok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kafel-ufa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kai-ruecker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi007.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi998.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kak-pohudet-legko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kalashnikov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kaliningrad.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78858,70 +76414,10 @@
{ "name": "kandhamal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "karantholdings.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "karapuzz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kashbet666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "katalog-serverov.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "katalog-tovarov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kathleendeisher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb021.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb0303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb035.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb06.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb07.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb283.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb3131.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb3434.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4141.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4242.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb4747.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5252.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb5pt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb673.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb702.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb7070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb7474.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kb7676.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb786.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb864.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8811.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb8898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88dc29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb88md30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb930.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb963.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb965.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kb975.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kbhgi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kbty0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kbxlu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kegelschiene.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kemerovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "keramed.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -78955,154 +76451,16 @@
{ "name": "kravmagaangers.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kresimir-blazevic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kryptologie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks-19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks-39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks-49.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks-79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks01.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks016.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks02.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks023.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0404.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks05.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks0566.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks06.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks0668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks07.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0718.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0758.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0766.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0768.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0770.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0778.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks08.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks080.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks082.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks083.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0855.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks087.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0877.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks09.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0977.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0990.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks0996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks1010.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks143.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks156.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks182.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks196.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks209.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks210.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks213.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks214.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks257.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks281.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks285.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks286.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks288.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks296.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks298.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks299.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks299.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks338.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks3737.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks380.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks381.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks383.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks385.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks386.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks388.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks3939.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks4040.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks4242.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5014.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks516.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks541.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks549.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks556.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks556.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks596.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks597.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks600.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks602.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks641.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6690.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks687.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks69.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks692.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks7373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks79.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8186.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8383.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks88.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks883.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8884.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks89.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks9.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks915.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks9393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks960.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks9888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks99.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks996.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kst-service.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ksvip02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ksvip04.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ksvip09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kswinwin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ktuluweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kukeri-karlovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kupislivki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79130,7 +76488,6 @@
{ "name": "lesbianlovers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "letaman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "letdownloads.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "leu365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lg.gz.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "li.gz.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "liberty-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79157,9 +76514,7 @@
{ "name": "locksmithservice-humble.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "locksmithssanmarcostx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "locksmithstaffordtx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "locomen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "london-mafia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8079.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lorimullins.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lorisfnotary.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loveismystyle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79173,7 +76528,6 @@
{ "name": "luxhome.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lyna.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "m30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "m365m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "macon.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "madeira.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "madgeandpaul.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79230,11 +76584,8 @@
{ "name": "mayito.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mayre-idol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mazavto.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mbetb33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mbetb73.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mbetbtt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mbte365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "mbtt365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "me-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "med-line.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "medalofvalor.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79345,7 +76696,6 @@
{ "name": "naturelk.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nay.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "nazarenoviso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "nba-officecenter.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "neboley.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "neofilia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "neoverso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79426,7 +76776,6 @@
{ "name": "omretreats.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "one-news.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "onlineautodealered.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "onlinecasinolisboa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "onurerhan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ooo-santal.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "operanavigation.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79473,7 +76822,6 @@
{ "name": "p91ag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "p91ah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "p91aj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "p9cq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "paintbrush.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pakistan24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pamc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79578,7 +76926,6 @@
{ "name": "pj21y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pj21z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pjshop.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pkq5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "planeta-remontika.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "playingvideojuegos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pleasanton-daycare-childcare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79600,7 +76947,6 @@
{ "name": "potgrowersunion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "potkani.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pozharnyi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "pp234.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pradeek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "praiss.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "pravoslavie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79658,7 +77004,6 @@
{ "name": "razgon.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "razvlekuha.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "razvlekuhablog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "rdviitd.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "reallycooljobs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "realpaella.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "recherchegruppe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79734,7 +77079,6 @@
{ "name": "salvadorinfantil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sambuchanan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "samiratv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "samvui.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sandwichcouncil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sanfranciscopersonalinjuryattorney.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "sangen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79912,7 +77256,6 @@
{ "name": "surveer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "suseki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "swissurf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "sy635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "t30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "t8803.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "t8805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80060,7 +77403,6 @@
{ "name": "tribistovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tricountyathome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "tridentmedia.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "trilogyforce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "triplicate.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "troop89medfield.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "trotter.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80169,7 +77511,6 @@
{ "name": "utahrealestatepodcast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "utbosbeekhuuske.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "utevai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "uu378.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "uzbekkizlari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "uzbektumblers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "uzhas-uzhasny.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80233,9 +77574,6 @@
{ "name": "varjo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vasheradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vatav.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vbm11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vbm22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vbm33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vegetarier-sind-moerder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "veggies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vektlofting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80277,24 +77615,14 @@
{ "name": "vns377h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns377i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns377j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns5353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns5656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns5757.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns5858.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns5959.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns6262.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns68611.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns68655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns68669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns6868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns6868.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vns68722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vns6969.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vnsr112233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "voetbalclubinfo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "volosnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80303,23 +77631,11 @@
{ "name": "vrostove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vs106.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vs107.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs1177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs1717.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs2277.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs2828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vs303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vs313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vs601.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vs603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs6060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vs680.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs7711.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs8899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs9911.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vs9977.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vsaratove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vsem-privet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vstavropole.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80360,7 +77676,6 @@
{ "name": "wajs1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wajs2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wangshengze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "wapbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wapnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "wash-house.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "water-polo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80467,64 +77782,9 @@
{ "name": "x77qq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "x77tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "x77ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8100000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8111111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8122222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8133333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8144444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8155555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8166666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8177777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8188888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x8199999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81gg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81hh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81oo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81pp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81qq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81rr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81uu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x81zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "x9015.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "x9701.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "x98t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x98z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x993.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "x998.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xab123.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xab199.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xab4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80542,19 +77802,7 @@
{ "name": "xarangallomangallo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xenical.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xerdeso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7aaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7bbb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7ccc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7ddd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xh7eee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7fff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7ggg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7hhh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7iii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xh7xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xloud.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xmyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--4brt03c.xn--io0a7i", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80563,17 +77811,11 @@
{ "name": "xn--bcherbestseller-zvb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--eebao6b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--schcke-yxa.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpj000444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpj000555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpj000666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xpj567088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xpj567288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xpj567388.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xpj567888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpj678678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xpjai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpjbeting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpjcs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xucha.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xx6396.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "y09a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80610,7 +77852,6 @@
{ "name": "y3654.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "y3656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "y36577.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "y6180.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "y68ah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "y68am.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "y68bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80757,8 +77998,6 @@
{ "name": "yourmagicstory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yuandan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yukoslibrary.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "yy153.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "yy393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yy6396.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zackiarfan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80792,7 +78031,6 @@
{ "name": "ziroux.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zizibook.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl8585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8873.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zloybot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "znanje.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "znich.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80819,11 +78057,6 @@
{ "name": "052ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "05am8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1080.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "181lilai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "188188688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "188lilai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "188wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "198wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1lc11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1lc22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "1lc55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80839,25 +78072,15 @@
{ "name": "2025j95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2026j95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2226321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "228wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "230110.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "233wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "2346321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "253205.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "2earn-online.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "308wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "318wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3336321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "333wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365888456.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365securitymg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "365yapan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "369028.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "369038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "380wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "3963dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "3970.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "400wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "4566321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5017501.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5017502.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80867,14 +78090,11 @@
{ "name": "5017602.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5017603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5017604.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "518wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "52062z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "535wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5536z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5539z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5556321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5676321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "586540.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5981688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "5goglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "611136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -80919,49 +78139,20 @@
{ "name": "690918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "690928.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "700wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "707wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "757wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7666321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7776321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7g31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "7win.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "800139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8122d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8191d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8192d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8200d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8220d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8238d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8666321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "868wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8809d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8852d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8859d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "888xpjxpj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "88yabo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "8900d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "898wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "8win.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "900823.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "907vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918duu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918eeg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918exx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918izoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918lzoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918mwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "918nwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d75.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d76.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d78.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d81.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "91d82.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "91d92.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "939wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "946321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9499060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9499066.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81015,8 +78206,6 @@
{ "name": "9499yyyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9499zzzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "95am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "988am8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "998wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k239.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81038,9 +78227,7 @@
{ "name": "9k399.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k566.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k576.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k578.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k628.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "9k638.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k687.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k827.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "9k832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81069,40 +78256,6 @@
{ "name": "africanhosting.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agaveandpine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agks02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks32.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks36.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks38.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks46.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks49.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks52.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks53.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks56.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks57.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks60.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks61.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks69.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks71.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks72.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks75.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks80.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks82.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks83.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks85.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks87.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks90.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks92.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks93.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "agks97.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agrodronechile.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agweili.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "agzlapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81129,16 +78282,12 @@
{ "name": "alternatiwa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "alushta-vostorg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "alwayshowher.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "am2288m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "am5188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "am615.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "am8136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "am8833.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "am8883.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "amandahamilton.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "americanunicornparty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "amm6610.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "amoxil.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "amputated.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "anabolickdieta.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81277,11 +78426,6 @@
{ "name": "bssolvfagen-pre-storeswa-wap.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btc-alpha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "btc-doge.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt128.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt229.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt230.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "btt789g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "buddy-acceptance-banking-api.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "businesspartner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "busphotos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81386,15 +78530,6 @@
{ "name": "czprothz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d-vision-web.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "d88-livechat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d882.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d885.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d886.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d889.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88agqj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md04.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d88md13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "d898.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dagrs.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dakinecoupons.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "daniel-leblanc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81417,7 +78552,6 @@
{ "name": "denkmalsetzung.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "departmentofdefense.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "desish.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "despertartransforma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "deti-vse.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "devopsish.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "diebetriebsraete.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81439,24 +78573,6 @@
{ "name": "download-knigi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "doxepin1.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dozor.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon62.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon71.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon72.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon91.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon92.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon93.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "dragon96.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "drogariasantoantonio.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "dukeandduchessdrivingschool.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "durin-art.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81502,7 +78618,6 @@
{ "name": "eviction.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "evil-empire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "evsinemasistemleri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "expeditions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "f8003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "f8007.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "familleshilton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81543,7 +78658,6 @@
{ "name": "fredhook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "freecookies.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "freelancerinc.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "freelanceunleashed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "freundinnenausflug.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "frode.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "fulige.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81695,7 +78809,6 @@
{ "name": "jwimps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "jysk-kornteknik.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kadvi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "kaishi77.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kalamos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kaliboairport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kamildrozd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81751,38 +78864,12 @@
{ "name": "ks06.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks17.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks19.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2251.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2298.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2375.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks2652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks35.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks3533.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks410.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5525.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5531.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5532.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks56.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks5822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6872.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks6875.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8112.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8128.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8129.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8135.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8152.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8176.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks82.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks82.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8218.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8266.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8278.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks8281.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks85.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ks87.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks96.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ks97.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "kudinilam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81831,13 +78918,9 @@
{ "name": "lilai18.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lilai2211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lilai3366.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lilai365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lilai520.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lilai634.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lilai6677.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lilai777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lilai8866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "lilai9898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lilai9966.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "limstash.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lince-bonares.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -81863,15 +78946,11 @@
{ "name": "llgj888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "llgw8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "llw0x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "llw2h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "localtownhouses.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "logicdream.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lojadkstore.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lomayko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lonavla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long0311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8032.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "long8059.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "loomis.center", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "losaucas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "lossaicos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82019,7 +79098,6 @@
{ "name": "moyideal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mpgu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mrston.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ms295.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mtcpuntosalud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "muchotrolley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "mudasobwa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82435,7 +79513,6 @@
{ "name": "savemylicence.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "saveusfromavril.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "savin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "sc019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "scandalindo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "scfpensante.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "schastie.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82529,8 +79606,6 @@
{ "name": "srochnozaim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "srochnyj-zajm.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ss-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ss09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ss9288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stajka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stalker-eyes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "stangeland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82743,11 +79818,8 @@
{ "name": "villalmanzo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vincura.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "viphackers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "viplilai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "viporiflame.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vippclub.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vipw6600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "vipw6603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "vipw6608.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "viraljobs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "viraloffer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82774,50 +79846,24 @@
{ "name": "w-ws.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w0102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w0115.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w0118.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w0138.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w045w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w1010w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w1515w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w158w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w1717w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w233w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w2929w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w3330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w4141w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w556w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w5858w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w61516.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w61518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w61616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6363w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w6603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w6612.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66133.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66136.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6631.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w66655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6671.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6673.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w66828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6684.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w668686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w668866.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w668899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w668989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w66919.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w66hao.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6803.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w6808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w682w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w6863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w6880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w692w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w696w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w7355.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "w7474w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w8093.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w8094.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "w8605.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82913,9 +79959,6 @@
{ "name": "xn--uasacrilicas-9gb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xn--v4q.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xpa.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpj090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpj100.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "xpj90.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xtravans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xurl.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "xxxoopz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82935,69 +79978,8 @@
{ "name": "yeti.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yinduyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "ym063.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ym069.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ym181.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ym2121g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ym2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ym966.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "ymm234.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yourloan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "yura.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8025.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8029.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8039.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8057.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8061.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8065.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8069.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8071.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8072.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8073.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8077.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8091.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8092.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8119.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8127.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8129.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8150.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8158.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8160.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8165.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8167.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8172.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8173.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8175.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8176.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8178.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8179.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8187.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8190.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8192.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8198.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8201.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8203.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8205.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8206.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8213.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8218.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8219.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8230.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8231.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8251.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8817.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8875.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "z8879.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "z8918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zaimdengi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zaimexpress.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -83010,15 +79992,6 @@
{ "name": "zaracraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zarbis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zaympodzalog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd1313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6879.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd6899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zd7474.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zd9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zeanweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zentrumfuerchemie.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -83028,17 +80001,7 @@
{ "name": "zhestokiemechtyi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zhurnalyu.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zinchenko.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl200.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl2121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl6060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zl7070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8813.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8874.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zl8891.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zlatan-ibrahimovic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zlotykameleon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "znakomim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -83051,13 +80014,3007 @@
{ "name": "zoloftprice.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zolushka-1950.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zooforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
- { "name": "zosia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zovirax-cream.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zrinski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zrs-meissen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zuitaotu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zwergenfreiheit.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
{ "name": "zxfiles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "030ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "035ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "080261.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1000wordsevents.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "166jk.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1698k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "192ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "197jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "198jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "208wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "225485.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "2gether.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "301355.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "30365.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178ppp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178qqq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178rrr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178ttt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178uuu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178vvv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178www.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178xxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178yyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3178zzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3344981.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3344982.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3344983.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3344986.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3358m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "350533.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3518k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "360videoshare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "380805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "390933.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "39708888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970abc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970bc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970ccc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970fa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970go.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970ku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970ok.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970win.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970yes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3970ylc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3blazing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3dprinterwiki.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3dprintinggear.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3dreactions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3k188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3k288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3k788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3k878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3k988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "406811.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "406833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "437844.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "459022.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "463855.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47788z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "487511.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "487522.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "487866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "492977.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "497773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "517jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52067.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "529kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "541651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "55558744.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56564z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "57574z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "581kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "5889k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "589ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "595ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "606722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "608885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "619kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "633663.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "633663.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "63gaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "652kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6556z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "659ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "661326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6619k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6685m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6689m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "670633.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6u55ooxpo38mnikkxqvbmwfwauiiv35bsmm-2yj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "775018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "77778744.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81818z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "827774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278a.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278b.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278c.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278e.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278f.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278g.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278h.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278i.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8278j.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "847773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8744z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "89386l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8938885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "897774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "917jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "927774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "937774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "9499bbbb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "998wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "99998744.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "a899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "achieveinternet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "activeaerogels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "activespaceautomation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "activespacetech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "adamtatusko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ag8819-livechat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ai-cuisine.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "akash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aktive-arbeitslose.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alentadoras.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alessandrobasi.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alyanak.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "andrewisidoro.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "angelspabeauty.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "antifa.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "apitodemestre.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "appbooks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "arouparia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "assis.partners", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "astrong.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "audiomaze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "auf-nach-mallorca.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "autoccaz.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "automuovifix.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "avocats-fiscal.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "awaygroundguide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aymerick-dupouey.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ayudacloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ayudalabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ayudapreview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "b899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "b9618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bankheadvegetables.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bazar-24.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "behemot.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "belroyale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bestgearlist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blackteam.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blacktownbuildingsupplies.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blessedgeeks.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blessedgeeks.social", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blm69.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blonde.style", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bluebie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "boese.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bolsashidrosolubles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bongoo.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "brandingcoapps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bride-forever.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "briefkasten-welt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "btcbenthuizen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bugteam.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "burmesecats.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bwin58.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "c899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cannacun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cannagoals.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cateringvanhetland.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cc8833.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cdmdisinfestazioni.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "civmob.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cjsounds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "clientesendemanda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "coevostudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cokomi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "comprauncelular.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "connectionstrings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "conocedordigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "copyrightcoinsnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "crew.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cryoblaster.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "crystalroad.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dafe2021.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dajiale.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "damaskena.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "daretogain.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "darklang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dashabi.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dashabi.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dealbx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dealosa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "decorarmicasa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "defesa.gov.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "degeeks.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "demadryn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "denince.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "der-rohrstock.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dermo-concept.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "df63.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "digitalch.ng", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "digitalchurch.ng", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "digitaldaily.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "digitalpiloten.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dildosconsoladores.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "djl63.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "djl63001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dogandoganay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "domainstaff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dominictaylor.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "domsoty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dondiabolo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dracula.city", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "druzya.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "duoyin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "e899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "easywio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ebenda.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "echosnature.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "echoteam.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "efoood.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "efzh2so1cuskp9j3evlqa1m68id-m9p1tzb05zo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enjin.zone", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "envoker.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "epidastudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "erisys.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "erkenntniswen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eson.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "essextimbercraft.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "estahl.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eurowaage.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "evntage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exechip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "extinctionrebellion.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "f899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fapflix.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "feltons.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "finext.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fishme.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "flokkr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "focanocliente.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fourxone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "freelance-webdesigner.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "freewerkt.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "friend.tours", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "from.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fuuko.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gadgets-cars.com.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "garbott.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gerinet.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ghana.bz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "giac.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gieschke.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gnmlive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gqyys.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gregmarziomedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gse.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gt-himmel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "guyfletcher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gyaou-ek1njb79xkfsyxemzmauhkvxszyua7v2t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hackdown.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hallhireforevents.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hanteln-fitness.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "heartycorp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hemp.je", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "henkrensing.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hj556.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hlg66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hlx86.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hn122.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "houby-studio.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "housingneedz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hsimrall.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "htcvina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hx56.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hx678.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "i86666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ijazjewelers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "imcassociation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "impresadipulizieantonella.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "indexcesmad.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "indianvisa.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "indoorpaintball.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "infrarot-thermometer.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "inge.ec", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iniby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "intranetcrowd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "introes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iplist.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ippawards.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ipvbook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "irxoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "itqh0pk67wngbob5suh-c7glbmvtfa0dqhokufs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ivocopro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jdd888.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jinduoduo369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jinduoduo888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jmbmexico.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "js80651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jsh318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jsh517.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jsh799.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jsh916.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jsh917.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jsh918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jss6868.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "julesroovers.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "juraciimoveis.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jw66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kajabutik.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kamagraerektion.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb82.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kf2000.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kocka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kocka.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kp0808.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kpaycoin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6813.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6821.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8127.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kuadey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lakeandriverrestoration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lavabit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lb366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "learnsait2.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ledcpu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lgygf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "linestep.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lirico.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "livingword.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lkdpp.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lore-seeker.cards", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "loteamentoabertopiracicaba.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lowcostvehicleinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ls-mapping-team.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lunarflake.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "luv-scent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "luvscent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "m-team.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "man-stuff.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "maneql.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "maneql.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marcus.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "martin-renze.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "masarn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mbadika.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mdihi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "medstatix.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "meilleursavis.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "meugamer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "miasonne.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "michaeljacksonforsale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "minecraft.gen.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "miravelli.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mismart.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mitfx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "motherwell.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mserve.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mydevops.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "n3domains.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nastycomics.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "neriumrx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "newsnew2020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nimanranch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "obistarltd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ohome.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ojk.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "olivia-smith.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ontstoppingsdienst123.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "open.net.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oplatki-charistia.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ops.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "opticaltest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "otixz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "otooil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ottxz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "otzyvy2.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ovodev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333a.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333b.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333c.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333e.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333f.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333g.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333h.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333i.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p333j.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pagamentosdigitais.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pandagifts.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "panezasociados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paradordelgitano.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "parsuv.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "payment.ac.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pepime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "personskadeadvokater.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pinksec.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "playocean.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "portafoliodenegocios.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "prdelka.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pricesim.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "proactivo.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "proastec.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "prodwa.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "promods.web.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "proyectosx.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "qbtechs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "qdon.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "qgr.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "queryquinton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "quhyu.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "r85555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ramsaver.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "raphaelschmid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "realgogo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rebelbranding.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "renyiyou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "republicghana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "revisores.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rggraphics.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rickycbenitez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rights.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rinsepimp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "risounokareshi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "robotenmihogar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rod.run", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rossilber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "roy-buehring.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rps-auto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rubblerock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s550.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s551.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s552.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s553.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s554.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s556.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s557.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s558.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s559.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sa68.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sam66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sand66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sanderstech.solutions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sandr0.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sanierungskonzept.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "scanwords.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sda.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "searx.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sefinancial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seguimosganando.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seicochimica.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shoparbonne.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "simplydesk.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smartmones.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smartpheromones.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smartsitio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "solyplaya.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "someog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "somosbrujas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "songdew.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sormeyli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "speedtemplate.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spielmit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spruijtparket.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "srilankan-hope-for-children.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stardawg.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "startlemusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stupidest.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stylusgroup.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "subven.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "supersandro.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "swgenetx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "swlabs.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sycca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "symplexia.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "systemausfall.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "t6370.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "t8003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "taguette.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "taguette.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "taguette.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "talsam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "teamacadia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "teamsuccess.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tech-professor.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "teldak.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thaihong.co.th", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theaustinsevenworkshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thepavilionbanbury.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theqjourney.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tholcomb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tielectric.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tiemcayxanh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tinycrm.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tld-list.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "toiletable.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tomoradexpert.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "topeducationhelp.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "trippen.travel", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tripsvia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tucocoon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "twitterdriver.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ty7788.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tyc009.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ufroo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ulli.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "umount.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "undeadpirates.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "unitedmatrix.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "universal-tutorial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "unlocktechs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "unternehmensbewertung.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "upgradedpoints.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "v800d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "valordotrabalho.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vandrielschoenen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vidady.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "villavaltava.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vintagecarparts.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vns89386.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vorsco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vserus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wd63.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "webdestiny.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "weddingwire.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "weliway.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "whymps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wlmhtrecoverycollege.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wort.lu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wpsermons.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xiaocg.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xlem.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--matua-n7a.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--s-0fa.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xolotto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xuehao.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xy366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yalcinkaya.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yashik.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yd169.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ydyy99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yhndnzj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yl366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yoba.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yobasystems.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yogadeux.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yooptopian.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yorkshiregardensheds.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yuce518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yugodi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yy366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yzh8.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8895.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8920.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8921.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zeroanarchy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zerobajt.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zeusec.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zixin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "053ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0x3bb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11335835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11445835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11555835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11665835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11775835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11885835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11995835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "20191r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "24hourlocksmithhoustontx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "24hourlocksmithspring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "282ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "30019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3311.com.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "375ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "377ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "378ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "492y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "4y4a-arts.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "516ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "535kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "536kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "551365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "552365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6365dx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6365lt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "6365yd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "80651c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8897d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "9ungnir.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "active247.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "adontenchambers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "afilio.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "airtable.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alles-nur-ge.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alonas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alonas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alonas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alxyjc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "angora.freesite.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "antispam.group", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "apometria.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aquaist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aquarden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aquarden.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "architecturequote.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "artesaniastonalaytlaquepaque.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ashtonwealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "avocad.studio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "b303.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "b81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "baufi24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bb168.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bea.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "beatz-anime.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "beticalia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bhat.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bibliology.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bigbendcoffeeroasters.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "biggerpicture.agency", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bodegasvirei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "brandfolder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "broadbandchoices.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "brols.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bruijns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bwin369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "byjamesrush.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "byteswave.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "caffeinatedengineers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "campmackinaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "canfazz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "caphefin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "carbonnel.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "castiana.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ceylavi.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chat36.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chawa.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cheapnhljerseys.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chemicalpharm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "christianr.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cjs8866.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "clnlboard.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "coachbakery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cod88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "codelyoko.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "comercialroxana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "comprarcl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "consultoresrey.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "coptel.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "coreup.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cornfestgiethoorn.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cpsurvey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "crucibleofworlds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cst188.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cyberforensics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88.cn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8846.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8855.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8877.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88agent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88f.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "damifph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "danielkeppler.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "decologisticsgh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dependablehvacrefrigeration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "devun.limited", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dhirendrayadav.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "diariorealidad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "distributednya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "djsanonimo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dk1818.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dnoid.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dogfriendly.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "downtownsuiteliving.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dpim.org.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "drjosebarrera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dronepilotgeorgia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ds168.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ds388.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dutkoteam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "e81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "earthava.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ebaby.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eboocker.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "echarlascartas.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "edstem.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "edusercontent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ehealthfest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "einquiz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eisenhowerlibrary.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elasticshift.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "emergency-federal-register.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "empoweren.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enerte.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "epicginger.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "epikomagazine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "escortsforu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "escortslittleblackbook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "estudiogarcia-rada.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "etny.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "etsservicios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "europa.jobs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exnoobstore.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eznetworks.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "f1318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "f1318.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "f8036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "f81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fbe.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fc8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fc8882.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ff18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fh169.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "finotax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "florian-lefevre.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fmcs.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fmeventcentre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "freshair.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "funerare-cazacu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fvap.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "g81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "galerialamanai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "garchi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gcdamp.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gkasper.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "glitzafricafashionweek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "goddg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "goldpetergood.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gooty.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "groupeatrium.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "grupoattia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gslaw.edu.gh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gtapg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "guilde-dissection.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gunstatus.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "h81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hackerone.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "haderecker.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "halls.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "haustierbedarf-shop24.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hipeople.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hohlhupe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hohlhupen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "homeandliving.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "homs.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hosting-tools.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "houstonlockout.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hugonote.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hugonote.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hugonote.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hugonote.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hxit.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "i81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "icetwister.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "idiot.trade", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ies911.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "illaadventure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "illinoiscaselaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "improv.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "indigartbeading.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "indigartbeading.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "injuryhotline.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "inmigracion-florida.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "instagraph.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "instawierszyki.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "internetloansdirect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iqskinclinics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "irgendeine.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "issaias.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "it-journal.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "its.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "j81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jacquesdedixmude.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jawo2008.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jazerxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jellyfloral.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jiayi.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jimmycarterlibrary.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "joljeugdstad.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "k81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "karakatoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kasperstad.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kassarsoap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "katcr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb15.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb86.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb96.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kf200.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "khojhealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kireilign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "klocast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kloclabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "knrt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "knrt.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kodomo.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "koflegend.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "krillz.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks36.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6807.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6817.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6825.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6827.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6830.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6831.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks70.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8126.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8895.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8915.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks91.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kuhnerts.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kupu.maori.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "l81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lakiernictwo.auto.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lars-kusch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lasvegasescortmagazine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "legalband.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "letao18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "likefluence.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lilysgrill.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "linkzyovh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmithdickinson-tx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lsbricks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "luissotodesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lykope.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "macnugget.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "madhyrecords.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mancrates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marco-burmeister.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marquesgroup.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnetforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "medundmed.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mehdimassage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "merakiclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "metakari.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mexicotopescorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "microsoftedgeinsider.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mitratech.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mjniessen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mkpdeepclean.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mlxysf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mokhan.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "monkatos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "monodejuegos.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mr-moulding-knives.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mralonas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mralonas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mralonas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mralonas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mrvnt.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "msha.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "muku-flooring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "munera.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mychamberlain.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myekon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myeriri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "n81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nativeonestop.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nbm.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nkp.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nksky.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "noobsrus.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "novacoaching.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nuverabusiness.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nuveratechtrends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "o-aconsult.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "o81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oaken.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "onelifenutrition.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "operrbilling.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "operrgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "osac.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "osagenation-nsn.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oxsec.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "p81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pacificautobody.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paravroum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "parkscandles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "passbolt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "passfindr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paul-sitarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pauld.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pauld.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paulsitarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paymongo.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pcjsercon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pepperandpartner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "petwatchersnj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pierreau.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "piloten.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pisf.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "playmytime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "podcrto.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "polarnova.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "porsi.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "portaltudoaver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "practicalhomes.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "premiovapozicovna.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "propertyfindercdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "propertyflare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "prosperandoemcasa.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "proudplus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "psitarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "psychotherapy-vienna.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "puppo.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "q81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "quadron.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "r81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "radioheaven.co.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rainbowflowers.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rainturtle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rawcbd.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rbuddenhagen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rebel.services", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "reby.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "reby.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "reby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "residentiallocksmithdallas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "resumeprime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "resumeprofessionalwriters.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ritualesyamarresdelamor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rivers.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rochcloud.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "romacoffee.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "royaloz.ma", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "saharacloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "samystic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "savorvip.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sebastian-kuhnert.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "secondmileservice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "securewebcomputing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sellmyphone.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seyrederiz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sh68.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shelfplanner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shiftsecurityleft.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shopmacher.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "simpleshirts.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sinalizeweb.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sit.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sjwheel.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sk33t.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sk33t.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sk33t.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sk33t.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sk33t.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "skyros.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "slite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sliteapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smartgrid.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sms-go.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "souspind.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanch.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanch.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanchelele.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanchelele.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanchelele.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanchelele.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spanchelele.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spiritualityrise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sqlwrapper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ssr.llc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "strandhaus-claassen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "strandhaus-hinter-der-duene.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "swrelay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "t5880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "t81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "temperandtantrum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "termbackti.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "terra-24.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thealonas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thealonas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thealonas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thealonas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thefuelcardpeople.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theoosmetalart.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theoutsiders.stream", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thriveafterabuse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "time.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tokitover.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tommyemo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "topappandroid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "topcanadianescorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tourx.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "trainingdigital.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "transdevbus.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "translationge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "traveltomachupichu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tspdrits.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "u81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ucmjlawyers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "un.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "unblocked.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "unionreports.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "upacores.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "urlaubstipps.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "uwe.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "uxtag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "v800g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "varlex.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vcm.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vetcard.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vetnet.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vettenburg.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "virite.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "virtuewisdomfund.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "voloskova.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "votemate.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vv1234.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w3n14izy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w3n14izy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w3n14izy.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w3n14izy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w4tec.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "waterheaterleaguecity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wealthsimple.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "webanyti.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "webdevinsider.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "webmarketing.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wedenth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "whitesuithacking.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "widgetmaker.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wireshocks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wolkenbauer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "worio.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wp-cloud.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wpabzar.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ws.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wx6688.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "x81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--strandhaus-hinter-der-dne-1wc.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xunleiyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89a.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89b.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89c.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89e.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89f.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89g.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89h.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89i.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89j.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "y89ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yay.cam", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yolocast.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yourpocketbook.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yspa.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8891.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8926.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zeilenwind.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zenideen.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zeta.hk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zgndh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zhendre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zhihe.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zormeloandassociates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zs6688.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zuenkov.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zz017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zz993.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0d999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "11assets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "168zz.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "173940.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1lc00.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1net.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "25percent.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "2jhb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "40666888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "500promocodes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "500promokodov.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "52062x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "556777.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "56011z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "633663.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "7782001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "9allery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "9thwonder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "acgqwq.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aeh5134.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "affordableinsurancenow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agenciacorujadesign.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "albatrosswear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "albert-yu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alejarod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "allaboutgreg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "allitcrm.sytes.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alonas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "andresrios.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "arenda247.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "arnaudardans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "authenticate.computer", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aviteng.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aviteng.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "axault.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "babyboutique.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bachmatt-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bachweid-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bastide-viens.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "belkys.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "berksarl.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bestcomputersecuritybooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "beyondboxgifts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bhthome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "biftin.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "binaries.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "biographywiki.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bithausen.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bkkf.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blautiefe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bllb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blm36.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blueskyinsure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bongminhtam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "broerict.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bu-dun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "burmakatze.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "buttonizer.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bwin18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cc8822.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chaturbate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chcuscojungle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chrismarker.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ck1020.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "copenhagenoptimization.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "coppidesentupidora.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "copyrightcoins.help", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "correotemporal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cou.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "creamyfox.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ctes.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8814.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8899.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88h.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "daily-exps.herokuapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "daimafengzi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "danielkanchev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dark-nova.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "definitely.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "denydarko.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "designartepublicidad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "df1nif.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dhde.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "diegocoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "district.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "domein-direct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dpellegrini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "drandrewarnold.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "droid101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "drweinrach.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "duijf.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dukers-baelemans.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dwood.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dxmpay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dyneco.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "earthsgoldmine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "easyeditcms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "echtgeld-casino.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "electricfenceboksburg.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "electricfenceroodepoort.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elo-rocket.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eltonpastilha.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "emotive.productions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "encontra-me.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enviroli.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enviroli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enviroli.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enviroli.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eristajanmutka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "esdacademy.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eseances.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "esehospitalsabanagrande.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eumr.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ews1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exegese.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "facturama.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "familie-witzik.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "festival-transform.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "festival-transform.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "feuerfestival.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fierykitchen.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "firstchoicefriseur.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fitnesskarate.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "flixstats.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "food4healthybones.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "frasesdodia.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "freakyaweso.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ftnpower.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fullreggaetonrd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gamegear.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gealot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "getinsuranceanywhere.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gliihc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "glk.partners", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "go-life.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gomega.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "goodsleep.pet", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "h4kl4b.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hainanstar.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "happylearning.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "harvestcookrepeat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hearty.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "herz-und-gemuet.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hex.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "heyboldface.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hinyari.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hizliwp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hj555.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hlg88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hlx66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "homeprivate.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hookshotdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "how-to-simply.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hx77.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hx789.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "icecodenew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "idn.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ieltslananhtruong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ihacker.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "img.ren", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "imranraza.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "in1000worten.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ingfreelancer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "initialization.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "intelmed.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "intensify.pictures", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "internetmusicexchange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iplaycraft.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ipoisk.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "irose.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jairbehr.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jangl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "je.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "johndeisher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jonathanphoto.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jpoirierlavoie.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jpvtutoriales.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jrcmo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jw77.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kalmykphilly.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kandoo.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kasiafricagroup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "keller-sports.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "khramtsov.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kirkae.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "knallfrosch.ddnss.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "knowpanamatours.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kp0809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kriskras99.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "langgasse-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lauralep.sy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lavaggista.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lb369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseo.repair", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.ltd", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.services", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localseorepair.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lucille-thomas.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lucky-frog.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "luxur.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "m81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "macappstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "macpress.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "macreosolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mani.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mantenimientosenjardineriaypiscinasveracruz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mantul.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "markusjochim.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnet.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnetforum.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnetforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnetforum.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnetforum.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnetforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "max-it.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mdcghana.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "meevo.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mein-domizil.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mekanika.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "metroplex.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mivm.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mjproduction.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "modderday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "moens.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nemhaisan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "netface.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "netfolio.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nix13.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "note64.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "notmyserver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nuva.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nxtgenbroadband.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nylasercenter.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "obu4alka.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oceanspraymiami.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oe2018.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oe2019.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "onlinekocunuz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "only.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ontourmarketing.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ontrio.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "opencpes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paradies-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pinnakl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pixelecommerce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pixelmedianetwork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "planetpowershell.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "platform161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "podlibre.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "portugal.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pousadaestreladapraia.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "precedencemedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "premiumhosting.com.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "previsora.gov.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pricena.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pro-co.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "promocodius.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "propiteer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "psychotherapie1220wien.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pubgbattleworld.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "punishment.institute", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "purple.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "qcbrna.qa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "r8100.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "r89999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "readifycloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "redeshoprural.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "reputatiedesigners.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rizarus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "robodeal.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rrvmz.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rwx.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sa88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sagnette.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sam88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sanketsu.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "scapdoors.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "scheinerhaus.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seaborn.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "securelogin.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seminariosvip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sesturizm.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sglynp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shannapeeples.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shanshushu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shidai88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "short.cm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shota-sekkotsuin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sisterjoeworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sleepet.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "small-panda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smithings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sportsdrobe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ssdpalermo.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "starb.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "startupstack.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "storedieu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stromkomfort.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "studio413.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sunpig.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sunpig.com.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sunpig.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sunpig.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tail.id.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tail.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tailwag.party", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "takeaimnow.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "techlines.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "teckgeekz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tempmail.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "texasholdemevents.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tfadictivo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thebuttongame.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "themusic.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theocg.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thomas-steel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tian123.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tian888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "toronto-escorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "toyopac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tranceattic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "travelerofcharleston.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tripasia.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tube8.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tube8.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "twobitbusker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tyc001.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "unifestal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "uppercap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vaisselle-nature.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vandijkmaatwerk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vch.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "venusbeautyproducts.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "verwimp.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "victorfiller.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vidadigitalecuador.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vnology.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wd36.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "webszolgaltatas.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wellsprung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wenjulebu.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wildandwonderfulketo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wils.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wintzenterprise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wormpress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wuyiwa.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xc9988.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xerbo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xiaojicdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xlunastore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--80ageukloel.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--skmotoroptimering-zzb.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xoommit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xy369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yap26.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yavin4.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yd163.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ydiversa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yellowhawk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yihouse.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yl369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yorkieloverdiy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yy369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z-cert.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z3u5.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8927.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8950.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zombmage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zoohaus.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "04d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "051ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "111plus.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "168fff.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "281ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3dlab.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "3pestki.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "620207.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "623kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "633kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "655ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "698kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8888yule8888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "889w889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "889w889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "88home9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "88wewin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "9kb.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aaapo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "afashion.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aigner-club.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aigner-club.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aignerimage.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "akmade.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "albstaedter-kids-cup.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alibaba-test.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "anonymoushackers.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "antyfake.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "arslonga.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aucospa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aumentada.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "av-systems.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "b889b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "backupassist.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bahrevaran.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "banananet.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "baokhangfood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bayltd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "beardsome.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "becleverwithyourcash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "belebey.city", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "belplombier.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "benu.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bepayd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bestedeal.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "betterselfbetterworld.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bicromoestudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bionovanaturalpools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "biznesinfo.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bjl688.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blackmagickwitch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bogurl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bojiu99.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bonsi.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "borderless360.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bridgetroll.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "brightpool-markets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "broodingblogger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bviphotovideo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "carlosmfalves.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "catalogobiblioteca.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cdigitale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "censys.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chathund.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "checkrent.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "clinicaarques.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cocbaoan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "comparesolarquote.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "conciencia.fit", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "connect-more.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "conradboraboranuiresort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "countdowntrader.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cp015.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "creativeideasagency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cryptex.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cryptoninjas.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ctf-albstadt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88a.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88b.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88e.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88g.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "daunatotala.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dbettenleur.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "de-kramers.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "deckersheaven.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dermaldistinction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "descargar-apk.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "desentupidorademais.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "desheng28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "diananeves.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ds138.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dtinel.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dylnuge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ebertlang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elainesearer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "electricfencemidrand.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eliasong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elisabethcasanova.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elitepainmanagement.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elsanoguera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "emirefek.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "equisecu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ervinthagod.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "escortbruxelles.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "escortgigolo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "espherapromocional.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "esteriliza-me.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "excerp.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exxpozed-image.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exxpozed.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exxpozed.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exxpozed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exxpozed.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exxpozed.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fctwo.download", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fdremodelingatlanta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fekir.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ferlc.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "finestrina.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fins.money", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fivestartrader.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "foodphotographyblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "forsi.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "frauen-etappenrennen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "g818city.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gaci88play.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "game818play.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "game88play.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "game88yule.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gdpr.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gelaendermanufaktur.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gentledance.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gentledance.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "getalitools.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "giaphaco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "globalesm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "go-datasecurity.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "go889w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "golsportsoccer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "griswoldplumbingct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "grizz.gdn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "groupem6.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gruhn.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gstand.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hadleyluker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hammercast.fm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "happybrush.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "heartbound.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hemainteriors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hg661.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hgc369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hibanaworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hifumi.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "horairetrain.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "horairetrain.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "horairetrain.lu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "horairetrain.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hosoi-tax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hospeda1.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hotelpalmas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hqon.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iberion.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "idealog.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "idesoft.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "idesoft.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "idesoft.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "idkidknow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "igmt-guinea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "imlhx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "immovit.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "imperioth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "inegol.mobi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "infomundord.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "inodari.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ipsum.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "irioka.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "itzer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ivocotec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jadesong.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jasonwei.nctu.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jb138.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jbc88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jf886.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jinbijin.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jkland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jl-dx.com.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jof.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jplennard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jshub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "juezz.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "justeducationonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "karoke.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kartoffel-tobi.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kazmamall.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb98.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kcfmradio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kerner.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kettinggeleider.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kickingpixels.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kinaesthetics-forschung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kobudo49.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6810.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6823.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks9211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kuditel.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ladiesofvietnam.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "leeannescreations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lequocthai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "liberta-me.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lideradigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lighthouseglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lilianejuchli.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "linuxhub.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmithfourways24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "loli.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lonelypawn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "loverngifts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lz898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lzh.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "m6pub.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "machinerysafety101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "magicnethosting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "magicvps.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marketing-apps.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnet.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "maryluzturismo.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "matchupmagic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "maxmusical.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mdaemon.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "melda.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "merdacz.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "minload.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "minton.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mllz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mnszone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "modell-lq.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "momentumdesign.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mothership.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mu105.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mudaomundo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "musicsense.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myfiladelfia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mythen-fonds.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mythenfonds.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "n-gram.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nationalaustriabank.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "netfirmtextile.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nethorizon.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "networksolutionsconsultant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "newstargeted.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "noga4you.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nomzamo.spdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nsine.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "octopoos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "octopoos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "official-sensitive.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "official-sensitive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "official-sensitive.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "official-sensitive.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ontogenese.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "openwrt-dist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "operr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "operrtel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "operrwork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "orangelandgaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ouest-annonces.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "parasca7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pari.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pastimeproject.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paulcloud.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pcxserver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pelosanimais.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "percloud.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pharmasana.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "phoenixnow.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "phukienchanh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pirateproxy.vet", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "plus-aliance.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "praladofuturo.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "praveenravichandran.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "progaudio.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "promodance.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "proxybay.lat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pube.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "puntacanatransporte.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "putasdelporno.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "qlinksgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "quuck.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "quuck.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "r8369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "r8700.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "racevinyl.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "radlina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "raketa.travel", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "raportdnia.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ratajczak.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "raveboy.dyndns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "raydius.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "reeves-family.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "renedekoeijer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rheijmans.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ribella.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "richieheijmans.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ruf888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "runningandoutdoors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "russstudios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ryanjarvis.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ryanjarvis.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s-pro.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "safetysign.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "salnet.wf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "scriptslug.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seamus.party", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seblod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "serkanceyhan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sham-group.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shoppingvrimini.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sksongs.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "skuizy.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sm-kyoushitsu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smakoszwegrzynka.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smartacademy.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smartresumeservices.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smcj.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "snj.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sofiawestergren.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "softly.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sonderfloral.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "songyang.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spectrum-markets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spikefishdesigns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "srfloki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "srkb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stainhaufen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "studiovictorialimited.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stuffie.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "summusglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "suniru.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sunnistan.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sunpig.fit", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "suroot.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sweetcalculus.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "swiftbonds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "swindontennisclub.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "syncplay.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "szww99.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tasadar.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "taubin.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tehden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "teriyakiweasel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "terselubung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thebarrypatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theedisoncapital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theilluminatisociety.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "therudeworkout.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thierrymazue.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tiochambita.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "toddlerleaf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tokky.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "toprelatos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "topstore.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "transfersw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "travelingbagsmke.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "trelki.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "trumtrimun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tugesha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "uestc.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "upvoted.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "videogamer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vigilantesporcolombia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "voicr.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "volatilethunk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vpsrussia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w889vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wagonyard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wallmarketing.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wanghuiblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "watchhentai.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wattcontrol.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wck.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "we168168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "we88fun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "westmidlandslettings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wew888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wewillfixyouripad.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wewillfixyourpc.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wewin889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "whitemountainnaturalcreations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "winall8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wiredmedia.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wirkungs-forschung.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wirkungs-forschung.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wirkungs-forschung.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wirkungs-forschung.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wirkungs-forschung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wjg.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wordops.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "woxter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wsv-pfeffingen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ww8989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wwin818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wwvip88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wy188.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xavita.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xcharge.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xeniox.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xiaojiyoupin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--nidar-tib.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--prfontaine-c7a.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xuehao.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yaseminuzumcu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yesh.lk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yesildiyetisyen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yuleyule88game.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zestadionu.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zimtoel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zmiguel.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "znidar.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zollernalbtour.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zupzup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zz606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bitbucket.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "00rfb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1lc1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1lc33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1lc44.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "220control.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "33weishang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "369018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "50milli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "5eki.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "690938.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "91fldz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "941988.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "abbeyok.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "abiscrane.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "abminiplex.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "accademiapugilistica.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "acuaticos.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "acumed-diagnostic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "addo-addo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aievaluare.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "akeenshort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alpine-holiday.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "amethystbodyart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "andrey.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "angkasa.net.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "angular-software.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "animalconnect.org.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "antanavagefarbiarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aphelis.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "apod-portal-daily.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "appsimplex.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "appub.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "arabic-shirts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "autolider.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "autorijschoolstorm.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "baneh-academic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "banglarfont.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bankruptcy.ky", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "basebalance.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bauingenieur24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "become-lucky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "berksabstract.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bestremote.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "billgradywebdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "biocrafting.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "biofattorietoscane.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bisq.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bog8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bombayfashionclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "boschsplit.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bread.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "buyplore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cambiemosjuegos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "camshowhive.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "camshowplace.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "canobag.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "carding.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cas-chauxdefonds.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "celcelulares.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chalupalokovka.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chefkoch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cheraghestan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chhlin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cirruslab.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cjenni.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "clearspringinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "come2cook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "compliantbusinessprocessing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "concordiagaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "creandoydesarrollando.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "crossformer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cubsbestteaminbaseball.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cvtshop.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d88c.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dapperdom.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "davidschubert.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dbw678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "deanandnatalia.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "deinsparen24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "desanta.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "designs.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "desktopgoldlink.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dewitteprins.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "diabhal-staff.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "digiepoxypaint.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "digitalframe.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "digitaltrust.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "disruptiveadvertising.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dnssecandipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "doctorcalefon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dotnetdocs.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dsbmradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dsdesign.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dse-assessments.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eciso.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ecmeshltd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ecrownoffire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eldercare.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elektrische-zahnbuerste24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enrico-caruso.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "enzoic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "era.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "estela-artes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "etalktome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "europainchemnitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "europastudien-chemnitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "europeanstudies-chemnitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "everyvid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "evilla.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fairbairnrealty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fairgreenlimited.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "falasteenjobs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fashworldtrends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fasthost.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fd020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "festx.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fgafsaneh.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fish4dogs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "florida-immigration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fluidpicturesinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "flying-dudes.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "forexarby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fortdodgeradio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "franklinmagic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "freefinancialhelp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "freshbooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "furgetmeknot.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "futuristacademy.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "g2jp.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gadgets-and-accessories.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gavlix.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gehatrans.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "genusbag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "getcertified.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "global1.gg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "goiymua.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "goodfor.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "granli.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gregmarziomedia-dev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "griswoldwellwaterct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gujun-sky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "haitou.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "harley-davidson-live.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hauora.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hauora.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hdbits.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "healthcaresuccess.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "helkyn.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "helkyn.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "helkyn.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hella-secure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "herd-kaufen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hgyoseo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "highclasseducation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "holacannx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "holacbdoils.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "holenergies.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "holenergies.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hongbomiao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "howmanypeoplearethereinthe.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "howmanypeoplearethereintheworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "huangzenghao.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "huntcraft.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hurbascooter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hydra.ly", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hytopcp168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "i-make.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "i-make.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ibraphotography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "igkabel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "igkabel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "igkabel.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "igkabel.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "igkabel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ihacker.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ihacker.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "income.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "inmedsm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "innovairservices.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "inspired-creations.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ipv4.rip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ipv6alizer.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ispmedipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "itemstore.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jackspub.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "japansm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jennysarl.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jerseyink.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "joedeblasio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "julienstalder.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kajakswaderki.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kapler.family", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "katerinaverbovskaya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kevinpatel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kgt10.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "khamphafood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kiir.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kokomu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kommunermeddnssec.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kommunermedipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kondomshop.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6836.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6837.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6850.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6870.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6871.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lackierereischmitt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lauresta.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lauresta.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lesptitspasdelyne.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lidl-stikeez.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "localhost.cat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lostinlegends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "love4musik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lovechester.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lovelo.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lprcommunity.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lunepieters.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "luv2watchmycam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "manshatech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "manzalud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marbledentalcentre.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "markusjanzen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marzio.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mbclegal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "meran.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "miklagard.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mlathrom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "moca-2080.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "momocogames.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "monitord.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ms-australia.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mummyandmephotography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "musasdanet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mybauingenieur24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myfortdodge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myinsuranceauto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myinsurancelife.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myinsurancesource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mylifeinsurancerates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myndighetermeddnssec.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myndighetermedipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myroofandhome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "n8solutions.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nadex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "netfoundry.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nextgen-life-insurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nightscapesoutdoorlighting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nms-thoracic-surgery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "novawatch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nucleuspanel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nuestratecnologia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nycrerc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nyonator.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nysis.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "obsessedwithknives.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "olenergie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "olenergie.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "olenergies.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "olenergies.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "olhovirtual.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "omanlover.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oneso.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "onload.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "operrhealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "origamitutorials.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pabloroblesminister.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pagatuarriendo.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "paketbox-systems.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "papelpack.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "parkr.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "penguinworld.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pentools.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "peterheery.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pick150.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pidibagrik.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "plandegralba.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "plasticosbiobasados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "platformlms.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "plusreed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "politsei.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pragata.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "prgrmmr.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "profiservis.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "profits.fund", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "profsaranya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pymeup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "quiqurl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "r8600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "reachout-ghana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "recoba3d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "remodelingfy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "resume4dummies.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rightreview.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "robinloeffel.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "s2i.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "salvameuba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "salvandoalocombia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sanix.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "secureenduserconnection.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sevipro.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "shakthifacility.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "siamericas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sianipestcontrolinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "simplysmartgardening.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sipstix.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "skaginn.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "skalec.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sktorrent.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "smaksbanken.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "snizl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "songesdeplumes.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sphacks.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sporttomorrow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spoters.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "srimakc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sunshinecoastplumbingcompany.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "svodjapan.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "synthv.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tacticalvote.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tara.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tatard.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tdstoragebay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tech-leaders.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "techchip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "technochat.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "techsystemsa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "templetattoo.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thefranknews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thegaucompany.healthcare", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "theresabrant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thierrymazue.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thinkclic.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thornton-le-moors-ince-elton.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tinclip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tinekevanurk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tinkerers-trunk.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tomgaechter.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "topyad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "toyokawa-fan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "trinityradioandvideo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tupianku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "twelvecornerspediatrics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "twojapogoda.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "unluco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "urologyoklahoma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "v2x.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "v800b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vetustainversion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "victorunix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "violarenate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vivianadavila.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "volatile.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vunn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "waifu.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "web-lab.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "weydu.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "whisky.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "whitesoxbestteaminbaseball.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wine-route.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--80akjfhoqm2h2a.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--pckm3a1bi21a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--whlefamilie-l8a.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yana-co.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ykn.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yogamarlene.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "younameit.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "youregeeks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zedeko.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zhan.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zhina.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zowedo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "020ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "026kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "029kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0510ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0511ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0691ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0724ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0732ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "0766ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "07d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "09d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "106jamz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "134ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "134ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "135ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "151ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "153ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "155ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "157ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "157ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "166ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "170ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "176ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "17xrk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "181ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "184kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "185ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "186ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "188kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "199ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "1fc0.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "2000.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "2255motion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "288kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "288ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "2monkeysandme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "301ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "33kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "46d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "47d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "48d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "499ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "499ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "555kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "566ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "599ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "64d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "668ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "66agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "70d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "74d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "75d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "799ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8186d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8187d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8189d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8190d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "81d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8206d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8239d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8890d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8891d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8892d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8895d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8900d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8906d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8907d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8908d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8919d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8920d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8921d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8925d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "8926d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "899ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "967you.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "99agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "9k898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "acicj.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "acs-nettoyage-entretien-immeuble.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "actionverb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ae86.plus", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aeroalbrook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ag89ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ag9ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agendaspectacles.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agentrisk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agks0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agks1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agks111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agks113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agks150.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agks4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agks666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agktest1.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agpsn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "agrolab.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "akashdsouza.now.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alchemy-media-marketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "alice-memorial.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aljaspod.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "altorise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "andreaassenti.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "anjara.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "anoracdn.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "app-scope.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "apyha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "aquariu.ms", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "arabapps.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "articulatedmedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "artrapid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "asianfilmfestival.barcelona", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "asp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "attunedstore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "auntiesnorkel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "autodemolizioni.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "autoklub.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "azpogomap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "azrhymes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bancastato.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "beauty-form.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bengaldarpan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "berndbousard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bevallarta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bgemi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bitcoingambling.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bjs.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "blackhost.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bluebnc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bobandducky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bolt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "brandonsample.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bravebooks.berlin", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "bueromoebel-experte.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "casaasia.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cdc.cx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "chilikin.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "claude.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "claude.photo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cleango.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "clemency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "clevermatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "clwrota.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "compassionaterelease.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "confygo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "coralreef.blue", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "creafitchile.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "cyanhexagon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8824.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8834.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8841.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8842.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8843.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8845.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8847.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8874.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "d8897.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dayswithnostabbings.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "deckenplatten.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "defis-franciliens.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "demastglazenwasserij.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "despachomariscal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "despinavandi.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "diabhal-staff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "discord.gift", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "djanpana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "djl188.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "doerz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dogvolution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "duarteeleiteconsultoria.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "dyremyhr.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "e-boekhouden.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "edefrutos.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "educative.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "elementblend.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "escritamusical.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "eveil-et-savoirs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "excelsiorcomics.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "exploringmorocco.tours", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "f9marketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fibercoverage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fokus.ag", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fos-apps.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "fos-games.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "franqois.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ftmc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "g7yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gaigelama.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ganodermatiendaonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gavr.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gavr.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gemsmarketplace.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "genunlimited.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gheestore.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ghull.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "glamcosmetic.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "goldeneggs.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "graddient.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "grahamarthur.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "growingsmiles.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "growwithdaylight.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "gymlife.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hackerflare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "haitaka.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hana-groupsac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hayl.me.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hayobethlehem.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hbcm70.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hentaigogo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hentavfall.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "highenergy.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hiq.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hkmap.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hn75.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hoffnungberlin.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hoffnungdeutschland.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "holyszko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "hrw66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "human-shinri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ialps.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iancu.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iancu.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ifbagro.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "igramming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ihasco.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "infans.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "infinity3dengine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "innoraft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "inyourcornerinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "iosecurity.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jaluzelemoderne.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jamesrobertson.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jarmala.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jarmandental.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jasmyn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jg-skid.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "jvrproductions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kabinett.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kais08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kais68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kais98.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaishi002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaishi555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaishi999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaiwu.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaskocdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaskocloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaskodev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaskojs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kaskoqa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "katsiavarasorthopedics.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kazvel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb0101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb283.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb4242.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb4747.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb486.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb5454.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb756.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb88.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8830.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8837.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8841.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8843.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8848.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8849.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8854.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8874.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb8880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb88dc06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb88dc15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb88dc25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb88dc27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb88dc30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb88md26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb965.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kb991.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kchomemed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kerryfoodscareers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "keyex.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kfassessment.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kfo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kimathilegal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kinodrom.kiev.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "klauswissmann.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kolrami.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kprem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kratochvilovi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks05.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks06.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks061.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks062.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks0688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks078.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks093.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks096.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks204.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks208.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks2099.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks281.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks2888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks2888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks291.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks299.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks335.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks337.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks339.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks3888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks3939.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks502.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks503.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks541.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks549.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks5888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks5888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks610.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks6880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks695.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks7373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks9393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ks9888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "kunda.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "la-manufacture-du-nettoyage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lambda.sx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lbda.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "leadership-conference.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lentivo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmith--richmond.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmith-pasadenatx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmith-springtx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmithforcarshoustontx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmithmidrand24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmithresidentialspringtx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "locksmithservice-cypress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "logactiond.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ltlec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lucacastelnuovo.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "lukaszwojcik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "luvhacks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mahalux.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mahalux.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mairie-sornay.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marc-beninca.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "marvnetdigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mashairi.co.ke", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "medirota.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "merlin-memorial.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mesvision.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "metaljunkiez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "metallschutz-direkt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mijnbeijesweb.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "milkaalpesiutazas.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mjrlegends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mossaino.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "motto-iikoto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mricspatial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mvorisek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mvorisek.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mycakeangel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myinternist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "myresearchtoolbox.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "mytravelog.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "napiki.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nediapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nerdin.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "netgaming.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nightman.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nnnow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nuits-franciliennes.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "nut-dev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "olinux.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "onlinemoviewatch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "onlycrumbsremain.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "orxideya.az", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "osszekotatermeszettel.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "owner.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "oyungg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pajskr.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "partiono.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "peawo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "photosgaia.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "phuoctran.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "phuoctran.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "phuoctran.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "phuoctran.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "phuoctran.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pmp6.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pokeforest.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "popcorncult.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "premiumdeal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "premkumar.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "primglaz.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "proweb.solutions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "pugetsoundspas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "punematka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "qosmoschools.edu.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "quiz4math.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ra3y.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "railgun.com.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "raynis.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rciliberto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "re-inspect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "re-security.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "reginaclinic.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "registr.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rfid-sicherheit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "riimihaku.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rime.com.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rimkereso.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "robotstxt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rockypest.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "roisu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "roopakvenkatakrishnan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rotamap.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "roxxz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "roys.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rrbts.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "run4gameplay.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "rusticpathways.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sambus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sand66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sanjosecolorectal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sarjakuvakauppa.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sattamatkamobi.mobi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sattaresult.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "secapp.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sedesignxtra.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seedno.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sehd.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "senu.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "seo-forum.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "serv.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "serveradmin.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "setxrm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sidsun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sieumod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sign.dog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "signaturedallas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "skeriv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "slalix.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "slatemc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "spillforum.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "squarefootllcconstruction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "squattra.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ssone.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stats.do", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stavanger.kommune.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stefanengineering.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stghv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stonesfamilyrestaurant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "stoutassociates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "sulabs.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "suomika.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "swatee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "t00ts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ta-nuth.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ta-soest.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "taxicab4you.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "telcodb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tenber.ge", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "thalliman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tierradeayala.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tilde.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tinminnow.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "titrespresse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tmailz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "todaslascafeteras.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tokky.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tokyoadultguide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "top-zdrave.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tpark.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "trandanhland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ttfollower.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "turiscar.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "tutorcruncher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "txlocksmiththewoodlands.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "uj2008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ultravip.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "ultrixus.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "utrantor.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vaxxwatch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vectomatic.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vijoe.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vinicius.sl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vipcards.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vlamir.dynu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vote2019.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vpsvz.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vpsvz.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "vpsvz.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "w88-yes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "webinstit.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "webkindergarten.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wikpa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "williamshomeheat.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "windmyroof.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "wingchunboxtribe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "womenshealthadvocate.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xaver.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xb052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xb053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xb056.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xb057.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xb058.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xdown.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xhcmnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xiaoxia.li", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "xn--lt9h.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yf128.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yijia.support", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "your-dns.run", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yz86.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yzarul.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yzh8.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "yzh8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8171.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8907.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8908.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "z8917.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zd1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "zl8282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+ { "name": "znn.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
// END OF 1-YEAR BULK HSTS ENTRIES
// Only eTLD+1 domains can be submitted automatically to hstspreload.org,
diff --git a/chromium/net/http/transport_security_state_static_unittest_default.json b/chromium/net/http/transport_security_state_static_unittest_default.json
index 11a2f4e797b..05179e44bdc 100644
--- a/chromium/net/http/transport_security_state_static_unittest_default.json
+++ b/chromium/net/http/transport_security_state_static_unittest_default.json
@@ -36,6 +36,7 @@
"entries": [
{ "name": "hsts-preloaded.test", "policy": "test", "mode": "force-https" },
{ "name": "include-subdomains-hsts-preloaded.test", "policy": "test", "mode": "force-https", "include_subdomains": true },
+ { "name": "example", "policy": "test", "mode": "force-https", "include_subdomains": true },
{ "name": "no-rejected-pins-pkp.preloaded.test", "policy": "test", "pins": "withoutRejectedPins" },
{ "name": "with-report-uri-pkp.preloaded.test", "policy": "test", "pins": "withReportUri" },
diff --git a/chromium/net/http/transport_security_state_unittest.cc b/chromium/net/http/transport_security_state_unittest.cc
index 7ff717fd731..e40e7495c58 100644
--- a/chromium/net/http/transport_security_state_unittest.cc
+++ b/chromium/net/http/transport_security_state_unittest.cc
@@ -1432,6 +1432,31 @@ TEST_F(TransportSecurityStateTest, DecodePreloadedMultipleMix) {
EXPECT_FALSE(GetExpectCTState(&state, "simple-entry.example.com", &ct_state));
}
+TEST_F(TransportSecurityStateTest, HstsHostBypassList) {
+ SetTransportSecurityStateSourceForTesting(&test_default::kHSTSSource);
+
+ TransportSecurityState::STSState sts_state;
+ TransportSecurityState::PKPState pkp_state;
+
+ std::string preloaded_tld = "example";
+ std::string subdomain = "sub.example";
+
+ {
+ TransportSecurityState state;
+ // Check that "example" is preloaded with subdomains.
+ EXPECT_TRUE(state.ShouldUpgradeToSSL(preloaded_tld));
+ EXPECT_TRUE(state.ShouldUpgradeToSSL(subdomain));
+ }
+
+ {
+ // Add "example" to the bypass list.
+ TransportSecurityState state({preloaded_tld});
+ EXPECT_FALSE(state.ShouldUpgradeToSSL(preloaded_tld));
+ // The preloaded entry should still apply to the subdomain.
+ EXPECT_TRUE(state.ShouldUpgradeToSSL(subdomain));
+ }
+}
+
// Tests that TransportSecurityState always consults the RequireCTDelegate,
// if supplied.
TEST_F(TransportSecurityStateTest, RequireCTConsultsDelegate) {
@@ -1580,7 +1605,7 @@ TEST_F(TransportSecurityStateTest, RequireCTConsultsDelegate) {
// Tests that Certificate Transparency is required for Symantec-issued
// certificates, unless the certificate was issued prior to 1 June 2016
-// or the issuing CA is whitelisted as independently operated.
+// or the issuing CA is permitted as independently operated.
TEST_F(TransportSecurityStateTest, RequireCTForSymantec) {
// Test certificates before and after the 1 June 2016 deadline.
scoped_refptr<X509Certificate> before_cert =
@@ -1711,26 +1736,14 @@ TEST_F(TransportSecurityStateTest, RequireCTViaFieldTrial) {
// However, simulating a Field Trial in which CT is required for certificates
// after 2017-12-01 should cause CT to be required for this certificate, as
// it was issued 2017-12-20.
- const char kTrialName[] = "EnforceCTForNewCertsTrial";
- const char kGroupName[] = "Unused"; // Value not used.
- const char kFeatureName[] = "EnforceCTForNewCerts";
- base::test::ScopedFeatureList scoped_feature_list;
- base::FieldTrialList field_trial_list(
- std::make_unique<base::MockEntropyProvider>());
- scoped_refptr<base::FieldTrial> trial =
- base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName);
- std::map<std::string, std::string> params;
+ base::FieldTrialParams params;
// Set the enforcement date to 2017-12-01 00:00:00;
params["date"] = "1512086400";
- base::FieldTrialParamAssociator::GetInstance()->AssociateFieldTrialParams(
- kTrialName, kGroupName, params);
- std::unique_ptr<base::FeatureList> feature_list(
- std::make_unique<base::FeatureList>());
- feature_list->RegisterFieldTrialOverride(
- kFeatureName, base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get());
- scoped_feature_list.InitWithFeatureList(std::move(feature_list));
+ base::test::ScopedFeatureList scoped_feature_list;
+ scoped_feature_list.InitAndEnableFeatureWithParameters(kEnforceCTForNewCerts,
+ params);
// It should fail if it doesn't comply with policy.
EXPECT_EQ(TransportSecurityState::CT_REQUIREMENTS_NOT_MET,
@@ -2646,6 +2659,10 @@ TEST_F(TransportSecurityStateStaticTest, Preloaded) {
EXPECT_TRUE(
state.GetStaticDomainState("www.googlemail.com", &sts_state, &pkp_state));
+ // fi.g.co should not force HTTPS because there are still HTTP-only services
+ // on it.
+ EXPECT_FALSE(StaticShouldRedirect("fi.g.co"));
+
// Other hosts:
EXPECT_TRUE(StaticShouldRedirect("aladdinschools.appspot.com"));
diff --git a/chromium/net/http/url_security_manager.cc b/chromium/net/http/url_security_manager.cc
index 9c9424390e3..c7cbc4cfc03 100644
--- a/chromium/net/http/url_security_manager.cc
+++ b/chromium/net/http/url_security_manager.cc
@@ -10,35 +10,35 @@
namespace net {
-URLSecurityManagerWhitelist::URLSecurityManagerWhitelist() = default;
+URLSecurityManagerAllowlist::URLSecurityManagerAllowlist() = default;
-URLSecurityManagerWhitelist::~URLSecurityManagerWhitelist() = default;
+URLSecurityManagerAllowlist::~URLSecurityManagerAllowlist() = default;
-bool URLSecurityManagerWhitelist::CanUseDefaultCredentials(
- const GURL& auth_origin) const {
- if (whitelist_default_.get())
- return whitelist_default_->IsValid(auth_origin, HttpAuth::AUTH_SERVER);
+bool URLSecurityManagerAllowlist::CanUseDefaultCredentials(
+ const GURL& auth_origin) const {
+ if (allowlist_default_.get())
+ return allowlist_default_->IsValid(auth_origin, HttpAuth::AUTH_SERVER);
return false;
}
-bool URLSecurityManagerWhitelist::CanDelegate(const GURL& auth_origin) const {
- if (whitelist_delegate_.get())
- return whitelist_delegate_->IsValid(auth_origin, HttpAuth::AUTH_SERVER);
+bool URLSecurityManagerAllowlist::CanDelegate(const GURL& auth_origin) const {
+ if (allowlist_delegate_.get())
+ return allowlist_delegate_->IsValid(auth_origin, HttpAuth::AUTH_SERVER);
return false;
}
-void URLSecurityManagerWhitelist::SetDefaultWhitelist(
- std::unique_ptr<HttpAuthFilter> whitelist_default) {
- whitelist_default_ = std::move(whitelist_default);
+void URLSecurityManagerAllowlist::SetDefaultAllowlist(
+ std::unique_ptr<HttpAuthFilter> allowlist_default) {
+ allowlist_default_ = std::move(allowlist_default);
}
-void URLSecurityManagerWhitelist::SetDelegateWhitelist(
- std::unique_ptr<HttpAuthFilter> whitelist_delegate) {
- whitelist_delegate_ = std::move(whitelist_delegate);
+void URLSecurityManagerAllowlist::SetDelegateAllowlist(
+ std::unique_ptr<HttpAuthFilter> allowlist_delegate) {
+ allowlist_delegate_ = std::move(allowlist_delegate);
}
-bool URLSecurityManagerWhitelist::HasDefaultWhitelist() const {
- return whitelist_default_.get() != nullptr;
+bool URLSecurityManagerAllowlist::HasDefaultAllowlist() const {
+ return allowlist_default_.get() != nullptr;
}
} // namespace net
diff --git a/chromium/net/http/url_security_manager.h b/chromium/net/http/url_security_manager.h
index 8c2ef2f535d..83fc5e11ca0 100644
--- a/chromium/net/http/url_security_manager.h
+++ b/chromium/net/http/url_security_manager.h
@@ -25,20 +25,20 @@ class NET_EXPORT_PRIVATE URLSecurityManager {
// Creates a platform-dependent instance of URLSecurityManager.
//
- // A security manager has two whitelists, a "default whitelist" that is a
- // whitelist of servers with which default credentials can be used, and a
- // "delegate whitelist" that is the whitelist of servers that are allowed to
+ // A security manager has two allowlists, a "default allowlist" that is a
+ // allowlist of servers with which default credentials can be used, and a
+ // "delegate allowlist" that is the allowlist of servers that are allowed to
// have delegated Kerberos tickets.
//
- // On creation both whitelists are empty.
+ // On creation both allowlists are empty.
//
- // If the default whitelist is empty and the platform is Windows, it indicates
+ // If the default allowlist is empty and the platform is Windows, it indicates
// that security zone mapping should be used to determine whether default
- // credentials should be used. If the default whitelist is empty and the
+ // credentials should be used. If the default allowlist is empty and the
// platform is non-Windows, it indicates that no servers should be
- // whitelisted.
+ // allowlisted.
//
- // If the delegate whitelist is empty no servers can have delegated Kerberos
+ // If the delegate allowlist is empty no servers can have delegated Kerberos
// tickets.
//
static std::unique_ptr<URLSecurityManager> Create();
@@ -51,36 +51,36 @@ class NET_EXPORT_PRIVATE URLSecurityManager {
// |auth_origin| for HTTP Negotiate authentication.
virtual bool CanDelegate(const GURL& auth_origin) const = 0;
- virtual void SetDefaultWhitelist(
- std::unique_ptr<HttpAuthFilter> whitelist_default) = 0;
- virtual void SetDelegateWhitelist(
- std::unique_ptr<HttpAuthFilter> whitelist_delegate) = 0;
+ virtual void SetDefaultAllowlist(
+ std::unique_ptr<HttpAuthFilter> allowlist_default) = 0;
+ virtual void SetDelegateAllowlist(
+ std::unique_ptr<HttpAuthFilter> allowlist_delegate) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(URLSecurityManager);
};
-class URLSecurityManagerWhitelist : public URLSecurityManager {
+class URLSecurityManagerAllowlist : public URLSecurityManager {
public:
- URLSecurityManagerWhitelist();
- ~URLSecurityManagerWhitelist() override;
+ URLSecurityManagerAllowlist();
+ ~URLSecurityManagerAllowlist() override;
// URLSecurityManager methods.
bool CanUseDefaultCredentials(const GURL& auth_origin) const override;
bool CanDelegate(const GURL& auth_origin) const override;
- void SetDefaultWhitelist(
- std::unique_ptr<HttpAuthFilter> whitelist_default) override;
- void SetDelegateWhitelist(
- std::unique_ptr<HttpAuthFilter> whitelist_delegate) override;
+ void SetDefaultAllowlist(
+ std::unique_ptr<HttpAuthFilter> allowlist_default) override;
+ void SetDelegateAllowlist(
+ std::unique_ptr<HttpAuthFilter> allowlist_delegate) override;
protected:
- bool HasDefaultWhitelist() const;
+ bool HasDefaultAllowlist() const;
private:
- std::unique_ptr<const HttpAuthFilter> whitelist_default_;
- std::unique_ptr<const HttpAuthFilter> whitelist_delegate_;
+ std::unique_ptr<const HttpAuthFilter> allowlist_default_;
+ std::unique_ptr<const HttpAuthFilter> allowlist_delegate_;
- DISALLOW_COPY_AND_ASSIGN(URLSecurityManagerWhitelist);
+ DISALLOW_COPY_AND_ASSIGN(URLSecurityManagerAllowlist);
};
} // namespace net
diff --git a/chromium/net/http/url_security_manager_posix.cc b/chromium/net/http/url_security_manager_posix.cc
index a0bc27d335f..c181a9087a3 100644
--- a/chromium/net/http/url_security_manager_posix.cc
+++ b/chromium/net/http/url_security_manager_posix.cc
@@ -12,7 +12,7 @@ namespace net {
// static
std::unique_ptr<URLSecurityManager> URLSecurityManager::Create() {
- return std::make_unique<URLSecurityManagerWhitelist>();
+ return std::make_unique<URLSecurityManagerAllowlist>();
}
} // namespace net
diff --git a/chromium/net/http/url_security_manager_unittest.cc b/chromium/net/http/url_security_manager_unittest.cc
index 97dda33273d..93f31186037 100644
--- a/chromium/net/http/url_security_manager_unittest.cc
+++ b/chromium/net/http/url_security_manager_unittest.cc
@@ -19,16 +19,16 @@ namespace {
struct TestData {
const char* const url;
bool succeds_in_windows_default;
- bool succeeds_in_whitelist;
+ bool succeeds_in_allowlist;
};
-const char kTestAuthWhitelist[] = "*example.com,*foobar.com,baz";
+const char kTestAuthAllowlist[] = "*example.com,*foobar.com,baz";
// Under Windows the following will be allowed by default:
// localhost
// host names without a period.
-// In Posix systems (or on Windows if a whitelist is specified explicitly),
-// everything depends on the whitelist.
+// In Posix systems (or on Windows if an allowlist is specified explicitly),
+// everything depends on the allowlist.
const TestData kTestDataList[] = {
{ "http://localhost", true, false },
{ "http://bat", true, false },
@@ -47,12 +47,12 @@ const TestData kTestDataList[] = {
TEST(URLSecurityManager, UseDefaultCredentials) {
std::unique_ptr<HttpAuthFilter> auth_filter(
- new HttpAuthFilterWhitelist(kTestAuthWhitelist));
+ new HttpAuthFilterAllowlist(kTestAuthAllowlist));
ASSERT_TRUE(auth_filter);
// The URL security manager takes ownership of |auth_filter|.
std::unique_ptr<URLSecurityManager> url_security_manager(
URLSecurityManager::Create());
- url_security_manager->SetDefaultWhitelist(std::move(auth_filter));
+ url_security_manager->SetDefaultAllowlist(std::move(auth_filter));
ASSERT_TRUE(url_security_manager.get());
for (size_t i = 0; i < base::size(kTestDataList); ++i) {
@@ -60,30 +60,30 @@ TEST(URLSecurityManager, UseDefaultCredentials) {
bool can_use_default =
url_security_manager->CanUseDefaultCredentials(gurl);
- EXPECT_EQ(kTestDataList[i].succeeds_in_whitelist, can_use_default)
+ EXPECT_EQ(kTestDataList[i].succeeds_in_allowlist, can_use_default)
<< " Run: " << i << " URL: '" << gurl << "'";
}
}
TEST(URLSecurityManager, CanDelegate) {
std::unique_ptr<HttpAuthFilter> auth_filter(
- new HttpAuthFilterWhitelist(kTestAuthWhitelist));
+ new HttpAuthFilterAllowlist(kTestAuthAllowlist));
ASSERT_TRUE(auth_filter);
// The URL security manager takes ownership of |auth_filter|.
std::unique_ptr<URLSecurityManager> url_security_manager(
URLSecurityManager::Create());
- url_security_manager->SetDelegateWhitelist(std::move(auth_filter));
+ url_security_manager->SetDelegateAllowlist(std::move(auth_filter));
ASSERT_TRUE(url_security_manager.get());
for (size_t i = 0; i < base::size(kTestDataList); ++i) {
GURL gurl(kTestDataList[i].url);
bool can_delegate = url_security_manager->CanDelegate(gurl);
- EXPECT_EQ(kTestDataList[i].succeeds_in_whitelist, can_delegate)
+ EXPECT_EQ(kTestDataList[i].succeeds_in_allowlist, can_delegate)
<< " Run: " << i << " URL: '" << gurl << "'";
}
}
-TEST(URLSecurityManager, CanDelegate_NoWhitelist) {
+TEST(URLSecurityManager, CanDelegate_NoAllowlist) {
// Nothing can delegate in this case.
std::unique_ptr<URLSecurityManager> url_security_manager(
URLSecurityManager::Create());
@@ -96,5 +96,4 @@ TEST(URLSecurityManager, CanDelegate_NoWhitelist) {
}
}
-
} // namespace net
diff --git a/chromium/net/http/url_security_manager_win.cc b/chromium/net/http/url_security_manager_win.cc
index 3d6b0100b43..a2cc1946b15 100644
--- a/chromium/net/http/url_security_manager_win.cc
+++ b/chromium/net/http/url_security_manager_win.cc
@@ -26,7 +26,7 @@
namespace net {
-class URLSecurityManagerWin : public URLSecurityManagerWhitelist {
+class URLSecurityManagerWin : public URLSecurityManagerAllowlist {
public:
URLSecurityManagerWin();
~URLSecurityManagerWin() override;
@@ -47,8 +47,8 @@ URLSecurityManagerWin::~URLSecurityManagerWin() {}
bool URLSecurityManagerWin::CanUseDefaultCredentials(
const GURL& auth_origin) const {
- if (HasDefaultWhitelist())
- return URLSecurityManagerWhitelist::CanUseDefaultCredentials(auth_origin);
+ if (HasDefaultAllowlist())
+ return URLSecurityManagerAllowlist::CanUseDefaultCredentials(auth_origin);
if (!const_cast<URLSecurityManagerWin*>(this)->EnsureSystemSecurityManager())
return false;