| 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 |