summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/proxy_config_service_impl.h
diff options
context:
space:
mode:
authorpneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 19:29:35 +0000
committerpneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 19:29:35 +0000
commit29c003e0201f2da153af7964e13ad85d49dc31de (patch)
tree7d05828de9127f8ba0263d3aeec02efef205b35c /chrome/browser/chromeos/proxy_config_service_impl.h
parentb8b14be5e64a4193009a5736b38aa41c979da267 (diff)
downloadchromium_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.h245
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_;