Index: chrome_frame/np_proxy_service.h |
=================================================================== |
--- chrome_frame/np_proxy_service.h (revision 0) |
+++ chrome_frame/np_proxy_service.h (revision 0) |
@@ -0,0 +1,137 @@ |
+// Copyright (c) 2009 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_FRAME_NP_PROXY_SERVICE_H_ |
+#define CHROME_FRAME_NP_PROXY_SERVICE_H_ |
+ |
+#include <string> |
+#include <vector> |
+#include "base/values.h" |
+#include "base/scoped_ptr.h" |
+ |
+// Avoid conflicts with basictypes and the gecko sdk. |
+// (different definitions of uint32). |
+#define NO_NSPR_10_SUPPORT |
+ |
+#include "chrome_frame/chrome_frame_automation.h" |
+#include "chrome_frame/ns_associate_iid_win.h" |
+#include "chrome_frame/ns_isupports_impl.h" |
+#include "chrome_frame/scoped_ns_ptr_win.h" |
+#include "third_party/WebKit/WebCore/bridge/npapi.h" |
+#include "third_party/xulrunner-sdk/win/include/xpcom/nsIObserver.h" |
+#include "third_party/xulrunner-sdk/win/include/pref/nsIPrefBranch2.h" |
+#include "third_party/xulrunner-sdk/win/include/pref/nsIPrefService.h" |
+#include "third_party/xulrunner-sdk/win/include/xpcom/nsIServiceManager.h" |
+ |
+ASSOCIATE_IID(NS_IOBSERVER_IID_STR, nsIObserver); |
+ASSOCIATE_IID(NS_ISERVICEMANAGER_IID_STR, nsIServiceManager); |
+ASSOCIATE_IID(NS_IPREFSERVICE_IID_STR, nsIPrefService); |
+ASSOCIATE_IID(NS_IPREFBRANCH2_IID_STR, nsIPrefBranch2); |
+ |
+class nsIServiceManager; |
+class nsIPrefService; |
+class nsIPrefBranch2; |
+ |
+// This class reads in proxy settings from firefox. |
+// TODO(robertshield): The change notification code is currently broken. |
+// Fix it and implement calling back through to the automation proxy with |
+// proxy updates. |
+class NpProxyService : public NsISupportsImplBase<NpProxyService>, |
+ public nsIObserver { |
+ public: |
+ // These values correspond to the integer network.proxy.type preference. |
+ enum ProxyConfigType { |
+ PROXY_CONFIG_DIRECT, |
+ PROXY_CONFIG_MANUAL, |
+ PROXY_CONFIG_PAC, |
+ PROXY_CONFIG_DIRECT4X, |
+ PROXY_CONFIG_WPAD, |
+ PROXY_CONFIG_SYSTEM, // use system settings if available, otherwise DIRECT |
+ PROXY_CONFIG_LAST |
+ }; |
+ |
+ // nsISupports |
+ NS_IMETHODIMP_(nsrefcnt) AddRef(void) { |
+ return NsISupportsImplBase<NpProxyService>::AddRef(); |
+ } |
+ |
+ NS_IMETHODIMP_(nsrefcnt) Release(void) { |
+ return NsISupportsImplBase<NpProxyService>::Release(); |
+ } |
+ |
+ NS_IMETHOD QueryInterface(REFNSIID iid, void** ptr) { |
+ nsresult res = |
+ NsISupportsImplBase<NpProxyService>::QueryInterface(iid, ptr); |
+ if (NS_FAILED(res) && |
+ memcmp(&iid, &__uuidof(nsIObserver), sizeof(nsIID)) == 0) { |
+ *ptr = static_cast<nsIObserver*>(this); |
+ AddRef(); |
+ res = NS_OK; |
+ } |
+ return res; |
+ } |
+ |
+ // nsIObserver |
+ NS_IMETHOD Observe(nsISupports* subject, const char* topic, |
+ const PRUnichar* data); |
+ |
+ NpProxyService(); |
+ ~NpProxyService(); |
+ |
+ virtual bool Initialize(NPP instance, |
+ ChromeFrameAutomationClient* automation_client); |
+ bool UnInitialize(); |
+ |
+ // Places the current Firefox settings as a JSON string suitable for posting |
+ // over to Chromium into output. Returns true if the settings were correctly |
+ // serialized into a JSON string, false otherwise. |
+ // TODO(robertshield): I haven't yet nailed down how much of this should go |
+ // here and how much should go in the AutomationProxy. Will do that in a |
+ // near-future patch. |
+ bool GetProxyValueJSONString(std::string* output); |
+ |
+ private: |
+ bool InitializePrefBranch(nsIPrefService* pref_service); |
+ bool ReadProxySettings(nsIPrefBranch* pref_branch); |
+ |
+ std::string GetStringPref(nsIPrefBranch* pref_branch, const char* pref_name); |
+ int GetIntPref(nsIPrefBranch* pref_branch, const char* pref_name); |
+ bool GetBoolPref(nsIPrefBranch* pref_branch, const char* pref_name); |
+ |
+ void Reset(); |
+ DictionaryValue* BuildProxyValueSet(); |
+ |
+ ChromeFrameAutomationClient* automation_client_; |
+ |
+ ScopedNsPtr<nsIServiceManager> service_manager_; |
+ ScopedNsPtr<nsIPrefService> pref_service_; |
+ ScopedNsPtr<nsIPrefBranch2> observer_pref_branch_; |
+ |
+ struct ProxyNames { |
+ // Proxy type (http, https, ftp, etc...). |
+ const char* chrome_scheme; |
+ // Firefox preference name of the URL for this proxy type. |
+ const char* pref_name; |
+ // Firefox preference name for the port for this proxy type. |
+ const char* port_pref_name; |
+ }; |
+ static const ProxyNames kProxyInfo[]; |
+ |
+ struct ManualProxyEntry { |
+ std::string scheme; |
+ std::string url; |
+ int port; |
+ }; |
+ typedef std::vector<ManualProxyEntry> ManualProxyList; |
+ |
+ bool system_config_; |
+ bool auto_detect_; |
+ bool no_proxy_; |
+ int type_; |
+ std::string pac_url_; |
+ std::string proxy_bypass_list_; |
+ ManualProxyList manual_proxies_; |
+}; |
+ |
+#endif // CHROME_FRAME_NP_PROXY_SERVICE_H_ |