diff options
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 |