OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/dns/dns_config_service_win.h" | 5 #include "net/dns/dns_config_service_win.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 callback_ = callback; | 305 callback_ = callback; |
306 if (key_.Open(HKEY_LOCAL_MACHINE, key, KEY_NOTIFY) != ERROR_SUCCESS) | 306 if (key_.Open(HKEY_LOCAL_MACHINE, key, KEY_NOTIFY) != ERROR_SUCCESS) |
307 return false; | 307 return false; |
308 if (key_.StartWatching() != ERROR_SUCCESS) | 308 if (key_.StartWatching() != ERROR_SUCCESS) |
309 return false; | 309 return false; |
310 if (!watcher_.StartWatching(key_.watch_event(), this)) | 310 if (!watcher_.StartWatching(key_.watch_event(), this)) |
311 return false; | 311 return false; |
312 return true; | 312 return true; |
313 } | 313 } |
314 | 314 |
315 virtual void OnObjectSignaled(HANDLE object) OVERRIDE { | 315 virtual void OnObjectSignaled(HANDLE object) override { |
316 // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed. | 316 // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed. |
317 tracked_objects::ScopedProfile tracking_profile( | 317 tracked_objects::ScopedProfile tracking_profile( |
318 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 318 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
319 "RegistryWatcher_OnObjectSignaled")); | 319 "RegistryWatcher_OnObjectSignaled")); |
320 | 320 |
321 DCHECK(CalledOnValidThread()); | 321 DCHECK(CalledOnValidThread()); |
322 bool succeeded = (key_.StartWatching() == ERROR_SUCCESS) && | 322 bool succeeded = (key_.StartWatching() == ERROR_SUCCESS) && |
323 watcher_.StartWatching(key_.watch_event(), this); | 323 watcher_.StartWatching(key_.watch_event(), this); |
324 if (!succeeded && key_.Valid()) { | 324 if (!succeeded && key_.Valid()) { |
325 watcher_.StopWatching(); | 325 watcher_.StopWatching(); |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 } | 602 } |
603 | 603 |
604 private: | 604 private: |
605 void OnHostsChanged(const base::FilePath& path, bool error) { | 605 void OnHostsChanged(const base::FilePath& path, bool error) { |
606 if (error) | 606 if (error) |
607 NetworkChangeNotifier::RemoveIPAddressObserver(this); | 607 NetworkChangeNotifier::RemoveIPAddressObserver(this); |
608 service_->OnHostsChanged(!error); | 608 service_->OnHostsChanged(!error); |
609 } | 609 } |
610 | 610 |
611 // NetworkChangeNotifier::IPAddressObserver: | 611 // NetworkChangeNotifier::IPAddressObserver: |
612 virtual void OnIPAddressChanged() OVERRIDE { | 612 virtual void OnIPAddressChanged() override { |
613 // Need to update non-loopback IP of local host. | 613 // Need to update non-loopback IP of local host. |
614 service_->OnHostsChanged(true); | 614 service_->OnHostsChanged(true); |
615 } | 615 } |
616 | 616 |
617 DnsConfigServiceWin* service_; | 617 DnsConfigServiceWin* service_; |
618 | 618 |
619 RegistryWatcher tcpip_watcher_; | 619 RegistryWatcher tcpip_watcher_; |
620 RegistryWatcher tcpip6_watcher_; | 620 RegistryWatcher tcpip6_watcher_; |
621 RegistryWatcher dnscache_watcher_; | 621 RegistryWatcher dnscache_watcher_; |
622 RegistryWatcher policy_watcher_; | 622 RegistryWatcher policy_watcher_; |
623 base::FilePathWatcher hosts_watcher_; | 623 base::FilePathWatcher hosts_watcher_; |
624 | 624 |
625 DISALLOW_COPY_AND_ASSIGN(Watcher); | 625 DISALLOW_COPY_AND_ASSIGN(Watcher); |
626 }; | 626 }; |
627 | 627 |
628 // Reads config from registry and IpHelper. All work performed on WorkerPool. | 628 // Reads config from registry and IpHelper. All work performed on WorkerPool. |
629 class DnsConfigServiceWin::ConfigReader : public SerialWorker { | 629 class DnsConfigServiceWin::ConfigReader : public SerialWorker { |
630 public: | 630 public: |
631 explicit ConfigReader(DnsConfigServiceWin* service) | 631 explicit ConfigReader(DnsConfigServiceWin* service) |
632 : service_(service), | 632 : service_(service), |
633 success_(false) {} | 633 success_(false) {} |
634 | 634 |
635 private: | 635 private: |
636 virtual ~ConfigReader() {} | 636 virtual ~ConfigReader() {} |
637 | 637 |
638 virtual void DoWork() OVERRIDE { | 638 virtual void DoWork() override { |
639 // Should be called on WorkerPool. | 639 // Should be called on WorkerPool. |
640 base::TimeTicks start_time = base::TimeTicks::Now(); | 640 base::TimeTicks start_time = base::TimeTicks::Now(); |
641 DnsSystemSettings settings = {}; | 641 DnsSystemSettings settings = {}; |
642 ConfigParseWinResult result = ReadSystemSettings(&settings); | 642 ConfigParseWinResult result = ReadSystemSettings(&settings); |
643 if (result == CONFIG_PARSE_WIN_OK) | 643 if (result == CONFIG_PARSE_WIN_OK) |
644 result = ConvertSettingsToDnsConfig(settings, &dns_config_); | 644 result = ConvertSettingsToDnsConfig(settings, &dns_config_); |
645 success_ = (result == CONFIG_PARSE_WIN_OK || | 645 success_ = (result == CONFIG_PARSE_WIN_OK || |
646 result == CONFIG_PARSE_WIN_UNHANDLED_OPTIONS); | 646 result == CONFIG_PARSE_WIN_UNHANDLED_OPTIONS); |
647 UMA_HISTOGRAM_ENUMERATION("AsyncDNS.ConfigParseWin", | 647 UMA_HISTOGRAM_ENUMERATION("AsyncDNS.ConfigParseWin", |
648 result, CONFIG_PARSE_WIN_MAX); | 648 result, CONFIG_PARSE_WIN_MAX); |
649 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.ConfigParseResult", success_); | 649 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.ConfigParseResult", success_); |
650 UMA_HISTOGRAM_TIMES("AsyncDNS.ConfigParseDuration", | 650 UMA_HISTOGRAM_TIMES("AsyncDNS.ConfigParseDuration", |
651 base::TimeTicks::Now() - start_time); | 651 base::TimeTicks::Now() - start_time); |
652 } | 652 } |
653 | 653 |
654 virtual void OnWorkFinished() OVERRIDE { | 654 virtual void OnWorkFinished() override { |
655 DCHECK(loop()->BelongsToCurrentThread()); | 655 DCHECK(loop()->BelongsToCurrentThread()); |
656 DCHECK(!IsCancelled()); | 656 DCHECK(!IsCancelled()); |
657 if (success_) { | 657 if (success_) { |
658 service_->OnConfigRead(dns_config_); | 658 service_->OnConfigRead(dns_config_); |
659 } else { | 659 } else { |
660 LOG(WARNING) << "Failed to read DnsConfig."; | 660 LOG(WARNING) << "Failed to read DnsConfig."; |
661 // Try again in a while in case DnsConfigWatcher missed the signal. | 661 // Try again in a while in case DnsConfigWatcher missed the signal. |
662 base::MessageLoop::current()->PostDelayedTask( | 662 base::MessageLoop::current()->PostDelayedTask( |
663 FROM_HERE, | 663 FROM_HERE, |
664 base::Bind(&ConfigReader::WorkNow, this), | 664 base::Bind(&ConfigReader::WorkNow, this), |
(...skipping 13 matching lines...) Expand all Loading... |
678 public: | 678 public: |
679 explicit HostsReader(DnsConfigServiceWin* service) | 679 explicit HostsReader(DnsConfigServiceWin* service) |
680 : path_(GetHostsPath()), | 680 : path_(GetHostsPath()), |
681 service_(service), | 681 service_(service), |
682 success_(false) { | 682 success_(false) { |
683 } | 683 } |
684 | 684 |
685 private: | 685 private: |
686 virtual ~HostsReader() {} | 686 virtual ~HostsReader() {} |
687 | 687 |
688 virtual void DoWork() OVERRIDE { | 688 virtual void DoWork() override { |
689 base::TimeTicks start_time = base::TimeTicks::Now(); | 689 base::TimeTicks start_time = base::TimeTicks::Now(); |
690 HostsParseWinResult result = HOSTS_PARSE_WIN_UNREADABLE_HOSTS_FILE; | 690 HostsParseWinResult result = HOSTS_PARSE_WIN_UNREADABLE_HOSTS_FILE; |
691 if (ParseHostsFile(path_, &hosts_)) | 691 if (ParseHostsFile(path_, &hosts_)) |
692 result = AddLocalhostEntries(&hosts_); | 692 result = AddLocalhostEntries(&hosts_); |
693 success_ = (result == HOSTS_PARSE_WIN_OK); | 693 success_ = (result == HOSTS_PARSE_WIN_OK); |
694 UMA_HISTOGRAM_ENUMERATION("AsyncDNS.HostsParseWin", | 694 UMA_HISTOGRAM_ENUMERATION("AsyncDNS.HostsParseWin", |
695 result, HOSTS_PARSE_WIN_MAX); | 695 result, HOSTS_PARSE_WIN_MAX); |
696 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.HostParseResult", success_); | 696 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.HostParseResult", success_); |
697 UMA_HISTOGRAM_TIMES("AsyncDNS.HostsParseDuration", | 697 UMA_HISTOGRAM_TIMES("AsyncDNS.HostsParseDuration", |
698 base::TimeTicks::Now() - start_time); | 698 base::TimeTicks::Now() - start_time); |
699 } | 699 } |
700 | 700 |
701 virtual void OnWorkFinished() OVERRIDE { | 701 virtual void OnWorkFinished() override { |
702 DCHECK(loop()->BelongsToCurrentThread()); | 702 DCHECK(loop()->BelongsToCurrentThread()); |
703 if (success_) { | 703 if (success_) { |
704 service_->OnHostsRead(hosts_); | 704 service_->OnHostsRead(hosts_); |
705 } else { | 705 } else { |
706 LOG(WARNING) << "Failed to read DnsHosts."; | 706 LOG(WARNING) << "Failed to read DnsHosts."; |
707 } | 707 } |
708 } | 708 } |
709 | 709 |
710 const base::FilePath path_; | 710 const base::FilePath path_; |
711 DnsConfigServiceWin* service_; | 711 DnsConfigServiceWin* service_; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 } | 765 } |
766 | 766 |
767 } // namespace internal | 767 } // namespace internal |
768 | 768 |
769 // static | 769 // static |
770 scoped_ptr<DnsConfigService> DnsConfigService::CreateSystemService() { | 770 scoped_ptr<DnsConfigService> DnsConfigService::CreateSystemService() { |
771 return scoped_ptr<DnsConfigService>(new internal::DnsConfigServiceWin()); | 771 return scoped_ptr<DnsConfigService>(new internal::DnsConfigServiceWin()); |
772 } | 772 } |
773 | 773 |
774 } // namespace net | 774 } // namespace net |
OLD | NEW |