diff options
author | zelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-02 01:49:54 +0000 |
---|---|---|
committer | zelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-02 01:49:54 +0000 |
commit | a0bd0e4d410000c1a4a888cd3af732d93e5fd9b0 (patch) | |
tree | e865b87433288cc8a4c8bc3273919363c3550c7b /chrome/browser/chromeos/net | |
parent | faa17028234c1b9bc9dd8c9a52fb9084a5bc573a (diff) | |
download | chromium_src-a0bd0e4d410000c1a4a888cd3af732d93e5fd9b0.zip chromium_src-a0bd0e4d410000c1a4a888cd3af732d93e5fd9b0.tar.gz chromium_src-a0bd0e4d410000c1a4a888cd3af732d93e5fd9b0.tar.bz2 |
Added delay for network goining online event handling in order to work around dns resolution issue in ChromeOS conenction manager.
BUG=chromium-os:18480
TEST=make sure webui OOBE does not show host not found page again
Review URL: http://codereview.chromium.org/7453047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95029 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/net')
-rw-r--r-- | chrome/browser/chromeos/net/network_change_notifier_chromeos.cc | 40 | ||||
-rw-r--r-- | chrome/browser/chromeos/net/network_change_notifier_chromeos.h | 4 |
2 files changed, 38 insertions, 6 deletions
diff --git a/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc b/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc index 5fffbf7..ad9dbd6 100644 --- a/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc +++ b/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc @@ -8,6 +8,13 @@ #include "chrome/browser/chromeos/cros/cros_library.h" #include "content/browser/browser_thread.h" +namespace { + +// Delay for online change notification reporting. +const int kOnlineNotificationDelayMS = 500; + +} + namespace chromeos { NetworkChangeNotifierChromeos::NetworkChangeNotifierChromeos() @@ -22,8 +29,11 @@ NetworkChangeNotifierChromeos::NetworkChangeNotifierChromeos() chromeos::CrosLibrary::Get()->GetPowerLibrary(); power->AddObserver(this); - connection_state_ = net->active_network() ? - net->active_network()->connection_state() : chromeos::STATE_UNKNOWN; + BrowserThread::PostDelayedTask( + BrowserThread::UI, FROM_HERE, + NewRunnableFunction( + &NetworkChangeNotifierChromeos::UpdateInitialState, this), + kOnlineNotificationDelayMS); } NetworkChangeNotifierChromeos::~NetworkChangeNotifierChromeos() { @@ -122,11 +132,29 @@ void NetworkChangeNotifierChromeos::UpdateConnectivityState( connection_state_ = new_connection_state; if (is_online != was_online || is_portal != was_portal || is_unknown != was_unknown) { - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - NewRunnableFunction( - &NetworkChangeNotifierChromeos::NotifyObserversOfOnlineStateChange)); + if (!IsCurrentlyOffline()) { + // Delay reporting of edge when we go online. dns resolution service + // does not seem to be immediately available. + BrowserThread::PostDelayedTask( + BrowserThread::IO, FROM_HERE, + NewRunnableFunction( + &NetworkChangeNotifierChromeos::NotifyObserversOfOnlineStateChange), + kOnlineNotificationDelayMS); + } else { + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + NewRunnableFunction( + &NetworkChangeNotifierChromeos::NotifyObserversOfOnlineStateChange)); + } } } +// static +void NetworkChangeNotifierChromeos::UpdateInitialState( + NetworkChangeNotifierChromeos* self) { + chromeos::NetworkLibrary* net = + chromeos::CrosLibrary::Get()->GetNetworkLibrary(); + self->UpdateNetworkState(net); +} + } // namespace net diff --git a/chrome/browser/chromeos/net/network_change_notifier_chromeos.h b/chrome/browser/chromeos/net/network_change_notifier_chromeos.h index b3ab865..4a29e97 100644 --- a/chrome/browser/chromeos/net/network_change_notifier_chromeos.h +++ b/chrome/browser/chromeos/net/network_change_notifier_chromeos.h @@ -42,6 +42,10 @@ class NetworkChangeNotifierChromeos void UpdateNetworkState(chromeos::NetworkLibrary* cros); // Updates network connectivity state. void UpdateConnectivityState(const chromeos::Network* network); + // Updates the initial state. Lets us trigger initial eval of the + // connectivity status without waiting for an event from the connection + // manager. + static void UpdateInitialState(NetworkChangeNotifierChromeos* self); // True if we previously had an active network around. bool has_active_network_; |