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/base/network_change_notifier.h" | 5 #include "net/base/network_change_notifier.h" |
6 #include "net/base/network_change_notifier_factory.h" | 6 #include "net/base/network_change_notifier_factory.h" |
7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
8 #if defined(OS_WIN) | 8 #if defined(OS_WIN) |
9 #include "net/base/network_change_notifier_win.h" | 9 #include "net/base/network_change_notifier_win.h" |
10 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) | 10 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
74 #endif | 74 #endif |
75 } | 75 } |
76 | 76 |
77 // static | 77 // static |
78 bool NetworkChangeNotifier::IsOffline() { | 78 bool NetworkChangeNotifier::IsOffline() { |
79 return g_network_change_notifier && | 79 return g_network_change_notifier && |
80 g_network_change_notifier->IsCurrentlyOffline(); | 80 g_network_change_notifier->IsCurrentlyOffline(); |
81 } | 81 } |
82 | 82 |
83 // static | 83 // static |
84 bool NetworkChangeNotifier::IsWatchingDNS() { | |
85 if (!g_network_change_notifier) | |
86 return false; | |
87 base::AutoLock(g_network_change_notifier->watching_dns_lock_); | |
88 return g_network_change_notifier->watching_dns_; | |
89 } | |
90 | |
91 // static | |
84 NetworkChangeNotifier* NetworkChangeNotifier::CreateMock() { | 92 NetworkChangeNotifier* NetworkChangeNotifier::CreateMock() { |
85 return new MockNetworkChangeNotifier(); | 93 return new MockNetworkChangeNotifier(); |
86 } | 94 } |
87 | 95 |
88 void NetworkChangeNotifier::AddIPAddressObserver(IPAddressObserver* observer) { | 96 void NetworkChangeNotifier::AddIPAddressObserver(IPAddressObserver* observer) { |
89 if (g_network_change_notifier) | 97 if (g_network_change_notifier) |
90 g_network_change_notifier->ip_address_observer_list_->AddObserver(observer); | 98 g_network_change_notifier->ip_address_observer_list_->AddObserver(observer); |
91 } | 99 } |
92 | 100 |
93 void NetworkChangeNotifier::AddOnlineStateObserver( | 101 void NetworkChangeNotifier::AddOnlineStateObserver( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
130 | 138 |
131 NetworkChangeNotifier::NetworkChangeNotifier() | 139 NetworkChangeNotifier::NetworkChangeNotifier() |
132 : ip_address_observer_list_( | 140 : ip_address_observer_list_( |
133 new ObserverListThreadSafe<IPAddressObserver>( | 141 new ObserverListThreadSafe<IPAddressObserver>( |
134 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), | 142 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), |
135 online_state_observer_list_( | 143 online_state_observer_list_( |
136 new ObserverListThreadSafe<OnlineStateObserver>( | 144 new ObserverListThreadSafe<OnlineStateObserver>( |
137 ObserverListBase<OnlineStateObserver>::NOTIFY_EXISTING_ONLY)), | 145 ObserverListBase<OnlineStateObserver>::NOTIFY_EXISTING_ONLY)), |
138 resolver_state_observer_list_( | 146 resolver_state_observer_list_( |
139 new ObserverListThreadSafe<DNSObserver>( | 147 new ObserverListThreadSafe<DNSObserver>( |
140 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)) { | 148 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)), |
149 watching_dns_(false) { | |
141 DCHECK(!g_network_change_notifier); | 150 DCHECK(!g_network_change_notifier); |
142 g_network_change_notifier = this; | 151 g_network_change_notifier = this; |
143 } | 152 } |
144 | 153 |
154 // static | |
145 void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() { | 155 void NetworkChangeNotifier::NotifyObserversOfIPAddressChange() { |
146 if (g_network_change_notifier) { | 156 if (g_network_change_notifier) { |
147 g_network_change_notifier->ip_address_observer_list_->Notify( | 157 g_network_change_notifier->ip_address_observer_list_->Notify( |
148 &IPAddressObserver::OnIPAddressChanged); | 158 &IPAddressObserver::OnIPAddressChanged); |
149 } | 159 } |
150 } | 160 } |
151 | 161 |
162 // static | |
152 void NetworkChangeNotifier::NotifyObserversOfDNSChange(unsigned detail) { | 163 void NetworkChangeNotifier::NotifyObserversOfDNSChange(unsigned detail) { |
153 if (g_network_change_notifier) { | 164 if (g_network_change_notifier) { |
165 { | |
166 base::AutoLock(g_network_change_notifier->watching_dns_lock_); | |
167 if (detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED) { | |
168 g_network_change_notifier->watching_dns_ = true; | |
169 } else if (detail & NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED) { | |
170 g_network_change_notifier->watching_dns_ = false; | |
171 } | |
172 // Include detail that watch is off to spare the call to IsWatchingDNS. | |
173 if (!g_network_change_notifier->watching_dns_) | |
174 detail |= NetworkChangeNotifier::CHANGE_DNS_WATCH_FAILED; | |
mmenke
2012/05/16 16:18:03
Suggest a:
DCHECK(!(detail & NetworkChangeNotifie
| |
175 } | |
154 g_network_change_notifier->resolver_state_observer_list_->Notify( | 176 g_network_change_notifier->resolver_state_observer_list_->Notify( |
155 &DNSObserver::OnDNSChanged, detail); | 177 &DNSObserver::OnDNSChanged, detail); |
156 } | 178 } |
157 } | 179 } |
158 | 180 |
181 // static | |
159 void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() { | 182 void NetworkChangeNotifier::NotifyObserversOfOnlineStateChange() { |
160 if (g_network_change_notifier) { | 183 if (g_network_change_notifier) { |
161 g_network_change_notifier->online_state_observer_list_->Notify( | 184 g_network_change_notifier->online_state_observer_list_->Notify( |
162 &OnlineStateObserver::OnOnlineStateChanged, !IsOffline()); | 185 &OnlineStateObserver::OnOnlineStateChanged, !IsOffline()); |
163 } | 186 } |
164 } | 187 } |
165 | 188 |
166 NetworkChangeNotifier::DisableForTest::DisableForTest() | 189 NetworkChangeNotifier::DisableForTest::DisableForTest() |
167 : network_change_notifier_(g_network_change_notifier) { | 190 : network_change_notifier_(g_network_change_notifier) { |
168 DCHECK(g_network_change_notifier); | 191 DCHECK(g_network_change_notifier); |
169 g_network_change_notifier = NULL; | 192 g_network_change_notifier = NULL; |
170 } | 193 } |
171 | 194 |
172 NetworkChangeNotifier::DisableForTest::~DisableForTest() { | 195 NetworkChangeNotifier::DisableForTest::~DisableForTest() { |
173 DCHECK(!g_network_change_notifier); | 196 DCHECK(!g_network_change_notifier); |
174 g_network_change_notifier = network_change_notifier_; | 197 g_network_change_notifier = network_change_notifier_; |
175 } | 198 } |
176 | 199 |
177 } // namespace net | 200 } // namespace net |
OLD | NEW |