Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(963)

Side by Side Diff: chrome/browser/chromeos/net/network_change_notifier_network_library.cc

Issue 11488011: Rename NetworkChangeNotifierChromeos to NetworkChangeNotifierNetworkLibrary (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: 80 chars Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "chrome/browser/chromeos/net/network_change_notifier_chromeos.h" 5 #include "chrome/browser/chromeos/net/network_change_notifier_network_library.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "chrome/browser/chromeos/cros/cros_library.h" 10 #include "chrome/browser/chromeos/cros/cros_library.h"
11 #include "chromeos/dbus/dbus_thread_manager.h" 11 #include "chromeos/dbus/dbus_thread_manager.h"
12 #include "chromeos/dbus/root_power_manager_client.h" 12 #include "chromeos/dbus/root_power_manager_client.h"
13 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
14 #include "net/dns/dns_config_service_posix.h" 14 #include "net/dns/dns_config_service_posix.h"
15 15
16 using content::BrowserThread; 16 using content::BrowserThread;
17 17
18 namespace { 18 namespace {
19 19
20 // Delay for online change notification reporting. 20 // Delay for online change notification reporting.
21 const int kOnlineNotificationDelayMS = 500; 21 const int kOnlineNotificationDelayMS = 500;
22 const int kInitialNotificationCheckDelayMS = 1000; 22 const int kInitialNotificationCheckDelayMS = 1000;
23 23
24 bool IsOnline(chromeos::ConnectionState state) { 24 bool IsOnline(chromeos::ConnectionState state) {
25 return state == chromeos::STATE_ONLINE || 25 return state == chromeos::STATE_ONLINE ||
26 state == chromeos::STATE_PORTAL; 26 state == chromeos::STATE_PORTAL;
27 } 27 }
28 28
29 } 29 }
30 30
31 namespace chromeos { 31 namespace chromeos {
32 32
33 class NetworkChangeNotifierChromeos::DnsConfigServiceChromeos 33 class NetworkChangeNotifierNetworkLibrary::DnsConfigServiceChromeos
34 : public net::internal::DnsConfigServicePosix { 34 : public net::internal::DnsConfigServicePosix {
35 public: 35 public:
36 DnsConfigServiceChromeos() {} 36 DnsConfigServiceChromeos() {}
37 37
38 virtual ~DnsConfigServiceChromeos() {} 38 virtual ~DnsConfigServiceChromeos() {}
39 39
40 // net::DnsConfigServicePosix: 40 // net::DnsConfigServicePosix:
41 virtual bool StartWatching() OVERRIDE { 41 virtual bool StartWatching() OVERRIDE {
42 // Notifications from NetworkLibrary are sent to 42 // Notifications from NetworkLibrary are sent to
43 // NetworkChangeNotifierChromeos. 43 // NetworkChangeNotifierNetworkLibrary.
44 return true; 44 return true;
45 } 45 }
46 46
47 void OnNetworkChange() { 47 void OnNetworkChange() {
48 InvalidateConfig(); 48 InvalidateConfig();
49 InvalidateHosts(); 49 InvalidateHosts();
50 ReadNow(); 50 ReadNow();
51 } 51 }
52 }; 52 };
53 53
54 NetworkChangeNotifierChromeos::NetworkChangeNotifierChromeos() 54 NetworkChangeNotifierNetworkLibrary::NetworkChangeNotifierNetworkLibrary()
55 : NetworkChangeNotifier(NetworkChangeCalculatorParamsChromeos()), 55 : NetworkChangeNotifier(NetworkChangeCalculatorParamsChromeos()),
56 has_active_network_(false), 56 has_active_network_(false),
57 connection_state_(chromeos::STATE_UNKNOWN), 57 connection_state_(chromeos::STATE_UNKNOWN),
58 connection_type_(CONNECTION_NONE), 58 connection_type_(CONNECTION_NONE),
59 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { 59 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
60 BrowserThread::PostDelayedTask( 60 BrowserThread::PostDelayedTask(
61 BrowserThread::UI, FROM_HERE, 61 BrowserThread::UI, FROM_HERE,
62 base::Bind( 62 base::Bind(
63 &NetworkChangeNotifierChromeos::UpdateInitialState, this), 63 &NetworkChangeNotifierNetworkLibrary::UpdateInitialState, this),
64 base::TimeDelta::FromMilliseconds(kInitialNotificationCheckDelayMS)); 64 base::TimeDelta::FromMilliseconds(kInitialNotificationCheckDelayMS));
65 } 65 }
66 66
67 NetworkChangeNotifierChromeos::~NetworkChangeNotifierChromeos() { 67 NetworkChangeNotifierNetworkLibrary::~NetworkChangeNotifierNetworkLibrary() {
68 } 68 }
69 69
70 void NetworkChangeNotifierChromeos::Init() { 70 void NetworkChangeNotifierNetworkLibrary::Init() {
71 chromeos::NetworkLibrary* network_library = 71 chromeos::NetworkLibrary* network_library =
72 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); 72 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
73 network_library->AddNetworkManagerObserver(this); 73 network_library->AddNetworkManagerObserver(this);
74 74
75 DBusThreadManager::Get()->GetRootPowerManagerClient()->AddObserver(this); 75 DBusThreadManager::Get()->GetRootPowerManagerClient()->AddObserver(this);
76 76
77 dns_config_service_.reset(new DnsConfigServiceChromeos()); 77 dns_config_service_.reset(new DnsConfigServiceChromeos());
78 dns_config_service_->WatchConfig( 78 dns_config_service_->WatchConfig(
79 base::Bind(NetworkChangeNotifier::SetDnsConfig)); 79 base::Bind(NetworkChangeNotifier::SetDnsConfig));
80 80
81 UpdateNetworkState(network_library); 81 UpdateNetworkState(network_library);
82 } 82 }
83 83
84 void NetworkChangeNotifierChromeos::Shutdown() { 84 void NetworkChangeNotifierNetworkLibrary::Shutdown() {
85 weak_factory_.InvalidateWeakPtrs(); 85 weak_factory_.InvalidateWeakPtrs();
86 86
87 dns_config_service_.reset(); 87 dns_config_service_.reset();
88 88
89 if (!chromeos::CrosLibrary::Get()) 89 if (!chromeos::CrosLibrary::Get())
90 return; 90 return;
91 91
92 chromeos::NetworkLibrary* lib = 92 chromeos::NetworkLibrary* lib =
93 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); 93 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
94 lib->RemoveNetworkManagerObserver(this); 94 lib->RemoveNetworkManagerObserver(this);
95 lib->RemoveObserverForAllNetworks(this); 95 lib->RemoveObserverForAllNetworks(this);
96 96
97 DBusThreadManager::Get()->GetRootPowerManagerClient()->RemoveObserver(this); 97 DBusThreadManager::Get()->GetRootPowerManagerClient()->RemoveObserver(this);
98 } 98 }
99 99
100 void NetworkChangeNotifierChromeos::OnResume( 100 void NetworkChangeNotifierNetworkLibrary::OnResume(
101 const base::TimeDelta& sleep_duration) { 101 const base::TimeDelta& sleep_duration) {
102 // Force invalidation of various net resources on system resume. 102 // Force invalidation of various net resources on system resume.
103 BrowserThread::PostTask( 103 BrowserThread::PostTask(
104 BrowserThread::IO, FROM_HERE, 104 BrowserThread::IO, FROM_HERE,
105 base::Bind( 105 base::Bind(
106 &NetworkChangeNotifier::NotifyObserversOfIPAddressChange)); 106 &NetworkChangeNotifier::NotifyObserversOfIPAddressChange));
107 } 107 }
108 108
109 109
110 void NetworkChangeNotifierChromeos::OnNetworkManagerChanged( 110 void NetworkChangeNotifierNetworkLibrary::OnNetworkManagerChanged(
111 chromeos::NetworkLibrary* cros) { 111 chromeos::NetworkLibrary* cros) {
112 UpdateNetworkState(cros); 112 UpdateNetworkState(cros);
113 } 113 }
114 114
115 net::NetworkChangeNotifier::ConnectionType 115 net::NetworkChangeNotifier::ConnectionType
116 NetworkChangeNotifierChromeos::GetCurrentConnectionType() const { 116 NetworkChangeNotifierNetworkLibrary::GetCurrentConnectionType() const {
117 return connection_type_; 117 return connection_type_;
118 } 118 }
119 119
120 void NetworkChangeNotifierChromeos::OnNetworkChanged( 120 void NetworkChangeNotifierNetworkLibrary::OnNetworkChanged(
121 chromeos::NetworkLibrary* cros, 121 chromeos::NetworkLibrary* cros,
122 const chromeos::Network* network) { 122 const chromeos::Network* network) {
123 CHECK(network); 123 CHECK(network);
124 124
125 // Active network changed? 125 // Active network changed?
126 if (network->service_path() != service_path_) 126 if (network->service_path() != service_path_)
127 UpdateNetworkState(cros); 127 UpdateNetworkState(cros);
128 else 128 else
129 UpdateConnectivityState(network); 129 UpdateConnectivityState(network);
130 } 130 }
131 131
132 void NetworkChangeNotifierChromeos::UpdateNetworkState( 132 void NetworkChangeNotifierNetworkLibrary::UpdateNetworkState(
133 chromeos::NetworkLibrary* lib) { 133 chromeos::NetworkLibrary* lib) {
134 const chromeos::Network* network = lib->active_network(); 134 const chromeos::Network* network = lib->active_network();
135 if (network) { 135 if (network) {
136 lib->GetIPConfigs( 136 lib->GetIPConfigs(
137 network->device_path(), 137 network->device_path(),
138 chromeos::NetworkLibrary::FORMAT_COLON_SEPARATED_HEX, 138 chromeos::NetworkLibrary::FORMAT_COLON_SEPARATED_HEX,
139 base::Bind(&NetworkChangeNotifierChromeos::UpdateNetworkStateCallback, 139 base::Bind(
140 weak_factory_.GetWeakPtr(), 140 &NetworkChangeNotifierNetworkLibrary::UpdateNetworkStateCallback,
141 lib)); 141 weak_factory_.GetWeakPtr(),
142 lib));
142 } else { 143 } else {
143 // If we don't have a network, then we can't fetch ipconfigs, but we still 144 // If we don't have a network, then we can't fetch ipconfigs, but we still
144 // need to process state updates when we lose a network (i.e. when 145 // need to process state updates when we lose a network (i.e. when
145 // has_active_network_ is still set, but we don't have one anymore). 146 // has_active_network_ is still set, but we don't have one anymore).
146 NetworkIPConfigVector empty_ipconfigs; 147 NetworkIPConfigVector empty_ipconfigs;
147 UpdateNetworkStateCallback(lib, empty_ipconfigs, ""); 148 UpdateNetworkStateCallback(lib, empty_ipconfigs, "");
148 } 149 }
149 } 150 }
150 151
151 void NetworkChangeNotifierChromeos::UpdateNetworkStateCallback( 152 void NetworkChangeNotifierNetworkLibrary::UpdateNetworkStateCallback(
152 chromeos::NetworkLibrary* lib, 153 chromeos::NetworkLibrary* lib,
153 const NetworkIPConfigVector& ipconfigs, 154 const NetworkIPConfigVector& ipconfigs,
154 const std::string& hardware_address) { 155 const std::string& hardware_address) {
155 const chromeos::Network* network = lib->active_network(); 156 const chromeos::Network* network = lib->active_network();
156 157
157 if (network) { 158 if (network) {
158 VLOG(1) << "UpdateNetworkStateCallback: " << network->name() 159 VLOG(1) << "UpdateNetworkStateCallback: " << network->name()
159 << ", type= " << network->type() 160 << ", type= " << network->type()
160 << ", device= " << network->device_path() 161 << ", device= " << network->device_path()
161 << ", state= " << network->state(); 162 << ", state= " << network->state();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 if (network) 208 if (network)
208 lib->AddNetworkObserver(network->service_path(), this); 209 lib->AddNetworkObserver(network->service_path(), this);
209 210
210 BrowserThread::PostTask( 211 BrowserThread::PostTask(
211 BrowserThread::IO, FROM_HERE, 212 BrowserThread::IO, FROM_HERE,
212 base::Bind( 213 base::Bind(
213 &NetworkChangeNotifier::NotifyObserversOfIPAddressChange)); 214 &NetworkChangeNotifier::NotifyObserversOfIPAddressChange));
214 } 215 }
215 } 216 }
216 217
217 void NetworkChangeNotifierChromeos::UpdateConnectivityState( 218 void NetworkChangeNotifierNetworkLibrary::UpdateConnectivityState(
218 const chromeos::Network* network) { 219 const chromeos::Network* network) {
219 if (network) { 220 if (network) {
220 VLOG(1) << "UpdateConnectivityState: " << network->name() 221 VLOG(1) << "UpdateConnectivityState: " << network->name()
221 << ", type= " << network->type() 222 << ", type= " << network->type()
222 << ", device= " << network->device_path() 223 << ", device= " << network->device_path()
223 << ", state= " << network->state() 224 << ", state= " << network->state()
224 << ", connect= " << connection_state_ 225 << ", connect= " << connection_state_
225 << ", type= " << connection_type_; 226 << ", type= " << connection_type_;
226 } 227 }
227 228
(...skipping 23 matching lines...) Expand all
251 << ", new_connection_type = " << new_connection_type; 252 << ", new_connection_type = " << new_connection_type;
252 ReportConnectionChange(); 253 ReportConnectionChange();
253 } 254 }
254 VLOG(2) << " UpdateConnectivityState4: " 255 VLOG(2) << " UpdateConnectivityState4: "
255 << "new_cs = " << new_connection_state 256 << "new_cs = " << new_connection_state
256 << ", end_cs_ = " << connection_state_ 257 << ", end_cs_ = " << connection_state_
257 << "prev_type = " << prev_connection_type 258 << "prev_type = " << prev_connection_type
258 << ", new_type_ = " << new_connection_type; 259 << ", new_type_ = " << new_connection_type;
259 } 260 }
260 261
261 void NetworkChangeNotifierChromeos::ReportConnectionChange() { 262 void NetworkChangeNotifierNetworkLibrary::ReportConnectionChange() {
262 if (weak_factory_.HasWeakPtrs()) { 263 if (weak_factory_.HasWeakPtrs()) {
263 // If we have a pending task, cancel it. 264 // If we have a pending task, cancel it.
264 DVLOG(1) << "ReportConnectionChange: has pending task"; 265 DVLOG(1) << "ReportConnectionChange: has pending task";
265 weak_factory_.InvalidateWeakPtrs(); 266 weak_factory_.InvalidateWeakPtrs();
266 DVLOG(1) << "ReportConnectionChange: canceled pending task"; 267 DVLOG(1) << "ReportConnectionChange: canceled pending task";
267 } 268 }
268 // Posting task with delay allows us to cancel it when connection type is 269 // Posting task with delay allows us to cancel it when connection type is
269 // changed frequently. This should help us avoid transient edge reporting 270 // changed frequently. This should help us avoid transient edge reporting
270 // while switching between connection types (e.g. ethernet->wifi). 271 // while switching between connection types (e.g. ethernet->wifi).
272 base::Closure task = base::Bind(
273 &NetworkChangeNotifierNetworkLibrary::ReportConnectionChangeOnUIThread,
274 weak_factory_.GetWeakPtr());
275
271 BrowserThread::PostDelayedTask( 276 BrowserThread::PostDelayedTask(
272 BrowserThread::UI, FROM_HERE, 277 BrowserThread::UI, FROM_HERE, task,
273 base::Bind(
274 &NetworkChangeNotifierChromeos::ReportConnectionChangeOnUIThread,
275 weak_factory_.GetWeakPtr()),
276 base::TimeDelta::FromMilliseconds(kOnlineNotificationDelayMS)); 278 base::TimeDelta::FromMilliseconds(kOnlineNotificationDelayMS));
277 } 279 }
278 280
279 void NetworkChangeNotifierChromeos::ReportConnectionChangeOnUIThread() { 281 void NetworkChangeNotifierNetworkLibrary::ReportConnectionChangeOnUIThread() {
280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 282 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
281 283
282 BrowserThread::PostTask( 284 BrowserThread::PostTask(
283 BrowserThread::IO, FROM_HERE, 285 BrowserThread::IO, FROM_HERE,
284 base::Bind( 286 base::Bind(
285 &NetworkChangeNotifierChromeos:: 287 &NetworkChangeNotifierNetworkLibrary::
286 NotifyObserversOfConnectionTypeChange)); 288 NotifyObserversOfConnectionTypeChange));
287 } 289 }
288 290
289 // static 291 // static
290 void NetworkChangeNotifierChromeos::UpdateInitialState( 292 void NetworkChangeNotifierNetworkLibrary::UpdateInitialState(
291 NetworkChangeNotifierChromeos* self) { 293 NetworkChangeNotifierNetworkLibrary* self) {
292 chromeos::NetworkLibrary* net = 294 chromeos::NetworkLibrary* net =
293 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); 295 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
294 self->UpdateNetworkState(net); 296 self->UpdateNetworkState(net);
295 } 297 }
296 298
297 // static 299 // static
298 net::NetworkChangeNotifier::ConnectionType 300 net::NetworkChangeNotifier::ConnectionType
299 NetworkChangeNotifierChromeos::GetNetworkConnectionType( 301 NetworkChangeNotifierNetworkLibrary::GetNetworkConnectionType(
300 const chromeos::Network* network) { 302 const chromeos::Network* network) {
301 if (!network || !IsOnline(network->connection_state())) 303 if (!network || !IsOnline(network->connection_state()))
302 return net::NetworkChangeNotifier::CONNECTION_NONE; 304 return net::NetworkChangeNotifier::CONNECTION_NONE;
303 305
304 switch (network->type()) { 306 switch (network->type()) {
305 case chromeos::TYPE_ETHERNET: 307 case chromeos::TYPE_ETHERNET:
306 return CONNECTION_ETHERNET; 308 return CONNECTION_ETHERNET;
307 case chromeos::TYPE_WIFI: 309 case chromeos::TYPE_WIFI:
308 return CONNECTION_WIFI; 310 return CONNECTION_WIFI;
309 case chromeos::TYPE_WIMAX: 311 case chromeos::TYPE_WIMAX:
(...skipping 19 matching lines...) Expand all
329 case chromeos::TYPE_BLUETOOTH: 331 case chromeos::TYPE_BLUETOOTH:
330 case chromeos::TYPE_VPN: 332 case chromeos::TYPE_VPN:
331 case chromeos::TYPE_UNKNOWN: 333 case chromeos::TYPE_UNKNOWN:
332 break; 334 break;
333 } 335 }
334 return net::NetworkChangeNotifier::CONNECTION_UNKNOWN; 336 return net::NetworkChangeNotifier::CONNECTION_UNKNOWN;
335 } 337 }
336 338
337 // static 339 // static
338 net::NetworkChangeNotifier::NetworkChangeCalculatorParams 340 net::NetworkChangeNotifier::NetworkChangeCalculatorParams
339 NetworkChangeNotifierChromeos::NetworkChangeCalculatorParamsChromeos() { 341 NetworkChangeNotifierNetworkLibrary::NetworkChangeCalculatorParamsChromeos() {
340 NetworkChangeCalculatorParams params; 342 NetworkChangeCalculatorParams params;
341 // Delay values arrived at by simple experimentation and adjusted so as to 343 // Delay values arrived at by simple experimentation and adjusted so as to
342 // produce a single signal when switching between network connections. 344 // produce a single signal when switching between network connections.
343 params.ip_address_offline_delay_ = base::TimeDelta::FromMilliseconds(4000); 345 params.ip_address_offline_delay_ = base::TimeDelta::FromMilliseconds(4000);
344 params.ip_address_online_delay_ = base::TimeDelta::FromMilliseconds(1000); 346 params.ip_address_online_delay_ = base::TimeDelta::FromMilliseconds(1000);
345 params.connection_type_offline_delay_ = base::TimeDelta::FromMilliseconds(0); 347 params.connection_type_offline_delay_ = base::TimeDelta::FromMilliseconds(0);
346 params.connection_type_online_delay_ = base::TimeDelta::FromMilliseconds(0); 348 params.connection_type_online_delay_ = base::TimeDelta::FromMilliseconds(0);
347 return params; 349 return params;
348 } 350 }
349 351
350 } // namespace chromeos 352 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/net/network_change_notifier_network_library.h ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698