1 // Copyright 2021 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_DNS_DNS_CONFIG_SERVICE_ANDROID_H_ 6 #define NET_DNS_DNS_CONFIG_SERVICE_ANDROID_H_ 7 8 #include <memory> 9 10 #include "base/time/time.h" 11 #include "net/android/network_library.h" 12 #include "net/base/net_export.h" 13 #include "net/dns/dns_config_service.h" 14 15 namespace net { 16 17 // Use DnsConfigService::CreateSystemService to use it outside of tests. 18 namespace internal { 19 20 // Service for reading and watching Android system DNS settings. This object is 21 // not thread-safe and methods may perform blocking I/O so methods must be 22 // called on a sequence that allows blocking (i.e. base::MayBlock). It may be 23 // constructed on a different sequence than which it's later called on. 24 class NET_EXPORT_PRIVATE DnsConfigServiceAndroid : public DnsConfigService { 25 public: 26 static constexpr base::TimeDelta kConfigChangeDelay = base::Milliseconds(50); 27 28 DnsConfigServiceAndroid(); 29 ~DnsConfigServiceAndroid() override; 30 31 DnsConfigServiceAndroid(const DnsConfigServiceAndroid&) = delete; 32 DnsConfigServiceAndroid& operator=(const DnsConfigServiceAndroid&) = delete; 33 34 // To be effective, must be called before the first config read. Also, may 35 // outlive `this` and be run on other sequences. set_dns_server_getter_for_testing(android::DnsServerGetter dns_server_getter)36 void set_dns_server_getter_for_testing( 37 android::DnsServerGetter dns_server_getter) { 38 dns_server_getter_ = std::move(dns_server_getter); 39 } 40 41 protected: 42 // DnsConfigService: 43 void ReadConfigNow() override; 44 bool StartWatching() override; 45 46 private: 47 class Watcher; 48 class ConfigReader; 49 50 std::unique_ptr<Watcher> watcher_; 51 std::unique_ptr<ConfigReader> config_reader_; 52 android::DnsServerGetter dns_server_getter_; 53 }; 54 55 } // namespace internal 56 } // namespace net 57 58 #endif // NET_DNS_DNS_CONFIG_SERVICE_ANDROID_H_ 59