diff options
author | pneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-04 19:29:35 +0000 |
---|---|---|
committer | pneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-04 19:29:35 +0000 |
commit | 29c003e0201f2da153af7964e13ad85d49dc31de (patch) | |
tree | 7d05828de9127f8ba0263d3aeec02efef205b35c /chrome/browser/chromeos/proxy_config_service_impl.h | |
parent | b8b14be5e64a4193009a5736b38aa41c979da267 (diff) | |
download | chromium_src-29c003e0201f2da153af7964e13ad85d49dc31de.zip chromium_src-29c003e0201f2da153af7964e13ad85d49dc31de.tar.gz chromium_src-29c003e0201f2da153af7964e13ad85d49dc31de.tar.bz2 |
Migrate ProxyConfigServiceImpl to NetworkStateHandler and NetworkProfileHandler.
- UI part of ProxyConfigServiceImpl is moved to UIProxyConfig and UIProxyConfigService.
- ProxyConfigServiceImpl uses NetworkStateHandler instead of NetworkLibrary except for the legacy migration of device proxy settings.
- UI code continues to use NetworkLibrary for now.
BUG=234982
TBR=willchan@chromium.org (for trivial but reviewed change in net/proxy/proxy_config.*)
Review URL: https://chromiumcodereview.appspot.com/14846004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@204016 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/proxy_config_service_impl.h')
-rw-r--r-- | chrome/browser/chromeos/proxy_config_service_impl.h | 245 |
1 files changed, 31 insertions, 214 deletions
diff --git a/chrome/browser/chromeos/proxy_config_service_impl.h b/chrome/browser/chromeos/proxy_config_service_impl.h index 39a130e..9e63f7b 100644 --- a/chrome/browser/chromeos/proxy_config_service_impl.h +++ b/chrome/browser/chromeos/proxy_config_service_impl.h @@ -6,13 +6,15 @@ #define CHROME_BROWSER_CHROMEOS_PROXY_CONFIG_SERVICE_IMPL_H_ #include <string> -#include <vector> #include "base/basictypes.h" +#include "base/compiler_specific.h" #include "base/prefs/pref_member.h" -#include "base/values.h" -#include "chrome/browser/chromeos/cros/network_library.h" +#include "chrome/browser/chromeos/ui_proxy_config.h" +#include "chrome/browser/chromeos/ui_proxy_config_service.h" #include "chrome/browser/net/pref_proxy_config_tracker_impl.h" +#include "chromeos/network/network_state_handler_observer.h" +#include "chromeos/network/onc/onc_constants.h" class PrefRegistrySimple; @@ -22,6 +24,8 @@ class PrefRegistrySyncable; namespace chromeos { +class NetworkState; + // Implementation of proxy config service for chromeos that: // - extends PrefProxyConfigTrackerImpl (and so lives and runs entirely on UI // thread) to handle proxy from prefs (via PrefProxyConfigTrackerImpl) and @@ -31,236 +35,59 @@ namespace chromeos { // - provides network stack with latest effective proxy configuration for // currently active network via PrefProxyConfigTrackerImpl's mechanism of // pushing config to ChromeProxyConfigService -// - provides UI with methods to retrieve and modify proxy configuration for -// any remembered network (either currently active or non-active) of current -// user profile class ProxyConfigServiceImpl : public PrefProxyConfigTrackerImpl, - public NetworkLibrary::NetworkManagerObserver, - public NetworkLibrary::NetworkObserver { + public NetworkStateHandlerObserver { public: // ProxyConfigServiceImpl is created in ProxyServiceFactory:: // CreatePrefProxyConfigTrackerImpl via Profile::GetProxyConfigTracker() for // profile or IOThread constructor for local state and is owned by the // respective classes. // - // From the UI, it is accessed via Profile::GetProxyConfigTracker to allow - // user to read or modify the proxy configuration via UIGetProxyConfig or - // UISetProxyConfigTo* respectively. // The new modified proxy config, together with proxy from prefs if available, // are used to determine the effective proxy config, which is then pushed // through PrefProxyConfigTrackerImpl to ChromeProxyConfigService to the // network stack. - // - // In contrary to other platforms which simply use the systems' UI to allow - // users to configure proxies, we have to implement our own UI on the chromeos - // device. This requires extra and specific UI requirements that - // net::ProxyConfig does not suffice. So we create an augmented analog to - // net:ProxyConfig here to include and handle these UI requirements, e.g. - // - state of configuration e.g. where it was picked up from - policy, - // extension, etc (refer to ProxyPrefs::ConfigState) - // - the read/write access of a proxy setting - // - may add more stuff later. - // This is then converted to the common net::ProxyConfig before being pushed - // to PrefProxyConfigTrackerImpl::OnProxyConfigChanged and then to the network - // stack. - struct ProxyConfig { - // Specifies if proxy config is direct, auto-detect, using pac script, - // single-proxy, or proxy-per-scheme. - enum Mode { - MODE_DIRECT, - MODE_AUTO_DETECT, - MODE_PAC_SCRIPT, - MODE_SINGLE_PROXY, - MODE_PROXY_PER_SCHEME, - }; - - // Proxy setting for mode = direct or auto-detect or using pac script. - struct AutomaticProxy { - GURL pac_url; // Set if proxy is using pac script. - }; - - // Proxy setting for mode = single-proxy or proxy-per-scheme. - struct ManualProxy { - net::ProxyServer server; - }; - - ProxyConfig(); - ~ProxyConfig(); - - // Converts net::ProxyConfig to |this|. - bool FromNetProxyConfig(const net::ProxyConfig& net_config); - - // Converts |this| to Dictionary of ProxyConfigDictionary format (which - // is the same format used by prefs). - DictionaryValue* ToPrefProxyConfig(); - - // Map |scheme| (one of "http", "https", "ftp" or "socks") to the correct - // ManualProxy. Returns NULL if scheme is invalid. - ManualProxy* MapSchemeToProxy(const std::string& scheme); - - // Serializes config into a ProxyConfigDictionary and then std::string - // persisted as string property in shill for a network. - bool SerializeForNetwork(std::string* output); - - // Encodes the proxy server as "<url-scheme>=<proxy-scheme>://<proxy>" - static void EncodeAndAppendProxyServer(const std::string& url_scheme, - const net::ProxyServer& server, - std::string* spec); - - Mode mode; - - ProxyPrefs::ConfigState state; - - // True if user can modify proxy settings via UI. - // If proxy is managed by policy or extension or other_precde or is for - // shared network but kUseSharedProxies is turned off, it can't be modified - // by user. - bool user_modifiable; - - // Set if mode is MODE_DIRECT or MODE_AUTO_DETECT or MODE_PAC_SCRIPT. - AutomaticProxy automatic_proxy; - // Set if mode is MODE_SINGLE_PROXY. - ManualProxy single_proxy; - // Set if mode is MODE_PROXY_PER_SCHEME and has http proxy. - ManualProxy http_proxy; - // Set if mode is MODE_PROXY_PER_SCHEME and has https proxy. - ManualProxy https_proxy; - // Set if mode is MODE_PROXY_PER_SCHEME and has ftp proxy. - ManualProxy ftp_proxy; - // Set if mode is MODE_PROXY_PER_SCHEME and has socks proxy. - ManualProxy socks_proxy; - - // Exceptions for when not to use a proxy. - net::ProxyBypassRules bypass_rules; - }; - - // Constructor. explicit ProxyConfigServiceImpl(PrefService* pref_service); virtual ~ProxyConfigServiceImpl(); - // Called by UI to set service path of |network| to be displayed or edited. - // Subsequent UISet* methods will use this network, until UI calls it again - // with a different network. - void UISetCurrentNetwork(const std::string& current_network); - - // Called from UI to make the currently active network the one to be displayed - // or edited. Subsequent UISet* methods will use this network until UI calls - // it again when the active network has changed. - void UIMakeActiveNetworkCurrent(); - - // Called from UI to get name of the current network set via - // UISetCurrentNetwork or UIMakeActiveNetworkCurrent. - void UIGetCurrentNetworkName(std::string* network_name); - - // Called from UI to retrieve proxy configuration in |current_ui_config_|. - void UIGetProxyConfig(ProxyConfig* config); - - // Called from UI to update proxy configuration for different modes. - // Returns true if config is set properly and persisted to shill for the - // current network (set via UISetCurrentNetwork/UIMakeActiveNetworkCurrent). - // If this network is also currently active, config service proceeds to start - // activating it on network stack. - // Returns false if config is not set properly, probably because information - // is incomplete or invalid; while config service won't proceed to activate or - // persist this config, the information is "cached" in the service, so that - // the next UIGetProxyConfig call will return this latest information. - bool UISetProxyConfigToDirect(); - bool UISetProxyConfigToAutoDetect(); - bool UISetProxyConfigToPACScript(const GURL& pac_url); - bool UISetProxyConfigToSingleProxy(const net::ProxyServer& server); - // |scheme| is one of "http", "https", "ftp" or "socks". - bool UISetProxyConfigToProxyPerScheme(const std::string& scheme, - const net::ProxyServer& server); - // Only valid for MODE_SINGLE_PROXY or MODE_PROXY_PER_SCHEME. - bool UISetProxyConfigBypassRules(const net::ProxyBypassRules& bypass_rules); - - // Add/Remove callback functions for notification when network to be viewed is - // changed by the UI. - void AddNotificationCallback(base::Closure callback); - void RemoveNotificationCallback(base::Closure callback); + // Provide a service to the UI for proxy configuration. + // TODO(pneubeck): Ownership by this class is legacy and should be removed. + UIProxyConfigService& GetUIService(); // PrefProxyConfigTrackerImpl implementation. virtual void OnProxyConfigChanged(ProxyPrefs::ConfigState config_state, const net::ProxyConfig& config) OVERRIDE; - // NetworkLibrary::NetworkManagerObserver implementation. - virtual void OnNetworkManagerChanged(NetworkLibrary* cros) OVERRIDE; - - // NetworkLibrary::NetworkObserver implementation. - virtual void OnNetworkChanged(NetworkLibrary* cros, - const Network* network) OVERRIDE; - - // Parse |proxy_config_string| and store result in |proxy_config|. - // Returns true if proxy config was successfully parsed. - static bool ParseProxyConfig(const std::string& proxy_config_string, - net::ProxyConfig* proxy_config); + // NetworkStateHandlerObserver implementation. + virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE; // Register UseShardProxies preference. static void RegisterPrefs(PrefRegistrySimple* registry); static void RegisterUserPrefs(user_prefs::PrefRegistrySyncable* registry); -#if defined(UNIT_TEST) - void SetTesting(ProxyConfig* test_config) { - UIMakeActiveNetworkCurrent(); - if (test_config) { - std::string value; - test_config->SerializeForNetwork(&value); - SetProxyConfigForNetwork(active_network_, value, false); - } - } -#endif // defined(UNIT_TEST) - - private: - // Called when the kUseSharedProxies preference changes. - void OnUseSharedProxiesChanged(); - - // Called from the various UISetProxyConfigTo*. - void OnUISetProxyConfig(); - - // Called from OnNetworkManagerChanged and OnNetworkChanged for currently - // active network, to handle previously active network, new active network, - // and if necessary, activates proxy setting of new network. - void OnActiveNetworkChanged(NetworkLibrary* cros, - const Network* active_network); - - // Sets proxy config for |network_path| into shill and activates setting - // if the network is currently active. If |only_set_if_empty| is true, - // proxy will be set and saved only if network has no proxy. - void SetProxyConfigForNetwork(const std::string& network_path, - const std::string& value, - bool only_set_if_empty); + protected: + friend class UIProxyConfigService; // Returns value of UseSharedProxies preference if it's not default, else // returns false if user is logged in and true otherwise. - bool GetUseSharedProxies(); + static bool GetUseSharedProxies(const PrefService* pref_service); - // Returns true if proxy is to be ignored for network, which happens if - // network is shared and use-shared-proxies is turned off. - bool IgnoreProxy(const Network* network); + // Returns true if proxy is to be ignored for this profile and |onc_source|, + // e.g. this happens if the network is shared and use-shared-proxies is turned + // off. + static bool IgnoreProxy(const PrefService* pref_service, + const std::string network_profile_path, + onc::ONCSource onc_source); - // Determines effective proxy config based on prefs from config tracker, - // |network| and if user is using shared proxies. - // If |activate| is true, effective config is stored in |active_config_| and - // activated on network stack, and hence, picked up by observers. - // if |activate| is false, effective config is stored in |current_ui_config_| - // but not activated on network stack, and hence, not picked up by observers. - void DetermineEffectiveConfig(const Network* network, bool activate); - - // Determines |current_ui_config_| based on |network|, called from - // UISetCurrentNetwork and UIMakeActiveNetworkActive. - void OnUISetCurrentNetwork(const Network* network); - - // Reset UI cache variables that keep track of UI activities. - void ResetUICache(); - - void FetchProxyPolicy(); - - // Data members. + private: + // Called when the kUseSharedProxies preference changes. + void OnUseSharedProxiesChanged(); - // Service path of currently active network (determined via shill - // notifications); if effective proxy config is from system, proxy of this - // network will be the one taking effect. - std::string active_network_; + // Determines effective proxy config based on prefs from config tracker, the + // current default network and if user is using shared proxies. The effective + // config is stored in |active_config_| and activated on network stack, and + // hence, picked up by observers. + void DetermineEffectiveConfigFromDefaultNetwork(); // State of |active_config_|. |active_config_| is only valid if // |active_config_state_| is not ProxyPrefs::CONFIG_UNSET. @@ -269,20 +96,10 @@ class ProxyConfigServiceImpl : public PrefProxyConfigTrackerImpl, // Active proxy configuration, which could be from prefs or network. net::ProxyConfig active_config_; - // Service path of network whose proxy configuration is being displayed or - // edited via UI, separate from |active_network_| which may be same or - // different. - std::string current_ui_network_; - - // Proxy configuration of |current_ui_network_|. - ProxyConfig current_ui_config_; - // Track changes in UseSharedProxies user preference. BooleanPrefMember use_shared_proxies_; - // Callbacks for notification when network to be viewed has been changed from - // the UI. - std::vector<base::Closure> callbacks_; + UIProxyConfigService ui_proxy_config_service_; base::WeakPtrFactory<ProxyConfigServiceImpl> pointer_factory_; |