diff options
author | xusydoc@chromium.org <xusydoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-30 03:09:04 +0000 |
---|---|---|
committer | xusydoc@chromium.org <xusydoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-30 03:09:04 +0000 |
commit | 3fb63aefda36c25de37d1b2cb37defc5d16b91e8 (patch) | |
tree | 7c8e404fefef0339fd29717c0abad5a2352f6e8a /chrome/browser/chromeos | |
parent | a09922d5ca5c7e2ef98c4620ba55332a564f9f2e (diff) | |
download | chromium_src-3fb63aefda36c25de37d1b2cb37defc5d16b91e8.zip chromium_src-3fb63aefda36c25de37d1b2cb37defc5d16b91e8.tar.gz chromium_src-3fb63aefda36c25de37d1b2cb37defc5d16b91e8.tar.bz2 |
Revert 164756 - Added NetworkPortalDetector.
BUG=134206
TEST=Manual tests on an Alex device.
Review URL: https://chromiumcodereview.appspot.com/10981067
TBR=ygorshenin@chromium.org
Review URL: https://codereview.chromium.org/11346026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164822 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos')
5 files changed, 10 insertions, 361 deletions
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 8c1a5c3..2f1b741 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc @@ -43,7 +43,6 @@ #include "chrome/browser/chromeos/memory/oom_priority_manager.h" #include "chrome/browser/chromeos/net/cros_network_change_notifier_factory.h" #include "chrome/browser/chromeos/net/network_change_notifier_chromeos.h" -#include "chrome/browser/chromeos/net/network_portal_detector.h" #include "chrome/browser/chromeos/power/brightness_observer.h" #include "chrome/browser/chromeos/power/output_observer.h" #include "chrome/browser/chromeos/power/power_button_observer.h" @@ -476,13 +475,6 @@ void ChromeBrowserMainPartsChromeos::PostProfileInit() { removable_device_notifications_ = new chromeos::RemovableDeviceNotificationsCros(); - // Initialize the network portal detector for Chrome OS. The network - // portal detector starts to listen for notifications from - // NetworkLibrary about changes in the NetworkManager and initiates - // captive portal detection for active networks. - if (chromeos::NetworkPortalDetector::GetInstance()) - chromeos::NetworkPortalDetector::GetInstance()->Init(); - chromeos::NotifyDisplayLocalStatePrefChanged(); ChromeBrowserMainPartsLinux::PostProfileInit(); @@ -550,9 +542,6 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() { if (chromeos::CrosNetworkChangeNotifierFactory::GetInstance()) chromeos::CrosNetworkChangeNotifierFactory::GetInstance()->Shutdown(); - if (chromeos::NetworkPortalDetector::GetInstance()) - chromeos::NetworkPortalDetector::GetInstance()->Shutdown(); - // Tell DeviceSettingsService to stop talking to session_manager. chromeos::DeviceSettingsService::Get()->Shutdown(); diff --git a/chrome/browser/chromeos/net/network_portal_detector.cc b/chrome/browser/chromeos/net/network_portal_detector.cc deleted file mode 100644 index d36b0ab..0000000 --- a/chrome/browser/chromeos/net/network_portal_detector.cc +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright (c) 2012 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/network_portal_detector.h" - -#include "base/bind.h" -#include "base/logging.h" -#include "chrome/browser/chromeos/cros/cros_library.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/profiles/profile_manager.h" -#include "content/public/browser/browser_thread.h" -#include "grit/generated_resources.h" -#include "ui/base/l10n/l10n_util.h" - -using captive_portal::CaptivePortalDetector; - -namespace chromeos { - -namespace { - -std::string CaptivePortalStateString( - NetworkPortalDetector::CaptivePortalState state) { - switch (state) { - case NetworkPortalDetector::CAPTIVE_PORTAL_STATE_UNKNOWN: - return l10n_util::GetStringUTF8( - IDS_CHROMEOS_CAPTIVE_PORTAL_STATE_UNKNOWN); - case NetworkPortalDetector::CAPTIVE_PORTAL_STATE_OFFLINE: - return l10n_util::GetStringUTF8( - IDS_CHROMEOS_CAPTIVE_PORTAL_STATE_OFFLINE); - case NetworkPortalDetector::CAPTIVE_PORTAL_STATE_ONLINE: - return l10n_util::GetStringUTF8(IDS_CHROMEOS_CAPTIVE_PORTAL_STATE_ONLINE); - case NetworkPortalDetector::CAPTIVE_PORTAL_STATE_PORTAL: - return l10n_util::GetStringUTF8(IDS_CHROMEOS_CAPTIVE_PORTAL_STATE_PORTAL); - } - return l10n_util::GetStringUTF8( - IDS_CHROMEOS_CAPTIVE_PORTAL_STATE_UNRECOGNIZED); -} - -NetworkPortalDetector* g_network_portal_detector = NULL; - -} // namespace - -NetworkPortalDetector::NetworkPortalDetector() - : test_url_(CaptivePortalDetector::kDefaultURL) { - Profile* profile = ProfileManager::GetDefaultProfile(); - DCHECK(profile); - captive_portal_detector_.reset( - new CaptivePortalDetector(profile->GetRequestContext())); -} - -NetworkPortalDetector::~NetworkPortalDetector() { -} - -void NetworkPortalDetector::Init() { - DCHECK(CalledOnValidThread()); - - state_ = STATE_IDLE; - chromeos::NetworkLibrary* network_library = - chromeos::CrosLibrary::Get()->GetNetworkLibrary(); - network_library->AddNetworkManagerObserver(this); -} - -void NetworkPortalDetector::Shutdown() { - DCHECK(CalledOnValidThread()); - - captive_portal_detector_->Cancel(); - observers_.Clear(); - chromeos::NetworkLibrary* network_library = - chromeos::CrosLibrary::Get()->GetNetworkLibrary(); - network_library->RemoveNetworkManagerObserver(this); -} - -void NetworkPortalDetector::AddObserver(Observer* observer) { - DCHECK(CalledOnValidThread()); - if (!observers_.HasObserver(observer)) - observers_.AddObserver(observer); -} - -void NetworkPortalDetector::RemoveObserver(Observer* observer) { - DCHECK(CalledOnValidThread()); - observers_.RemoveObserver(observer); -} - -NetworkPortalDetector::CaptivePortalState -NetworkPortalDetector::GetCaptivePortalState(const Network* network) { - if (!network) - return CAPTIVE_PORTAL_STATE_UNKNOWN; - CaptivePortalStateMap::const_iterator it = - captive_portal_state_map_.find(network->unique_id()); - if (it == captive_portal_state_map_.end()) - return CAPTIVE_PORTAL_STATE_UNKNOWN; - return it->second; -} - -void NetworkPortalDetector::OnNetworkManagerChanged(NetworkLibrary* cros) { - DCHECK(CalledOnValidThread()); - - // Suppose that if there are no active network, then unique id is - // empty and connection state is unknown. - std::string new_active_network_id; - ConnectionState connection_state = STATE_UNKNOWN; - const Network* active_network = cros->active_network(); - if (active_network) { - new_active_network_id = active_network->unique_id(); - connection_state = active_network->connection_state(); - } - - if (active_network_id_ != new_active_network_id) { - active_network_id_ = new_active_network_id; - if (IsCheckingForPortal()) { - // Network is changed, so detection results will be incorrect. - state_ = STATE_CHECKING_FOR_PORTAL_NETWORK_CHANGED; - } else if (Network::IsConnectedState(connection_state)) { - // Start captive portal detection, if possible. - DetectCaptivePortal(); - } - } else if (!IsCheckingForPortal() && - Network::IsConnectedState(connection_state)) { - DCHECK(active_network); - // Initiate Captive Portal detection only if network's captive - // portal state is unknown (e.g. for freshly created networks) or offline. - CaptivePortalState state = GetCaptivePortalState(active_network); - if (state == CAPTIVE_PORTAL_STATE_UNKNOWN || - state == CAPTIVE_PORTAL_STATE_OFFLINE) { - DetectCaptivePortal(); - } - } -} - -// static -NetworkPortalDetector* NetworkPortalDetector::CreateInstance() { - DCHECK(!g_network_portal_detector); - g_network_portal_detector = new NetworkPortalDetector(); - return g_network_portal_detector; -} - -// static -NetworkPortalDetector* NetworkPortalDetector::GetInstance() { - if (!g_network_portal_detector) - return CreateInstance(); - return g_network_portal_detector; -} - -void NetworkPortalDetector::DetectCaptivePortal() { - state_ = STATE_CHECKING_FOR_PORTAL; - captive_portal_detector_->DetectCaptivePortal( - test_url_, - base::Bind(&NetworkPortalDetector::OnPortalDetectionCompleted, - base::Unretained(this))); -} - -void NetworkPortalDetector::OnPortalDetectionCompleted( - const CaptivePortalDetector::Results& results) { - DCHECK(CalledOnValidThread()); - - DCHECK(IsCheckingForPortal()); - - NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); - const Network* active_network = cros->active_network(); - if (!active_network) - return; - - if (state_ == STATE_CHECKING_FOR_PORTAL_NETWORK_CHANGED) { - // Can't use detection results, because network was changed. So - // retry portal detection for the active network or, if possible. - if (Network::IsConnectedState(active_network->connection_state()) && - GetCaptivePortalState(active_network) == - CAPTIVE_PORTAL_STATE_UNKNOWN) { - DetectCaptivePortal(); - } - return; - } - - state_ = STATE_IDLE; - - switch (results.result) { - case captive_portal::RESULT_NO_RESPONSE: - SetCaptivePortalState(active_network, CAPTIVE_PORTAL_STATE_OFFLINE); - break; - case captive_portal::RESULT_INTERNET_CONNECTED: - SetCaptivePortalState(active_network, CAPTIVE_PORTAL_STATE_ONLINE); - break; - case captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL: - SetCaptivePortalState(active_network, CAPTIVE_PORTAL_STATE_PORTAL); - break; - default: - break; - } -} - -bool NetworkPortalDetector::IsCheckingForPortal() const { - return state_ == STATE_CHECKING_FOR_PORTAL || - state_ == STATE_CHECKING_FOR_PORTAL_NETWORK_CHANGED; -} - -void NetworkPortalDetector::SetCaptivePortalState(const Network* network, - CaptivePortalState state) { - DCHECK(network); - CaptivePortalStateMap::const_iterator it = - captive_portal_state_map_.find(network->unique_id()); - if (it == captive_portal_state_map_.end() || - it->second != state) { - VLOG(2) << "Updating Chrome Captive Portal state: " - << "network=" << network->unique_id() << ", " - << "state=" << CaptivePortalStateString(state); - captive_portal_state_map_[network->unique_id()] = state; - NotifyPortalStateChanged(network, state); - } -} - -void NetworkPortalDetector::NotifyPortalStateChanged(const Network* network, - CaptivePortalState state) { - FOR_EACH_OBSERVER(Observer, observers_, OnPortalStateChanged(network, state)); -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/net/network_portal_detector.h b/chrome/browser/chromeos/net/network_portal_detector.h deleted file mode 100644 index a80798b..0000000 --- a/chrome/browser/chromeos/net/network_portal_detector.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2012 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_NETWORK_PORTAL_DETECTOR_H_ -#define CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_H_ - -#include <string> - -#include "base/hash_tables.h" -#include "base/memory/scoped_ptr.h" -#include "base/observer_list.h" -#include "base/threading/non_thread_safe.h" -#include "chrome/browser/captive_portal/captive_portal_detector.h" -#include "chrome/browser/chromeos/cros/network_library.h" -#include "googleurl/src/gurl.h" - -namespace chromeos { - -// This class handles all notifications about network changes from -// NetworkLibrary and delegates portal detection for the active -// network to CaptivePortalService. -class NetworkPortalDetector - : public base::NonThreadSafe, - public chromeos::NetworkLibrary::NetworkManagerObserver { - public: - enum CaptivePortalState { - CAPTIVE_PORTAL_STATE_UNKNOWN = 0, - CAPTIVE_PORTAL_STATE_OFFLINE = 1, - CAPTIVE_PORTAL_STATE_ONLINE = 2, - CAPTIVE_PORTAL_STATE_PORTAL = 3, - }; - - class Observer { - public: - // Called when portal state is changed for |network|. - virtual void OnPortalStateChanged(const Network* network, - CaptivePortalState state) = 0; - - protected: - virtual ~Observer() {} - }; - - NetworkPortalDetector(); - virtual ~NetworkPortalDetector(); - - void Init(); - void Shutdown(); - void AddObserver(Observer* observer); - void RemoveObserver(Observer* observer); - - CaptivePortalState GetCaptivePortalState(const chromeos::Network* network); - - // NetworkLibrary::NetworkManagerObserver implementation: - virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* cros) OVERRIDE; - - // Creates an instance of the NetworkPortalDetector. - static NetworkPortalDetector* CreateInstance(); - - // Gets the instance of the NetworkPortalDetector. - static NetworkPortalDetector* GetInstance(); - - private: - typedef std::string NetworkId; - typedef base::hash_map<NetworkId, CaptivePortalState> CaptivePortalStateMap; - - enum State { - // No portal check is running. - STATE_IDLE, - // Portal check is in progress. - STATE_CHECKING_FOR_PORTAL, - // Portal check is in progress, but other portal detection request - // is pending. - STATE_CHECKING_FOR_PORTAL_NETWORK_CHANGED, - }; - - // Initiates Captive Portal detection. If currently portal detection - // in in progress, then delays portal detection. - void DetectCaptivePortal(); - - // Called by CaptivePortalDetector when detection completes. - void OnPortalDetectionCompleted( - const captive_portal::CaptivePortalDetector::Results& results); - - // Returns true if portal check is in progress. - bool IsCheckingForPortal() const; - - // Stores captive portal state for a |network|. - void SetCaptivePortalState(const Network* network, - CaptivePortalState state); - - // Notifies observers that portal state is changed for a |network|. - void NotifyPortalStateChanged(const Network* network, - CaptivePortalState state); - - std::string active_network_id_; - State state_; - CaptivePortalStateMap captive_portal_state_map_; - ObserverList<Observer> observers_; - - // URL that returns a 204 response code when connected to the Internet. - GURL test_url_; - - // Detector for checking active network for a portal state. - scoped_ptr<captive_portal::CaptivePortalDetector> captive_portal_detector_; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_H_ diff --git a/chrome/browser/chromeos/proxy_config_service_impl.cc b/chrome/browser/chromeos/proxy_config_service_impl.cc index 3b20231..03228db 100644 --- a/chrome/browser/chromeos/proxy_config_service_impl.cc +++ b/chrome/browser/chromeos/proxy_config_service_impl.cc @@ -562,20 +562,6 @@ void ProxyConfigServiceImpl::OnNetworkChanged(NetworkLibrary* network_lib, } // static -bool ProxyConfigServiceImpl::ParseProxyConfig(const Network* network, - net::ProxyConfig* proxy_config) { - if (!network || !proxy_config) - return false; - JSONStringValueSerializer serializer(network->proxy_config()); - scoped_ptr<Value> value(serializer.Deserialize(NULL, NULL)); - if (!value.get() || value->GetType() != Value::TYPE_DICTIONARY) - return false; - ProxyConfigDictionary proxy_dict(static_cast<DictionaryValue*>(value.get())); - return PrefProxyConfigTrackerImpl::PrefConfigToNetConfig(proxy_dict, - proxy_config); -} - -// static void ProxyConfigServiceImpl::RegisterPrefs(PrefService* pref_service) { // Use shared proxies default to off. GetUseSharedProxies will return the // correct value based on pre-login and login. @@ -729,10 +715,16 @@ void ProxyConfigServiceImpl::DetermineEffectiveConfig(const Network* network, network_availability = net::ProxyConfigService::CONFIG_VALID; } else if (!network->proxy_config().empty()) { // Network is private or shared with user using shared proxies. - if (ParseProxyConfig(network, &network_config)) { - VLOG(1) << this << ": using network proxy: " - << network->proxy_config(); - network_availability = net::ProxyConfigService::CONFIG_VALID; + JSONStringValueSerializer serializer(network->proxy_config()); + scoped_ptr<Value> value(serializer.Deserialize(NULL, NULL)); + if (value.get() && value->GetType() == Value::TYPE_DICTIONARY) { + DictionaryValue* dict = static_cast<DictionaryValue*>(value.get()); + ProxyConfigDictionary proxy_dict(dict); + if (PrefConfigToNetConfig(proxy_dict, &network_config)) { + VLOG(1) << this << ": using network proxy: " + << network->proxy_config(); + network_availability = net::ProxyConfigService::CONFIG_VALID; + } } } } diff --git a/chrome/browser/chromeos/proxy_config_service_impl.h b/chrome/browser/chromeos/proxy_config_service_impl.h index 92df0d0..7f17f306 100644 --- a/chrome/browser/chromeos/proxy_config_service_impl.h +++ b/chrome/browser/chromeos/proxy_config_service_impl.h @@ -193,11 +193,6 @@ class ProxyConfigServiceImpl virtual void OnNetworkChanged(NetworkLibrary* cros, const Network* network) OVERRIDE; - // Parse |network| proxy config and store result in |proxy_config|. - // Returns true if proxy config was successfully parsed. - static bool ParseProxyConfig(const Network* network, - net::ProxyConfig* proxy_config); - // Register UseShardProxies preference. static void RegisterPrefs(PrefService* pref_service); |