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

Side by Side Diff: net/base/network_change_notifier_win.cc

Issue 11360108: Start calculating new combined NetworkChangeNotifier signal (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Switch to default argument constructor 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 | Annotate | Revision Log
« no previous file with comments | « net/base/network_change_notifier_win.h ('k') | net/tools/net_watcher/net_watcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/base/network_change_notifier_win.h" 5 #include "net/base/network_change_notifier_win.h"
6 6
7 #include <iphlpapi.h> 7 #include <iphlpapi.h>
8 #include <winsock2.h> 8 #include <winsock2.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 service_.reset(); 45 service_.reset();
46 } 46 }
47 47
48 private: 48 private:
49 scoped_ptr<DnsConfigService> service_; 49 scoped_ptr<DnsConfigService> service_;
50 50
51 DISALLOW_COPY_AND_ASSIGN(DnsConfigServiceThread); 51 DISALLOW_COPY_AND_ASSIGN(DnsConfigServiceThread);
52 }; 52 };
53 53
54 NetworkChangeNotifierWin::NetworkChangeNotifierWin() 54 NetworkChangeNotifierWin::NetworkChangeNotifierWin()
55 : is_watching_(false), 55 : NetworkChangeNotifier(NetworkChangeCalculatorParamsWin()),
56 is_watching_(false),
56 sequential_failures_(0), 57 sequential_failures_(0),
57 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), 58 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
58 dns_config_service_thread_(new DnsConfigServiceThread()), 59 dns_config_service_thread_(new DnsConfigServiceThread()),
59 last_announced_offline_(IsOffline()) { 60 last_announced_offline_(IsOffline()) {
60 memset(&addr_overlapped_, 0, sizeof addr_overlapped_); 61 memset(&addr_overlapped_, 0, sizeof addr_overlapped_);
61 addr_overlapped_.hEvent = WSACreateEvent(); 62 addr_overlapped_.hEvent = WSACreateEvent();
62 dns_config_service_thread_->StartWithOptions( 63 dns_config_service_thread_->StartWithOptions(
63 base::Thread::Options(MessageLoop::TYPE_IO, 0)); 64 base::Thread::Options(MessageLoop::TYPE_IO, 0));
64 } 65 }
65 66
66 NetworkChangeNotifierWin::~NetworkChangeNotifierWin() { 67 NetworkChangeNotifierWin::~NetworkChangeNotifierWin() {
67 if (is_watching_) { 68 if (is_watching_) {
68 CancelIPChangeNotify(&addr_overlapped_); 69 CancelIPChangeNotify(&addr_overlapped_);
69 addr_watcher_.StopWatching(); 70 addr_watcher_.StopWatching();
70 } 71 }
71 WSACloseEvent(addr_overlapped_.hEvent); 72 WSACloseEvent(addr_overlapped_.hEvent);
72 } 73 }
73 74
75 // static
76 NetworkChangeNotifier::NetworkChangeCalculatorParams
77 NetworkChangeNotifierWin::NetworkChangeCalculatorParamsWin() {
78 NetworkChangeCalculatorParams params;
79 // Delay values arrived at by simple experimentation and adjusted so as to
80 // produce a single signal when switching between network connections.
81 params.ip_address_offline_delay_ = base::TimeDelta::FromMilliseconds(1500);
82 params.ip_address_online_delay_ = base::TimeDelta::FromMilliseconds(1500);
83 params.connection_type_offline_delay_ =
84 base::TimeDelta::FromMilliseconds(1500);
85 params.connection_type_online_delay_ = base::TimeDelta::FromMilliseconds(500);
86 return params;
87 }
88
74 // This implementation does not return the actual connection type but merely 89 // This implementation does not return the actual connection type but merely
75 // determines if the user is "online" (in which case it returns 90 // determines if the user is "online" (in which case it returns
76 // CONNECTION_UNKNOWN) or "offline" (and then it returns CONNECTION_NONE). 91 // CONNECTION_UNKNOWN) or "offline" (and then it returns CONNECTION_NONE).
77 // This is challenging since the only thing we can test with certainty is 92 // This is challenging since the only thing we can test with certainty is
78 // whether a *particular* host is reachable. 93 // whether a *particular* host is reachable.
79 // 94 //
80 // While we can't conclusively determine when a user is "online", we can at 95 // While we can't conclusively determine when a user is "online", we can at
81 // least reliably recognize some of the situtations when they are clearly 96 // least reliably recognize some of the situtations when they are clearly
82 // "offline". For example, if the user's laptop is not plugged into an ethernet 97 // "offline". For example, if the user's laptop is not plugged into an ethernet
83 // network and is not connected to any wireless networks, it must be offline. 98 // network and is not connected to any wireless networks, it must be offline.
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 return; 301 return;
287 } 302 }
288 if (last_announced_offline_) 303 if (last_announced_offline_)
289 UMA_HISTOGRAM_CUSTOM_COUNTS("NCN.OfflinePolls", offline_polls_, 1, 50, 50); 304 UMA_HISTOGRAM_CUSTOM_COUNTS("NCN.OfflinePolls", offline_polls_, 1, 50, 50);
290 last_announced_offline_ = current_offline; 305 last_announced_offline_ = current_offline;
291 306
292 NotifyObserversOfConnectionTypeChange(); 307 NotifyObserversOfConnectionTypeChange();
293 } 308 }
294 309
295 } // namespace net 310 } // namespace net
OLDNEW
« no previous file with comments | « net/base/network_change_notifier_win.h ('k') | net/tools/net_watcher/net_watcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698