Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Unified Diff: chrome/browser/chromeos/proxy_config_service_impl.h

Issue 6549007: Make CrOS proxy configuration write prefs directly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove default request context proxy config service patch. Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/proxy_config_service_impl.h
diff --git a/chrome/browser/chromeos/proxy_config_service_impl.h b/chrome/browser/chromeos/proxy_config_service_impl.h
index 44a51662723a890effb5fcc651c2c389cf83b1a9..d8a806ad94f47d6ea2c1de94182ffa569663d691 100644
--- a/chrome/browser/chromeos/proxy_config_service_impl.h
+++ b/chrome/browser/chromeos/proxy_config_service_impl.h
@@ -19,44 +19,28 @@
#include "net/proxy/proxy_config_service.h"
#include "net/proxy/proxy_server.h"
+class PrefService;
+
namespace chromeos {
// Implementation of proxy config service for chromeos that:
-// - is RefCountedThreadSafe
-// - is wrapped by chromeos::ProxyConfigService which implements
-// net::ProxyConfigService interface by fowarding the methods to this class
// - retrieves initial system proxy configuration from cros settings persisted
// on chromeos device
-// - provides network stack with latest system proxy configuration for use on
-// IO thread
// - provides UI with methods to retrieve and modify system proxy configuration
// on UI thread
// - TODO(kuan): persists proxy configuration settings on chromeos device using
// cros settings
class ProxyConfigServiceImpl
- : public base::RefCountedThreadSafe<ProxyConfigServiceImpl>,
- public SignedSettings::Delegate<bool>,
+ : public SignedSettings::Delegate<bool>,
public SignedSettings::Delegate<std::string> {
public:
- // ProxyConfigServiceImpl is created on the UI thread in
- // chrome/browser/net/chrome_url_request_context.cc::CreateProxyConfigService
- // via ProfileImpl::GetChromeOSProxyConfigServiceImpl, and stored in Profile
- // as a scoped_refptr (because it's RefCountedThreadSafe).
- //
- // Past that point, it can be accessed from the IO or UI threads.
+ // ProxyConfigServiceImpl lives in the profile and is accessed via
+ // Profile::GetChromeOSProxyConfigServiceImpl. It is accessed from
kuan 2011/02/22 22:20:25 i'm sure u're aware of battre's cl that places Pro
Mattias Nissler (ping if slow) 2011/03/01 15:19:20 Yes, he's actually sitting 2 desks away from me, a
+ // ProxyCrosSettingsProvider in order to read or modify the proxy
+ // configuration via UIGetProxyConfig or UISetProxyConfigTo* respectively. The
+ // modified proxy configuration is written to local state preferences that get
+ // picked up by PrefProxyConfigService and passed to the network stack.
//
- // From the IO thread, it is accessed periodically through the wrapper class
- // chromeos::ProxyConfigService via net::ProxyConfigService interface
- // (GetLatestProxyConfig, AddObserver, RemoveObserver).
- //
- // From the UI thread, it is accessed via
- // WebUI::GetProfile::GetChromeOSProxyConfigServiceImpl to allow user to read
- // or modify the proxy configuration via UIGetProxyConfig or
- // UISetProxyConfigTo* respectively.
- // The new modified proxy config is posted to the IO thread through
- // SetNewProxyConfig(). We then notify observers on the IO thread of the
- // configuration change.
-
// 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
@@ -65,9 +49,6 @@ class ProxyConfigServiceImpl
// - where configuration was picked up from - policy or owner
// - the read/write access of a proxy setting
// - may add more stuff later.
- // This is then converted to the common net::ProxyConfig before being returned
- // to ProxyService::GetLatestProxyConfig on the IO thread to be used on the
- // network stack.
struct ProxyConfig {
// Specifies if proxy config is direct, auto-detect, using pac script,
// single-proxy, or proxy-per-scheme.
@@ -113,8 +94,9 @@ class ProxyConfigServiceImpl
ProxyConfig() : mode(MODE_DIRECT) {}
- // Converts |this| to net::ProxyConfig.
- void ToNetProxyConfig(net::ProxyConfig* net_config);
+ // Converts |this| to a proxy config dictionary understood by the pref
+ // system. Ownership is transferred to the caller.
+ DictionaryValue* ToProxyConfigDictionary() const;
// Returns true if proxy config can be written by user.
// If mode is MODE_PROXY_PER_SCHEME, |scheme| is one of "http", "https",
@@ -157,28 +139,30 @@ class ProxyConfigServiceImpl
// Encodes |manual_proxy| and adds it as value into |key_name| of |dict|.
void EncodeManualProxy(const ManualProxy& manual_proxy,
DictionaryValue* dict, const char* key_name);
+
// Decodes value of |key_name| in |dict| into |manual_proxy| with |scheme|;
// if |ok_if_absent| is true, function returns true if |key_name| doesn't
// exist in |dict|.
bool DecodeManualProxy(DictionaryValue* dict, const char* key_name,
bool ok_if_absent, net::ProxyServer::Scheme scheme,
ManualProxy* manual_proxy);
+
+ // Helper function for building up the manual proxy spec. A declaration of
+ // the form <scheme>=<server> is written to spec. |spec| is in/out, it is
+ // appended to if it already contains data.
+ static void FormatProxySpec(std::string* spec,
+ const std::string& scheme,
+ const net::ProxyServer& server);
};
// Usual constructor.
- ProxyConfigServiceImpl();
+ explicit ProxyConfigServiceImpl(PrefService* local_state);
// Constructor for testing.
// |init_config| specifies the ProxyConfig to use for initialization.
- explicit ProxyConfigServiceImpl(const ProxyConfig& init_config);
+ ProxyConfigServiceImpl(PrefService* local_state,
+ const ProxyConfig& init_config);
virtual ~ProxyConfigServiceImpl();
- // Methods called on IO thread from wrapper class chromeos::ProxyConfigService
- // as ProxyConfigService methods.
- void AddObserver(net::ProxyConfigService::Observer* observer);
- void RemoveObserver(net::ProxyConfigService::Observer* observer);
- // Called from GetLatestProxyConfig.
- bool IOGetProxyConfig(net::ProxyConfig* config);
-
// Called from UI thread to retrieve proxy configuration in |config|.
void UIGetProxyConfig(ProxyConfig* config);
@@ -213,12 +197,8 @@ class ProxyConfigServiceImpl
bool value);
private:
- friend class base::RefCountedThreadSafe<ProxyConfigServiceImpl>;
-
// Init proxy to default config, i.e. AutoDetect.
- // If |post_to_io_thread| is true, a task will be posted to IO thread to
- // update |cached_config|.
- void InitConfigToDefault(bool post_to_io_thread);
+ void InitConfigToDefault();
// Persists proxy config to device.
void PersistConfigToDevice();
@@ -227,15 +207,6 @@ class ProxyConfigServiceImpl
// |update_to_device| is true to persist new proxy config to device.
void OnUISetProxyConfig(bool update_to_device);
- // Posted from UI thread to IO thread to carry the new config information.
- void IOSetProxyConfig(const ProxyConfig& new_config);
-
- // Checks that method is called on BrowserThread::IO thread.
- void CheckCurrentlyOnIOThread();
-
- // Checks that method is called on BrowserThread::UI thread.
- void CheckCurrentlyOnUIThread();
-
// Data members.
// True if tasks can be posted, which can only happen if constructor has
@@ -252,17 +223,14 @@ class ProxyConfigServiceImpl
// True if there's a pending operation to store proxy setting to device.
bool persist_to_device_pending_;
- // Cached proxy configuration, to be converted to net::ProxyConfig and
- // returned by IOGetProxyConfig.
- // Initially populated from the UI thread, but afterwards only accessed from
- // the IO thread.
- ProxyConfig cached_config_;
-
// Copy of the proxy configuration kept on the UI thread of the last seen
// proxy config, so as to avoid posting a call to SetNewProxyConfig when we
// are called by UI to set new proxy but the config has not actually changed.
ProxyConfig reference_config_;
+ // The pref service to store the proxy configuration to.
+ PrefService* local_state_;
+
// List of observers for changes in proxy config.
ObserverList<net::ProxyConfigService::Observer> observers_;

Powered by Google App Engine
This is Rietveld 408576698