summaryrefslogtreecommitdiffstats
path: root/net/proxy/proxy_config_service_mac.h
diff options
context:
space:
mode:
authoreroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-30 06:09:40 +0000
committereroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-30 06:09:40 +0000
commit9328443b6546402da992f1c37ee97d94667a709e (patch)
tree1531485bbbfa635479652a1eca7df85754251a6c /net/proxy/proxy_config_service_mac.h
parent39b16c2480c50d79459bc79eaf82d51efdd619c1 (diff)
downloadchromium_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.h48
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