Index: chrome/browser/chromeos/ui_proxy_config.h |
diff --git a/chrome/browser/chromeos/ui_proxy_config.h b/chrome/browser/chromeos/ui_proxy_config.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5407887d9cd75398c0bbadccd3b58c1ac8548718 |
--- /dev/null |
+++ b/chrome/browser/chromeos/ui_proxy_config.h |
@@ -0,0 +1,120 @@ |
+// 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_UI_PROXY_CONFIG_H_ |
+#define CHROME_BROWSER_CHROMEOS_UI_PROXY_CONFIG_H_ |
+ |
+#include <string> |
+ |
+#include "chrome/browser/prefs/proxy_prefs.h" |
+#include "googleurl/src/gurl.h" |
+#include "net/proxy/proxy_bypass_rules.h" |
+#include "net/proxy/proxy_server.h" |
+ |
+namespace base { |
+class DictionaryValue; |
+} |
+ |
+namespace net { |
+class ProxyConfig; |
+} |
+ |
+namespace chromeos { |
+ |
+// 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 supply. 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 UIProxyConfig { |
+ // 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; |
+ }; |
+ |
+ UIProxyConfig(); |
+ ~UIProxyConfig(); |
+ |
+ void SetPacUrl(const GURL& pac_url); |
+ void SetSingleProxy(const net::ProxyServer& server); |
+ |
+ // |scheme| is one of "http", "https", "ftp" or "socks". |
+ void SetProxyForScheme(const std::string& scheme, |
+ const net::ProxyServer& server); |
+ |
+ // Only valid for MODE_SINGLE_PROXY or MODE_PROXY_PER_SCHEME. |
+ void SetBypassRules(const net::ProxyBypassRules& rules); |
+ |
+ // 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). |
+ base::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; |
+}; |
+ |
+} // namespace chromeos |
+ |
+#endif // CHROME_BROWSER_CHROMEOS_UI_PROXY_CONFIG_H_ |