From 018287edfc66c3a8f6305f9c3844227bc70c8656 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:26:56 +0000 Subject: [PATCH 01/56] update net/base/net_error_details.h. Signed-off-by: taoxueao --- net/base/net_error_details.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/base/net_error_details.h b/net/base/net_error_details.h index 3da3f325aa..41e778b9a6 100644 --- a/net/base/net_error_details.h +++ b/net/base/net_error_details.h @@ -35,6 +35,9 @@ struct NET_EXPORT NetErrorDetails { bool quic_port_migration_detected = false; bool quic_connection_migration_attempted = false; bool quic_connection_migration_successful = false; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool stream_created = false; +#endif // OHOS_EX_HTTP_DNS_FALLBACK }; } // namespace net -- Gitee From 151d65ab5562fa7411764982b7dc2fef197ec589 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:29:40 +0000 Subject: [PATCH 02/56] update net/base/network_change_notifier.cc. Signed-off-by: taoxueao --- net/base/network_change_notifier.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc index d2ffefb8a3..0c48c1a929 100644 --- a/net/base/network_change_notifier.cc +++ b/net/base/network_change_notifier.cc @@ -1108,4 +1108,22 @@ NetworkChangeNotifier::ObserverList& NetworkChangeNotifier::GetObserverList() { return *observers; } +#if BUILDFLAG(IS_OHOS) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +// static +const std::vector NetworkChangeNotifier::GetDnsServers() { + std::vector dns_servers; + if (!g_network_change_notifier) { + return dns_servers; + } + dns_servers = g_network_change_notifier->GetCurrentDnsServers(); + return dns_servers; +} + +const std::vector NetworkChangeNotifier::GetCurrentDnsServers() { + return std::vector(); +} +#endif +#endif + } // namespace net -- Gitee From a3d09b5502be9795f4de080fc69aa1ce569ec66f Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:35:05 +0000 Subject: [PATCH 03/56] update net/base/network_change_notifier.h. Signed-off-by: taoxueao --- net/base/network_change_notifier.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/base/network_change_notifier.h b/net/base/network_change_notifier.h index 89d1036af0..fcebdd0c64 100644 --- a/net/base/network_change_notifier.h +++ b/net/base/network_change_notifier.h @@ -657,6 +657,11 @@ class NET_EXPORT NetworkChangeNotifier { virtual SystemDnsConfigChangeNotifier* GetCurrentSystemDnsConfigNotifier(); virtual bool IsDefaultNetworkActiveInternal(); +#if BUILDFLAG(IS_OHOS) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + virtual const std::vector GetCurrentDnsServers(); +#endif +#endif // Broadcasts a notification to all registered observers. Note that this // happens asynchronously, even for observers on the current thread, even in -- Gitee From b58b90c6e8d608cc90481c2e1bdfa2c704a02f08 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:35:53 +0000 Subject: [PATCH 04/56] update net/base/network_change_notifier.h. Signed-off-by: taoxueao --- net/base/network_change_notifier.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/base/network_change_notifier.h b/net/base/network_change_notifier.h index fcebdd0c64..fd1239ee9d 100644 --- a/net/base/network_change_notifier.h +++ b/net/base/network_change_notifier.h @@ -568,6 +568,12 @@ class NET_EXPORT NetworkChangeNotifier { // Returns a string equivalent to |type|. static const char* ConnectionTypeToString(ConnectionType type); +#if BUILDFLAG(IS_OHOS) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + static const std::vector GetDnsServers(); +#endif +#endif + // Allows a second NetworkChangeNotifier to be created for unit testing, so // the test suite can create a MockNetworkChangeNotifier, but platform // specific NetworkChangeNotifiers can also be created for testing. To use, -- Gitee From 01190a9f7fef4e91e688ac7a6a4b4b399129f736 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:40:04 +0000 Subject: [PATCH 05/56] update net/base/network_change_notifier_passive.cc. Signed-off-by: taoxueao --- net/base/network_change_notifier_passive.cc | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/net/base/network_change_notifier_passive.cc b/net/base/network_change_notifier_passive.cc index 80d0898309..cfd3efed46 100644 --- a/net/base/network_change_notifier_passive.cc +++ b/net/base/network_change_notifier_passive.cc @@ -27,6 +27,9 @@ #if BUILDFLAG(IS_OHOS) #include "base/logging.h" +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +#include "net/dns/public/dns_protocol.h" +#endif #endif namespace { @@ -247,6 +250,18 @@ void NetworkChangeNotifierPassive::OnConnectionChanged( base::AutoLock scoped_lock(lock_); connection_type_ = connection_type; } + +#if BUILDFLAG(IS_OHOS) && defined(OHOS_EX_HTTP_DNS_FALLBACK) + std::vector dns_servers; + if (ohos_net_conn_adapter_) { + dns_servers = ohos_net_conn_adapter_->GetDnsServers(); + } + { + base::AutoLock scoped_lock(dns_server_lock_); + dns_servers_ = std::move(dns_servers); + } +#endif + NetworkChangeNotifier::NotifyObserversOfConnectionTypeChange(); } @@ -306,4 +321,12 @@ NetworkChangeNotifierPassive::NetworkChangeCalculatorParamsPassive() { return params; } +#if BUILDFLAG(IS_OHOS) && defined(OHOS_EX_HTTP_DNS_FALLBACK) +const std::vector +NetworkChangeNotifierPassive::GetCurrentDnsServers() { + base::AutoLock scoped_lock(dns_server_lock_); + return dns_servers_; +} +#endif + } // namespace net -- Gitee From c736b88c82ab42f1ec4123c6b29511b146c51258 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:41:58 +0000 Subject: [PATCH 06/56] update net/base/network_change_notifier_passive.h. Signed-off-by: taoxueao --- net/base/network_change_notifier_passive.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/net/base/network_change_notifier_passive.h b/net/base/network_change_notifier_passive.h index a12c10ead1..820a10b018 100644 --- a/net/base/network_change_notifier_passive.h +++ b/net/base/network_change_notifier_passive.h @@ -49,6 +49,10 @@ class NET_EXPORT NetworkChangeNotifierPassive : public NetworkChangeNotifier { NetworkChangeNotifier::ConnectionType connection_type, NetworkChangeNotifier::ConnectionSubtype connection_subtype); +#if BUILDFLAG(IS_OHOS) && defined(OHOS_EX_HTTP_DNS_FALLBACK) + const std::vector GetCurrentDnsServers() override; +#endif + protected: // NetworkChangeNotifier overrides. NetworkChangeNotifier::ConnectionType GetCurrentConnectionType() @@ -89,6 +93,11 @@ class NET_EXPORT NetworkChangeNotifierPassive : public NetworkChangeNotifier { std::unique_ptr ohos_net_conn_adapter_; #endif double max_bandwidth_mbps_; // Guarded by |lock_|. + +#if BUILDFLAG(IS_OHOS) && defined(OHOS_EX_HTTP_DNS_FALLBACK) + mutable base::Lock dns_server_lock_; + std::vector dns_servers_; +#endif }; } // namespace net -- Gitee From abf989b20b5d7d007aba345c438781a6d40db9c6 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:43:49 +0000 Subject: [PATCH 07/56] update net/dns/BUILD.gn. Signed-off-by: taoxueao --- net/dns/BUILD.gn | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn index 533f53434e..8a510ca81f 100644 --- a/net/dns/BUILD.gn +++ b/net/dns/BUILD.gn @@ -129,6 +129,12 @@ source_set("dns") { "dns_config_service_linux.cc", "dns_config_service_linux.h", ] + } else if (is_ohos && defined(ohos_ex_http_dns_fallback) && + ohos_ex_http_dns_fallback) { + sources += [ + "dns_config_service_ohos.cc", + "dns_config_service_ohos.h", + ] } else if (is_posix) { sources += [ "dns_config_service_posix.cc", -- Gitee From d7cb5f02953f6170c1f24ddebd46d9dc125a0763 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:44:41 +0000 Subject: [PATCH 08/56] update net/dns/context_host_resolver.cc. Signed-off-by: taoxueao --- net/dns/context_host_resolver.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/net/dns/context_host_resolver.cc b/net/dns/context_host_resolver.cc index aa5d8cc3c0..5980b4ef17 100644 --- a/net/dns/context_host_resolver.cc +++ b/net/dns/context_host_resolver.cc @@ -169,4 +169,13 @@ void ContextHostResolver::SetTickClockForTesting( resolve_context_->host_cache()->set_tick_clock_for_testing(tick_clock); } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +bool ContextHostResolver::CanUseSecureDnsFallback() const { + if (!manager_) { + return false; + } + return manager_->CanUseSecureDnsFallback(resolve_context_.get()); +} +#endif + } // namespace net -- Gitee From 62a9253029da193b2837e915256ac4f41ef1c6b0 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:45:33 +0000 Subject: [PATCH 09/56] update net/dns/context_host_resolver.h. Signed-off-by: taoxueao --- net/dns/context_host_resolver.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/dns/context_host_resolver.h b/net/dns/context_host_resolver.h index 1e8c1352ca..97c63f776a 100644 --- a/net/dns/context_host_resolver.h +++ b/net/dns/context_host_resolver.h @@ -89,6 +89,10 @@ class NET_EXPORT ContextHostResolver : public HostResolver { return resolve_context_.get(); } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool CanUseSecureDnsFallback() const override; +#endif + private: std::unique_ptr owned_manager_; // `manager_` might point to `owned_manager_`. It must be declared last and -- Gitee From 8f6f07cbf1c87847243615ccb7f3119f4ebd7f59 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:46:22 +0000 Subject: [PATCH 10/56] update net/dns/dns_client.cc. Signed-off-by: taoxueao --- net/dns/dns_client.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/net/dns/dns_client.cc b/net/dns/dns_client.cc index db550a7b6e..e00c1832f6 100644 --- a/net/dns/dns_client.cc +++ b/net/dns/dns_client.cc @@ -99,6 +99,17 @@ class DnsClientImpl : public DnsClient { return config && !config->doh_config.servers().empty(); } + #ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool CanUseSecureDnsFallbackTransactions( + ResolveContext* context) const override { + if (context->IsHttpsDnsFallbackEnabled() && + CanUseSecureDnsTransactions()) { + return context->NumAvailableDohServers(session_.get()) > 0; + } + return false; + } +#endif + bool CanUseInsecureDnsTransactions() const override { const DnsConfig* config = GetEffectiveConfig(); return config && config->nameservers.size() > 0 && insecure_enabled_ && -- Gitee From baec62549a06e0f40fd64c851131154517830065 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:47:18 +0000 Subject: [PATCH 11/56] update net/dns/dns_client.h. Signed-off-by: taoxueao --- net/dns/dns_client.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/dns/dns_client.h b/net/dns/dns_client.h index 25dc4d9445..3489ed7de1 100644 --- a/net/dns/dns_client.h +++ b/net/dns/dns_client.h @@ -45,6 +45,11 @@ class NET_EXPORT DnsClient { // probe runners should not be created. virtual bool CanUseSecureDnsTransactions() const = 0; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + virtual bool CanUseSecureDnsFallbackTransactions( + ResolveContext* context) const = 0; +#endif + // Returns true if the DnsClient is able and allowed to make insecure DNS // transactions. If false, insecure transactions should not be created. Will // always be false unless SetInsecureEnabled(true) has been called. -- Gitee From 5766916aef2a62545f8c24aa52fa0ad5d5dde8f5 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:49:42 +0000 Subject: [PATCH 12/56] update net/dns/host_resolver.h. Signed-off-by: taoxueao --- net/dns/host_resolver.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/net/dns/host_resolver.h b/net/dns/host_resolver.h index b538f7514f..733f8c0403 100644 --- a/net/dns/host_resolver.h +++ b/net/dns/host_resolver.h @@ -353,6 +353,12 @@ class NET_EXPORT HostResolver { // Controls the resolver's Secure DNS behavior for this request. SecureDnsPolicy secure_dns_policy = SecureDnsPolicy::kAllow; + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + // If /true/, the dns task type of the request is only secure dns fallback + // type. + bool only_use_secure_fallback = false; +#endif // OHOS_EX_HTTP_DNS_FALLBACK }; // Handler for an ongoing MDNS listening operation. Created by @@ -450,6 +456,10 @@ class NET_EXPORT HostResolver { virtual const URLRequestContext* GetContextForTesting() const; virtual handles::NetworkHandle GetTargetNetworkForTesting() const; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + virtual bool CanUseSecureDnsFallback() const { return false; } +#endif + // Creates a new HostResolver. |manager| must outlive the returned resolver. // // If |mapping_rules| is non-empty, the mapping rules will be applied to -- Gitee From 4f96ecd03cf50505bbc3a747c1bd6059cac5cc0f Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:56:47 +0000 Subject: [PATCH 13/56] update net/dns/host_resolver_manager.h. Signed-off-by: taoxueao --- net/dns/host_resolver_manager.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/net/dns/host_resolver_manager.h b/net/dns/host_resolver_manager.h index 2617812eda..f337b3148c 100644 --- a/net/dns/host_resolver_manager.h +++ b/net/dns/host_resolver_manager.h @@ -251,6 +251,17 @@ class NET_EXPORT HostResolverManager bool check_ipv6_on_wifi_for_testing() const { return check_ipv6_on_wifi_; } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + // Return true if Doh fallback server(s) exist and it/they can resolve + // successfully + bool CanUseSecureDnsFallback(ResolveContext* context) const; + void SetHttpsDnsFallbackData(bool enabled, + const std::string& server_template); + void SetSuspectIpListAndSourceHostList( + const std::vector& ip_list, + const std::vector& host_list); +#endif + handles::NetworkHandle target_network_for_testing() const { return target_network_; } @@ -295,8 +306,12 @@ class NET_EXPORT HostResolverManager CONFIG_PRESET = 7, NAT64 = 8, HOSTS = 9, - +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + SECURE_DNS_FALLBACK = 10, + kMaxValue = SECURE_DNS_FALLBACK, +#else kMaxValue = HOSTS, +#endif }; // Returns true if the task is local, synchronous, and instantaneous. @@ -523,6 +538,11 @@ class NET_EXPORT HostResolverManager std::unique_ptr CreateDohProbeRunner( ResolveContext* resolve_context); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool https_dns_fallback_enabled_{false}; + std::string doh_fallback_server_template_; +#endif + // Used for multicast DNS tasks. Created on first use using // GetOrCreateMndsClient(). std::unique_ptr mdns_socket_factory_; -- Gitee From b38411c4dab21b29d60ac37ac3b80e63a9c9abe2 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 01:59:09 +0000 Subject: [PATCH 14/56] update net/dns/resolve_context.h. Signed-off-by: taoxueao --- net/dns/resolve_context.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/net/dns/resolve_context.h b/net/dns/resolve_context.h index 24e5b6b080..13412b209f 100644 --- a/net/dns/resolve_context.h +++ b/net/dns/resolve_context.h @@ -194,6 +194,14 @@ class NET_EXPORT_PRIVATE ResolveContext : public base::CheckedObserver { return weak_ptr_factory_.GetWeakPtr(); } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetHttpsDnsFallbackEnabled(bool value) { + is_https_dns_fallback_enabled_ = value; + } + + bool IsHttpsDnsFallbackEnabled() { return is_https_dns_fallback_enabled_; } +#endif + private: friend DohDnsServerIterator; friend ClassicDnsServerIterator; @@ -296,6 +304,9 @@ class NET_EXPORT_PRIVATE ResolveContext : public base::CheckedObserver { const IsolationInfo isolation_info_; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool is_https_dns_fallback_enabled_{false}; +#endif base::WeakPtrFactory weak_ptr_factory_{this}; }; -- Gitee From 906da855693869bc33f99cc555b31d6bf6a6cfd6 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:01:16 +0000 Subject: [PATCH 15/56] update net/http/http_cache_transaction.h. Signed-off-by: taoxueao --- net/http/http_cache_transaction.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h index e3dc7eea5a..30777c6e21 100644 --- a/net/http/http_cache_transaction.h +++ b/net/http/http_cache_transaction.h @@ -134,6 +134,9 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { int Start(const HttpRequestInfo* request_info, CompletionOnceCallback callback, const NetLogWithSource& net_log) override; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int RestartWithSecureDnsOnly(CompletionOnceCallback callback) override; +#endif // OHOS_EX_HTTP_DNS_FALLBACK int RestartIgnoringLastError(CompletionOnceCallback callback) override; int RestartWithCertificate(scoped_refptr client_cert, scoped_refptr client_private_key, @@ -414,6 +417,10 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { // error code. int RestartNetworkRequest(); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int RestartNetworkRequestWithSecureDnsOnly(); +#endif // OHOS_EX_HTTP_DNS_FALLBACK + // Called to restart a network transaction with a client certificate. // Returns network error code. int RestartNetworkRequestWithCertificate( -- Gitee From 07116c56477299f58f7f1ae32c9fd00b340b9458 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:02:35 +0000 Subject: [PATCH 16/56] update net/http/http_network_session.cc. Signed-off-by: taoxueao --- net/http/http_network_session.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 2fafd95855..411cf6e21c 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc @@ -424,4 +424,10 @@ void HttpNetworkSession::SetConnectTimeout(int seconds) { websocket_socket_pool_manager_->SetConnectTimeout(seconds); } #endif + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +void HttpNetworkSession::SetConnectJobWithSecureDnsOnlyTimeout(int seconds) { + normal_socket_pool_manager_->SetConnectJobWithSecureDnsOnlyTimeout(seconds); +} +#endif } // namespace net -- Gitee From d7df09130632b83de848af251456330b96d227fb Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:03:19 +0000 Subject: [PATCH 17/56] update net/http/http_network_session.h. Signed-off-by: taoxueao --- net/http/http_network_session.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 46df1a5efc..863e24d41c 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h @@ -320,6 +320,9 @@ class NET_EXPORT HttpNetworkSession { #ifdef OHOS_EX_NETWORK_CONNECTION void SetConnectTimeout(int seconds); #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetConnectJobWithSecureDnsOnlyTimeout(int seconds); +#endif private: friend class HttpNetworkSessionPeer; -- Gitee From af142a9c95272c32375d4e458689e9ba7ac41161 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:04:55 +0000 Subject: [PATCH 18/56] update net/http/http_network_transaction.h. Signed-off-by: taoxueao --- net/http/http_network_transaction.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/net/http/http_network_transaction.h b/net/http/http_network_transaction.h index 8e6ade134f..b25f0eb1e2 100644 --- a/net/http/http_network_transaction.h +++ b/net/http/http_network_transaction.h @@ -63,6 +63,9 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction int Start(const HttpRequestInfo* request_info, CompletionOnceCallback callback, const NetLogWithSource& net_log) override; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int RestartWithSecureDnsOnly(CompletionOnceCallback callback) override; +#endif int RestartIgnoringLastError(CompletionOnceCallback callback) override; int RestartWithCertificate(scoped_refptr client_cert, scoped_refptr client_private_key, @@ -144,6 +147,10 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction STATE_NOTIFY_BEFORE_CREATE_STREAM, STATE_CREATE_STREAM, STATE_CREATE_STREAM_COMPLETE, +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + STATE_CREATE_FALLBACK_STREAM_WITH_SECURE_DNS_ONLY, + STATE_CREATE_FALLBACK_STREAM_WITH_SECURE_DNS_ONLY_COMPLETE, +#endif STATE_INIT_STREAM, STATE_INIT_STREAM_COMPLETE, STATE_CONNECTED_CALLBACK, @@ -186,6 +193,10 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction int DoNotifyBeforeCreateStream(); int DoCreateStream(); int DoCreateStreamComplete(int result); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int DoCreateFallbackStreamWithSecureDnsOnly(); + int DoCreateFallbackStreamWithSecureDnsOnlyComplete(int result); +#endif int DoInitStream(); int DoInitStreamComplete(int result); int DoConnectedCallback(); @@ -494,6 +505,10 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction bool close_connection_on_destruction_ = false; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool stream_created_ = false; +#endif + absl::optional quic_protocol_error_retry_delay_; }; -- Gitee From 8a6568cd71bbed6432ffe78cb676a066059d0ffd Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:21:04 +0000 Subject: [PATCH 19/56] update net/http/http_response_info.h. Signed-off-by: taoxueao --- net/http/http_response_info.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/http/http_response_info.h b/net/http/http_response_info.h index 1455d3771b..64ee6d77ea 100644 --- a/net/http/http_response_info.h +++ b/net/http/http_response_info.h @@ -273,6 +273,10 @@ class NET_EXPORT HttpResponseInfo { absl::optional browser_run_id; static std::string ConnectionInfoToString(ConnectionInfo connection_info); + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool secure_dns_only = false; +#endif }; } // namespace net -- Gitee From 4ca4da2e3dff010cc257bf9e6ba05e4eed9b3908 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:23:31 +0000 Subject: [PATCH 20/56] update net/http/http_stream_factory_job.cc. Signed-off-by: taoxueao --- net/http/http_stream_factory_job.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc index 61809e3c65..e6fb269dc2 100644 --- a/net/http/http_stream_factory_job.cc +++ b/net/http/http_stream_factory_job.cc @@ -921,6 +921,10 @@ int HttpStreamFactory::Job::DoInitConnectionImpl() { request_info_.network_anonymization_key, request_info_.secure_dns_policy, request_info_.socket_tag, net_log_, connection_.get(), io_callback_, proxy_auth_callback +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + request_info_.secure_dns_only +#endif #if BUILDFLAG(IS_OHOS) , from_preload_ -- Gitee From 507e460fbee952ce5abf29da353e993625cbfd4b Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:24:24 +0000 Subject: [PATCH 21/56] update net/http/http_transaction.h. Signed-off-by: taoxueao --- net/http/http_transaction.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/http/http_transaction.h b/net/http/http_transaction.h index bf59d6f6b6..fbdb2ade3d 100644 --- a/net/http/http_transaction.h +++ b/net/http/http_transaction.h @@ -86,6 +86,10 @@ class NET_EXPORT_PRIVATE HttpTransaction { CompletionOnceCallback callback, const NetLogWithSource& net_log) = 0; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + virtual int RestartWithSecureDnsOnly(CompletionOnceCallback callback) = 0; +#endif + // Restarts the HTTP transaction, ignoring the last error. This call can // only be made after a call to Start (or RestartIgnoringLastError) failed. // Once Read has been called, this method cannot be called. This method is -- Gitee From 721f6ad718402418a4e4c642c6198fa1140e9025 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:26:28 +0000 Subject: [PATCH 22/56] update net/socket/client_socket_pool.cc. Signed-off-by: taoxueao --- net/socket/client_socket_pool.cc | 36 +++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/net/socket/client_socket_pool.cc b/net/socket/client_socket_pool.cc index ee381b3684..e39a209064 100644 --- a/net/socket/client_socket_pool.cc +++ b/net/socket/client_socket_pool.cc @@ -80,14 +80,24 @@ ClientSocketPool::GroupId::GroupId( url::SchemeHostPort destination, PrivacyMode privacy_mode, NetworkAnonymizationKey network_anonymization_key, - SecureDnsPolicy secure_dns_policy) + SecureDnsPolicy secure_dns_policy +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only +#endif + ) : destination_(std::move(destination)), privacy_mode_(privacy_mode), network_anonymization_key_( NetworkAnonymizationKey::IsPartitioningEnabled() ? std::move(network_anonymization_key) : NetworkAnonymizationKey()), - secure_dns_policy_(secure_dns_policy) { + secure_dns_policy_(secure_dns_policy) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only_(secure_dns_only) +#endif +{ DCHECK(destination_.IsValid()); // ClientSocketPool only expected to be used for HTTP/HTTPS/WS/WSS cases, and @@ -129,6 +139,12 @@ std::string ClientSocketPool::GroupId::ToString() const { break; } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (secure_dns_only_) { + result = "sdo/" + result; + } +#endif // OHOS_EX_HTTP_DNS_FALLBACK + return result; } @@ -208,7 +224,12 @@ std::unique_ptr ClientSocketPool::CreateConnectJob( socket_params->ssl_config_for_proxy(), is_for_websockets_, group_id.privacy_mode(), resolution_callback, request_priority, socket_tag, group_id.network_anonymization_key(), - group_id.secure_dns_policy(), common_connect_job_params_, delegate); + group_id.secure_dns_policy(), common_connect_job_params_, delegate +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + group_id.secure_dns_only() +#endif + ); } #ifdef OHOS_EX_NETWORK_CONNECTION @@ -221,4 +242,13 @@ int ClientSocketPool::GetConnectTimeout() { } #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +void ClientSocketPool::SetConnectJobWithSecureDnsOnlyTimeout(int seconds) { + connect_job_with_secure_dns_only_timeout_ = seconds; +} + +int ClientSocketPool::GetConnectJobWithSecureDnsOnlyTimeout() { + return connect_job_with_secure_dns_only_timeout_; +} +#endif } // namespace net -- Gitee From 989b772af3336c19bff827f8f91413efe828c8a7 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:31:41 +0000 Subject: [PATCH 23/56] update net/socket/client_socket_pool.h. Signed-off-by: taoxueao --- net/socket/client_socket_pool.h | 42 ++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/net/socket/client_socket_pool.h b/net/socket/client_socket_pool.h index eb67dfcb4b..5d7caad7f0 100644 --- a/net/socket/client_socket_pool.h +++ b/net/socket/client_socket_pool.h @@ -100,7 +100,12 @@ class NET_EXPORT ClientSocketPool : public LowerLayeredPool { GroupId(url::SchemeHostPort destination, PrivacyMode privacy_mode, NetworkAnonymizationKey network_anonymization_key, - SecureDnsPolicy secure_dns_policy); + SecureDnsPolicy secure_dns_policy +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only = false +#endif + ); GroupId(const GroupId& group_id); ~GroupId(); @@ -118,9 +123,22 @@ class NET_EXPORT ClientSocketPool : public LowerLayeredPool { SecureDnsPolicy secure_dns_policy() const { return secure_dns_policy_; } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool secure_dns_only() const { return secure_dns_only_; } +#endif // OHOS_EX_HTTP_DNS_FALLBACK + // Returns the group ID as a string, for logging. std::string ToString() const; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool operator==(const GroupId& other) const { + return std::tie(destination_, privacy_mode_, network_anonymization_key_, + secure_dns_policy_, secure_dns_only_) == + std::tie(other.destination_, other.privacy_mode_, + other.network_anonymization_key_, + other.secure_dns_policy_, other.secure_dns_only_); + } +#else bool operator==(const GroupId& other) const { return std::tie(destination_, privacy_mode_, network_anonymization_key_, secure_dns_policy_) == @@ -128,7 +146,17 @@ class NET_EXPORT ClientSocketPool : public LowerLayeredPool { other.network_anonymization_key_, other.secure_dns_policy_); } +#endif // OHOS_EX_HTTP_DNS_FALLBACK +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool operator<(const GroupId& other) const { + return std::tie(destination_, privacy_mode_, network_anonymization_key_, + secure_dns_policy_, secure_dns_only_) < + std::tie(other.destination_, other.privacy_mode_, + other.network_anonymization_key_, + other.secure_dns_policy_, other.secure_dns_only_); + } +#else bool operator<(const GroupId& other) const { return std::tie(destination_, privacy_mode_, network_anonymization_key_, secure_dns_policy_) < @@ -136,6 +164,7 @@ class NET_EXPORT ClientSocketPool : public LowerLayeredPool { other.network_anonymization_key_, other.secure_dns_policy_); } +#endif // OHOS_EX_HTTP_DNS_FALLBACK private: // The endpoint of the final destination (not the proxy). @@ -149,6 +178,10 @@ class NET_EXPORT ClientSocketPool : public LowerLayeredPool { // Controls the Secure DNS behavior to use when creating this socket. SecureDnsPolicy secure_dns_policy_; + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool secure_dns_only_ = false; +#endif // OHOS_EX_HTTP_DNS_FALLBACK }; // Parameters that, in combination with GroupId, proxy, websocket information, @@ -357,6 +390,10 @@ class NET_EXPORT ClientSocketPool : public LowerLayeredPool { void SetConnectTimeout(int timeout_override); int GetConnectTimeout(); #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetConnectJobWithSecureDnsOnlyTimeout(int seconds); + int GetConnectJobWithSecureDnsOnlyTimeout(); +#endif protected: ClientSocketPool(bool is_for_websockets, @@ -380,6 +417,9 @@ class NET_EXPORT ClientSocketPool : public LowerLayeredPool { #ifdef OHOS_EX_NETWORK_CONNECTION int timeout_override_{0}; #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int connect_job_with_secure_dns_only_timeout_{15}; +#endif private: const bool is_for_websockets_; -- Gitee From 67787009dc554e3ca1a62e018de6df18383ee564 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:33:49 +0000 Subject: [PATCH 24/56] update net/socket/client_socket_pool_manager.cc. Signed-off-by: taoxueao --- net/socket/client_socket_pool_manager.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc index 1761c1b39b..077d899ce4 100644 --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc @@ -103,6 +103,10 @@ int InitSocketPoolHelper( HttpNetworkSession::SocketPoolType socket_pool_type, CompletionOnceCallback callback, const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only = false +#endif #if BUILDFLAG(IS_OHOS) , bool from_preload = false @@ -121,7 +125,12 @@ int InitSocketPoolHelper( ClientSocketPool::GroupId connection_group( std::move(endpoint), privacy_mode, std::move(network_anonymization_key), - secure_dns_policy); + secure_dns_policy +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only +#endif + ); scoped_refptr socket_params = CreateSocketParams(connection_group, proxy_info.proxy_server(), ssl_config_for_origin, ssl_config_for_proxy); @@ -243,6 +252,10 @@ int InitSocketHandleForHttpRequest( ClientSocketHandle* socket_handle, CompletionOnceCallback callback, const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only +#endif #if BUILDFLAG(IS_OHOS) , bool from_preload @@ -256,6 +269,10 @@ int InitSocketHandleForHttpRequest( std::move(network_anonymization_key), secure_dns_policy, socket_tag, net_log, 0, socket_handle, HttpNetworkSession::NORMAL_SOCKET_POOL, std::move(callback), proxy_auth_callback +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only +#endif #if BUILDFLAG(IS_OHOS) , from_preload -- Gitee From d28ff22218bfa939be85beb6164480ecf8d5fcc6 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:35:08 +0000 Subject: [PATCH 25/56] update net/socket/client_socket_pool_manager.h. Signed-off-by: taoxueao --- net/socket/client_socket_pool_manager.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/socket/client_socket_pool_manager.h b/net/socket/client_socket_pool_manager.h index 4a7148902c..52c51ba0df 100644 --- a/net/socket/client_socket_pool_manager.h +++ b/net/socket/client_socket_pool_manager.h @@ -73,6 +73,9 @@ class NET_EXPORT_PRIVATE ClientSocketPoolManager { #ifdef OHOS_EX_NETWORK_CONNECTION virtual void SetConnectTimeout(int seconds) = 0; #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + virtual void SetConnectJobWithSecureDnsOnlyTimeout(int seconds) = 0; +#endif }; // A helper method that uses the passed in proxy information to initialize a @@ -98,6 +101,10 @@ int InitSocketHandleForHttpRequest( ClientSocketHandle* socket_handle, CompletionOnceCallback callback, const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only = false +#endif #if BUILDFLAG(IS_OHOS) , bool from_preload = false -- Gitee From 2428a197caa467ffd31b83cf2cc90601f2abaa25 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:36:06 +0000 Subject: [PATCH 26/56] update net/socket/client_socket_pool_manager_impl.cc. Signed-off-by: taoxueao --- net/socket/client_socket_pool_manager_impl.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/net/socket/client_socket_pool_manager_impl.cc b/net/socket/client_socket_pool_manager_impl.cc index c8362d628f..3206071a0f 100644 --- a/net/socket/client_socket_pool_manager_impl.cc +++ b/net/socket/client_socket_pool_manager_impl.cc @@ -91,6 +91,10 @@ ClientSocketPool* ClientSocketPoolManagerImpl::GetSocketPool( #ifdef OHOS_EX_NETWORK_CONNECTION new_pool->SetConnectTimeout(timeout_override_); #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + new_pool->SetConnectJobWithSecureDnsOnlyTimeout( + connect_job_with_secure_dns_timeout_); +#endif std::pair ret = socket_pools_.insert(std::make_pair(proxy_server, std::move(new_pool))); @@ -124,4 +128,14 @@ void ClientSocketPoolManagerImpl::SetConnectTimeout(int seconds) { } } #endif + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +void ClientSocketPoolManagerImpl::SetConnectJobWithSecureDnsOnlyTimeout( + int seconds) { + connect_job_with_secure_dns_timeout_ = seconds; + for (const auto& it : socket_pools_) { + it.second->SetConnectJobWithSecureDnsOnlyTimeout(seconds); + } +} +#endif } // namespace net -- Gitee From db4bcde18161a3aa3928d527bf36b5413d6fa02c Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:36:56 +0000 Subject: [PATCH 27/56] update net/socket/client_socket_pool_manager_impl.h. Signed-off-by: taoxueao --- net/socket/client_socket_pool_manager_impl.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/socket/client_socket_pool_manager_impl.h b/net/socket/client_socket_pool_manager_impl.h index c967a25598..da777d7d3b 100644 --- a/net/socket/client_socket_pool_manager_impl.h +++ b/net/socket/client_socket_pool_manager_impl.h @@ -54,6 +54,10 @@ class NET_EXPORT_PRIVATE ClientSocketPoolManagerImpl void SetConnectTimeout(int seconds) override; #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetConnectJobWithSecureDnsOnlyTimeout(int seconds) override; +#endif + private: using SocketPoolMap = std::map>; @@ -69,6 +73,9 @@ class NET_EXPORT_PRIVATE ClientSocketPoolManagerImpl SocketPoolMap socket_pools_; #ifdef OHOS_EX_NETWORK_CONNECTION int timeout_override_{0}; +#endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int connect_job_with_secure_dns_timeout_{0}; #endif THREAD_CHECKER(thread_checker_); }; -- Gitee From 16aa38067fd2ed39e9804025689fdb73c1bbc2db Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:44:36 +0000 Subject: [PATCH 28/56] update net/socket/connect_job_factory.cc. Signed-off-by: taoxueao --- net/socket/connect_job_factory.cc | 42 ++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/net/socket/connect_job_factory.cc b/net/socket/connect_job_factory.cc index 778faf5c00..584032ac12 100644 --- a/net/socket/connect_job_factory.cc +++ b/net/socket/connect_job_factory.cc @@ -117,13 +117,23 @@ std::unique_ptr ConnectJobFactory::CreateConnectJob( const NetworkAnonymizationKey& network_anonymization_key, SecureDnsPolicy secure_dns_policy, const CommonConnectJobParams* common_connect_job_params, - ConnectJob::Delegate* delegate) const { + ConnectJob::Delegate* delegate +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only +#endif +) const { return CreateConnectJob(Endpoint(std::move(endpoint)), proxy_server, proxy_annotation_tag, ssl_config_for_origin, ssl_config_for_proxy, force_tunnel, privacy_mode, resolution_callback, request_priority, socket_tag, network_anonymization_key, secure_dns_policy, - common_connect_job_params, delegate); + common_connect_job_params, delegate +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only +#endif + ); } std::unique_ptr ConnectJobFactory::CreateConnectJob( @@ -141,7 +151,12 @@ std::unique_ptr ConnectJobFactory::CreateConnectJob( const NetworkAnonymizationKey& network_anonymization_key, SecureDnsPolicy secure_dns_policy, const CommonConnectJobParams* common_connect_job_params, - ConnectJob::Delegate* delegate) const { + ConnectJob::Delegate* delegate +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only +#endif +) const { SchemelessEndpoint schemeless_endpoint{using_ssl, std::move(endpoint)}; return CreateConnectJob(std::move(schemeless_endpoint), proxy_server, proxy_annotation_tag, ssl_config_for_origin, @@ -179,7 +194,12 @@ std::unique_ptr ConnectJobFactory::CreateConnectJob( secure_dns_policy, resolution_callback, proxy_server.is_secure_http_like() ? SupportedProtocolsFromSSLConfig(*ssl_config_for_proxy) - : no_alpn_protocols); + : no_alpn_protocols +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only +#endif + ); if (proxy_server.is_http_like()) { scoped_refptr ssl_params; @@ -220,7 +240,12 @@ std::unique_ptr ConnectJobFactory::CreateConnectJob( ssl_tcp_params = base::MakeRefCounted( ToTransportEndpoint(endpoint), network_anonymization_key, secure_dns_policy, resolution_callback, - SupportedProtocolsFromSSLConfig(*ssl_config_for_origin)); + SupportedProtocolsFromSSLConfig(*ssl_config_for_origin) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only +#endif + ); } // TODO(crbug.com/1206799): Pass `endpoint` directly (preserving scheme // when available)? @@ -249,7 +274,12 @@ std::unique_ptr ConnectJobFactory::CreateConnectJob( DCHECK(proxy_server.is_direct()); auto tcp_params = base::MakeRefCounted( ToTransportEndpoint(endpoint), network_anonymization_key, - secure_dns_policy, resolution_callback, no_alpn_protocols); + secure_dns_policy, resolution_callback, no_alpn_protocols +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only +#endif + ); return transport_connect_job_factory_->Create( request_priority, socket_tag, common_connect_job_params, tcp_params, delegate, /*net_log=*/nullptr); -- Gitee From d98d8778d690cd3a9e7173b169d7277737bdfddd Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:46:01 +0000 Subject: [PATCH 29/56] update net/socket/connect_job_factory.h. Signed-off-by: taoxueao --- net/socket/connect_job_factory.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/net/socket/connect_job_factory.h b/net/socket/connect_job_factory.h index 6ea30912cd..57d55d76c8 100644 --- a/net/socket/connect_job_factory.h +++ b/net/socket/connect_job_factory.h @@ -76,7 +76,12 @@ class NET_EXPORT_PRIVATE ConnectJobFactory { const NetworkAnonymizationKey& network_anonymization_key, SecureDnsPolicy secure_dns_policy, const CommonConnectJobParams* common_connect_job_params, - ConnectJob::Delegate* delegate) const; + ConnectJob::Delegate* delegate +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only = false +#endif + ) const; // TODO(crbug.com/1206799): Rename to discourage use except in cases where the // scheme is non-standard or unknown. @@ -112,7 +117,12 @@ class NET_EXPORT_PRIVATE ConnectJobFactory { const NetworkAnonymizationKey& network_anonymization_key, SecureDnsPolicy secure_dns_policy, const CommonConnectJobParams* common_connect_job_params, - ConnectJob::Delegate* delegate) const; + ConnectJob::Delegate* delegate +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only = false +#endif + ) const; std::unique_ptr http_proxy_connect_job_factory_; std::unique_ptr socks_connect_job_factory_; -- Gitee From cb79b790b69d37dbeefedad14077b3998d03c00c Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:46:44 +0000 Subject: [PATCH 30/56] update net/socket/mock_client_socket_pool_manager.h. Signed-off-by: taoxueao --- net/socket/mock_client_socket_pool_manager.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/socket/mock_client_socket_pool_manager.h b/net/socket/mock_client_socket_pool_manager.h index def60f5c7f..1a88e5316f 100644 --- a/net/socket/mock_client_socket_pool_manager.h +++ b/net/socket/mock_client_socket_pool_manager.h @@ -37,6 +37,9 @@ class MockClientSocketPoolManager : public ClientSocketPoolManager { void CloseIdleSockets(const char* net_log_reason_utf8) override; ClientSocketPool* GetSocketPool(const ProxyServer& proxy_server) override; base::Value SocketPoolInfoToValue() const override; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetConnectJobWithSecureDnsOnlyTimeout(int seconds) override {} +#endif private: using ClientSocketPoolMap = -- Gitee From 06a66a56dd3a8df73ee4a32933911140f2771747 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:48:57 +0000 Subject: [PATCH 31/56] update net/socket/transport_client_socket_pool.cc. Signed-off-by: taoxueao --- net/socket/transport_client_socket_pool.cc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc index 1ac54b77a2..45bf4752d8 100644 --- a/net/socket/transport_client_socket_pool.cc +++ b/net/socket/transport_client_socket_pool.cc @@ -463,8 +463,16 @@ int TransportClientSocketPool::RequestSocketInternal( return NetLogCreateConnectJobParams(false /* backup_job */, &group_id); }); #ifdef OHOS_EX_NETWORK_CONNECTION +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (group_id.secure_dns_only()) { + connect_job->SetConnectTimeout(connect_job_with_secure_dns_only_timeout_); + } else { + connect_job->SetConnectTimeout(timeout_override_); + } +#else connect_job.get()->SetConnectTimeout(timeout_override_); -#endif +#endif // OHOS_EX_HTTP_DNS_FALLBACK +#endif // OHOS_EX_NETWORK_CONNECTION int rv = connect_job->Connect(); if (rv == ERR_IO_PENDING) { @@ -1653,8 +1661,17 @@ void TransportClientSocketPool::Group::OnBackupJobTimerFired( }); ConnectJob* backup_job = owned_backup_job.get(); #ifdef OHOS_EX_NETWORK_CONNECTION +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (group_id.secure_dns_only()) { + backup_job->SetConnectTimeout( + client_socket_pool_->GetConnectJobWithSecureDnsOnlyTimeout()); + } else { + backup_job->SetConnectTimeout(client_socket_pool_->GetConnectTimeout()); + } +#else backup_job->SetConnectTimeout(client_socket_pool_->GetConnectTimeout()); -#endif +#endif // OHOS_EX_HTTP_DNS_FALLBACK +#endif // OHOS_EX_NETWORK_CONNECTION AddJob(std::move(owned_backup_job), false); client_socket_pool_->connecting_socket_count_++; int rv = backup_job->Connect(); -- Gitee From 21818619a762b120f0a282ea747955497c67f676 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:50:33 +0000 Subject: [PATCH 32/56] update net/socket/transport_connect_job.cc. Signed-off-by: taoxueao --- net/socket/transport_connect_job.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/net/socket/transport_connect_job.cc b/net/socket/transport_connect_job.cc index 7010a3d17c..c93d362852 100644 --- a/net/socket/transport_connect_job.cc +++ b/net/socket/transport_connect_job.cc @@ -55,12 +55,23 @@ TransportSocketParams::TransportSocketParams( NetworkAnonymizationKey network_anonymization_key, SecureDnsPolicy secure_dns_policy, OnHostResolutionCallback host_resolution_callback, - base::flat_set supported_alpns) + base::flat_set supported_alpns +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only +#endif + ) : destination_(std::move(destination)), network_anonymization_key_(std::move(network_anonymization_key)), secure_dns_policy_(secure_dns_policy), host_resolution_callback_(std::move(host_resolution_callback)), - supported_alpns_(std::move(supported_alpns)) { + + supported_alpns_(std::move(supported_alpns)) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + secure_dns_only_(secure_dns_only) +#endif +{ #if DCHECK_IS_ON() auto* scheme_host_port = absl::get_if(&destination_); if (scheme_host_port) { @@ -260,6 +271,11 @@ int TransportConnectJob::DoResolveHost() { HostResolver::ResolveHostParameters parameters; parameters.initial_priority = priority(); parameters.secure_dns_policy = params_->secure_dns_policy(); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (host_resolver()->CanUseSecureDnsFallback()) { + parameters.only_use_secure_fallback = params_->secure_dns_only(); + } +#endif // OHOS_EX_HTTP_DNS_FALLBACK if (absl::holds_alternative(params_->destination())) { request_ = host_resolver()->CreateRequest( absl::get(params_->destination()), -- Gitee From 072041c9faa199934a2e1f1cd50b623b5d4a8809 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:53:56 +0000 Subject: [PATCH 33/56] update net/socket/transport_connect_job.h. Signed-off-by: taoxueao --- net/socket/transport_connect_job.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/net/socket/transport_connect_job.h b/net/socket/transport_connect_job.h index 19c2f2bbdc..1c9129a764 100644 --- a/net/socket/transport_connect_job.h +++ b/net/socket/transport_connect_job.h @@ -55,7 +55,12 @@ class NET_EXPORT_PRIVATE TransportSocketParams NetworkAnonymizationKey network_anonymization_key, SecureDnsPolicy secure_dns_policy, OnHostResolutionCallback host_resolution_callback, - base::flat_set supported_alpns); + base::flat_set supported_alpns +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + , + bool secure_dns_only = false +#endif + ); TransportSocketParams(const TransportSocketParams&) = delete; TransportSocketParams& operator=(const TransportSocketParams&) = delete; @@ -71,6 +76,9 @@ class NET_EXPORT_PRIVATE TransportSocketParams const base::flat_set& supported_alpns() const { return supported_alpns_; } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool secure_dns_only() const { return secure_dns_only_; } +#endif private: friend class base::RefCounted; @@ -81,6 +89,9 @@ class NET_EXPORT_PRIVATE TransportSocketParams const SecureDnsPolicy secure_dns_policy_; const OnHostResolutionCallback host_resolution_callback_; const base::flat_set supported_alpns_; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + const bool secure_dns_only_; +#endif }; // TransportConnectJob handles the host resolution necessary for socket creation -- Gitee From 07958cbe6b58492092904bf30d339d8ac9c8cbe2 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:57:26 +0000 Subject: [PATCH 34/56] update net/url_request/url_request_context.cc. Signed-off-by: taoxueao --- net/url_request/url_request_context.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/net/url_request/url_request_context.cc b/net/url_request/url_request_context.cc index b080d5133b..f78660a371 100644 --- a/net/url_request/url_request_context.cc +++ b/net/url_request/url_request_context.cc @@ -267,4 +267,24 @@ void URLRequestContext::SetConnectTimeout(int seconds) { } #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +void URLRequestContext::SetConnectJobWithSecureDnsOnlyTimeout(int second) { + HttpTransactionFactory* transaction_factory = http_transaction_factory(); + if (!transaction_factory) { + return; + } + HttpNetworkSession* network_session = transaction_factory->GetSession(); + if (!network_session) { + return; + } + network_session->SetConnectJobWithSecureDnsOnlyTimeout(second); +} + +bool URLRequestContext::CanUseSecureDnsFallback() const { + if (!host_resolver()) { + return false; + } + return host_resolver()->CanUseSecureDnsFallback(); +} +#endif } // namespace net -- Gitee From df8d9b498f489efca750348b6d187750fbe37682 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:58:11 +0000 Subject: [PATCH 35/56] update net/url_request/url_request_context.h. Signed-off-by: taoxueao --- net/url_request/url_request_context.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/url_request/url_request_context.h b/net/url_request/url_request_context.h index a9853aec7b..ad33acc0b4 100644 --- a/net/url_request/url_request_context.h +++ b/net/url_request/url_request_context.h @@ -242,6 +242,10 @@ class NET_EXPORT URLRequestContext final { #ifdef OHOS_EX_NETWORK_CONNECTION void SetConnectTimeout(int seconds); #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetConnectJobWithSecureDnsOnlyTimeout(int second); + bool CanUseSecureDnsFallback() const; +#endif #if BUILDFLAG(IS_OHOS) base::WeakPtr GetWeakPtr() { -- Gitee From 89d619991317f56890360c7e6085210f2a899592 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 02:59:52 +0000 Subject: [PATCH 36/56] update net/url_request/url_request_http_job.cc. Signed-off-by: taoxueao --- net/url_request/url_request_http_job.cc | 133 ++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 5141bfdf1a..a4cdc8c2d2 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -99,6 +99,13 @@ #include "net/android/network_library.h" #endif +#if BUILDFLAG(IS_OHOS) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +#include "base/command_line.h" +#include "content/public/common/content_switches.h" +#endif +#endif + namespace { base::Value::Dict CookieInclusionStatusNetLogParams( @@ -991,8 +998,134 @@ void URLRequestHttpJob::ProcessStrictTransportSecurityHeader() { security_state->AddHSTSHeader(request_info_.url.host(), value); } +#if BUILDFLAG(IS_OHOS) +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +bool URLRequestHttpJob::CanRetryWithSecureDnsOnly(int net_error) { + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableNwebExHttpDnsFallback)) { + return false; + } + + if (net_error == net::OK) { + return false; + } + + if (request_->isolation_info().request_type() != + IsolationInfo::RequestType::kMainFrame) { + LOG(INFO) << "DOH-Fallback request is not mainframe"; + return false; + } + + if (transaction_ && transaction_->GetResponseInfo() && + transaction_->GetResponseInfo() + ->resolve_error_info.is_secure_network_error) { + LOG(INFO) << "DOH-Fallback won't retry for is_secure_network_error is " + "true"; + return false; + } + + if (!request_->context()->CanUseSecureDnsFallback()) { + LOG(INFO) << "DOH-Fallback can't use secure dns fallback"; + return false; + } + + // The following net errors will retry to use httpdns to resolve the ip + // in the connect phase, and connect again. + if (net_error == net::ERR_TIMED_OUT || + net_error == net::ERR_CONNECTION_CLOSED || + net_error == net::ERR_CONNECTION_RESET || + net_error == net::ERR_CONNECTION_REFUSED || + net_error == net::ERR_CONNECTION_ABORTED || + net_error == net::ERR_CONNECTION_FAILED || + net_error == net::ERR_NAME_NOT_RESOLVED || + net_error == net::ERR_ADDRESS_INVALID || + net_error == net::ERR_ADDRESS_UNREACHABLE || + net_error == net::ERR_TUNNEL_CONNECTION_FAILED || + net_error == net::ERR_CONNECTION_TIMED_OUT || + net_error == net::ERR_SOCKS_CONNECTION_FAILED || + net_error == net::ERR_SOCKS_CONNECTION_HOST_UNREACHABLE || + net_error == net::ERR_PROXY_CONNECTION_FAILED || + net_error == net::ERR_NAME_RESOLUTION_FAILED || + net_error == net::ERR_NETWORK_ACCESS_DENIED || + net_error == net::ERR_ADDRESS_IN_USE || + net_error == net::ERR_UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH) { + net::NetErrorDetails details; + PopulateNetErrorDetails(&details); + // 如果stream已经创建成功。证明dns阶段没有发生问题,所以我们不需要重试. + if (details.stream_created) { + LOG(INFO) << "DOH-Fallback cann't retry with secure dns since the stream " + "is created."; + return false; + } + return true; + } + return false; +} + +void URLRequestHttpJob::RetryWithSecureDnsOnly() { + // If the transaction was destroyed, then the job was cancelled. + if (!transaction_.get()) { + return; + } + + response_info_ = nullptr; + override_response_headers_ = nullptr; // See https://crbug.com/801237. + receive_headers_end_ = base::TimeTicks(); + + ResetTimer(); + + LOG(INFO) << "DOH-Fallback will retry with secure dns only"; + request_info_.secure_dns_only = true; + int rv = transaction_->RestartWithSecureDnsOnly(base::BindOnce( + &URLRequestHttpJob::OnStartCompleted, base::Unretained(this))); + if (rv == ERR_IO_PENDING) { + return; + } + + // The transaction started synchronously, but we need to notify the + // URLRequest delegate via the message loop. + base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, base::BindOnce(&URLRequestHttpJob::OnStartCompleted, + weak_factory_.GetWeakPtr(), rv)); +} + +void URLRequestHttpJob::MaybeRetryWithSecureDnsOnly(int result) { + state_ = RetryState::DOH_FALLBACK; + if (CanRetryWithSecureDnsOnly(result)) { + original_net_error_ = result; + RetryWithSecureDnsOnly(); + return; + } + OnStartCompleted(result); +} +#endif // OHOS_EX_HTTP_DNS_FALLBACK +#endif // BUILDFLAG(IS_OHOS) + void URLRequestHttpJob::OnStartCompleted(int result) { TRACE_EVENT0(NetTracingCategory(), "URLRequestHttpJob::OnStartCompleted"); + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + switch (state_) { + case RetryState::INIT: + MaybeRetryWithSecureDnsOnly(result); + return; + + case RetryState::DOH_FALLBACK: + if (result == net::ERR_NAME_NOT_RESOLVED && original_net_error_) { + if (transaction_ && transaction_->GetResponseInfo() && + transaction_->GetResponseInfo()->resolve_error_info.error != + net::ERR_NAME_NOT_RESOLVED) { + result = original_net_error_; + } + } + break; + + case RetryState::MAX: + // do nothing + break; + } +#endif + RecordTimer(); // If the job is done (due to cancellation), can just ignore this -- Gitee From 6857e7ff779b508494bf39538b6d8b1cac630f30 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:00:50 +0000 Subject: [PATCH 37/56] update net/url_request/url_request_http_job.h. Signed-off-by: taoxueao --- net/url_request/url_request_http_job.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h index 0d6c64d85d..ce74fbe501 100644 --- a/net/url_request/url_request_http_job.h +++ b/net/url_request/url_request_http_job.h @@ -107,6 +107,14 @@ class NET_EXPORT_PRIVATE URLRequestHttpJob : public URLRequestJob { kMaxValue = kSecureSetNonsecureRequest // Keep as the last value. }; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + enum class RetryState { + INIT, + DOH_FALLBACK, + MAX, + }; +#endif + typedef base::RefCountedData SharedBoolean; // Shadows URLRequestJob's version of this method so we can grab cookies. @@ -173,6 +181,12 @@ class NET_EXPORT_PRIVATE URLRequestHttpJob : public URLRequestJob { IPEndPoint GetResponseRemoteEndpoint() const override; void NotifyURLRequestDestroyed() override; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + bool CanRetryWithSecureDnsOnly(int net_error); + void RetryWithSecureDnsOnly(); + void MaybeRetryWithSecureDnsOnly(int result); +#endif + void RecordTimer(); void ResetTimer(); -- Gitee From 80fec9853a5ff82287b511d5929ff8306eb8422b Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:01:12 +0000 Subject: [PATCH 38/56] update net/url_request/url_request_http_job.h. Signed-off-by: taoxueao --- net/url_request/url_request_http_job.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h index ce74fbe501..361961a502 100644 --- a/net/url_request/url_request_http_job.h +++ b/net/url_request/url_request_http_job.h @@ -334,6 +334,11 @@ class NET_EXPORT_PRIVATE URLRequestHttpJob : public URLRequestJob { // "uncomputed" from "nothing". absl::optional> cookie_partition_key_; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int original_net_error_ = 0; + RetryState state_ = RetryState::INIT; +#endif + base::WeakPtrFactory weak_factory_{this}; }; -- Gitee From c301de02a90e8b1e8ddb58ec9e200b17a82fb0d9 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:04:36 +0000 Subject: [PATCH 39/56] update services/network/network_service.cc. Signed-off-by: taoxueao --- services/network/network_service.cc | 88 ++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/services/network/network_service.cc b/services/network/network_service.cc index 71fb1f4f8e..4e87c527da 100644 --- a/services/network/network_service.cc +++ b/services/network/network_service.cc @@ -569,6 +569,10 @@ void NetworkService::RegisterNetworkContext(NetworkContext* network_context) { LOG(INFO) << "Register network context and set network timeout " << timeout_override_ << " second(s)"; url_request_context->SetConnectTimeout(timeout_override_); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + url_request_context->SetConnectJobWithSecureDnsOnlyTimeout( + connect_job_with_secure_dns_only_timeout_); +#endif } #endif network_contexts_.insert(network_context); @@ -695,10 +699,18 @@ void NetworkService::ConfigureStubHostResolver( insecure_dns_client_enabled, additional_dns_types_enabled); #if defined(OHOS_HTTP_DNS) + net::DnsConfigOverrides overrides; +#ifndef OHOS_EX_HTTP_DNS_FALLBACK // Since the system dnsconfig is not obtained and null in OHOS, so override // the full config with default. - net::DnsConfigOverrides overrides = - net::DnsConfigOverrides::CreateOverridingEverythingWithDefaults(); + overrides = net::DnsConfigOverrides::CreateOverridingEverythingWithDefaults(); +#else + // 如果使能Doh,则不需要获取获取Dns name servers + if (secure_dns_mode != net::SecureDnsMode::kOff) { + overrides = + net::DnsConfigOverrides::CreateOverridingEverythingWithDefaults(); + } +#endif overrides.secure_dns_mode = secure_dns_mode; overrides.dns_over_https_config = dns_over_https_config; @@ -1050,4 +1062,76 @@ void NetworkService::SetConnectTimeout(int seconds) { } #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +void NetworkService::SetHttpsDnsFallbackData( + mojom::HttpsDnsFallbackConfigPtr config) { + bool https_dns_fallback_enabled = false; + std::string http_dns_server_template; + // int connect_job_with_dns_only_timeout = 15; + std::vector host_list; + std::vector ip_list; + if (config) { + LOG(INFO) << "SetHttpsDnsFallbackData, enabled " << config->enabled + << ", connect_job_with_dns_only_timeout " + << config->connect_job_with_dns_only_timeout + << ", https_dns_server_template " + << config->https_dns_server_template << ", source_host_list.size " + << config->source_host_list.size() << ", suspect_ip_list.size " + << config->suspect_ip_list.size(); + https_dns_fallback_enabled = config->enabled; + http_dns_server_template = config->https_dns_server_template; + connect_job_with_secure_dns_only_timeout_ = + config->connect_job_with_dns_only_timeout; + host_list = std::move(config->source_host_list); + ip_list = std::move(config->suspect_ip_list); + } + + SetHttpsDnsHostResolver(https_dns_fallback_enabled, http_dns_server_template); + for (auto* network_context : network_contexts_) { + net::URLRequestContext* url_request_context = + network_context->url_request_context(); + if (url_request_context) { + url_request_context->SetConnectJobWithSecureDnsOnlyTimeout( + connect_job_with_secure_dns_only_timeout_); + } + } + + host_resolver_manager_->SetSuspectIpListAndSourceHostList(ip_list, host_list); +} + +void NetworkService::SetHttpsDnsHostResolver( + bool enabled, + const std::string& server_template) { + bool allow_enable_http_dns_fallback = false; + net::DnsOverHttpsConfig doh_fallback_config; + if (enabled) { + doh_fallback_config = + net::DnsOverHttpsConfig::FromStringLax(server_template); + if (doh_fallback_config.servers().size() > 0) { + allow_enable_http_dns_fallback = true; + } + } + + host_resolver_manager_->SetHttpsDnsFallbackData( + allow_enable_http_dns_fallback, server_template); + + // Enable or disable the insecure part of DnsClient. "DnsClient" is the class + // that implements the stub resolver. + host_resolver_manager_->SetInsecureDnsClientEnabled( + allow_enable_http_dns_fallback, false); + + net::DnsConfigOverrides overrides; + // 如果HTTP DNS FALLBACK去使能,则不需要获取Dns name servers + if (!allow_enable_http_dns_fallback) { + overrides = + net::DnsConfigOverrides::CreateOverridingEverythingWithDefaults(); + } + overrides.secure_dns_mode = net::SecureDnsMode::kOff; + overrides.dns_over_https_config = doh_fallback_config; + overrides.allow_dns_over_https_upgrade = false; + + host_resolver_manager_->SetDnsConfigOverrides(overrides); +} +#endif + } // namespace network -- Gitee From c8337434dfded98b72a53976e8ab3e56efeffab0 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:06:56 +0000 Subject: [PATCH 40/56] update services/network/network_service.h. Signed-off-by: taoxueao --- services/network/network_service.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/services/network/network_service.h b/services/network/network_service.h index 37a60dd557..8da5992922 100644 --- a/services/network/network_service.h +++ b/services/network/network_service.h @@ -61,6 +61,10 @@ #include "services/network/public/mojom/ct_log_info.mojom.h" #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +#include "services/network/public/mojom/network_config_ohos.mojom.h" +#endif + namespace net { class FileNetLogObserver; class HostResolverManager; @@ -309,6 +313,11 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService void SetConnectTimeout(int seconds) override; #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetHttpsDnsFallbackData( + mojom::HttpsDnsFallbackConfigPtr config) override; +#endif + private: class DelayedDohProbeActivator; @@ -326,6 +335,11 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService void SetSystemDnsResolver( mojo::PendingRemote override_remote); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + void SetHttpsDnsHostResolver(bool enabled, + const std::string& server_template); +#endif + bool initialized_ = false; enum class FunctionTag : uint8_t { @@ -445,6 +459,9 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService #if defined(OHOS_EX_NETWORK_CONNECTION) int timeout_override_ = 0; #endif +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int connect_job_with_secure_dns_only_timeout_{15}; +#endif }; } // namespace network -- Gitee From 72676ce85fd94ccaf1f1264adf0241d8859599e8 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:08:17 +0000 Subject: [PATCH 41/56] update services/network/public/mojom/BUILD.gn. Signed-off-by: taoxueao --- services/network/public/mojom/BUILD.gn | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn index 6322a324da..f4d431d78d 100644 --- a/services/network/public/mojom/BUILD.gn +++ b/services/network/public/mojom/BUILD.gn @@ -477,7 +477,7 @@ mojom("url_loader_base") { } if (defined(ohos_network_load) && ohos_network_load) { - enabled_features += ["is_ohos_network_load"] + enabled_features += [ "is_ohos_network_load" ] } # Shared by cpp_typemaps and blink_cpp_typemaps. @@ -1323,6 +1323,14 @@ mojom("mojom") { "url_loader_factory.mojom", ] + + # ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (defined(ohos_ex_http_dns_fallback) && ohos_ex_http_dns_fallback) { + sources += [ "network_config_ohos.mojom" ] + } + + # endif + public_deps = [ ":cookies_mojom", ":mojom_first_party_sets", -- Gitee From 7b33b5335967064e2a55c40e6b816207f4240d3c Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:09:49 +0000 Subject: [PATCH 42/56] update services/network/public/mojom/network_service.mojom. Signed-off-by: taoxueao --- services/network/public/mojom/network_service.mojom | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/network/public/mojom/network_service.mojom b/services/network/public/mojom/network_service.mojom index 4da5e9d64b..33db878e32 100644 --- a/services/network/public/mojom/network_service.mojom +++ b/services/network/public/mojom/network_service.mojom @@ -41,6 +41,11 @@ import "mojo/public/mojom/base/application_state.mojom"; [EnableIf=is_ct_supported] import "services/network/public/mojom/ct_log_info.mojom"; +// #ifdef OHOS_EX_HTTP_DNS_FALLBACK +[EnableIf=ohos_ex_http_dns_fallback] +import "services/network/public/mojom/network_config_ohos.mojom"; +// #endif OHOS_EX_HTTP_DNS_FALLBACK + // Values for configuring HTTP authentication that can only be set once. struct HttpAuthStaticParams { // File name the GSSAPI library to load. Only supported on platforms where an @@ -378,4 +383,9 @@ interface NetworkService { [EnableIf=ohos_ex_network_connection] SetConnectTimeout(int32 seconds); // #endif + + // #ifdef OHOS_EX_HTTP_DNS_FALLBACK + [EnableIf=ohos_ex_http_dns_fallback] + SetHttpsDnsFallbackData(network.mojom.HttpsDnsFallbackConfig config); + // #endif }; -- Gitee From a90450b55c4a2c39cfebbd28a5f73fefc68fd87a Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:10:32 +0000 Subject: [PATCH 43/56] update services/network/throttling/throttling_network_transaction.cc. Signed-off-by: taoxueao --- .../throttling_network_transaction.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/services/network/throttling/throttling_network_transaction.cc b/services/network/throttling/throttling_network_transaction.cc index acbdcf75a4..258692f122 100644 --- a/services/network/throttling/throttling_network_transaction.cc +++ b/services/network/throttling/throttling_network_transaction.cc @@ -149,6 +149,23 @@ int ThrottlingNetworkTransaction::Start(const net::HttpRequestInfo* request, return Throttle(true, result); } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +int ThrottlingNetworkTransaction::RestartWithSecureDnsOnly( + net::CompletionOnceCallback callback) { + if (CheckFailed()) { + return net::ERR_INTERNET_DISCONNECTED; + } + if (!interceptor_) { + return network_transaction_->RestartWithSecureDnsOnly(std::move(callback)); + } + + callback_ = std::move(callback); + int result = network_transaction_->RestartWithSecureDnsOnly(base::BindOnce( + &ThrottlingNetworkTransaction::IOCallback, base::Unretained(this), true)); + return Throttle(true, result); +} +#endif + int ThrottlingNetworkTransaction::RestartIgnoringLastError( net::CompletionOnceCallback callback) { if (CheckFailed()) -- Gitee From 7748b1ad5d3bcd26c0ddab335432ff55fa239ad9 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 03:11:09 +0000 Subject: [PATCH 44/56] update services/network/throttling/throttling_network_transaction.h. Signed-off-by: taoxueao --- services/network/throttling/throttling_network_transaction.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/network/throttling/throttling_network_transaction.h b/services/network/throttling/throttling_network_transaction.h index bb54701046..4336c6d084 100644 --- a/services/network/throttling/throttling_network_transaction.h +++ b/services/network/throttling/throttling_network_transaction.h @@ -56,6 +56,9 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) ThrottlingNetworkTransaction int Start(const net::HttpRequestInfo* request, net::CompletionOnceCallback callback, const net::NetLogWithSource& net_log) override; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + int RestartWithSecureDnsOnly(net::CompletionOnceCallback callback) override; +#endif // OHOS_EX_HTTP_DNS_FALLBACK int RestartIgnoringLastError(net::CompletionOnceCallback callback) override; int RestartWithCertificate( scoped_refptr client_cert, -- Gitee From 21341863e06cf68ad9d72a0b34fd7bc1b23d4319 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 21:52:49 +0800 Subject: [PATCH 45/56] fix:codex DIR:SR.. Signed-off-by: taoxueao --- net/dns/dns_config_service_ohos.cc | 0 net/dns/dns_config_service_ohos.h | 55 +++++++++++ net/dns/host_resolver_manager.cc | 55 +++++++++++ net/http/http_cache_transaction.cc | 34 +++++++ net/http/http_network_transaction.cc | 91 +++++++++++++++++++ .../public/mojom/network_config_ohos.mojom | 24 +++++ 6 files changed, 259 insertions(+) create mode 100644 net/dns/dns_config_service_ohos.cc create mode 100644 net/dns/dns_config_service_ohos.h create mode 100644 services/network/public/mojom/network_config_ohos.mojom diff --git a/net/dns/dns_config_service_ohos.cc b/net/dns/dns_config_service_ohos.cc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/net/dns/dns_config_service_ohos.h b/net/dns/dns_config_service_ohos.h new file mode 100644 index 0000000000..9e58bdded4 --- /dev/null +++ b/net/dns/dns_config_service_ohos.h @@ -0,0 +1,55 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed bt a BSD_style license that can be +// found in the LICENSE file. + +#ifndef NET_DNS_DNS_CONFIG_SEERVICE_OHOS_H_ +#define NET_DNS_DNS_CONFIG_SEERVICE_OHOS_H_ + +#include + +#include "base/time/time.h" +#include "net/base/net_export.h" +#include "net/dns/dns_config_service.h" +// #include "net/base/network_change_notifier.h" + +namespace net { + +// Use DnsConfigService::CreateSystemService to use it outside of tests. +namespace internal { + +// Service for reading and watching harmony system DNS settings. This object is +// not thread-safe and methods may perform blocking I/O so methods must be +// called on a sequence that allows bloacking (i.e base::MayBlock).It may be +// constructed on a different sequence than which it's later called on. +class NET_EXPORT_PRIVATE +DnsConfigServiceOhos : public DnsConfigService { + public: + static constexpr base::TimeDeltakConfigChangeDelay = base::Milliseconds(50); + + DnsConfigServiceOhos(); + ~DnsConfigServiceOhos() override; + + DnsConfigServiceOhos(const DnsConfigServiceOhos&) = delete; + DnsConfigServiceOhos& opertator=(const DnsConfigServiceOhos&) = delete; + + void RefreshConfig() override; + + protected: + // DnsConfigService: + void ReadConfigNow() override; + bool StartWatching() override; + + private: + class Watcher; + class ConfigReader; + + std::unique_ptr watcher_; + std::unique_ptr config_reader_; +}; + + +} // namespace internal +} // namespace net + + +#endif // NET_DNS_DNS_CONFIG_SEERVICE_OHOS_H_ \ No newline at end of file diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc index 98cb65a177..d714a2956c 100644 --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc @@ -755,6 +755,16 @@ class HostResolverManager::RequestImpl parameters_.secure_dns_policy, is_ip, source_net_log_, &job_key_.query_types, &job_key_.flags, &job_key_.secure_dns_mode); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (parameters_.only_use_secure_fallback) { + next_state_ = STATE_START_JOB; + if (resolver_->CanUseSecureDnsFallback(resolve_context())) { + tasks_.push_back(TaskType::SRCURE_DNS_FALLBACK); + } + return OK; + } +#endif + // A reachability probe to determine if the network is only reachable on // IPv6 will be scheduled if the parameters are met for using NAT64 in place // of an IPv4 address. @@ -1002,6 +1012,10 @@ class HostResolverManager::RequestImpl network_anonymization_key_.ToDebugString()); dict.Set("secure_dns_policy", base::strict_cast(parameters_.secure_dns_policy)); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + dict.Set("only_use_secure_fallback", + parameters_.only_use_secure_fallback); +#endif // OHOS_EX_HTTP_DNS_FALLBACK return dict; }); } @@ -1327,6 +1341,11 @@ class HostResolverManager::DnsTask : public base::SupportsWeakPtr { if (types.Has(DnsQueryType::HTTPS)) { if (!secure_ && !client_->CanQueryAdditionalTypesViaInsecureDns()) { types.Remove(DnsQueryType::HTTPS); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + } else if (resolve_context_->IsHttpsDnsFallbackEnabled() && + !client_->CanQueryAdditionalTypesViaInsecureDns()) { + types.Remove(DnsQueryType::HTTPS); +#endif } else { DCHECK(!httpssvc_metrics_); httpssvc_metrics_.emplace(secure_); @@ -2279,6 +2298,9 @@ class HostResolverManager::Job : public PrioritizedDispatcher::Job, StartDnsTask(false /* secure */); break; case TaskType::SECURE_DNS: +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + case TaskType::SECURE_DNS_FALLBACK +#endif StartDnsTask(true /* secure */); break; case TaskType::MDNS: @@ -2464,6 +2486,15 @@ class HostResolverManager::Job : public PrioritizedDispatcher::Job, auto aliases = std::set(addr_list.dns_aliases().begin(), addr_list.dns_aliases().end()); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (dns_task_error_ != OK && net_error != OK && ! tasks_.empty() + && tasks_.back() == TaskType::SECURE_DNS_FALLBACK) { + KillDnsTask(); + RunNextTask(); + return; + } +#endif + // Source unknown because the system resolver could have gotten it from a // hosts file, its own cache, a DNS lookup or somewhere else. // Don't store the |ttl| in cache since it's not obtained from the server. @@ -4298,6 +4329,30 @@ std::unique_ptr HostResolverManager::CreateDohProbeRunner( resolve_context); } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +bool HostResolverManager::CanUseSecureDnsFallback(ResolveContext* context) const { + if (!dns_client_.get()) { + return false; + } + + return dns_client_->CanUseSecureDnsTransactions(context); +} + +void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, + const std::string& server_template) { + https_dns_fallback_enabled_ = enabled; + doh_fallback_server_template_ = server_template; + for (auto& context : registered_contexts_) { + context.SetHttpsDnsFallbackEnabled(enabled); + } +} + +void HostResolverManager::SetSuspectIpListAndAourceHostList(const std::vector& ip_list, + const std::vector& host_list) { + // Todo(huawei) +} +#endif + HostResolverManager::RequestImpl::~RequestImpl() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!job_.has_value()) diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc index e681517d40..15d95e2039 100644 --- a/net/http/http_cache_transaction.cc +++ b/net/http/http_cache_transaction.cc @@ -289,6 +289,40 @@ int HttpCache::Transaction::Start(const HttpRequestInfo* request, return rv; } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +int HttpCache::Transaction::RestartWithSecureDnsOnly(CompletionOnceCallback callback) { + // Ensure that we only have one asynchronous call at a time. + DCHECK(callback_.is_null()); + + if (!cache_.get()) { + return ERR_UNEXPECTED; + } + + int rv = RestartNetworkRequestWithSecureDnsOnly(); + if (rv == ERR_IO_PENDING) { + callback_ = std::move(callback); + } + + return rv; +} + +int HttpCache::Transaction::RestartNetworkRequestWithSecureDnsOnly() { + DCHECK(mode_ & WRITE || mode_ == NONE); + DCHECK(network_trans_.get()); + DCHECK_EQ(STATE_NONE, next_state_); + + next_state_ = STATE_SEND_REQUEST_COMPLETE; + if (request_ != initial_request_ && custom_request_) { + custom_request_->secure_dns_only = true; + } + int rv = network_trans_->RestartWithSecureDnsOnly(io_callback_); + if (rv != ERR_IO_PENDING) { + return DoLoop(rv); + } + return rv; +} +#endif + int HttpCache::Transaction::RestartIgnoringLastError( CompletionOnceCallback callback) { DCHECK(!callback.is_null()); diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index 7567fe0a5c..2efc6a71df 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -370,6 +370,9 @@ void HttpNetworkTransaction::DidDrainBodyForAuthRestart(bool keep_alive) { next_state_ = STATE_CONNECTED_CALLBACK; } stream_ = std::move(new_stream); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + stream_created_ = true; +#endif } // Reset the other member variables. @@ -485,6 +488,11 @@ bool HttpNetworkTransaction::GetRemoteEndpoint(IPEndPoint* endpoint) const { void HttpNetworkTransaction::PopulateNetErrorDetails( NetErrorDetails* details) const { *details = net_error_details_; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (stream_ || next_state_ != STATE_NONE || stream_created_) { + details->stream_created = true; + } +#endif if (stream_) stream_->PopulateNetErrorDetails(details); } @@ -569,6 +577,9 @@ void HttpNetworkTransaction::OnStreamReady(const SSLConfig& used_ssl_config, response_.was_fetched_via_spdy = stream_request_->using_spdy(); response_.dns_aliases = stream_->GetDnsAliases(); SetProxyInfoInReponse(used_proxy_info, &response_); +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + stream_created_ = true; +#endif OnIOComplete(OK); } @@ -721,6 +732,14 @@ int HttpNetworkTransaction::DoLoop(int result) { case STATE_CREATE_STREAM_COMPLETE: rv = DoCreateStreamComplete(rv); break; +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + case STATE_CREATE_FALLBACK_STREAM_WITH_SECURE_DNS_ONLY: + rv = DoCreateFallbackStreamWithSecureDns(); + break; + case STATE_CREATE_FALLBACK_STREAM_WITH_SECURE_DNS_ONLY_COMPLETE: + rv = DoCreateFallbackStreamWithSecureDnsOnlyComplete(rv); + break; +#endif case STATE_INIT_STREAM: DCHECK_EQ(OK, rv); rv = DoInitStream(); @@ -872,6 +891,78 @@ int HttpNetworkTransaction::DoCreateStreamComplete(int result) { return result; } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK +int HttpNetworkTransaction::RestartWithSecureDnsOnly(CompletionOnceCallback callback) { + DCHECK(!stream_.get()); + DCHECK(!stream_request_.get()); + DCHECK_EQ(STATE_NONE, next_state_); + + if (!CheckMaxRestarts()) { + return ERR_TOO_MANY_RETRIES; + } + + // Restart the other member variables. + // Note: this is necessary only with SSL renegotiation. + ResetStateForRestart(); + next_state_ = STATE_CREATE_FALLBACK_STREAM_WITH_SECURE_DNS_ONLY; + int rv = DoLoop(OK); + if (rv == ERR_IO_PENDING) { + callback_ = std::move(callback); + } + + // This always returns ERR_IO_PENDING because DoCreateStream() does, but + // GenerateNetworkErrorLoggingReportIfError() should be called here if any + // other net::Error can be returned. + CHECK_EQ(rv, ERR_IO_PENDING); + return rv; +} + +int HttpNetworkTransaction::DoCreateFallbackStreamWithSecureDnsOnly() { + response_.network_accessed = true; + + next_state_ = STATE_CREATE_FALLBACK_STREAM_WITH_SECURE_DNS_ONLY_COMPLETE; + // IP based pooling is only enabled on a retry after 421 Misdirected Request + // is received. Alternative Services are also disabled in this case (though + // they can also be disabled when retrying after a QUIC error). + if (!enable_ip_based_pooling_){ + DCHECK(!enabled_alternative_services_); + } + if (ForWebSocketHandshake()) { + stream_request_ = session_->http_stream_factory()->RequestWebSocketHandshakeStream( + *request_, priority_, + server_ssl_config_, proxy_ssl_config_, this, + websocket_handshake_stream_base_create_helper_, + enabled_ip_based_pooling_, enabled_alternative_services_, net_log_); + } else { + stream_request_ = session_->http_stream_factory()->RequestStream( + *request_, priority_, server_ssl_config_, proxy_ssl_config_, this, + enable_ip_based_pooling_, enable_alternative_services_, net_log_); + } + + CHECK(stream_request_.get()); + return ERR_IO_PENDING; +} + +int HttpNetworkTransaction::DoCreateFallbackStreamWithSecureDnsOnlyComplete(int result) { + CopyConnectionAttemptsFromStreamRequest(); + if (result == OK) { + next_state_ = STATE_CONNECTED_CALLBACK; + DCHECK(stream_.get()); + } else if (result == ERR_HTTP_1_1_REQUIRED || result == ERR_PROXY_HTTP_1_1_REQUIRED) { + return HandleHttp11Required(result); + } + + // Handle possible client certificate errors that may have occurred if the + // stream used SSL for one or more of the layers. + result = HandleSSLClientAuthError(result); + + // At this point we are done with the stream_request_. + stream_request_.reset(); + return result; +} +#endif // OHOS_EX_HTTP_DNS_FALLBACK + + int HttpNetworkTransaction::DoInitStream() { DCHECK(stream_.get()); next_state_ = STATE_INIT_STREAM_COMPLETE; diff --git a/services/network/public/mojom/network_config_ohos.mojom b/services/network/public/mojom/network_config_ohos.mojom new file mode 100644 index 0000000000..4ff97e3101 --- /dev/null +++ b/services/network/public/mojom/network_config_ohos.mojom @@ -0,0 +1,24 @@ +/* +* Copyright(c) 2024 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0(the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS ID" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +module network.mojom; + +struct HttpsDnsFallbackConfig { + bool enabled = false; + int32 connect_job_with_dns_only_timeout; + string https_dns_server_template; + array source_host_list; + array suspect_ip_list; +}; \ No newline at end of file -- Gitee From 054b532457acb7781509a0ae252a583f99ffbded Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 22:00:24 +0800 Subject: [PATCH 46/56] fix:codex DIR:SR.. Signed-off-by: taoxueao --- net/dns/dns_config_service_ohos.cc | 154 +++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/net/dns/dns_config_service_ohos.cc b/net/dns/dns_config_service_ohos.cc index e69de29bb2..1ec9fe9192 100644 --- a/net/dns/dns_config_service_ohos.cc +++ b/net/dns/dns_config_service_ohos.cc @@ -0,0 +1,154 @@ +// Copyright 2021 TheChromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/files/file_path.h" +#include "base/functional/bind.h" +#include "base/logging.h" +#include "base/memory/raw_ptr.h" +#include "base/sequence_checker.h" +#include "base/time/time.h" +#include "net/base/network_change_interfaces.h" +#include "net/dns/dns_config.h" +#include "net/dns/dns_config_service.h" +#include "net/dns/public/dns_protocol.h" +#include "net/dns/public/serial_worker.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +namespace net { +namespace internal { + +namespace { + +constexpr base::FilePath::CharTypekFilePathHosts[] = FILE_PATH_LITERAL("/etc/hosts"); +} // namepace + +// static +constexpr base::TimeDeltaDnsConfigServiceOhos::kConfigChangeDelay; + +class DnsConfigServiceOhos::Watecher : public DnsConfigService::Watcher, public NetworkChangeNotifier::NetworkChangeObserver { + public: + explict Watcher(DnsConfigServiceOhos& service) : DnsConfigService::Watcher(service) {} + ~Watcher() override { + NetworkChangeNotifier::RemoveNetworkChangeObserver(this); + } + + Watcher(const Watcher&) = delete; + Watcher& operator=(const Watcher&) = delete; + + //DnsConfigService::Watcher: + bool Watch() override { + CheckOnCorrectSequence(); + + // On Harmony, assume DNS config may have changed on every network change. + NetworkChangeNotifier::AddNetworkChangeObserver(this); + return true; + } + + // NetworkChangeNitifier::NetworkChangeObserver: + void OnNetworkChanged(NetworkChangeNotifier::ConnectionType type) override { + if (type != NetworkChangeNotifier::CONNECT_NONE) { + OnConfigChanged(true); + } + } +}; + +class DnsConfigServiceOhos::ConfigReader : public SerialWorker { + public: + explicit ConfigReader( DnsConfigServiceOhos& service) : service_(&service) {} + ~ConfigReader() override = default; + + ConfigReader(const ConfigReader&) = delete; + ConfigReader& operator=(const ConfigReader&) = delete; + + std::unique_ptr CreateWorkItem() override { + return std::make_unique(); + } + + bool OnWorkFinished(std::unique_ptr serial_worker_work_item) override { + DCHECK(serial_worker_work_item); + DCHECK(!IsCancelled()); + + WorkItem* work_item = static_cast(serial_worker_work_item.get()); + if (work_item->dns_config_.has_value()) { + service_->OnConfigRead(std::move(work_item->dns_config_).value()); + return true; + } else { + LOF(WARNING) << "Failed to read DnsConfig."; + return false; + } + } + + private: + class WorkItem : public SerialWorker::WorkItem { + public: + explicit WorkItem() {} + + void DoWork() override { + dns_config_.emplace(); + + dns_config_->unhandled_options = false; + std::vector servers = NetworkChangeNotifier::GetDnsServers(); + for (auto &server : servers) { + if (empty/empty()) { + continue; + } + + auto dns_address = IPAdress::FromIPLiteral(server); + if (!dns_address || (*dns_address).empty()) { + continue; + } + IPEndPoint dns_server(std::move(*dns_address), dns_protocol::kDefaultPort); + dns_config_->nameservers.push_back(dns_server); + LOG(INFO) << "dns name server " << dns_server.ToString(); + } + } + + private: + friend class ConfigReader; + absl::optinal dns_config_; + }; + + // Raw pointer to owning DnsConfigService. + const raw_ptr service_; +}; + +DnsConfigServiceOhos::DnsConfigServiceOhos() : DnsConfigService(kFilePathHosts, kConfigChangeDelay) { + // Allow constructing on one thread and living on another. + DETACH+FROM_SEQUENCE(sequence_checker_); +} + + +DnsConfigServiceOhos::~DnsConfigServiceOhos() { + SCHECK_CALLED_ON_VALID_SEQUENCE(squence_checker_); + if (config_reader_) + config_reader_->Cancel(); +} + +void DnsConfigServiceOhos::RefreshConfig() { + // do nothing +} + +void DnsConfigServiceOhos::ReadConfigNow() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!config_reader_) { + config_reader_ = std::make_unique(*this); + } + config_reader_->WorkNow(); +} + +bool DnsConfigServiceOhos::StartWatching() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // TODO(crbug.com/116139): re-start watcher if that makes sense. + watcher_ = std::make_unique(*this); + return watcher_->Watch(); +} +} // namespace internal + +// static +std::unique_ptr DnsConfigService::CreateSystemService() { + return std::make_unique(); +} + + +} // namespace net \ No newline at end of file -- Gitee From 7c9f7a6e236062e0c8cc9bc57423c9c6ae8cacb8 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 14:15:49 +0000 Subject: [PATCH 47/56] update net/dns/dns_config_service_ohos.cc. Signed-off-by: taoxueao --- net/dns/dns_config_service_ohos.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/dns/dns_config_service_ohos.cc b/net/dns/dns_config_service_ohos.cc index 1ec9fe9192..88771f048d 100644 --- a/net/dns/dns_config_service_ohos.cc +++ b/net/dns/dns_config_service_ohos.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "net/dns/dns_config_service_ohos.h" + #include "base/files/file_path.h" #include "base/functional/bind.h" #include "base/logging.h" -- Gitee From e7b131ab274a6db97dcd1a818b5e56d2842e1f2e Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 14:16:21 +0000 Subject: [PATCH 48/56] update net/dns/dns_config_service_ohos.cc. Signed-off-by: taoxueao --- net/dns/dns_config_service_ohos.cc | 252 +++++++++++++++-------------- 1 file changed, 131 insertions(+), 121 deletions(-) diff --git a/net/dns/dns_config_service_ohos.cc b/net/dns/dns_config_service_ohos.cc index 88771f048d..6cd913f30f 100644 --- a/net/dns/dns_config_service_ohos.cc +++ b/net/dns/dns_config_service_ohos.cc @@ -1,156 +1,166 @@ -// Copyright 2021 TheChromium Authors +// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + #include "net/dns/dns_config_service_ohos.h" - + #include "base/files/file_path.h" #include "base/functional/bind.h" #include "base/logging.h" #include "base/memory/raw_ptr.h" #include "base/sequence_checker.h" #include "base/time/time.h" -#include "net/base/network_change_interfaces.h" +#include "net/base/address_tracker_linux.h" +#include "net/base/ip_address.h" +#include "net/base/ip_endpoint.h" +#include "net/base/network_change_notifier.h" +#include "net/base/network_interfaces.h" #include "net/dns/dns_config.h" #include "net/dns/dns_config_service.h" #include "net/dns/public/dns_protocol.h" -#include "net/dns/public/serial_worker.h" +#include "net/dns/serial_worker.h" #include "third_party/abseil-cpp/absl/types/optional.h" - + namespace net { namespace internal { - + namespace { - -constexpr base::FilePath::CharTypekFilePathHosts[] = FILE_PATH_LITERAL("/etc/hosts"); -} // namepace - + +constexpr base::FilePath::CharType kFilePathHosts[] = + FILE_PATH_LITERAL("/etc/hosts"); +} // namespace + // static -constexpr base::TimeDeltaDnsConfigServiceOhos::kConfigChangeDelay; - -class DnsConfigServiceOhos::Watecher : public DnsConfigService::Watcher, public NetworkChangeNotifier::NetworkChangeObserver { - public: - explict Watcher(DnsConfigServiceOhos& service) : DnsConfigService::Watcher(service) {} - ~Watcher() override { - NetworkChangeNotifier::RemoveNetworkChangeObserver(this); - } - - Watcher(const Watcher&) = delete; - Watcher& operator=(const Watcher&) = delete; - - //DnsConfigService::Watcher: - bool Watch() override { - CheckOnCorrectSequence(); - - // On Harmony, assume DNS config may have changed on every network change. - NetworkChangeNotifier::AddNetworkChangeObserver(this); - return true; - } - - // NetworkChangeNitifier::NetworkChangeObserver: - void OnNetworkChanged(NetworkChangeNotifier::ConnectionType type) override { - if (type != NetworkChangeNotifier::CONNECT_NONE) { - OnConfigChanged(true); - } +constexpr base::TimeDelta DnsConfigServiceOhos::kConfigChangeDelay; + +class DnsConfigServiceOhos::Watcher + : public DnsConfigService::Watcher, + public NetworkChangeNotifier::NetworkChangeObserver { + public: + explicit Watcher(DnsConfigServiceOhos& service) + : DnsConfigService::Watcher(service) {} + ~Watcher() override { + NetworkChangeNotifier::RemoveNetworkChangeObserver(this); + } + + Watcher(const Watcher&) = delete; + Watcher& operator=(const Watcher&) = delete; + + // DnsConfigService::Watcher: + bool Watch() override { + CheckOnCorrectSequence(); + + // On Harmony, assume DNS config may have changed on every network change. + NetworkChangeNotifier::AddNetworkChangeObserver(this); + return true; + } + + // NetworkChangeNotifier::NetworkChangeObserver: + void OnNetworkChanged(NetworkChangeNotifier::ConnectionType type) override { + if (type != NetworkChangeNotifier::CONNECTION_NONE) { + OnConfigChanged(true); } + } }; - + class DnsConfigServiceOhos::ConfigReader : public SerialWorker { - public: - explicit ConfigReader( DnsConfigServiceOhos& service) : service_(&service) {} - ~ConfigReader() override = default; - - ConfigReader(const ConfigReader&) = delete; - ConfigReader& operator=(const ConfigReader&) = delete; - - std::unique_ptr CreateWorkItem() override { - return std::make_unique(); - } - - bool OnWorkFinished(std::unique_ptr serial_worker_work_item) override { - DCHECK(serial_worker_work_item); - DCHECK(!IsCancelled()); - - WorkItem* work_item = static_cast(serial_worker_work_item.get()); - if (work_item->dns_config_.has_value()) { - service_->OnConfigRead(std::move(work_item->dns_config_).value()); - return true; - } else { - LOF(WARNING) << "Failed to read DnsConfig."; - return false; + public: + explicit ConfigReader(DnsConfigServiceOhos& service) + : service_(&service) {} + + ~ConfigReader() override = default; + + ConfigReader(const ConfigReader&) = delete; + ConfigReader& operator=(const ConfigReader&) = delete; + + std::unique_ptr CreateWorkItem() override { + return std::make_unique(); + } + + bool OnWorkFinished(std::unique_ptr + serial_worker_work_item) override { + DCHECK(serial_worker_work_item); + DCHECK(!IsCancelled()); + + WorkItem* work_item = static_cast(serial_worker_work_item.get()); + if (work_item->dns_config_.has_value()) { + service_->OnConfigRead(std::move(work_item->dns_config_).value()); + return true; + } else { + LOG(WARNING) << "Failed to read DnsConfig."; + return false; + } + } + + private: + class WorkItem : public SerialWorker::WorkItem { + public: + explicit WorkItem() {} + + void DoWork() override { + dns_config_.emplace(); + dns_config_->unhandled_options = false; + std::vector servers = NetworkChangeNotifier::GetDnsServers(); + for (auto &server : servers) { + if (server.empty()) { + continue; } - } - - private: - class WorkItem : public SerialWorker::WorkItem { - public: - explicit WorkItem() {} - - void DoWork() override { - dns_config_.emplace(); - - dns_config_->unhandled_options = false; - std::vector servers = NetworkChangeNotifier::GetDnsServers(); - for (auto &server : servers) { - if (empty/empty()) { - continue; - } - - auto dns_address = IPAdress::FromIPLiteral(server); - if (!dns_address || (*dns_address).empty()) { - continue; - } - IPEndPoint dns_server(std::move(*dns_address), dns_protocol::kDefaultPort); - dns_config_->nameservers.push_back(dns_server); - LOG(INFO) << "dns name server " << dns_server.ToString(); + + auto dns_address = IPAddress::FromIPLiteral(server); + if (!dns_address || (*dns_address).empty()) { + continue; } - } - - private: - friend class ConfigReader; - absl::optinal dns_config_; - }; - - // Raw pointer to owning DnsConfigService. - const raw_ptr service_; + IPEndPoint dns_server(std::move(*dns_address), dns_protocol::kDefaultPort); + dns_config_->nameservers.push_back(dns_server); + LOG(INFO) << "dns name server " << dns_server.ToString(); + } + } + + private: + friend class ConfigReader; + absl::optional dns_config_; + }; + + // Raw pointer to owning DnsConfigService. + const raw_ptr service_; }; - -DnsConfigServiceOhos::DnsConfigServiceOhos() : DnsConfigService(kFilePathHosts, kConfigChangeDelay) { - // Allow constructing on one thread and living on another. - DETACH+FROM_SEQUENCE(sequence_checker_); + +DnsConfigServiceOhos::DnsConfigServiceOhos() + : DnsConfigService(kFilePathHosts, kConfigChangeDelay) { + // Allow constructing on one thread and living on another. + DETACH_FROM_SEQUENCE(sequence_checker_); } - - + DnsConfigServiceOhos::~DnsConfigServiceOhos() { - SCHECK_CALLED_ON_VALID_SEQUENCE(squence_checker_); - if (config_reader_) - config_reader_->Cancel(); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (config_reader_) + config_reader_->Cancel(); } - + void DnsConfigServiceOhos::RefreshConfig() { - // do nothing + // do nothing } - + void DnsConfigServiceOhos::ReadConfigNow() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!config_reader_) { - config_reader_ = std::make_unique(*this); - } - config_reader_->WorkNow(); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!config_reader_) { + config_reader_ = + std::make_unique(*this); + } + config_reader_->WorkNow(); } - + bool DnsConfigServiceOhos::StartWatching() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // TODO(crbug.com/116139): re-start watcher if that makes sense. - watcher_ = std::make_unique(*this); - return watcher_->Watch(); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // TODO(crbug.com/116139): re-start watcher if that makes sense. + watcher_ = std::make_unique(*this); + return watcher_->Watch(); } -} // namespace internal - +} // namespace internal + // static std::unique_ptr DnsConfigService::CreateSystemService() { - return std::make_unique(); + return std::make_unique(); } - - -} // namespace net \ No newline at end of file + +} // namespace net \ No newline at end of file -- Gitee From 6ab115a03a621a9ef9a9e2c738b8e0783c6f550a Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 14:18:17 +0000 Subject: [PATCH 49/56] update net/dns/dns_config_service_ohos.h. Signed-off-by: taoxueao --- net/dns/dns_config_service_ohos.h | 79 +++++++++++++++---------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/net/dns/dns_config_service_ohos.h b/net/dns/dns_config_service_ohos.h index 9e58bdded4..a8ba8f813b 100644 --- a/net/dns/dns_config_service_ohos.h +++ b/net/dns/dns_config_service_ohos.h @@ -1,55 +1,52 @@ // Copyright 2021 The Chromium Authors -// Use of this source code is governed bt a BSD_style license that can be +// Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - -#ifndef NET_DNS_DNS_CONFIG_SEERVICE_OHOS_H_ -#define NET_DNS_DNS_CONFIG_SEERVICE_OHOS_H_ - + +#ifndef NET_DNS_DNS_CONFIG_SERVICE_OHOS_H_ +#define NET_DNS_DNS_CONFIG_SERVICE_OHOS_H_ + #include - + #include "base/time/time.h" #include "net/base/net_export.h" #include "net/dns/dns_config_service.h" // #include "net/base/network_change_notifier.h" - + namespace net { - + // Use DnsConfigService::CreateSystemService to use it outside of tests. namespace internal { - + // Service for reading and watching harmony system DNS settings. This object is // not thread-safe and methods may perform blocking I/O so methods must be -// called on a sequence that allows bloacking (i.e base::MayBlock).It may be +// called on a sequence that allows blocking (i.e. base::MayBlock). It may be // constructed on a different sequence than which it's later called on. -class NET_EXPORT_PRIVATE -DnsConfigServiceOhos : public DnsConfigService { - public: - static constexpr base::TimeDeltakConfigChangeDelay = base::Milliseconds(50); - - DnsConfigServiceOhos(); - ~DnsConfigServiceOhos() override; - - DnsConfigServiceOhos(const DnsConfigServiceOhos&) = delete; - DnsConfigServiceOhos& opertator=(const DnsConfigServiceOhos&) = delete; - - void RefreshConfig() override; - - protected: - // DnsConfigService: - void ReadConfigNow() override; - bool StartWatching() override; - - private: - class Watcher; - class ConfigReader; - - std::unique_ptr watcher_; - std::unique_ptr config_reader_; +class NET_EXPORT_PRIVATE DnsConfigServiceOhos : public DnsConfigService { + public: + static constexpr base::TimeDelta kConfigChangeDelay = base::Milliseconds(50); + + DnsConfigServiceOhos(); + ~DnsConfigServiceOhos() override; + + DnsConfigServiceOhos(const DnsConfigServiceOhos&) = delete; + DnsConfigServiceOhos& operator=(const DnsConfigServiceOhos&) = delete; + + void RefreshConfig() override; + + protected: + // DnsConfigService: + void ReadConfigNow() override; + bool StartWatching() override; + + private: + class Watcher; + class ConfigReader; + + std::unique_ptr watcher_; + std::unique_ptr config_reader_; }; - - -} // namespace internal -} // namespace net - - -#endif // NET_DNS_DNS_CONFIG_SEERVICE_OHOS_H_ \ No newline at end of file + +} // namespace internal +} // namespace net + +#endif // NET_DNS_DNS_CONFIG_SERVICE_OHOS_H_ \ No newline at end of file -- Gitee From b4c5d5bee7fa89d8a532a719d46c1f168dbedb41 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Mon, 9 Dec 2024 14:37:23 +0000 Subject: [PATCH 50/56] update services/network/public/mojom/network_config_ohos.mojom. Signed-off-by: taoxueao --- .../public/mojom/network_config_ohos.mojom | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/services/network/public/mojom/network_config_ohos.mojom b/services/network/public/mojom/network_config_ohos.mojom index 4ff97e3101..78bfcf08ea 100644 --- a/services/network/public/mojom/network_config_ohos.mojom +++ b/services/network/public/mojom/network_config_ohos.mojom @@ -1,24 +1,24 @@ /* -* Copyright(c) 2024 Huawei Device Co., Ltd. -* Licensed under the Apache License, Version 2.0(the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS ID" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + module network.mojom; - + struct HttpsDnsFallbackConfig { - bool enabled = false; - int32 connect_job_with_dns_only_timeout; - string https_dns_server_template; - array source_host_list; - array suspect_ip_list; + bool enabled = false; + int32 connect_job_with_dns_only_timeout; + string https_dns_server_template; + array source_host_list; + array suspect_ip_list; }; \ No newline at end of file -- Gitee From 546791a52203cc30dc3ad035f080ab0fcf2cab54 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Tue, 10 Dec 2024 09:46:15 +0800 Subject: [PATCH 51/56] fix:codex DIR:SR.. Signed-off-by: taoxueao --- net/dns/host_resolver_manager.cc | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc index d714a2956c..2b782d4e6e 100644 --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc @@ -759,7 +759,7 @@ class HostResolverManager::RequestImpl if (parameters_.only_use_secure_fallback) { next_state_ = STATE_START_JOB; if (resolver_->CanUseSecureDnsFallback(resolve_context())) { - tasks_.push_back(TaskType::SRCURE_DNS_FALLBACK); + tasks_.push_back(TaskType::SECURE_DNS_FALLBACK); } return OK; } @@ -1013,8 +1013,7 @@ class HostResolverManager::RequestImpl dict.Set("secure_dns_policy", base::strict_cast(parameters_.secure_dns_policy)); #ifdef OHOS_EX_HTTP_DNS_FALLBACK - dict.Set("only_use_secure_fallback", - parameters_.only_use_secure_fallback); + dict.Set("only_use_secure_fallback", parameters_.only_use_secure_fallback); #endif // OHOS_EX_HTTP_DNS_FALLBACK return dict; }); @@ -2299,7 +2298,7 @@ class HostResolverManager::Job : public PrioritizedDispatcher::Job, break; case TaskType::SECURE_DNS: #ifdef OHOS_EX_HTTP_DNS_FALLBACK - case TaskType::SECURE_DNS_FALLBACK + case TaskType::SECURE_DNS_FALLBACK: #endif StartDnsTask(true /* secure */); break; @@ -3237,6 +3236,10 @@ void HostResolverManager::SetDnsConfigOverrides(DnsConfigOverrides overrides) { void HostResolverManager::RegisterResolveContext(ResolveContext* context) { registered_contexts_.AddObserver(context); + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + context->SetHttpsDnsFallbackEnabled(https_dns_fallback_enabled_); +#endif context->InvalidateCachesAndPerSessionData( dns_client_ ? dns_client_->GetCurrentSession() : nullptr, false /* network_change */); @@ -3783,6 +3786,12 @@ void HostResolverManager::PushDnsTasks(bool system_task_allowed, if (system_task_allowed && (no_dns_or_secure_tasks || allow_fallback_to_systemtask_)) out_tasks->push_back(TaskType::SYSTEM); + +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (dns_client_->CanUseSecureDnsFallbackTransactions(resolve_context)) { + out_tasks->push_back(TaskType::SECURE_DNS_FALLBACK); + } +#endif } void HostResolverManager::CreateTaskSequence( @@ -3877,6 +3886,12 @@ void HostResolverManager::CreateTaskSequence( break; } +#ifdef OHOS_EX_HTTP_DNS_FALLBACK + if (secure_dns_policy == SecureDnsPolicy::kBootstrap && out_tasks->back() == TaskType::SECURE_DNS_FALLBACK) { + out_tasks->pop_back(); + } +#endif + // `HOST_RESOLVER_CANONNAME` is only supported through system resolution. if (job_key.flags & HOST_RESOLVER_CANONNAME) { DCHECK(base::ranges::find(*out_tasks, TaskType::DNS) == out_tasks->end()); @@ -4335,11 +4350,10 @@ bool HostResolverManager::CanUseSecureDnsFallback(ResolveContext* context) const return false; } - return dns_client_->CanUseSecureDnsTransactions(context); + return dns_client_->CanUseSecureDnsFallbackTransactions(context); } -void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, - const std::string& server_template) { +void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, const std::string& server_template) { https_dns_fallback_enabled_ = enabled; doh_fallback_server_template_ = server_template; for (auto& context : registered_contexts_) { @@ -4347,7 +4361,7 @@ void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, } } -void HostResolverManager::SetSuspectIpListAndAourceHostList(const std::vector& ip_list, +void HostResolverManager::SetSuspectIpListAndSourceHostList(const std::vector& ip_list, const std::vector& host_list) { // Todo(huawei) } -- Gitee From e8c16eb98cce475b2ee29f51d60d3347ac08e84e Mon Sep 17 00:00:00 2001 From: taoxueao Date: Tue, 10 Dec 2024 10:10:36 +0800 Subject: [PATCH 52/56] fix:codex DIR:SR.. Signed-off-by: taoxueao --- net/dns/host_resolver_manager.cc | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc index 2b782d4e6e..9c034e6385 100644 --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc @@ -1013,7 +1013,8 @@ class HostResolverManager::RequestImpl dict.Set("secure_dns_policy", base::strict_cast(parameters_.secure_dns_policy)); #ifdef OHOS_EX_HTTP_DNS_FALLBACK - dict.Set("only_use_secure_fallback", parameters_.only_use_secure_fallback); + dict.Set("only_use_secure_fallback", + parameters_.only_use_secure_fallback); #endif // OHOS_EX_HTTP_DNS_FALLBACK return dict; }); @@ -2486,8 +2487,8 @@ class HostResolverManager::Job : public PrioritizedDispatcher::Job, addr_list.dns_aliases().end()); #ifdef OHOS_EX_HTTP_DNS_FALLBACK - if (dns_task_error_ != OK && net_error != OK && ! tasks_.empty() - && tasks_.back() == TaskType::SECURE_DNS_FALLBACK) { + if (dns_task_error_ != OK && net_error != OK && ! tasks_.empty() && + tasks_.back() == TaskType::SECURE_DNS_FALLBACK) { KillDnsTask(); RunNextTask(); return; @@ -3887,7 +3888,8 @@ void HostResolverManager::CreateTaskSequence( } #ifdef OHOS_EX_HTTP_DNS_FALLBACK - if (secure_dns_policy == SecureDnsPolicy::kBootstrap && out_tasks->back() == TaskType::SECURE_DNS_FALLBACK) { + if (secure_dns_policy == SecureDnsPolicy::kBootstrap && + out_tasks->back() == TaskType::SECURE_DNS_FALLBACK) { out_tasks->pop_back(); } #endif @@ -4345,7 +4347,8 @@ std::unique_ptr HostResolverManager::CreateDohProbeRunner( } #ifdef OHOS_EX_HTTP_DNS_FALLBACK -bool HostResolverManager::CanUseSecureDnsFallback(ResolveContext* context) const { +bool HostResolverManager::CanUseSecureDnsFallback( + ResolveContext* context) const { if (!dns_client_.get()) { return false; } @@ -4353,7 +4356,7 @@ bool HostResolverManager::CanUseSecureDnsFallback(ResolveContext* context) const return dns_client_->CanUseSecureDnsFallbackTransactions(context); } -void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, const std::string& server_template) { +void HostResolverManager::SetHttpsDnsFallbackData(bool enabled, const std::string& server_template) { https_dns_fallback_enabled_ = enabled; doh_fallback_server_template_ = server_template; for (auto& context : registered_contexts_) { @@ -4361,8 +4364,9 @@ void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, const std::strin } } -void HostResolverManager::SetSuspectIpListAndSourceHostList(const std::vector& ip_list, - const std::vector& host_list) { +void HostResolverManager::SetSuspectIpListAndSourceHostList( + const std::vector& ip_list, + const std::vector& host_list) { // Todo(huawei) } #endif -- Gitee From dc688a664a984eeb8e890e1eca80399a26328b8f Mon Sep 17 00:00:00 2001 From: taoxueao Date: Tue, 10 Dec 2024 10:10:36 +0800 Subject: [PATCH 53/56] fix:codex DIR:SR.. Signed-off-by: taoxueao --- net/dns/host_resolver_manager.cc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc index 2b782d4e6e..b6d4dc85d1 100644 --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc @@ -1013,7 +1013,8 @@ class HostResolverManager::RequestImpl dict.Set("secure_dns_policy", base::strict_cast(parameters_.secure_dns_policy)); #ifdef OHOS_EX_HTTP_DNS_FALLBACK - dict.Set("only_use_secure_fallback", parameters_.only_use_secure_fallback); + dict.Set("only_use_secure_fallback", + parameters_.only_use_secure_fallback); #endif // OHOS_EX_HTTP_DNS_FALLBACK return dict; }); @@ -2486,8 +2487,8 @@ class HostResolverManager::Job : public PrioritizedDispatcher::Job, addr_list.dns_aliases().end()); #ifdef OHOS_EX_HTTP_DNS_FALLBACK - if (dns_task_error_ != OK && net_error != OK && ! tasks_.empty() - && tasks_.back() == TaskType::SECURE_DNS_FALLBACK) { + if (dns_task_error_ != OK && net_error != OK && ! tasks_.empty() && + tasks_.back() == TaskType::SECURE_DNS_FALLBACK) { KillDnsTask(); RunNextTask(); return; @@ -3887,7 +3888,8 @@ void HostResolverManager::CreateTaskSequence( } #ifdef OHOS_EX_HTTP_DNS_FALLBACK - if (secure_dns_policy == SecureDnsPolicy::kBootstrap && out_tasks->back() == TaskType::SECURE_DNS_FALLBACK) { + if (secure_dns_policy == SecureDnsPolicy::kBootstrap && + out_tasks->back() == TaskType::SECURE_DNS_FALLBACK) { out_tasks->pop_back(); } #endif @@ -4345,7 +4347,8 @@ std::unique_ptr HostResolverManager::CreateDohProbeRunner( } #ifdef OHOS_EX_HTTP_DNS_FALLBACK -bool HostResolverManager::CanUseSecureDnsFallback(ResolveContext* context) const { +bool HostResolverManager::CanUseSecureDnsFallback( + ResolveContext* context) const { if (!dns_client_.get()) { return false; } @@ -4353,7 +4356,9 @@ bool HostResolverManager::CanUseSecureDnsFallback(ResolveContext* context) const return dns_client_->CanUseSecureDnsFallbackTransactions(context); } -void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, const std::string& server_template) { +void HostResolverManager::SetHttpsDnsFallbackData( + bool enabled, + const std::string& server_template) { https_dns_fallback_enabled_ = enabled; doh_fallback_server_template_ = server_template; for (auto& context : registered_contexts_) { @@ -4361,8 +4366,9 @@ void HostResloverManager::SetHttpsDnsFallbackData(bool enabled, const std::strin } } -void HostResolverManager::SetSuspectIpListAndSourceHostList(const std::vector& ip_list, - const std::vector& host_list) { +void HostResolverManager::SetSuspectIpListAndSourceHostList( + const std::vector& ip_list, + const std::vector& host_list) { // Todo(huawei) } #endif -- Gitee From 9bcebcb46abbfa34b42f8bee75f1758696ba96cc Mon Sep 17 00:00:00 2001 From: taoxueao Date: Tue, 10 Dec 2024 13:16:27 +0000 Subject: [PATCH 54/56] update media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc. Signed-off-by: taoxueao --- media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc b/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc index 8c80446537..dda3afd596 100755 --- a/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc +++ b/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc @@ -98,6 +98,7 @@ public: MOCK_METHOD(std::string, GetUserAgentBaseOSName, (), (override)); MOCK_METHOD(std::string, GetUserAgentOSVersion, (), (override)); MOCK_METHOD(std::string, GetCompatibleDeviceType, (), (override)); + MOCK_METHOD(std::string, GetDeviceInfoApiVersion, (), (override)); }; class MockWindowAdapter : public WindowAdapter { -- Gitee From 92859ab741ec2f933a7231966d70040bb34cf299 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Wed, 11 Dec 2024 01:33:20 +0000 Subject: [PATCH 55/56] update net/dns/dns_client.cc. Signed-off-by: taoxueao --- net/dns/dns_client.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/dns/dns_client.cc b/net/dns/dns_client.cc index e00c1832f6..8b788afa64 100644 --- a/net/dns/dns_client.cc +++ b/net/dns/dns_client.cc @@ -99,7 +99,7 @@ class DnsClientImpl : public DnsClient { return config && !config->doh_config.servers().empty(); } - #ifdef OHOS_EX_HTTP_DNS_FALLBACK +#ifdef OHOS_EX_HTTP_DNS_FALLBACK bool CanUseSecureDnsFallbackTransactions( ResolveContext* context) const override { if (context->IsHttpsDnsFallbackEnabled() && -- Gitee From 8a4bdcc53d0269d057fa0ac5196325d244931621 Mon Sep 17 00:00:00 2001 From: taoxueao Date: Wed, 11 Dec 2024 11:06:06 +0000 Subject: [PATCH 56/56] update media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc. Signed-off-by: taoxueao --- media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc b/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc index dda3afd596..8c80446537 100755 --- a/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc +++ b/media/base/ohos/ohos_media_decoder_bridge_impl_unittest.cc @@ -98,7 +98,6 @@ public: MOCK_METHOD(std::string, GetUserAgentBaseOSName, (), (override)); MOCK_METHOD(std::string, GetUserAgentOSVersion, (), (override)); MOCK_METHOD(std::string, GetCompatibleDeviceType, (), (override)); - MOCK_METHOD(std::string, GetDeviceInfoApiVersion, (), (override)); }; class MockWindowAdapter : public WindowAdapter { -- Gitee