summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/net
diff options
context:
space:
mode:
authorzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-02 01:49:54 +0000
committerzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-02 01:49:54 +0000
commita0bd0e4d410000c1a4a888cd3af732d93e5fd9b0 (patch)
treee865b87433288cc8a4c8bc3273919363c3550c7b /chrome/browser/chromeos/net
parentfaa17028234c1b9bc9dd8c9a52fb9084a5bc573a (diff)
downloadchromium_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.cc40
-rw-r--r--chrome/browser/chromeos/net/network_change_notifier_chromeos.h4
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_;