diff -r 000000000000 -r ad87c5e85a41 mozilla-libproxy.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mozilla-libproxy.patch Sat Nov 28 13:56:10 2009 +0100 @@ -0,0 +1,339 @@ +From: Wolfgang Rosenauer +Subject: Add the option to use libproxy for system proxy settings +References: +https://bugzilla.mozilla.org/show_bug.cgi?id=517655 + +diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in +--- a/config/autoconf.mk.in ++++ b/config/autoconf.mk.in +@@ -537,16 +537,20 @@ FT2_CFLAGS = @FT2_CFLAGS@ + FT2_LIBS = @FT2_LIBS@ + + MOZ_PANGO_CFLAGS = @MOZ_PANGO_CFLAGS@ + MOZ_PANGO_LIBS = @MOZ_PANGO_LIBS@ + + MOZ_XIE_LIBS = @MOZ_XIE_LIBS@ + XT_LIBS = @XT_LIBS@ + ++MOZ_LIBPROXY_CFLAGS = @MOZ_LIBPROXY_CFLAGS@ ++MOZ_LIBPROXY_LIBS = @MOZ_LIBPROXY_LIBS@ ++MOZ_ENABLE_LIBPROXY = @MOZ_ENABLE_LIBPROXY@ ++ + MOZ_LIBNOTIFY_CFLAGS = @MOZ_LIBNOTIFY_CFLAGS@ + MOZ_LIBNOTIFY_LIBS = @MOZ_LIBNOTIFY_LIBS@ + MOZ_ENABLE_LIBNOTIFY = @MOZ_ENABLE_LIBNOTIFY@ + + GLIB_CFLAGS = @GLIB_CFLAGS@ + GLIB_LIBS = @GLIB_LIBS@ + GLIB_GMODULE_LIBS = @GLIB_GMODULE_LIBS@ + LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +diff --git a/config/system-headers b/config/system-headers +--- a/config/system-headers ++++ b/config/system-headers +@@ -1007,15 +1007,19 @@ libsn/sn-monitor.h + libsn/sn-util.h + #endif + #if MOZ_NATIVE_HUNSPELL==1 + hunspell.hxx + #endif + #if MOZ_NATIVE_BZ2==1 + bzlib.h + #endif ++#ifdef MOZ_ENABLE_LIBPROXY ++proxy.h ++#endif ++ + #ifdef MOZ_PLATFORM_HILDON + hildon-uri.h + hildon-mime.h + #endif + #ifdef NS_OSSO + libosso.h + #endif +diff --git a/configure.in b/configure.in +--- a/configure.in ++++ b/configure.in +@@ -5280,16 +5280,39 @@ then + AC_DEFINE(MOZ_ENABLE_DBUS) + fi + fi + AC_SUBST(MOZ_ENABLE_DBUS) + AC_SUBST(MOZ_DBUS_GLIB_CFLAGS) + AC_SUBST(MOZ_DBUS_GLIB_LIBS) + + dnl ======================================================== ++dnl = libproxy support ++dnl ======================================================== ++ ++if test "$MOZ_ENABLE_GTK2" ++then ++ MOZ_ENABLE_LIBPROXY= ++ ++ MOZ_ARG_ENABLE_BOOL(libproxy, ++ [ --enable-libproxy Enable libproxy support ], ++ MOZ_ENABLE_LIBPROXY=1, ++ MOZ_ENABLE_LIBPROXY=) ++ ++ if test "$MOZ_ENABLE_LIBPROXY" ++ then ++ PKG_CHECK_MODULES(MOZ_LIBPROXY, libproxy-1.0) ++ AC_DEFINE(MOZ_ENABLE_LIBPROXY) ++ fi ++fi ++AC_SUBST(MOZ_ENABLE_LIBPROXY) ++AC_SUBST(MOZ_LIBPROXY_CFLAGS) ++AC_SUBST(MOZ_LIBPROXY_LIBS) ++ ++dnl ======================================================== + dnl = libnotify support + dnl ======================================================== + + if test "$MOZ_ENABLE_GTK2" + then + MOZ_ENABLE_LIBNOTIFY=1 + + MOZ_ARG_DISABLE_BOOL(libnotify, +diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in +--- a/toolkit/library/Makefile.in ++++ b/toolkit/library/Makefile.in +@@ -247,16 +247,20 @@ endif + ifdef MOZ_TREE_FREETYPE + EXTRA_DSO_LDOPTS += $(FT2_LIBS) + endif + + ifdef MOZ_ENABLE_STARTUP_NOTIFICATION + EXTRA_DSO_LDOPTS += $(MOZ_STARTUP_NOTIFICATION_LIBS) + endif + ++ifdef MOZ_ENABLE_LIBPROXY ++EXTRA_DSO_LDOPTS += $(MOZ_LIBPROXY_LIBS) ++endif ++ + ifeq ($(OS_ARCH),BeOS) + EXTRA_DSO_LDOPTS += -lbe -ltracker + endif + + ifeq ($(OS_ARCH),SunOS) + EXTRA_DSO_LDOPTS += -lelf -ldemangle -lCstd + endif + +diff --git a/toolkit/system/unixproxy/Makefile.in b/toolkit/system/unixproxy/Makefile.in +--- a/toolkit/system/unixproxy/Makefile.in ++++ b/toolkit/system/unixproxy/Makefile.in +@@ -15,16 +15,17 @@ + # + # The Initial Developer of the Original Code is + # IBM Corporation. + # Portions created by the Initial Developer are Copyright (C) 2004 + # the Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Brian Ryner ++# Wolfgang Rosenauer + # + # Alternatively, the contents of this file may be used under the terms of + # either the GNU General Public License Version 2 or later (the "GPL"), or + # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + # in which case the provisions of the GPL or the LGPL are applicable instead + # of those above. If you wish to allow use of your version of this file only + # under the terms of either the GPL or the LGPL, and not to allow others to + # use your version of this file under the terms of the MPL, indicate your +@@ -53,15 +54,30 @@ LIBXUL_LIBRARY = 1 + + REQUIRES = \ + xpcom \ + string \ + necko \ + mozgnome \ + $(NULL) + +-EXTRA_DSO_LDOPTS += $(MOZ_COMPONENT_LIBS) ++EXTRA_DSO_LDOPTS += \ ++ $(MOZ_LIBPROXY_LIBS) \ ++ $(MOZ_COMPONENT_LIBS) \ ++ $(NULL) ++ ++ifdef MOZ_ENABLE_LIBPROXY ++ ++CPPSRCS = \ ++ nsLibProxySettings.cpp \ ++ $(NULL) ++ ++CXXFLAGS += $(MOZ_LIBPROXY_CFLAGS) ++ ++else # MOZ_ENABLE_LIBPROXY + + CPPSRCS = \ + nsUnixSystemProxySettings.cpp \ + $(NULL) + ++endif # MOZ_ENABLE_LIBPROXY ++ + include $(topsrcdir)/config/rules.mk +diff --git a/toolkit/system/unixproxy/nsLibProxySettings.cpp b/toolkit/system/unixproxy/nsLibProxySettings.cpp +new file mode 100644 +--- /dev/null ++++ b/toolkit/system/unixproxy/nsLibProxySettings.cpp +@@ -0,0 +1,162 @@ ++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* ***** BEGIN LICENSE BLOCK ***** ++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is Mozilla libproxy integration code. ++ * ++ * The Initial Developer of the Original Code is ++ * Wolfgang Rosenauer . ++ * Portions created by the Initial Developer are Copyright (C) 2009 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either the GNU General Public License Version 2 or later (the "GPL"), or ++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * decision by deleting the provisions above and replace them with the notice ++ * and other provisions required by the GPL or the LGPL. If you do not delete ++ * the provisions above, a recipient may use your version of this file under ++ * the terms of any one of the MPL, the GPL or the LGPL. ++ * ++ * ***** END LICENSE BLOCK ***** */ ++ ++#include "nsISystemProxySettings.h" ++#include "nsIGenericFactory.h" ++#include "nsIServiceManager.h" ++#include "nsIIOService.h" ++#include "nsIURI.h" ++#include "nsString.h" ++#include "nsNetUtil.h" ++#include "nsCOMPtr.h" ++#include "nspr.h" ++ ++#include ++ ++class nsUnixSystemProxySettings : public nsISystemProxySettings { ++public: ++ NS_DECL_ISUPPORTS ++ NS_DECL_NSISYSTEMPROXYSETTINGS ++ ++ nsUnixSystemProxySettings() {} ++ nsresult Init(); ++ ++private: ++ ~nsUnixSystemProxySettings() { ++ if (mProxyFactory) ++ px_proxy_factory_free(mProxyFactory); ++ } ++ ++ pxProxyFactory *mProxyFactory; ++ nsCOMPtr mIOService; ++}; ++ ++NS_IMPL_ISUPPORTS1(nsUnixSystemProxySettings, nsISystemProxySettings) ++ ++nsresult ++nsUnixSystemProxySettings::Init() ++{ ++ mProxyFactory = nsnull; ++ return NS_OK; ++} ++ ++nsresult ++nsUnixSystemProxySettings::GetPACURI(nsACString& aResult) ++{ ++ // Make sure we return an empty result. ++ aResult.Truncate(); ++ return NS_OK; ++} ++ ++nsresult ++nsUnixSystemProxySettings::GetProxyForURI(nsIURI* aURI, nsACString& aResult) ++{ ++ nsresult rv; ++ ++ if (!mProxyFactory) { ++ mProxyFactory = px_proxy_factory_new(); ++ } ++ NS_ENSURE_TRUE(mProxyFactory, NS_ERROR_OUT_OF_MEMORY); ++ ++ if (!mIOService) { ++ mIOService = do_GetIOService(); ++ } ++ NS_ENSURE_TRUE(mIOService, NS_ERROR_FAILURE); ++ ++ nsCAutoString spec; ++ rv = aURI->GetSpec(spec); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ char **proxyArray = nsnull; ++ proxyArray = px_proxy_factory_get_proxies(mProxyFactory, (char*)(spec.get())); ++ NS_ENSURE_TRUE(proxyArray, NS_ERROR_FAILURE); ++ ++ // PAC string accepts ++ // http, proxy, socks, socks4, socks5, direct, unknown ++ // example: "PROXY proxy1.foo.com:8080; PROXY proxy2.foo.com:8080; DIRECT" ++ int c = 0; ++ while (proxyArray[c] != NULL) { ++ if (c != 0) { ++ aResult.AppendLiteral("; "); ++ } ++ ++ PRBool isScheme = PR_FALSE; ++ nsXPIDLCString schemeString; ++ nsXPIDLCString hostPortString; ++ nsCOMPtr proxyURI; ++ ++ rv = mIOService->NewURI(nsDependentCString(proxyArray[c]), ++ nsnull, ++ nsnull, ++ getter_AddRefs(proxyURI)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ proxyURI->GetScheme(schemeString); ++ if (NS_SUCCEEDED(proxyURI->SchemeIs("http", &isScheme)) && isScheme) { ++ schemeString.AssignLiteral("proxy"); ++ } ++ aResult.Append(schemeString); ++ if (NS_SUCCEEDED(proxyURI->SchemeIs("direct", &isScheme)) && !isScheme) { ++ // Add the proxy URI only if it's not DIRECT ++ proxyURI->GetHostPort(hostPortString); ++ aResult.AppendLiteral(" "); ++ aResult.Append(hostPortString); ++ } ++ ++ c++; ++ } ++ ++printf("returned PAC proxy string: %s\n", PromiseFlatCString(aResult).get()); ++ ++ PR_Free(proxyArray); ++ return NS_OK; ++} ++ ++#define NS_UNIXSYSTEMPROXYSERVICE_CID /* 0fa3158c-d5a7-43de-9181-a285e74cf1d4 */\ ++ { 0x0fa3158c, 0xd5a7, 0x43de, \ ++ {0x91, 0x81, 0xa2, 0x85, 0xe7, 0x4c, 0xf1, 0xd4 } } ++ ++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsUnixSystemProxySettings, Init) ++ ++static const nsModuleComponentInfo components[] = { ++ { "Unix System Proxy Settings Service", ++ NS_UNIXSYSTEMPROXYSERVICE_CID, ++ NS_SYSTEMPROXYSETTINGS_CONTRACTID, ++ nsUnixSystemProxySettingsConstructor } ++}; ++ ++NS_IMPL_NSGETMODULE(nsUnixProxyModule, components)