diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-30 06:09:40 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-30 06:09:40 +0000 |
commit | 9328443b6546402da992f1c37ee97d94667a709e (patch) | |
tree | 1531485bbbfa635479652a1eca7df85754251a6c /net/proxy/proxy_config_service_mac.h | |
parent | 39b16c2480c50d79459bc79eaf82d51efdd619c1 (diff) | |
download | chromium_src-9328443b6546402da992f1c37ee97d94667a709e.zip chromium_src-9328443b6546402da992f1c37ee97d94667a709e.tar.gz chromium_src-9328443b6546402da992f1c37ee97d94667a709e.tar.bz2 |
Use notification-based API for getting system proxy settings on Mac rather than polling.
BUG=50587
Review URL: http://codereview.chromium.org/3078009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54288 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/proxy/proxy_config_service_mac.h')
-rw-r--r-- | net/proxy/proxy_config_service_mac.h | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/net/proxy/proxy_config_service_mac.h b/net/proxy/proxy_config_service_mac.h index 3602313..fd2d524 100644 --- a/net/proxy/proxy_config_service_mac.h +++ b/net/proxy/proxy_config_service_mac.h @@ -6,15 +6,53 @@ #define NET_PROXY_PROXY_CONFIG_SERVICE_MAC_H_ #pragma once -#include "net/proxy/polling_proxy_config_service.h" +#include "base/basictypes.h" +#include "base/observer_list.h" +#include "base/ref_counted.h" +#include "net/base/network_config_watcher_mac.h" +#include "net/proxy/proxy_config.h" +#include "net/proxy/proxy_config_service.h" namespace net { -// TODO(eroman): Use notification-based system APIs instead of polling for -// changes. -class ProxyConfigServiceMac : public PollingProxyConfigService { +class ProxyConfigServiceMac : public ProxyConfigService, + public NetworkConfigWatcherMac { public: - ProxyConfigServiceMac(); + // Constructs a ProxyConfigService that watches the Mac OS system settings. + // This instance is expected to be operated and deleted on |io_loop| + // (however it may be constructed from a different thread). + explicit ProxyConfigServiceMac(MessageLoop* io_loop); + virtual ~ProxyConfigServiceMac(); + + public: + // ProxyConfigService implementation: + virtual void AddObserver(Observer* observer); + virtual void RemoveObserver(Observer* observer); + virtual bool GetLatestProxyConfig(ProxyConfig* config); + + protected: + // NetworkConfigWatcherMac implementation: + virtual void SetDynamicStoreNotificationKeys(SCDynamicStoreRef store); + virtual void OnNetworkConfigChange(CFArrayRef changed_keys); + + private: + class Helper; + + // Called when the proxy configuration has changed, to notify the observers. + void OnProxyConfigChanged(const ProxyConfig& new_config); + + ObserverList<Observer> observers_; + + // Holds the last system proxy settings that we fetched. + bool has_fetched_config_; + ProxyConfig last_config_fetched_; + + scoped_refptr<Helper> helper_; + + // The thread that we expect to be operated on. + MessageLoop* io_loop_; + + DISALLOW_COPY_AND_ASSIGN(ProxyConfigServiceMac); }; } // namespace net |