summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/browser_main.cc15
-rw-r--r--chrome/browser/chromeos/net/cros_network_change_notifier_factory.cc14
-rw-r--r--chrome/browser/chromeos/net/cros_network_change_notifier_factory.h29
-rw-r--r--chrome/browser/chromeos/net/network_change_notifier_chromeos.cc52
-rw-r--r--chrome/browser/chromeos/net/network_change_notifier_chromeos.h2
-rw-r--r--chrome/browser/tab_contents/render_view_host_delegate_helper.cc3
-rw-r--r--chrome/chrome_browser.gypi2
7 files changed, 89 insertions, 28 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index 67bd547..e5711cc 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -147,7 +147,7 @@
#include "chrome/browser/chromeos/login/screen_locker.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/metrics_cros_settings_provider.h"
-#include "chrome/browser/chromeos/net/network_change_notifier_chromeos.h"
+#include "chrome/browser/chromeos/net/cros_network_change_notifier_factory.h"
#include "chrome/browser/chromeos/system_key_event_listener.h"
#include "chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.h"
#include "chrome/browser/oom_priority_manager.h"
@@ -570,15 +570,7 @@ void BrowserMainParts::MainMessageLoopStart() {
InitializeMainThread();
-#if defined(OS_CHROMEOS)
- // TODO(zelidrag): We need to move cros library glue code outside of
- // chrome/browser directory to avoid check_deps issues and then migrate
- // NetworkChangeNotifierCros class to net/base where other OS implementations
- // live.
- network_change_notifier_.reset(new chromeos::NetworkChangeNotifierChromeos());
-#else
network_change_notifier_.reset(net::NetworkChangeNotifier::Create());
-#endif
PostMainMessageLoopStart();
Profiling::MainMessageLoopStarted();
@@ -1285,6 +1277,11 @@ int BrowserMain(const MainFunctionParams& parameters) {
// SetUseStubImpl doesn't do anything.
if (parameters.command_line_.HasSwitch(switches::kStubCros))
chromeos::CrosLibrary::Get()->GetTestApi()->SetUseStubImpl();
+
+ // Replace the default NetworkChangeNotifierFactory with ChromeOS specific
+ // implementation.
+ net::NetworkChangeNotifier::SetFactory(
+ new chromeos::CrosNetworkChangeNotifierFactory());
#endif
parts->MainMessageLoopStart();
diff --git a/chrome/browser/chromeos/net/cros_network_change_notifier_factory.cc b/chrome/browser/chromeos/net/cros_network_change_notifier_factory.cc
new file mode 100644
index 0000000..ad38c6c
--- /dev/null
+++ b/chrome/browser/chromeos/net/cros_network_change_notifier_factory.cc
@@ -0,0 +1,14 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#include "chrome/browser/chromeos/net/cros_network_change_notifier_factory.h"
+
+#include "chrome/browser/chromeos/net/network_change_notifier_chromeos.h"
+
+namespace chromeos {
+
+net::NetworkChangeNotifier* CrosNetworkChangeNotifierFactory::CreateInstance() {
+ return new NetworkChangeNotifierChromeos();
+}
+
+} // namespace net
diff --git a/chrome/browser/chromeos/net/cros_network_change_notifier_factory.h b/chrome/browser/chromeos/net/cros_network_change_notifier_factory.h
new file mode 100644
index 0000000..73c7663
--- /dev/null
+++ b/chrome/browser/chromeos/net/cros_network_change_notifier_factory.h
@@ -0,0 +1,29 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_NET_CROS_NETWORK_CHANGE_NOTIFIER_FACTORY_H_
+#define CHROME_BROWSER_CHROMEOS_NET_CROS_NETWORK_CHANGE_NOTIFIER_FACTORY_H_
+#pragma once
+
+#include "base/compiler_specific.h"
+#include "net/base/network_change_notifier_factory.h"
+
+namespace chromeos {
+
+class NetworkChangeNotifier;
+
+// CrosNetworkChangeNotifierFactory creates ChromeOS-specific specialization of
+// NetworkChangeNotifier.
+class CrosNetworkChangeNotifierFactory
+ : public net::NetworkChangeNotifierFactory {
+ public:
+ CrosNetworkChangeNotifierFactory() {}
+
+ // Overrides of net::NetworkChangeNotifierFactory.
+ virtual net::NetworkChangeNotifier* CreateInstance() OVERRIDE;
+};
+
+} // namespace net
+
+#endif // CHROME_BROWSER_CHROMEOS_NET_CROS_NETWORK_CHANGE_NOTIFIER_FACTORY_H_
diff --git a/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc b/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc
index b8c1dc9..5fffbf7 100644
--- a/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc
+++ b/chrome/browser/chromeos/net/network_change_notifier_chromeos.cc
@@ -14,13 +14,16 @@ NetworkChangeNotifierChromeos::NetworkChangeNotifierChromeos()
: has_active_network_(false),
connection_state_(chromeos::STATE_UNKNOWN) {
- chromeos::NetworkLibrary* lib =
+ chromeos::NetworkLibrary* net =
chromeos::CrosLibrary::Get()->GetNetworkLibrary();
- lib->AddNetworkManagerObserver(this);
+ net->AddNetworkManagerObserver(this);
chromeos::PowerLibrary* power =
chromeos::CrosLibrary::Get()->GetPowerLibrary();
power->AddObserver(this);
+
+ connection_state_ = net->active_network() ?
+ net->active_network()->connection_state() : chromeos::STATE_UNKNOWN;
}
NetworkChangeNotifierChromeos::~NetworkChangeNotifierChromeos() {
@@ -55,6 +58,18 @@ bool NetworkChangeNotifierChromeos::IsCurrentlyOffline() const {
return connection_state_ != chromeos::STATE_ONLINE;
}
+void NetworkChangeNotifierChromeos::OnNetworkChanged(
+ chromeos::NetworkLibrary* cros,
+ const chromeos::Network* network) {
+ CHECK(network);
+
+ // Active network changed?
+ if (network->service_path() != service_path_)
+ UpdateNetworkState(cros);
+ else
+ UpdateConnectivityState(network);
+}
+
void NetworkChangeNotifierChromeos::UpdateNetworkState(
chromeos::NetworkLibrary* lib) {
const chromeos::Network* network = lib->active_network();
@@ -70,12 +85,17 @@ void NetworkChangeNotifierChromeos::UpdateNetworkState(
has_active_network_ = false;
service_path_.clear();
ip_address_.clear();
+ connection_state_ = chromeos::STATE_UNKNOWN;
} else {
has_active_network_ = true;
service_path_ = network->service_path();
ip_address_ = network->ip_address();
- lib->AddNetworkObserver(network->service_path(), this);
}
+ UpdateConnectivityState(network);
+ // If there is an active network, add observer to track its changes.
+ if (network)
+ lib->AddNetworkObserver(network->service_path(), this);
+
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
NewRunnableFunction(
@@ -83,36 +103,30 @@ void NetworkChangeNotifierChromeos::UpdateNetworkState(
}
}
-void NetworkChangeNotifierChromeos::OnNetworkChanged(
- chromeos::NetworkLibrary* cros,
- const chromeos::Network* network) {
- if (!network) {
- NOTREACHED();
- return;
- }
- // Active network changed?
- if (network->service_path() != service_path_) {
- UpdateNetworkState(cros);
- }
-
+void NetworkChangeNotifierChromeos::UpdateConnectivityState(
+ const chromeos::Network* network) {
// We don't care about all transitions of ConnectionState. OnlineStateChange
// notification should trigger if
// a) we were online and went offline
// b) we were offline and went online
// c) switched to/from captive portal
- chromeos::ConnectionState new_connection_state = network->connection_state();
+ chromeos::ConnectionState new_connection_state =
+ network ? network->connection_state() : chromeos::STATE_UNKNOWN;
+
bool is_online = (new_connection_state == chromeos::STATE_ONLINE);
bool was_online = (connection_state_ == chromeos::STATE_ONLINE);
bool is_portal = (new_connection_state == chromeos::STATE_PORTAL);
bool was_portal = (connection_state_ == chromeos::STATE_PORTAL);
-
- if (is_online != was_online || is_portal != was_portal) {
+ bool is_unknown = (new_connection_state == chromeos::STATE_UNKNOWN);
+ bool was_unknown = (connection_state_ == chromeos::STATE_UNKNOWN);
+ 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));
}
- connection_state_ = new_connection_state;
}
} // 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 4fa94b9..b3ab865 100644
--- a/chrome/browser/chromeos/net/network_change_notifier_chromeos.h
+++ b/chrome/browser/chromeos/net/network_change_notifier_chromeos.h
@@ -40,6 +40,8 @@ class NetworkChangeNotifierChromeos
// Updates data members that keep the track the network stack state.
void UpdateNetworkState(chromeos::NetworkLibrary* cros);
+ // Updates network connectivity state.
+ void UpdateConnectivityState(const chromeos::Network* network);
// True if we previously had an active network around.
bool has_active_network_;
diff --git a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
index 3f23de0..e2e2bc3 100644
--- a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
+++ b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
@@ -33,6 +33,7 @@
#include "content/browser/tab_contents/tab_contents_view.h"
#include "content/browser/webui/web_ui.h"
#include "content/common/notification_service.h"
+#include "net/base/network_change_notifier.h"
RenderViewHostDelegateViewHelper::RenderViewHostDelegateViewHelper() {
registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
@@ -395,6 +396,8 @@ WebPreferences RenderViewHostDelegateHelper::GetWebkitPrefs(
web_prefs.javascript_enabled = true;
}
+ web_prefs.is_online = !net::NetworkChangeNotifier::IsOffline();
+
return web_prefs;
}
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 75c5e1f..33a8cd1 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -635,6 +635,8 @@
'browser/chromeos/metrics_cros_settings_provider.h',
'browser/chromeos/native_dialog_window.cc',
'browser/chromeos/native_dialog_window.h',
+ 'browser/chromeos/net/cros_network_change_notifier_factory.cc',
+ 'browser/chromeos/net/cros_network_change_notifier_factory.h',
'browser/chromeos/net/network_change_notifier_chromeos.cc',
'browser/chromeos/net/network_change_notifier_chromeos.h',
'browser/chromeos/network_login_observer.cc',