--- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9-gnome-support.postinst +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9-gnome-support.postinst @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +GRE_VERSION=`/usr/bin/xulrunner-1.9 --gre-version` + +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then + if test -e /usr/lib/xulrunner-$GRE_VERSION/.autoreg; then + touch /usr/lib/xulrunner-$GRE_VERSION/.autoreg + fi +fi + +#DEBHELPER# --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9.prerm +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9.prerm @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e +if [ "$1" = "remove" ] || [ "$1" = upgrade ]; then + /usr/sbin/update-alternatives --remove xulrunner /usr/bin/xulrunner-1.9 + if [ "$(update-alternatives --list xulrunner | wc -l)" = "0" ]; then + /usr/sbin/update-alternatives --remove-all xulrunner + fi +fi + +#DEBHELPER# --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9-venkman.install +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9-venkman.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/xulrunner-1.9*/extensions/venkman@mozilla.org usr/lib/xulrunner-addons/extensions --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/changelog +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/changelog @@ -0,0 +1,940 @@ +xulrunner-1.9 (1.9.0.14+build2+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * New upstream release v1.9.0.14 build2 (FIREFOX_3_0_14_BUILD2) + - see USN-821-1 + + -- Alexander Sack Wed, 02 Sep 2009 17:08:38 +0200 + +xulrunner-1.9 (1.9.0.13+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * New upstream release v1.9.0.13 (FIREFOX_3_0_13_RELEASE) + - see USN-811-1 + + -- Alexander Sack Mon, 03 Aug 2009 13:19:21 +0200 + +xulrunner-1.9 (1.9.0.12+build1+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * New upstream release v1.9.0.12 build1 (FIREFOX_3_0_12_BUILD1) + - see USN-798-1 + + -- Alexander Sack Wed, 08 Jul 2009 14:03:29 +0200 + +xulrunner-1.9 (1.9.0.11+build2+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * New upstream release v1.9.0.11 build2 (FIREFOX_3_0_11_BUILD2) + - see USN-779-1 + + [ Fabien Tassin ] + * Add a build-system for xulrunner application inside the SDK. + mozilla-devscripts is able to make use of this + - add debian/create-build-system.sh + - update debian/rules + * improve create-build-system.sh to detect build-tree directory + when embedded tarball is used. Fix un-escaped variables. + Create build-system.tar.gz in the debian directory to prevent + cdbs to check and unpack it during the build + - update debian/create-build-system.sh + + -- Alexander Sack Wed, 03 Jun 2009 10:55:12 +0200 + +xulrunner-1.9 (1.9.0.10+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * security/stability v1.9.0.10 (FIREFOX_3_0_10_RELEASE) + - see USN-765-1 + + -- Alexander Sack Sat, 25 Apr 2009 14:42:09 +0200 + +xulrunner-1.9 (1.9.0.9+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * security/stability v1.9.0.9 (FIREFOX_3_0_9_RELEASE) + - see USN-764-1 + + -- Alexander Sack Tue, 21 Apr 2009 13:53:28 +0200 + +xulrunner-1.9 (1.9.0.8+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * security/stability v1.9.0.8 (FIREFOX_3_0_8_RELEASE) + - see USN-745-1 + + -- Alexander Sack Fri, 27 Mar 2009 11:11:42 +0100 + +xulrunner-1.9 (1.9.0.7+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * security/stability v1.9.0.7 (FIREFOX_3_0_7_RELEASE) + - USN-728-1 + + -- Alexander Sack Wed, 04 Mar 2009 20:13:00 +0100 + +xulrunner-1.9 (1.9.0.6+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * security/stability release v1.9.0.6 (FIREFOX_3_0_6_RELEASE) + - USN-717-1 + * adjust patches to changed code base + - update debian/patches/dom_inspector_support_for_prism.patch + + -- Alexander Sack Thu, 05 Feb 2009 09:26:38 +0100 + +xulrunner-1.9 (1.9.0.5+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * new security/stability upstream release v1.9.0.5 (FIREFOX_3_0_5_RELEASE) + - see USN-690-1 + * adjust XULFastLoad cache in response to interleaving landing of bmo + #453545 and #462806 + - update debian/patches/bz368428_attachment_308130.patch + + -- Alexander Sack Tue, 16 Dec 2008 17:08:14 +0100 + +xulrunner-1.9 (1.9.0.4+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * new stability/security update FIREFOX_3_0_4_RELEASE (v1.9.0.4) + - see USN-667-1 + + * adjust patches + - update debian/patches/bz368428_attachment_308130.patch + + -- Alexander Sack Wed, 12 Nov 2008 16:15:45 +0100 + +xulrunner-1.9 (1.9.0.3+build1+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + regression fix release (v1.9.0.3 build1) + - see USN-645-3 + + * fix LP: #270429 - [MASTER] passwords lost from 3.0.1 to 3.0.2; we prepatch + the upstream fix for bz454708 + - add debian/patches/bz454708_att340035.patch + - update debian/patches/series + + -- Alexander Sack Thu, 25 Sep 2008 11:50:06 +0200 + +xulrunner-1.9 (1.9.0.2+build6+nobinonly-0ubuntu0.8.04.1) hardy-security; urgency=low + + * new stability/security update (v1.9.0.2 build6) + - see USN-645-1 + + -- Alexander Sack Mon, 22 Sep 2008 13:29:47 +0200 + +xulrunner-1.9 (1.9.0.1+build1+nobinonly-0ubuntu0.8.04.3) hardy-security; urgency=low + + * no change rebuild for security + + -- Jamie Strandboge Mon, 28 Jul 2008 15:55:00 -0400 + +xulrunner-1.9 (1.9.0.1+build1+nobinonly-0ubuntu0.8.04.2) hardy-proposed; urgency=low + + * LP: #247494 - new stability/security update (v1.9.0.1 build1) + - see USN-626-1 + + (cherry pick rev303 from lp:~mozillateam/xulrunner/xulrunner-1.9.head) + * Make EM_TRANSLATION_VERSION follow upstream version now that strings are + hard frozen and bump EM_TRANSLATION_MAX_VERSION to 1.9.0.* + - update debian/rules + + (cherry pick rev304 from lp:~mozillateam/xulrunner/xulrunner-1.9.head) + * Let EM_TRANSLATION_* be late evaluated so it helps embedded tarballs + - update debian/rules + + (cherry pick rev305 from lp:~mozillateam/xulrunner/xulrunner-1.9.head) + * link nss/nspr include directories to xulrunner-1.9 sdk in order to + allow upstream extensions to be built against ubuntu xulrunner. + - add debian/xulrunner-1.9-dev.links + + (cherry pick rev312 from lp:~mozillateam/xulrunner/xulrunner-1.9.head) + * drop patches applied upstream + - delete debian/patches/bz428848_att319775_fix_venkman_chrome_access.patch + - update debian/patches/series + + (cherry pick rev313 from lp:~mozillateam/xulrunner/xulrunner-1.9.head) + * hold back upgrade until firefox 3.0.1 is available; for that, we add a + Breaks: firefox-3.0 (<< 3.0.1) to xulrunner-1.9 binary package + - update debian/control + + (cherry pick rev314 from lp:~mozillateam/xulrunner/xulrunner-1.9.head) + * fix LP: #247132 - The Prism Refractor Extension (v0.2) causes file + downloads to kill firefox 3; we fix this by introducing a NULL check + in our bz368428 "XUL FastLoad cache corruption" patch + - update debian/patches/bz368428_attachment_308130.patch + + * dont use debhelper .links file to better guess the right path based + on the xulrunner version and implement the linking manually in rules + - delete debian/xulrunner-1.9-dev.links + - update debian/rules + * fix .autoreg touch to use the right upstream version too + - update debian/rules + + -- Alexander Sack Fri, 11 Jul 2008 09:46:57 +0200 + +xulrunner-1.9 (1.9+nobinonly-0ubuntu0.8.04.1) hardy-proposed; urgency=low + + * New upstream release 1.9 (LP: #237690) + + [ Fabien Tassin ] + * Touch .autoreg in postinst with the exact GRE version as the glob is + causing troubles when multiple xulrunner are installed + - update debian/xulrunner-1.9.postinst + - update debian/xulrunner-1.9-gnome-support.postinst + * drop synchronous = NORMAL patch, now applied upstream + - delete debian/patches/bz421482_att320806_synchronous_NORMAL_for_storage_connections.patch + - update debian/patches/series + * Fix regression with venkman accessing chrome by applying patch + from bugzilla https://bugzilla.mozilla.org/show_bug.cgi?id=428848 + - add debian/patches/bz428848_att319775_fix_venkman_chrome_access.patch + - update debian/patches/series + + [ Alexander Sack ] + * drop image scaling patches - previously applied and finally superseeded + upstream to fix Vista bug https://bugzilla.mozilla.org/show_bug.cgi?id=434157 + - delete debian/patches/bz394103_dont_scale_images.patch + - delete debian/patches/bz394103_scale_images_for_192+dpi.patch + - update debian/patches/series + + -- Alexander Sack Tue, 10 Jun 2008 14:12:24 +0200 + +xulrunner-1.9 (1.9~rc1+nobinonly-0ubuntu1~8.04.2) hardy-proposed; urgency=low + + * update patch for Bug 368428 – "XUL FastLoad cache corruption when + application running"; fix deadlock by using "antiLockZipGrip". + (LP: #236984) + - update debian/patches/bz368428_attachment_308130.patch + + -- Alexander Sack Mon, 26 May 2008 09:33:05 +0200 + +xulrunner-1.9 (1.9~rc1+nobinonly-0ubuntu1~8.04.1) hardy-proposed; urgency=low + + * New upstream release 1.9 RC1 (LP: #233922) + + [ Fabien Tassin ] + * Bump EM_TRANSLATION_VERSION and EM_TRANSLATION_{MIN,MAX}_VERSION to 1.9 + and clean-up the code to avoid unnecessary complexity + - update debian/rules + * Drop patch applied upstream + - drop debian/patches/bz423060_att312807_fix_rss_subscription.patch + - drop debian/patches/bz425814_att315081.patch + - drop debian/patches/inspector_maxversion_bump.patch + - update debian/patches/series + * Update diverges patches + - update debian/patches/bz394103_dont_scale_images.patch + - update debian/patches/bzXXX_gre_extension_plugin_support.patch + - update debian/patches/dom_inspector_support_for_prism.patch + * Build with system bzip2 + - update debian/rules + * Workaround multiple crashes in Intrepid (at least 3 in realpath()) caused + by Intrepid shipping gcc 4.3 with -D_FORTIFY_SOURCE=2 by default. + Set CPPFLAGS to -U_FORTIFY_SOURCE + - update debian/rules + * Drop LDFLAGS workaround now that jemalloc is no longer a static lib. + We still ship jemalloc as a shared lib + - udate debian/rules + * Set synchronous = NORMAL by default for storage to avoid excessive fsync. + It could be changed using the toolkit.storage.synchronous preference using + values of 0 (OFF), 1 (NORMAL), and 2 (FULL) + - add debian/patches/bz421482_att320806_synchronous_NORMAL_for_storage_connections.patch + - update debian/patches/series + + [ Alexander Sack ] + * remove cherry-pick for LP: #215728 - "excess disk IO when updating the + url-classifier" - applied upstream + - drop debian/patches/bz430530_attachment_318939.patch + - update debian/patches/series + * and cut out the "ship urlclassifier. settings in toolkit" part of the + patch to a separate one, targetted for upstream + - add debian/patches/bzXXX_urlclassifier_prefs_in_toolkit.patch + - update debian/patches/series + * prepatch from bugzilla fix for "Bug 368428 – XUL FastLoad cache corruption + when application running while upgrading" + - add debian/patches/bz368428_attachment_308130.patch + - update debian/patches/series + * 1.9b5 to 1.9rc1 upgrade Breaks: epiphany-gecko (<< + 2.22.1.1-0ubuntu1.8.04.1), yelp (<< 2.22.1-0ubuntu2.8.04.1), midbrowser + (<< 0.3.0rc1), devhelp (<< 0.19-1ubuntu1.8.04.1) + - update debian/control + + -- Alexander Sack Mon, 26 May 2008 09:33:05 +0200 + +xulrunner-1.9 (1.9~b5+nobinonly-0ubuntu4~8.04.0mt1) hardy-proposed; urgency=low + + * fix LP: #215728 - "excess disk IO when updating the url-classifier"; we + increase cache size of sqlite database and better align page size. + Cherry-picking and backporting upstream fix from bmo#430530; + other changes vs. upstream: we move default pref for cache size from + browser/ to toolkit/ + - add debian/patches/bz430530_attachment_318939.patch + - update debian/patches/series + + -- Alexander Sack Mon, 05 May 2008 10:27:30 +0200 + +xulrunner-1.9 (1.9~b5+nobinonly-0ubuntu3) hardy; urgency=low + + * j2re1.4 is the package that ships the plugin, not the mozilla-plugin + package. fixing conflicts for LP: #214468. + - update debian/control + + -- Alexander Sack Tue, 15 Apr 2008 15:16:07 +0200 + +xulrunner-1.9 (1.9~b5+nobinonly-0ubuntu2) hardy; urgency=low + + * fix "firefox-3.0 gets removed on dist-upgrade when firefox-3.0 build is + not available on mirror". We deal with this situation by dropping the + Break: field from xulrunner-1.9 and adding upper bounds on xulrunner-1.9 + to firefox-3.0 binary. + - update debian/control + + * improve translation support by shipping a crafted install.rdf. We ship a + template install.rdf.in in debian/translation-support and replace the + em:{version,maxVersion,minVersion} during build. For now those versions + are maintained manually because we need maintainer attention on upgrades + considering the upstream string freeze. To increase failsafeness, we fail + the build if the version appears to be out of sync with the upstream + version in the post-install target. The install.rdf is finally added to + the zip file in the binary-post-install rule used to produce the + en-US.xpi. + - add debian/translation-support/install.rdf.in + - update debian/rules + + * fix "USE_SYSTEM_NSS checks nspr version, not nss" + - update debian/rules + + * fix "firefox resets user prefs if the user sets a preference that is equal + to the default shipped by firefox/xulrunner that was overloaded with an + extension default (aka ubufox). (LP: #203306). Patch ported from ffox 2 + package. + - add debian/patches/bzXXX-dont-reset-user-prefs-on-upgrade.patch + - update debian/patches/series + + * fix "broken wizard binding with javascript policies in place" - + For particular, this fixes "plugin installer wizard broken with adblock or + noscript installed" (LP: #215672). Patch taken from bugzilla 425814 + - add debian/patches/bz425814_att315081.patch + - update debian/patches/series + + * conflict with removed from archive package j2re1.4-mozilla-plugin as it + causes crashes in latest gecko code (LP: #214468) + - update debian/control + + -- Alexander Sack Tue, 15 Apr 2008 11:59:05 +0200 + +xulrunner-1.9 (1.9~b5+nobinonly-0ubuntu1) hardy; urgency=low + + [ Fabien Tassin ] + * Drop patch applied upstream + - drop debian/patches/bz333308_attXXXX_make_clean_cleaner.patch + - update debian/patches/series + * Set LDFLAGS so dpkg-buildpackage doesn't use -Wl,-Bsymbolic-functions + - update debian/rules + * Add support for a defaults/syspref directory containing system wide + preferences that will not be silently overwritten at each upgrade + (LP: #207281, #203538). + It works for both libxul apps such as firefox 3 and xulrunner + applications such as prism + - add debian/patches/add_syspref_dir.patch + - update debian/patches/series + * Fix broken RSS subscription + - add debian/patches/bz423060_att312807_fix_rss_subscription.patch + - update debian/patches/series + * Bump depends to libnspr4-dev >= 4.7.1~beta2 and libnss3-dev >= 3.12.0~beta3 + - update update debian/control + * Hook up mozilla-devscript's compare module to binary-post-install + - update debian/rules + + [ Alexander Sack ] + * switch to in-source jpeg to fix rendering issues at zoom levels + (LP: #182038); this measure should give us some performance + improvements. + - update debian/rules + * make pref extensions read defaults/autoconfig from NS_GRE_DIR instead + of NS_APP_DEFAULTS_50_DIR. If it turns out to be a bad decision, we should + reconsider this patch. + - add debian/patches/bzXXX_autoconfig_in_gre.patch + - update debian/patches/series + * install system-greprefs in /etc/xulrunner-1.9/ and create the proper + link in $pkglibdir/greprefs to it (LP: #139543) + - add debian/system-greprefs.js + - update debian/rules + * ship versioned link libsqlite3.so.0 => libsqlite3.so in $pkglibdir to + allow liferea workaround for LP: #203413 - "Liferea creates many corrupt + copies of places.sqlite in" by setting LD_LIBRARY_PATH properly + - update debian/rules + * ship .autoreg file in pkglibdir to allow autoreg touches by + plugins/extensions et al. + - update debian/rules + * touch .autoreg in xulrunner-1.9.postinst and + xulrunner-1.9-gnome-support.postinst + - update debian/xulrunner-1.9.postinst + - add debian/xulrunner-1.9-gnome-support.postinst + * hook in lp-export-xpi.mk from mozilla-devscript to export en-US + translation templates to debian/lp-export-xpis/; in turn, make + mozilla-devscripts a hard build-depends + - update debian/rules + - update debian/control + * consider NS_GRE_DIR/.autoreg to trigger component registry upgrades. + - add debian/patches/bzXXX_gre_autoreg.patch + - update debian/control/series + * Fix "Dom Inspector not compatible" by bumping maxVersion field in + extension install.rdf + - add debian/patches/inspector_maxversion_bump.patch + - update debian/patches/series + * Fix xulrunner side for bug "firefox needs restart after plugin install to + detect and activate them"; we scan for new plugins in GRE at startup runtime + - update debian/patches/bzXXX_gre_extension_plugin_support.patch + + -- Fabien Tassin Fri, 04 Apr 2008 23:11:10 +0200 + +xulrunner-1.9 (1.9~b4+nobinonly-0ubuntu1) hardy; urgency=low + + * new upstream release 1.9~b4 fixes: + - LP: #194486 - "printing in Firefox 3 Beta 3 is broken" + - LP: #192505 - "Where's my home button?" + - LP: #44062 - "Firefox allows cookies to be set for second-level + domain hierarchies" + - LP: #181575 - "pressing Enter in URL bar selects mouse hover target + in substring-search pop-down" + + [ Fabien Tassin ] + * Drop patches applied upstream + - drop debian/patches/bz344818_cairo_xrender.patch + - drop debian/patches/bzXXX_fix_pyxpcom_build_failure.patch + * Update diverged patch: + - update debian/patches/dom_inspector_support_for_prism.patch + * Add support for system hunspell + - update debian/rules + * Add optional support for system sqlite3 (we need >= 3.5 not in hardy) + - update debian/rules + * Update clean rule to make it simpler and more friendly with + mozilla-devscripts + - update debian/rules + * Drop DEB_AUTO_UPDATE_DEBIAN_CONTROL cdbs variable completely. It was + wrongly set to zero + - update debian/rules + * Update clean rule now that Mozilla bug 333308 has landed. + To prevent a bug in cdbs where patches are unapplied before distclean + is performed, set DEB_MAKE_CLEAN_TARGET to $(NULL) and add call + distclean ourselves before cdbs files are included + - update debian/rules + * There're still some leftovers after distclean despite latest + Mozilla bug 333308 patch. Fix it once again and report it upstream + - add debian/patches/bz333308_attXXXX_make_clean_cleaner.patch + - update debian/patches/series + * Drop obsolete comment for extensions + - update debian/rules + * Stop build-tree/mozilla/README to be shipped as a doc by setting + cdbs DEB_INSTALL_DOCS_ALL to $(NULL) + - update debian/rules + * Drop obsolete TODO file + - drop debian/TODO + + [ Alexander Sack ] + * fix "remember password" dialog for embedders that don't provide + a branding chrome + - add debian/patches/bzXXX_attXXX_fix_remember_password_for_embedders_without_branding.patch + - update debian/patches/series + * fix LP: #175904 "Firefox 3.0 makes everything annoyingly huge" by not + scaling images based on dpi. + - add debian/patches/bz394103_dont_scale_images.patch + - update debian/patches/series + * add alternative patch for LP: #175904 "Firefox 3.0 makes everything + annoyingly huge" by scaling images for 192dpi, 288dpi, etc. instead + of 142dpi, 238dpi and so on. (this patch is not applied atm and is + included for testing purpose) + - add debian/patches/bz394103_scale_images_for_192+dpi.patch + * add libsqlite3-dev to Build-Depends in order to effectively enable + optional system sqlite feature on buildd's with sqlite > 3.5 + - update debian/control + * bump build requirements on nspr and nss to >= 4.7.0~1.9b4 and + >= 3.12.0~1.9b4 respectively + - update debian/control + + -- Alexander Sack Tue, 11 Mar 2008 02:06:46 +0100 + +xulrunner-1.9 (1.9~b3+nobinonly-0ubuntu3) hardy; urgency=low + + * add two patches for mozilla bug 394103 "All elements are HUGE" and enable + bz394103_dont_scale_images.patch for now (LP: #178558) + - add debian/patches/bz394103_dont_scale_images.patch + - add debian/patches/bz394103_scale_images_for_192+dpi.patch + - update debian/patches/series + + -- Alexander Sack Mon, 25 Feb 2008 11:45:00 +0100 + +xulrunner-1.9 (1.9~b3+nobinonly-0ubuntu2) hardy; urgency=low + + * add Breaks: firefox-3.0 (<< 3.0~b3) to fix transition breakage + - update debian/control + + -- Alexander Sack Thu, 14 Feb 2008 16:51:05 +0100 + +xulrunner-1.9 (1.9~b3+nobinonly-0ubuntu1) hardy; urgency=low + + * release FIREFOX_3_0b3_RELEASE + + [ Alexander Sack ] + * submit patch that ships xpcshell to bugzilla + - rename debian/patches/ship_xpcshell.patch => + debian/patches/bz410617_att295212_ship_xpcshell.patch + - update debian/patches/series + * fix tooltip in epiphany: previously displayed out of screen bounds + (LP: #37507) + - add debian/patches/bz233371_att297343_fix_outofscreen_embed_tooltip.patch + - update debian/patches/series + * use default upstream gcc tweaks for improved performance - especially of the + javascript engine + - update debian/rules + * update global extension/plugin patch to apply cleanly against latest code + - update debian/patches/bzXXX_gre_extension_plugin_support.patch + * fix pyxpcom build failure introduced by recent commit + - add debian/patches/bzXXX_fix_pyxpcom_build_failure.patch + - update debian/patches/series + * add distro independent global install locations for extensions, + /usr/lib/mozilla/extensions and /usr/share/mozilla/extensions + - update debian/xulrunner-1.9.dirs + * support embedded tarball layout when either there is a *.tar.bz2 in orig tarball + or if DEBIAN_MOZCLIENT_EMBEDDED is not unset (you will need this to produce embedded + tarballs during |get-orig-source| + - update debian/rules + * bump minimum libnss3-dev build requirements to >= 3.12.0~1.9b3 + - update debian/control + * bump minimum libnspr4-dev build requirements to >= 4.7.0~1.9b3 + - update debian/control + + [ Fabien Tassin ] + * Drop patches applied upstream + - drop debian/patches/bz410617_att295212_ship_xpcshell.patch + - drop debian/patches/bz404634_att294921.patch + - drop debian/patches/bz386610_python2.5_ftbfs_amd64.patch + - drop debian/patches/bz373918_att295042.patch + - drop debian/patches/bz408062_unstable_pc.patch + - drop debian/patches/bz384304_fix_recursive_symlinks.patch + - update debian/patches/series + * Refresh diverged patches: + - update debian/patches/bzXXX_pc_honour_system_nspr_nss.patch + - update debian/patches/rename_venkman_addon.patch + - update debian/patches/bz344818_cairo_xrender.patch + * Install links for all .so libs in the -dev package + - update debian/patches/dont_install_so_in_dev.patch + * Bump gtk requirement to 2.12 as per Mozilla bug 412432 + - update debian/control + * Add #DEBHELPER# token to postinst/prerm scripts + - update debian/xulrunner-1.9.{postinst,prerm} + * Install previously missed libdbusservice.so + - update debian/xulrunner-1.9.install + * Update venkman patch to also rename locales + - update debian/patches/rename_venkman_addon.patch + * Bump requirement for system cairo to >= 1.5.8 as we now need + the newly added cairo_path_extents() + - update debian/rules + * Include mozilla-devscripts file using -include so ifneq could be omitted + - update debian/rules + * Fix missing .so symlinks regression + - update debian/patches/dont_install_so_in_dev.patch + + -- Alexander Sack Wed, 13 Feb 2008 11:47:21 +0100 + +xulrunner-1.9 (1.9~b3~cvs20080101t1000+nobinonly-0ubuntu1) hardy; urgency=low + + * happy new year release for hardy (1.9b3 pre, CVS 20080101t1000) features: + - use system-cairo (LP: #152210, LP: #164640) + - use system-nspr/nss (LP: #177280) + - proper pkg-config files for -unstable and system-nspr/nss (see below) + - backed-out microb changes (back to square zero) + - fix various embedding issues (see below) + + [ Fabien Tassin ] + * Disable bz404634_att290373.patch and bz373196_att281782.patch until trunk + is back in shape after the MicroB mass back out (See MozBug #408238) + - update debian/patches/series + * new upstream snapshot (1.9b3 pre, CVS 20071228t0918) + * Drop patch committed upstream: + - drop debian/patches/bz287150_att291740_hppa_fix.patch + - update debian/patches/series + * Add support for mozilla-devscripts + - update debian/control + - update debian/rules + + [ Alexander Sack ] + * drop patches for mozilla bug #404634 completely to prepare landing of + improved patch: + - drop debian/patches/bz404634_att290305.patch + - drop debian/patches/bz404634_att290373.patch + - update debian/patches/series + * land improved patch for mozilla bug #404634 that properly disables + url-classifier if no profile is setup and makes nsUrlClassifierDBService + fall-back to NS_APP_USER_PROFILE_50_DIR if NS_APP_USER_PROFILE_LOCAL_50_DIR + is not provided by embedding app. + - add debian/patches/bz404634_att294921.patch + - update debian/patches/series + * remove bz373196_att281782.patch completely from tree as it tackled a MICROB + regression, which should now be fixed. + * add %FULL_NSPR_CFLAGS% to libxul-embedding* Cflags .pc files to fix + builds of embedders that link against system-nspr enabled xul + - update debian/patches/bzXXX_pc_honour_system_nspr_nss.patch + * do not export zlib headers with bogus symbols during make install if + system zlib is used. This breaks embedders and happens if MOZ_INSTALLER + is enabled. + - add debian/patches/bzXXX_no_zlib_export_if_native.patch + - update debian/patches/series + * drop mozilla-devscripts from build-depends as its not needed for the + actual package build process. Take care that debian/rules disables the + mozilla-devscripts include if it doesn't exist + - update debian/control + - update debian/rules + * add gtkmozembed_internal.h symbols to glue (mozilla bug 373918): + - add debian/patches/bz373918_att295042.patch + - update debian/patches/series + * add support for GRE extensions and plugins. We now search in PROFILE, APP + and GRE dir. + - add debian/patches/bzXXX_gre_extension_plugin_support.patch + - update debian/patches/series + * explicitly create addon directories /usr/lib/xulrunner-addons/{plugins,extensions} + - update debian/xulrunner-1.9.dirs + * drop hard-coded --with-system-nspr and --with-system-nss from CONFIGURE + flags + - update debian/rules + * don't enforce lower bound of system cairo and system nss versions + - update debian/control + + -- Alexander Sack Wed, 02 Jan 2008 14:55:34 +0100 + +xulrunner-1.9 (1.9~b2+nobinonly-0ubuntu1) hardy; urgency=low + + [ Fabien Tassin ] + * new upstream snapshot (1.9b2) from tag FIREFOX_3_0b2_RELEASE + * Update diverged patch: + - update debian/patches/bz399589_fix_missing_symbol_with_new_nss.patch + * Fix FTBFS on Hardy when using system nss. See MozBug #403994. + - add debian/patches/bz403994_dont_install_nss_includes_with_system_nss.patch + - update debian/patches/series + * Drop patches for bugs which recently landed + - drop debian/patches/bz405424_att290202.patch + - drop debian/patches/fix_ppc_ftbfs.patch + - update debian/patches/series + * Update rules for system cairo >= 1.5.4. It's still conditioned + by the presence or not of libcairo 1.5.* in hardy, also conditioning + lcd sub-pixel rendering + - update debian/rules + - add debian/patches/bz344818_cairo_xrender.patch + - update debian/patches/series + * add libpixman-1-dev to build-deps, needed by cairo + - update debian/control + * Update Standards-Version to 3.7.3 + - update debian/control + * Re-enable DEB_AUTO_UPDATE_AUTOCONF=2.13 and depends on autoconf2.13 + (will be dropped for final release) + - update debian/control + - update debian/rules + * Fold Build-Depends line making changes easier to track in diffs + and update versions based on http://wiki.mozilla.org/Linux/Runtime_Requirements + - update debian/control + * Add --enable-startup-notification and libstartup-notification0-dev to build-deps + - update debian/rules + - update debian/control + * Rewrite detection code for system nss and nspr, to ease backports to gutsy + - update debian/rules + * Fix FTBFS on hppa (See MozBug #287150) + - add debian/patches/bz287150_att291740_hppa_fix.patch + - update debian/patches/series + + [ Alexander Sack ] + * force system cairo by adding versioned build-depends >= 1.5.4 + - update debian/control + * provide libxul-unstable.pc and libxul-embedding-unstable.pc + - add debian/patches/bz408062_unstable_pc.patch + - update debian/patches/series + * fix missing icons if no gnome-support package is installed: move + libimgicon.so component from gnome-support package to plain xulrunner-1.9 + - update debian/xulrunner-1.9.install + - update debian/xulrunner-1.9-gnome-support.install + * fix mozilla-nspr.pc for --with-system-nspr builds: mozilla-nspr.pc points + to the cflags and libs of system nspr now + - add debian/patches/bzXXX_pc_honour_system_nspr_nss.patch + - update debian/patches/series + * enforce libnss3-dev version (>= 3.12.0~1.9b2) + - update debian/control + + -- Fabien Tassin Wed, 19 Dec 2007 20:23:23 +0100 + +xulrunner-1.9 (1.9~b1+nobinonly-0ubuntu2) hardy; urgency=low + + [ Alexander Sack ] + * don't ship versioned .pc files anymore: + - remove debian/patches/install_pkgconfig_files_with_version.patch + - update debian/patches/series + * in turn xulrunner-1.9-dev package needs to Conflicts: on (old) mozilla-dev + - update debian/control + + [ Fabien Tassin ] + * Add Homepage: and Vcs-Bzr: fields in control file + - update debian/control + + -- Alexander Sack Fri, 07 Dec 2007 00:11:43 +0100 + +xulrunner-1.9 (1.9~b1+nobinonly-0ubuntu1) hardy; urgency=low + + * new upstream snapshot (1.9b1 from FIREFOX_3_0b1_RELEASE) + - update debian/changelog + * Fix shell redirection in clean rule leaving orphaned processes + in buildd. (LP: #162723) + - update debian/rules + * Move extensions dir from /usr/lib/xulrunner-addons to + /usr/lib/xulrunner-addons/extensions and move plugins dir + from non-stable /usr/lib/xulrunner-1.9b1/plugins to + /usr/lib/xulrunner-addons/plugins + - update debian/rules + - update debian/xulrunner-1.9.install + - update debian/xulrunner-1.9-dom-inspector.install + - update debian/xulrunner-1.9-venkman.install + * new upstream snapshot (1.9b2pre cvs20071120t1456) + * Drop patches for MozBug #399589 and #403994 which landed: + - drop debian/patches/bz399589_fix_missing_symbol_with_new_nss.patch + - drop debian/patches/bz403994_dont_install_nss_includes_with_system_nss.patch + - update debian/patches/series + * Add libdbus-glib-1-dev >= 0.60 to build-deps. See MozBug #388743. + - update debian/control + * Add a postrm script to clean up left-overs from python/xpcom + - add debian/xulrunner-1.9.postrm.in + - update debian/rules + * Add support for Prism in the dom inspector addon + - add debian/patches/dom_inspector_support_for_prism.patch + - update debian/patches/series + + [ Alexander Sack ] + * GtkEmbed DirectoryProvider provides NS_APP_USER_PROFILE_LOCAL_50_DIR special + directory now: + - add debian/patches/bz404634_att290373.patch + - update debian/patches/series (include currently applied patch) + * GtkEmbedEventListener.cpp now deals properly with selections: + - add debian/patches/bz373196_att281782.patch + - update debian/patches/series + * Fix ia64 build failure (thanks to Raúl Porcel) + - add debian/patches/bz405424_att290202.patch + - update debian/patches/series + * Fix url-classifier for embedders that don't provide a profile path. Use + a temp file to setup the url-classifier database and remove that one when + shutting down cleanly: + - add debian/patches/bz404634_att290305.patch + - update debian/patches/series + + -- Fabien Tassin Tue, 27 Nov 2007 16:01:49 +0100 + +xulrunner-1.9 (1.9~b1~rc3+nobinonly-0ubuntu1) hardy; urgency=low + + [ Fabien Tassin ] + * new upstream snapshot (1.9a9pre cvs20071012t0843) + * Drop debian/patches/bz392722_fix_nsinstall_on_double_slash.patch + (MozBug #397296 bumped nss/nspr requirements) + - update debian/patches/series + * Fix ftbfs with new nss caused by landing of MozBug #286642. + See MozBug 399589 + - add debian/patches/bz399589_fix_missing_symbol_with_new_nss.patch + - update debian/patches/series + * Ship xpcshell as /usr/bin/xpcshell-1.9 (LP: #151400) + - update debian/rules + - add debian/patches/ship_xpcshell.patch + - update debian/patches/series + * new upstream snapshot (1.9a9pre cvs20071105t0339) + - update debian/changelogs + * Move gnome libs from xulrunner-1.9 to xulrunner-1.9-gnome-support + - update debian/control + - update debian/xulrunner-1.9.install + - add debian/xulrunner-1.9-gnome-support.install + * new upstream snapshot (1.9b1 rc3 from FIREFOX_3_0b1_RC3) + - update debian/changelogs + * Fix broken --with-default-mozilla-five-home value + - update debian/rules + + [ Alexander Sack ] + * fix alternative migration bug that appears to happen on upstream version + upgrades: uninstall xulrunner alternative during "remove" and "upgrade" in + xulrunner-1.9.prerm + - update debian/xulrunner-1.9.prerm + + -- Fabien Tassin Wed, 14 Nov 2007 15:09:56 +0100 + +xulrunner-1.9 (1.9~a9~cvs20071003t0648-0ubuntu1~mt2) gutsy; urgency=low + + RELEASE: 1.9~a9~cvs20071003t0648-0ubuntu1~mt2 to gutsy/PPA + + * Add /usr/bin/xulrunner-1.9 and make the alternative point to it so + xul apps that need xul 1.9 can use it. subst is no longer needed for + postinst/prerm scripts. + - rename and update: + - debian/xulrunner-1.9.postinst.in => debian/xulrunner-1.9.postinst + - debian/xulrunner-1.9.prerm.in => debian/xulrunner-1.9.prerm + - update debian/rules + + -- Fabien Tassin Mon, 08 Oct 2007 16:44:01 +0200 + +xulrunner-1.9 (1.9~a9~cvs20071003t0648-0ubuntu1~mt1) gutsy; urgency=low + + RELEASE: 1.9~a9~cvs20071003t0648-0ubuntu1~mt1 to gutsy/PPA + + [ Fabien Tassin ] + * Add --disable-mochitest to debian/rules + * Protect tests targets by ifdefs so --disable-tests does the proper thing. + This is usefull for the stripped tarball. + - add debian/patches/protect_tests_by_ifdefs.patch + - update debian/patches/series + * Remove strict version check for extensions + - update debian/control + + [ Alexander Sack ] + * unify test for dev-package in var DEV_PACKAGE_INDICATION and determine + whether to point libnssckbi.so to system nss using this test. + * drop versions from build-depends and depends on libnspr4-dev, libnss3-dev. + We use this to be able to use the same sources for both official uploads + (which uses in-xul nspr/nss) and dev/ppa uploads (which use system + nspr/nss). + + -- Fabien Tassin Sun, 07 Oct 2007 20:52:39 +0200 + +xulrunner-1.9 (1.9~a8-0ubuntu2) gutsy; urgency=low + + * debian/rules don't install link to system libnssckbi.so in order to use + xulrunner provided nss. (LP: #149822) + + -- Alexander Sack Sat, 06 Oct 2007 14:23:09 +0200 + +xulrunner-1.9 (1.9~a8-0ubuntu1) gutsy; urgency=low + + RELEASE: 1.9~a8 upload to gutsy. + + [ Alexander Sack ] + * debian/rules: use EXTRA_SYSTEM_CONFIGURE_FLAGS to only use system-nss/-nspr + for cvs and mt builds. + * debian/control: drop build-depends on system-nss/-nspr ... later this + should be depent on the same test as EXTRA_SYSTEM_CONFIGURE_FLAGS. + * debian/patches/install_pkgconfig_files_with_version.patch: update patch + to ship versioned pkgconfig files: mozilla-nspr-1.9.pc and + mozilla-nss-1.9.pc when xulrunner is not using system nspr/nss. + * debian/control: drop system nspr/nss depends of xulrunner-1.9-dev. + + -- Alexander Sack Fri, 05 Oct 2007 01:43:55 +0200 + +xulrunner-1.9 (1.9~a8-0ubuntu1~mt4) gutsy; urgency=low + + [Fabien Tassin ] + * Compile with gcc/g++ 4.2 for all archs. + * Fix a nasty variable bug in debian/rules not doing + the proper substitution in postinst/prerm + + -- Alexander Sack Fri, 28 Sep 2007 23:31:04 +0200 + +xulrunner-1.9 (1.9~a8-0ubuntu1~mt3) gutsy; urgency=low + + [ Fabien Tassin ] + * DEBIAN_XUL_DIR is evaluated too early, replace ':=' by '='. + update debian/rules + * update debian/patches/rename_venkman_addon.patch as + a file was missing + + -- Alexander Sack Fri, 28 Sep 2007 17:12:45 +0200 + +xulrunner-1.9 (1.9~a8-0ubuntu1~mt2) gutsy; urgency=low + + [ Fabien Tassin ] + * Install addons in /usr/lib/xulrunner-addons: + - add debian/xulrunner-1.9.dirs + - update debian/rules to install a symlink + for /usr/lib/xulrunner-1.9*/extensions + * Create a package called xulrunner-1.9-dom-inspector + - update debian/rules + - add debian/xulrunner-1.9-dom-inspector.install + * Create a package called xulrunner-1.9-venkman + - update debian/rules + - add debian/debian/xulrunner-1.9-venkman.install + - add debian/patches/rename_venkman_addon.patch + - update debian/patches/series + * Install /usr/bin/xulrunner as an alternative + - add debian/xulrunner-1.9.postinst.in + - add debian/xulrunner-1.9.prerm.in + - update debian/rules + - update debian/xulrunner-1.9.install + * Add debian/patches/bz384304_fix_recursive_symlinks.patch + and update debian/patches/series + * Add Conflicts xulrunner (<< 1.8.1.4-2ubuntu4) so that + we can coexist with xulrunner 1.8 using alternatives + + -- Alexander Sack Tue, 25 Sep 2007 23:59:53 +0200 + +xulrunner-1.9 (1.9~a8-0ubuntu1~mt1) gutsy; urgency=low + + Upstream Release: 1.9~a8 aka MOZILLA_1_9a8_RELEASE + + [ Fabien Tassin ] + * Add --disable-install-strip to debian/rules (introduced + by Mozilla bug #391325) + * Don't install .so libs in -dev but link them instead + Add debian/patches/dont_install_so_in_dev.patch + * Make xulrunner-1.9-dev depend on lib{nss3,nspr4}-dev + * Don't hardcode xul version in debian/xulrunner-1.9.links + but link in debian/rules instead + + [ Alexander Sack ] + * debian/rules: redirect output of finds in clean target to /dev/null + + -- Alexander Sack Tue, 25 Sep 2007 01:46:53 +0200 + +xulrunner-1.9 (1.9~a8~cvs20070913t1423-0ubuntu1~mt2) gutsy; urgency=low + + [ Fabien Tassin ] + * Remove Build-Depends-Indep as java is not needed + * Add --enable-safe-browsing to debian rules as it's good for us + and it brings the missing --enable-url-classifier + * Make the installer complain about missing files on stdout + instead of stderr so logs are easier to read. + Add debian/patches/installer_use_stdout_for_missing_files.patch + and update debian/patches/series + + -- Alexander Sack Mon, 17 Sep 2007 21:33:45 +0200 + +xulrunner-1.9 (1.9~a8~cvs20070913t1423-0ubuntu1~mt1) gutsy; urgency=low + + [ Fabien Tassin ] + * Add debian/patches/fix_ppc_ftbfs.patch to fix FTBFS on powerpcc: + now look for Linuxpowerpc instead of Linuxppc + (contributed by Luke Yelavich ) + * Add --enable-extensions to build xml-rpc, venkman, inspector, irc, gnomevfs, + cview, tasks, reporter and python/xpcom + * Add --enable-webservices + * Drop --disable-debug (it's the default) + * Add a clean rule to take care of some leftovers + * Add debian/xulrunner-1.9.links to link /usr/lib/nss/libnssckbi.so in + /usr/lib/xulrunner-1.9a8pre/libnssckbi.so in order to provide to all xul + applications CA certificates. + * update debian/patches/bz392722_fix_nsinstall_on_double_slash.patch + update from firefox-trunk to reflect upstream partial commit. + + [ Alexander Sack ] + * debian/patches/bz386610_python2.5_ftbfs_amd64.patch,series: add patch from + bugzilla 386610 that fixes ftbfs on amd64 with python2.5. + + -- Alexander Sack Sat, 08 Sep 2007 15:03:13 +0200 + +xulrunner-1.9 (1.9~a8~cvs20070829-0ubuntu1~mt1) gutsy; urgency=low + + [ Fabien Tassin ] + * new upstream snapshot (1.9a8pre cvs20070829) + * Add debian/copyright + * Update debian/changelog to use a proper versionning scheme. + * Make xulrunner-1.9-dev depend on xulrunner-1.9 (update debian/control) + * Update Maintainer in debian/control to Mozilla team. + * Update debian/control to fix Build-Depends: drop dpatch, add quilt, cdbs, + zip. + * Update debian/rules to stop running autoconf. + * Add debian/patches/bz392722_fix_nsinstall_on_double_slash.patch fixing + nsinstall (patch reused from firefox-trunk) + * Add debian/patches/install_pkgconfig_files_with_version.patch so we + can install multiple xulrunner-dev and still use pkg-config + * Add debian/patches/series + * Update debian/control to create a -dev package + * Add debian/xulrunner-1.9.install and debian/xulrunner-1.9-dev.install + to move files to -dev package + + -- Fabien Tassin Wed, 29 Aug 2007 20:53:27 +0200 + +xulrunner-1.9 (1.9~a8~cvs20070824-0ubuntu1) gutsy; urgency=low + + [ Fabien Tassin ] + * new upstream snapshot (1.9a8pre cvs20070824) + * initial packaging inspired from firefox-trunk and reusing + package descriptions from previous xulrunner package. + Create xulrunner-1.9 and xulrunner-1.9-dev. + + -- Fabien Tassin Fri, 24 Aug 2007 22:01:38 +0000 --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/copyright +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/copyright @@ -0,0 +1,651 @@ +This package was debianized by Fabien Tassin on 2007-08-25 + +The following file has been previously maintained by Mike Hommey +and updated by Fabien Tassin as of xulrunner 1.9a8pre. + +The package was downloaded from http://ftp.mozilla.org/pub/mozilla.org/xulrunner/ + +EDIT: downloaded from CVS (until 1.9 is released) using the following commands: + cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/client.mk + make -f mozilla/client.mk checkout MOZ_CO_PROJECT=xulrunner + +The source tarball is an aggregate of several different works in which the +main one, developed by the Mozilla Project, is xulrunner. + +The contents of the debian directory are licensed like the bulk of +xulrunner, tri-licensed under the GPL/LGPL/MPL. + +Other works include gzip, bzip2, sqlite, libjpeg, libpng, cairo, and others. +Please see the sections following the copyright statements for xulrunner for +these. + +If this file is incomplete, which I'm pretty sure is the case, because it's +difficult not to forget anything in this huge amount of data, please file +a bug or contact me. + +=== xulrunner + +Overall, the xulrunner project is licensed under the terms of the Mozilla +Public License version 1.1 or, at your option, under the terms of the GNU +General Public License version 2 or subsequent, or the terms of the GNU +Lesser General Public License version 2.1 or subsequent. + +On Debian systems, the complete text of the GNU General Public +License can be found in the file `/usr/share/common-licenses/GPL' ; +the complete text of the GNU Lesser General Public License can be +found in the file `/usr/share/common-licenses/LGPL'. + +The complete text of the Mozilla Public License can be found in the MPL file +in the same directory as this file. + +Some of the files are also licensed (single, dual or tri) under the terms of +the Netscape Public License (NPL) which can be found as amendments to the +MPL at the end of the file. Please refer to http://www.mozilla.org/MPL/relicensing-faq.html + +While the Mozilla Project is undergoing a global relicensing so that the +aim is to have a full tree with these tri-license terms, there are at the +moment quite some exceptions as following: + +(Note that I sometimes assumed files not explicitely licensed to be licensed +under the same terms as the files around them and that a lot of the +information has been extracted automatically, thus maybe leaving some doubt. +Again, if you find "bugs", please contact me by email or via the BTS.) + +The following files are not tri-licenced MPL/GPL/LGPL: + +- GPL only: + dom/tests/mochitest/ajax/jquery/dist/jquery.js + dom/tests/mochitest/ajax/jquery/src/jquery/jquery.js + +- MPL and GPL: + embedding/browser/activex/src/install/README.txt + +- MPL and LGPL: + gfx/cairo/cairo/* + +- GPL and LGP: + extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp + extensions/pref/system-pref/src/gconf/nsSystemPrefService.h + extensions/pref/system-pref/src/nsSystemPref.cpp + extensions/pref/system-pref/src/nsSystemPref.h + extensions/pref/system-pref/src/nsSystemPrefFactory.cpp + extensions/pref/system-pref/src/nsSystemPrefLog.h + netwerk/base/public/nsIIOService2.idl + netwerk/base/public/nsINetworkLinkService.idl + netwerk/streamconv/converters/mozTXTToHTMLConv.cpp + netwerk/streamconv/converters/mozTXTToHTMLConv.h + netwerk/streamconv/public/mozITXTToHTMLConv.idl + toolkit/system/dbus/nsDBusModule.cpp + toolkit/system/dbus/nsDBusService.cpp + toolkit/system/dbus/nsDBusService.h + toolkit/system/dbus/nsNetworkManagerListener.cpp + toolkit/system/dbus/nsNetworkManagerListener.h + +- NPL only (thus MPL): (EDIT: to investigate) + intl/uconv/ucvibm/864i.uf + intl/uconv/ucvibm/cp850.uf + intl/uconv/ucvibm/cp852.uf + intl/uconv/ucvibm/cp855.uf + intl/uconv/ucvibm/cp857.uf + intl/uconv/ucvibm/cp862.uf + intl/uconv/ucvibm/cp864.uf + intl/uconv/ucvmath/mathematica1.uf + intl/uconv/ucvmath/mathematica2.uf + intl/uconv/ucvmath/mathematica3.uf + intl/uconv/ucvmath/mathematica4.uf + intl/uconv/ucvmath/mathematica5.uf + intl/uconv/ucvmath/mtextra.uf + intl/uconv/ucvmath/texcmex-t1.uf + intl/uconv/ucvmath/texcmex-ttf.uf + intl/uconv/ucvmath/texcmmi-t1.uf + intl/uconv/ucvmath/texcmmi-ttf.uf + intl/uconv/ucvmath/texcmr-ttf.uf + intl/uconv/ucvmath/texcmsy-t1.uf + +- Public Domain: + aclocal.m4 + build/autoconf/freetype2.m4 + build/autoconf/gtk.m4 + build/autoconf/nspr.m4 + db/mork/src/morkDeque.cpp + db/mork/src/morkDeque.h + +The file db/mork/src/morkQuickSort.cpp is licensed under the following terms: + + Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +The following files come from X11R5, without any clear licensing terms: + + build/autoconf/install-sh + directory/c-sdk/config/autoconf/install-sh + nsprpub/build/autoconf/install-sh + +The embedding/qa/mozembed/public/nsIQABrowserUIGlue.idl file and the files +under the embedding/tests directory are licensed under the following terms: + + Copyright (c) 2002 Netscape Communications Corporation and + other contributors + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this Mozilla sample software and associated documentation files + (the "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +=== sqlite + +The db/sqlite3 directory contains a copy of sqlite with the following +licensing terms: + + The author disclaims copyright to this source code. In place of + a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + +=== dbm + +The dbm directory, except the files listed under the xulrunner section, is +licensed under the following terms: + + Copyright (c) 1991, 1993, 1994 + The Regents of the University of California. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +=== myspell + +The extensions/spellcheck/myspell directory is licensed under the following +terms: + + Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + And Contributors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. All modifications to the source code must be clearly marked as + such. Binary redistributions based on modified source code + must be clearly marked as modified versions in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +=== boehm + +The gc/boehm directory, except the files listed under the xulrunner section, +is licensed under the following terms: + + Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers + Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved. + Copyright (c) 1996-1998 by Silicon Graphics. All rights reserved. + + THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + + Permission is hereby granted to use or copy this program + for any purpose, provided the above notices are retained on all copies. + Permission to modify the code and to distribute modified code is granted, + provided the above notices are retained, and a notice that the code was + modified is included with the above copyright notice. + +=== cairo + +The gfx/cairo/cairo directory is licensed under the following terms: + + Copyright (c) 2003 University of Southern California + Copyright (c) 1999 Tom Tromey + Copyright (c) 2002, 2003 University of Southern California + Copyright (c) 2004 Calum Robinson + Copyright (c) 2004 David Reveman + Copyright (c) 2000, 2002, 2004 Keith Packard + Copyright (c) 2004, 2005 Red Hat, Inc + + Cairo is free software and is available to be redistributed and/or + modified under the terms of either the GNU Lesser General Public + License (LGPL) version 2.1 or the Mozilla Public License (MPL) version + 1.1. + +=== libpixman + +The gfx/cairo/libpixman directory is licensed under the following terms: +(from gfx/cairo/libpixman/COPYING) + + libpixregion + + Copyright 1987, 1998 The Open Group + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of The Open Group shall not be + used in advertising or otherwise to promote the sale, use or other dealings + in this Software without prior written authorization from The Open Group. + + + Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Digital not be + used in advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. + + ---------------------------------------------------------------------- + libic + + Copyright © 2001 Keith Packard + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of Keith Packard not be used in + advertising or publicity pertaining to distribution of the software without + specific, written prior permission. Keith Packard makes no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------------------------------------- + slim + + slim is Copyright © 2003 Richard Henderson + + Permission to use, copy, modify, distribute, and sell this software + and its documentation for any purpose is hereby granted without fee, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Richard Henderson not be + used in advertising or publicity pertaining to distribution of the + software without specific, written prior permission. Richard Henderson + makes no representations about the suitability of this software for + any purpose. It is provided "as is" without express or implied + warranty. + + RICHARD HENDERSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL RICHARD HENDERSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + +=== libjpeg + +The jpeg directory, except the files under the xulrunner section, are licensed +under the following terms: + + The authors make NO WARRANTY or representation, either express or implied, + with respect to this software, its quality, accuracy, merchantability, or + fitness for a particular purpose. This software is provided "AS IS", and you, + its user, assume the entire risk as to its quality and accuracy. + + This software is copyright (C) 1991-1998, Thomas G. Lane. + All Rights Reserved except as specified below. + + Permission is hereby granted to use, copy, modify, and distribute this + software (or portions thereof) for any purpose, without fee, subject to these + conditions: + (1) If any part of the source code for this software is distributed, then this + README file must be included, with this copyright and no-warranty notice + unaltered; and any additions, deletions, or changes to the original files + must be clearly indicated in accompanying documentation. + (2) If only executable code is distributed, then the accompanying + documentation must state that "this software is based in part on the work of + the Independent JPEG Group". + (3) Permission for use of this software is granted only if the user accepts + full responsibility for any undesirable consequences; the authors accept + NO LIABILITY for damages of any kind. + + These conditions apply to any software derived from or based on the IJG code, + not just to the unmodified library. If you use our work, you ought to + acknowledge us. + + Permission is NOT granted for the use of any IJG author's name or company name + in advertising or publicity relating to this software or products derived from + it. This software may be referred to only as "the Independent JPEG Group's + software". + + We specifically permit and encourage the use of this software as the basis of + commercial products, provided that all warranty or liability claims are + assumed by the product vendor. + +=== bzip2 + +The modules/libbz2/src directory is licensed under the following terms: +(from modules/libbz2/src/LICENSE) + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2005 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Julian Seward, Cambridge, UK. + jseward@acm.org + bzip2/libbzip2 version 1.0.3 of 15 February 2005 + +=== libpng + +The directory modules/libimg/png is licensed under the following terms: +(from modules/libimg/png/LICENSE) + + This copy of the libpng notices is provided for your convenience. In case of + any discrepancy between this copy and the notices in the file png.h that is + included in the libpng distribution, the latter shall prevail. + + COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + + If you modify libpng you may insert additional notices immediately following + this sentence. + + libpng version 1.2.6, September 12, 2004, is + Copyright (c) 2004 Glenn Randers-Pehrson, and is + distributed according to the same disclaimer and license as libpng-1.2.5 + with the following individual added to the list of Contributing Authors + + Cosmin Truta + + libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are + Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are + distributed according to the same disclaimer and license as libpng-1.0.6 + with the following individuals added to the list of Contributing Authors + + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + + and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + + libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are + Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are + distributed according to the same disclaimer and license as libpng-0.96, + with the following individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + + libpng versions 0.89, June 1996, through 0.96, May 1997, are + Copyright (c) 1996, 1997 Andreas Dilger + Distributed according to the same disclaimer and license as libpng-0.88, + with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + + libpng versions 0.5, May 1995, through 0.88, January 1996, are + Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + + For the purposes of this copyright and license, "Contributing Authors" + is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + + The PNG Reference Library is supplied "AS IS". The Contributing Authors + and Group 42, Inc. disclaim all warranties, expressed or implied, + including, without limitation, the warranties of merchantability and of + fitness for any purpose. The Contributing Authors and Group 42, Inc. + assume no liability for direct, indirect, incidental, special, exemplary, + or consequential damages, which may result from the use of the PNG + Reference Library, even if advised of the possibility of such damage. + + Permission is hereby granted to use, copy, modify, and distribute this + source code, or portions hereof, for any purpose, without fee, subject + to the following restrictions: + + 1. The origin of this source code must not be misrepresented. + + 2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + + 3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + + The Contributing Authors and Group 42, Inc. specifically permit, without + fee, and encourage the use of this source code as a component to + supporting the PNG file format in commercial products. If you use this + source code in a product, acknowledgment is not required but would be + appreciated. + + + A "png_get_copyright" function is available, for convenient use in "about" + boxes and the like: + + printf("%s",png_get_copyright(NULL)); + + Also, the PNG logo (in PNG format, of course) is supplied in the + files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + + Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a + certification mark of the Open Source Initiative. + + Glenn Randers-Pehrson + glennrp@users.sourceforge.net + September 12, 2004 + +=== zlib + +The directories modules/zlib/src and security/nss/cmd/zlib are licensed under +the following terms: + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + If you use the zlib library in a product, we would appreciate *not* + receiving lengthy legal documents to sign. The sources are provided + for free but without warranty of any kind. The library has been + entirely written by Jean-loup Gailly and Mark Adler; it does not + include third-party code. + + If you redistribute modified sources, we would appreciate that you include + in the file ChangeLog history information documenting your changes. Please + read the FAQ for more information on the distribution of modified source + versions. + +=== expat + +The directory parser/expat is licensed under the following terms: +(from parser/expat/COPYING) + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + Copyright (c) 2001, 2002 Expat maintainers. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9.install +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9.install @@ -0,0 +1,11 @@ +debian/tmp/etc/gre.d/1.9*.system.conf +debian/tmp/usr/lib/xulrunner-1.9*/[A-Zdabdf-oq-z]* +debian/tmp/usr/lib/xulrunner-1.9*/platform.ini +debian/tmp/usr/lib/xulrunner-1.9*/plugins usr/lib/xulrunner-addons +debian/tmp/usr/lib/xulrunner-1.9*/python +debian/tmp/usr/lib/xulrunner-1.9*/chrome +debian/tmp/usr/lib/xulrunner-1.9*/components/[A-Za-km-z]* +debian/tmp/usr/lib/xulrunner-1.9*/components/l[a-hj-z]* +debian/tmp/usr/lib/xulrunner-1.9*/components/libpyloader.so +debian/tmp/usr/lib/xulrunner-1.9*/components/libimgicon.so +debian/tmp/usr/lib/xulrunner-1.9*/components/libdbusservice.so --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9-dom-inspector.install +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9-dom-inspector.install @@ -0,0 +1,2 @@ +debian/tmp/usr/lib/xulrunner-1.9*/extensions/inspector@mozilla.org/[cdi]* usr/lib/xulrunner-addons/extensions/inspector@mozilla.org +debian/tmp/usr/lib/xulrunner-1.9*/extensions/inspector@mozilla.org/platform/Linux usr/lib/xulrunner-addons/extensions/inspector@mozilla.org/platform --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9.postrm.in +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9.postrm.in @@ -0,0 +1,19 @@ +#! /bin/sh + +set -e + +case "$1" in + remove|abort-install|purge|upgrade|failed-upgrade|abort-upgrade|disappear) + rm -f @XULDIR@/python/xpcom/__init__.pyo + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/MPL +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/MPL @@ -0,0 +1,567 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``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 ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + + ---------------------------------------------------------------------- + + AMENDMENTS + + The Netscape Public License Version 1.1 ("NPL") consists of the + Mozilla Public License Version 1.1 with the following Amendments, + including Exhibit A-Netscape Public License. Files identified with + "Exhibit A-Netscape Public License" are governed by the Netscape + Public License Version 1.1. + + Additional Terms applicable to the Netscape Public License. + I. Effect. + These additional terms described in this Netscape Public + License -- Amendments shall apply to the Mozilla Communicator + client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape + distributes and/or permits others to distribute under one or more + trademark(s) which are controlled by Netscape but which are not + licensed for use under this License. + + III. Netscape and logo. + This License does not grant any rights to use the trademarks + "Netscape", the "Netscape N and horizon" logo or the "Netscape + lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", + "Smart Browsing" even if such marks are included in the Original + Code or Modifications. + + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape + has licensed third party code for use in Netscape's Branded Code. + To the extent that Netscape is limited contractually from making + such third party code available under this License, Netscape may + choose to reintegrate such code into Covered Code without being + required to distribute such code in Source Code form, even if + such code would otherwise be considered "Modifications" under + this License. + + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to + the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the + Netscape's Branded Code which are released by Netscape + during the two (2) years following the release date of the + Original Code, without such additional products becoming + subject to the terms of this License, and may license such + additional products on different terms from those contained + in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded + Code, including Modifications incorporated therein, without + such Netscape Branded Code becoming subject to the terms of + this License, and may license such Netscape Branded Code on + different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the + provisions regarding litigation in Section 11(a), (b) and (c) of + the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. + + "The contents of this file are subject to the Netscape 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/NPL/ + + 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 Communicator client code, released + March 31, 1998. + + The Initial Developer of the Original Code is Netscape + Communications Corporation. Portions created by Netscape are + Copyright (C) 1998-1999 Netscape Communications Corporation. All + Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the + terms of the _____ license (the "[___] License"), in which case + the provisions of [______] License are applicable instead of + those above. If you wish to allow use of your version of this + file only under the terms of the [____] License and not to allow + others to use your version of this file under the NPL, indicate + your decision by deleting the provisions above and replace them + with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient + may use your version of this file under either the NPL or the + [___] License." --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/create-build-system.sh +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/create-build-system.sh @@ -0,0 +1,122 @@ +#!/bin/sh + +# Copyright (c) 2008 Fabien Tassin +# Description: Create a build-system for xulrunner applications +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +############################################################################ + +DIRS="config build toolkit/mozapps/installer" +FILES="configure.in aclocal.m4 allmakefiles.sh toolkit/xre/make-platformini.py nsprpub/config/make-system-wrappers.pl" + +NAME="build-system" + +SRCDIR=mozilla +if [ ! -d $SRCDIR ] ; then + if [ -d build-tree/mozilla ] ; then + SRCDIR=build-tree/mozilla + else + echo "Error: can't find mozilla dir" + exit 1 + fi +fi + +rm -rf $NAME debian/$NAME.tar.gz +mkdir -p $NAME +tar -C $SRCDIR -cf - $DIRS $FILES | tar -C $NAME -xf - +cat - > $NAME/Makefile.in <. +# Portions created by the Initial Developer are Copyright (C) 2007 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Fabien Tassin +# +# 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 ***** + +DEPTH = . +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include \$(DEPTH)/config/autoconf.mk + +include \$(topsrcdir)/config/config.mk + +default alldep all:: + \$(RM) -rf _tests + +TIERS += base + +# +# tier "base" - basic setup +# +tier_base_dirs = \\ + config \\ + build \\ + \$(NULL) + +include \$(topsrcdir)/\$(MOZ_BUILD_APP)/build.mk + +GARBAGE_DIRS += dist _javagen _profile _tests staticlib +DIST_GARBAGE = config.cache config.log config.status config-defs.h \\ + dependencies.beos config/autoconf.mk config/myrules.mk config/myconfig.mk \\ + unallmakefiles mozilla-config.h \\ + netwerk/necko-config.h xpcom/xpcom-config.h xpcom/xpcom-private.h \\ + \$(topsrcdir)/.mozconfig.mk \$(topsrcdir)/.mozconfig.out + +# Build pseudo-external modules first when export is explicitly called +export:: + \$(MAKE) -C config export + \$(MAKE) tier_nspr + +include \$(topsrcdir)/config/rules.mk + +distclean:: + cat unallmakefiles | \$(XARGS) rm -f + rm -f unallmakefiles \$(DIST_GARBAGE) +EOF + +tar -C $NAME -zcvf debian/$NAME.tar.gz . +rm -rf $NAME --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9.postinst +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9.postinst @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +GRE_VERSION=`/usr/bin/xulrunner-1.9 --gre-version` + +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then + /usr/sbin/update-alternatives --install /usr/bin/xulrunner \ + xulrunner /usr/bin/xulrunner-1.9 50 + if test -e /usr/lib/xulrunner-$GRE_VERSION/.autoreg; then + touch /usr/lib/xulrunner-$GRE_VERSION/.autoreg + fi +fi + +#DEBHELPER# --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/system-greprefs.js +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/system-greprefs.js @@ -0,0 +1,6 @@ +// +// insert your system greprefs here +// + +// pref("general.config.filename", "defaults/syspref/system.cfg"); + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9-dev.install +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9-dev.install @@ -0,0 +1,6 @@ +debian/tmp/usr/include/xulrunner-1.9*/ +debian/tmp/usr/share/idl/xulrunner-1.9*/ +debian/tmp/usr/lib/xulrunner-devel-1.9*/ + +debian/tmp/usr/lib/pkgconfig/* /usr/lib/pkgconfig/ + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9.dirs +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9.dirs @@ -0,0 +1,7 @@ +# ubuntu global extension and plugin directories +usr/lib/xulrunner-addons/extensions +usr/lib/xulrunner-addons/plugins + +# distro independent extensions directories for third party installer +usr/lib/mozilla/extensions +usr/share/mozilla/extensions --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/compat +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/compat @@ -0,0 +1 @@ +5 --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/control +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/control @@ -0,0 +1,103 @@ +Source: xulrunner-1.9 +Section: devel +Priority: optional +Maintainer: Ubuntu Mozilla Team +Homepage: http://developer.mozilla.org/en/docs/XULRunner +Vcs-Bzr: https://code.launchpad.net/~mozillateam/xulrunner/xulrunner-1.9.dev +Build-Depends: cdbs, debhelper (>= 5.0.37.2), dpkg-dev (>= 1.13.19), quilt, + autoconf2.13, autotools-dev, + libx11-dev (>= 2:1.0), libxt-dev, + libidl-dev, + libgtk2.0-dev (>= 2.12), libglib2.0-dev (>= 2.12), + libstartup-notification0-dev, + libgnomevfs2-dev (>= 1:2.16), libgnome2-dev (>= 2.16), libgnomeui-dev (>= 2.16), + libdbus-1-dev (>= 1.0.0), libdbus-glib-1-dev (>= 0.60), + libhal-dev (>= 0.5.8), + libcairo2-dev, + libpixman-1-dev, + libpng12-dev (>= 1.2.0), + libjpeg62-dev (>= 6b), + zlib1g-dev (>= 1:1.2.3), libbz2-dev, zip, + libreadline5-dev | libreadline-dev, + libkrb5-dev, + python-dev, python-support (>= 0.3), + binutils (>= 2.17-1) [mips mipsel], + libhunspell-dev (>= 1.1.5-2), + libnspr4-dev (>= 4.7.1~beta2), libnss3-dev (>= 3.12.0~beta3), + libsqlite3-dev, + mozilla-devscripts (>= 0.06~) +Standards-Version: 3.7.3 + +Package: xulrunner-1.9 +Section: devel +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Conflicts: j2re1.4 +Breaks: epiphany-gecko (<< 2.22.1.1-0ubuntu1.8.04.1), + yelp (<< 2.22.1-0ubuntu2.8.04.1), + midbrowser (<< 0.3.0rc1), + devhelp (<< 0.19-1ubuntu1.8.04.1), + firefox-3.0 (<< 3.0.1) +Description: XUL + XPCOM application runner + XULRunner is a single "gecko runtime" that can be used to bootstrap + multiple XUL + XPCOM applications that are as rich as Firefox and + Thunderbird. + . + XUL is Mozilla's XML based User Interface language that lets you build + feature-rich cross platform applications. These applications are easily + customized with alternative text, graphics and layout so that they can be + readily branded or localized for various markets. Web developers already + familiar with Dynamic HTML (DHTML) will learn XUL quickly and can start + building applications right away. + . + XPCOM is a cross platform component model. It has multiple language + bindings and IDL descriptions so programmers can plug their custom + functionality into the framework and connect it with other components. + +Package: xulrunner-1.9-dev +Section: devel +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, xulrunner-1.9 (>= ${source:Upstream-Version}), libnspr4-dev, libnss3-dev +Conflicts: libxul-dev, mozilla-dev +Description: XUL + XPCOM development files + This package contains the development headers, idl files and static libraries + needed to develop applications using Mozilla XUL Engine + +Package: xulrunner-1.9-gnome-support +Section: devel +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, xulrunner-1.9 (= ${binary:Version}) +Description: Support for Gnome in xulrunner-1.9 applications + This is an extension to xulrunner-1.9 that allows XUL applications to use + protocol handlers from Gnome-VFS, such as smb or sftp, and other Gnome + integration features. + +Package: xulrunner-1.9-dom-inspector +Architecture: all +Depends: xulrunner-1.9 +Conflicts: firefox-3.0-dom-inspector (<< 3.0~alpha8-0) +Replaces: firefox-3.0-dom-inspector +Description: tool for inspecting the DOM of pages in Mozilla Firefox + This is a tool that allows you to inspect the DOM for web pages in + Firefox. This is of great use to people who are doing Mozilla chrome + development or web page development. + . + This extension is provided by XULRunner for use by any XUL application. + +Package: xulrunner-1.9-venkman +Architecture: all +Depends: xulrunner-1.9 +Conflicts: firefox-3.0-venkman (<< 3.0~alpha8-0) +Replaces: firefox-3.0-venkman +Description: Venkman is Mozilla-based JavaScript debugger + Venkman is both a graphic and a console JavaScript debugger for Firefox + and Mozilla-based products. Features such as breakpoint management, call stack + inspection, and variable/object inspection are available from the user + interface and from console commands, letting you work in the way you are most + accustomed to. The interactive console also allows for execution of arbitrary + JavaScript code. + Venkman's keyboard shortcuts are the same as leading visual debugging + environments, and gdb users should be familiar with Venkman's /break, /step, + /next, /finish, /frame, and /where commands. + . + This extension is provided by XULRunner for use by any XUL application. --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/docs +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/docs @@ -0,0 +1 @@ +debian/MPL --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/xulrunner-1.9-gnome-support.install +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/xulrunner-1.9-gnome-support.install @@ -0,0 +1,2 @@ +debian/tmp/usr/lib/xulrunner-1.9*/components/libmozgnome.so +debian/tmp/usr/lib/xulrunner-1.9*/components/libnkgnomevfs.so --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/rules +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/rules @@ -0,0 +1,169 @@ +#!/usr/bin/make -f + +MOZ_CVS_ROOT := :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH) +DEB_MOZ_VERSION=1.9 +DEB_MOZ_APPLICATION=xulrunner-$(DEB_MOZ_VERSION) + +DEBIAN_VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version: *\(.*\)$$/\1/ p') +DEBIAN_UPSTREAM_VERSION := $(shell echo $(DEBIAN_VERSION) | sed 's/^\(.*\)-[^-]*$$/\1/') +DEBIAN_REV_CODE := $(shell echo $(DEBIAN_VERSION) | sed 's/^.*-\([0-9]*\)[^-]*$$/0\1/ ; s/^.*\(..\)$$/\1/') +DEBIAN_XUL_VER = $(shell tail -1 mozilla/config/milestone.txt) +DEBIAN_XUL_DIR = /usr/lib/xulrunner-$(DEBIAN_XUL_VER) +DEB_SRCDIR := mozilla + +EM_TRANSLATION_VERSION = $(DEBIAN_XUL_VER) +EM_TRANSLATION_MIN_VERSION = 1.9 +EM_TRANSLATION_MAX_VERSION = 1.9.0.* + +EXTRA_SYSTEM_CONFIGURE_FLAGS = $(NULL) + +USE_SYSTEM_CAIRO := $(shell pkg-config --exists 'cairo >= 1.5.8'; a=$$?; if test $$a != 1; then echo 1; fi) +# for old cairo versions we cannot use system cairo +ifeq (1,$(USE_SYSTEM_CAIRO)) + EXTRA_SYSTEM_CONFIGURE_FLAGS += --enable-system-cairo +else + EXTRA_SYSTEM_CONFIGURE_FLAGS += --disable-system-cairo +endif + +USE_SYSTEM_SQLITE := $(shell pkg-config --exists 'sqlite3 >= 3.5'; a=$$?; if test $$a != 1; then echo 1; fi) +ifeq (1,$(USE_SYSTEM_SQLITE)) + EXTRA_SYSTEM_CONFIGURE_FLAGS += --enable-system-sqlite +else + EXTRA_SYSTEM_CONFIGURE_FLAGS += --disable-system-sqlite +endif + +# gutsy doesn't have the right system-nss/nspr +USE_SYSTEM_NSPR := $(shell pkg-config --exists 'nspr >= 4.7'; a=$$?; if test $$a != 1; then echo 1; fi) +ifeq (1,$(USE_SYSTEM_NSPR)) + EXTRA_SYSTEM_CONFIGURE_FLAGS += --with-system-nspr +endif + +USE_SYSTEM_NSS := $(shell pkg-config --exists 'nss >= 3.12'; a=$$?; if test $$a != 1; then echo 1; fi) +ifeq (1,$(USE_SYSTEM_NSS)) + EXTRA_SYSTEM_CONFIGURE_FLAGS += --with-system-nss +endif + +# translation flags + +MOZ_TRANSLATION_AUTO_XPI_OUTDIR := debian/lp-export-xpis/ +MOZ_TRANSLATION_AUTO_XPI_SEARCHDIRS := debian/$(DEB_MOZ_APPLICATION) +MOZ_TRANSLATION_AUTO_XPI_LOCALE := en-US + +# workaround multiple crashes in xulrunner in Intrepid (at least 3 in realpath()) +# caused by Intrepid shipping gcc 4.3 with -D_FORTIFY_SOURCE=2 by default +CPPFLAGS=-U_FORTIFY_SOURCE +export CPPFLAGS +$(warning export CPPFLAGS=$(CPPFLAGS)) + +DEB_AUTO_UPDATE_AUTOCONF=2.13 + +# workaround cdbs wrongly unapplying patches before cleaning up +clean:: + [ ! -f $(DEB_SRCDIR)/Makefile ] || $(MAKE) -C $(DEB_SRCDIR) distclean + +ifneq (,$(wildcard *.tar.bz2)$(DEBIAN_MOZCLIENT_EMBEDDED)) + DEB_TAR_SRCDIR := mozilla + MOZCLIENT_EMBEDDED = 1 + DEBIAN_XUL_DIR = /usr/lib/xulrunner-$(shell tail -1 build-tree/mozilla/config/milestone.txt) + include /usr/share/cdbs/1/rules/tarball.mk +endif +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/patchsys-quilt.mk +include /usr/share/cdbs/1/class/autotools.mk +include /usr/share/mozilla-devscripts/$(DEB_MOZ_APPLICATION).mk +include /usr/share/mozilla-devscripts/lp-locale-export.mk + +DEB_MAKE_CLEAN_TARGET = $(NULL) +# We don't want build-tree/mozilla/README to be shipped as a doc +DEB_INSTALL_DOCS_ALL := $(NULL) +MOZ_APPLICATION = xulrunner + +# List all extensions we want +DEB_MOZ_EXTENSIONS=xml-rpc,venkman,inspector,irc,gnomevfs,cview,tasks,reporter,python/xpcom + +CFLAGS = -g +CXXFLAGS = -g + +DEB_CONFIGURE_USER_FLAGS= \ + $(EXTRA_SYSTEM_CONFIGURE_FLAGS) \ + --enable-application=$(MOZ_APPLICATION) \ + --enable-extensions=$(DEB_MOZ_EXTENSIONS) \ + --enable-webservices \ + --enable-safe-browsing \ + --with-default-mozilla-five-home=$(DEBIAN_XUL_DIR) \ + --enable-startup-notification \ + --with-user-appdir=.mozilla \ + --without-system-jpeg \ + --with-system-zlib=/usr \ + --with-system-bz2=/usr \ + --enable-system-hunspell \ + --disable-javaxpcom \ + --disable-crashreporter \ + --disable-elf-dynstr-gc \ + --disable-installer \ + --disable-strip \ + --disable-strip-libs \ + --disable-install-strip \ + --disable-tests \ + --disable-mochitest \ + --disable-updater \ + --enable-optimize \ + --with-distribution-id=com.ubuntu \ + $(NULL) + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + DEB_CONFIGURE_USER_FLAGS += \ + --disable-optimize \ + $(NULL) +endif + +ifeq (1,$(USE_SYSTEM_NSS)) +binary-install/$(DEB_MOZ_APPLICATION):: + dh_link usr/lib/nss/libnssckbi.so $(DEBIAN_XUL_DIR)/libnssckbi.so +endif + +binary-install/$(DEB_MOZ_APPLICATION):: + touch debian/xulrunner-$(DEB_MOZ_VERSION)/$(DEBIAN_XUL_DIR)/.autoreg + dh_link usr/lib/xulrunner-addons/extensions $(DEBIAN_XUL_DIR)/extensions + dh_link usr/lib/xulrunner-addons/plugins $(DEBIAN_XUL_DIR)/plugins + dh_link $(DEBIAN_XUL_DIR)/xulrunner /usr/bin/$(DEB_MOZ_APPLICATION) + dh_link $(DEBIAN_XUL_DIR)/xpcshell /usr/bin/xpcshell-$(DEB_MOZ_VERSION) + dh_link $(DEBIAN_XUL_DIR)/libsqlite3.so $(DEBIAN_XUL_DIR)/libsqlite3.so.0 + dh_install debian/system-greprefs.js /etc/xulrunner-1.9/ + dh_link /etc/xulrunner-1.9/system-grepref.js $(DEBIAN_XUL_DIR)/greprefs/system-greprefs.js + dh_link usr/include/nspr/ usr/include/xulrunner-$(DEBIAN_XUL_VER)/stable/nspr + dh_link usr/include/nspr/ usr/include/xulrunner-$(DEBIAN_XUL_VER)/unstable/nspr + dh_link usr/include/nss/ usr/include/xulrunner-$(DEBIAN_XUL_VER)/stable/nss + dh_link usr/include/nss/ usr/include/xulrunner-$(DEBIAN_XUL_VER)/unstable/nss + +LOCALE_VERSION = $(shell echo $(DEBIAN_VERSION) | sed -e 's/~cvs.*/pre/' | tr -d '~') + +binary-post-install/$(DEB_MOZ_APPLICATION):: auto-locale-xpi.mk/translate compare + dh_install -p$(DEB_MOZ_APPLICATION)-dev debian/build-system.tar.gz /usr/lib/xulrunner-devel-$(DEBIAN_XUL_VER)/sdk/ + sed \ + -e 's/@EM_VERSION@/$(EM_TRANSLATION_VERSION)/' \ + -e 's/@EM_TOOLKIT_MIN_VERSION@/$(EM_TRANSLATION_MIN_VERSION)/' \ + -e 's/@EM_TOOLKIT_MAX_VERSION@/$(EM_TRANSLATION_MAX_VERSION)/' \ + < debian/translation-support/install.rdf.in > debian/install.rdf + cd debian && zip lp-export-xpis/en-US.xpi install.rdf +ifeq (,$(findstring $(EM_TRANSLATION_VERSION), $(LOCALE_VERSION))) + $(error EM_TRANSLATION_VERSION=$(EM_TRANSLATION_VERSION) LOCALE_VERSION=$(LOCALE_VERSION). You need to explicitly adjust the translation version and min/max bounds.) +endif + +post-patches:: debian/$(DEB_MOZ_APPLICATION).postrm + # Create a build-system for xulrunner applications + sh debian/create-build-system.sh + +debian/$(DEB_MOZ_APPLICATION).postrm: debian/$(DEB_MOZ_APPLICATION).postrm.in + sed -e 's,@XULDIR@,$(DEBIAN_XUL_DIR),g' < debian/$(DEB_MOZ_APPLICATION).postrm.in \ + > debian/$(DEB_MOZ_APPLICATION).postrm + +clean:: + rm -f debian/$(DEB_MOZ_APPLICATION).postrm debian/install.rdf + rm -f debian/build-system.tar.gz --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX-dont-reset-user-prefs-on-upgrade.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX-dont-reset-user-prefs-on-upgrade.patch @@ -0,0 +1,102 @@ + +This bug is due to the fact, applications are restarted before extension +defaults are loaded. + +To reproduce, choose any preference and set the values like: +system default: + pref("prefkey",systemvalue); +extension default: + pref("prefkey", extensiondefault); +user pref: + user_pref("prefkey", systemvalue); + +Next, trigger application behaviour similar to upgrade by removing compreg.dat +from profile and start the application. + +Result: +User sees extensiondefault after upgrade, because the user_pref has been +eliminated ... which is definitly not what the user expects because he explicitly +had *systemvalue* set before the upgrade. + +Evaluation: +The bug happens because restart is performed *before* extension defaults have been +loaded and the prefapi.cpp always eliminate user preference if the user preference +is equal to the actual default (which happens to be extensiondefault normally - so +no reset, but is systemvalue during restart). + +Fix: +1. savePrefs should not try to be smart ... this patch removes the heuristic that guesses +whether a setting can be eliminated or not; it should be sufficient to only eliminate +prefs in hashPrefs. + +2. This patch prevents hashPrefs from eliminating the user pref in case we are in +*startup* ... unfortunately no such state info exists, which lets us guess that +we are in startup for the previously not dealt case: !set_default && +!pref_ValueChanged(pref->defaultPref, value, type) && !PREF_HAS_USER_VALUE(pref). + +If is the case we explicitly remember that this setting is a user-pref ... +even though it might be temporarily equal to the default pref. + +--- + modules/libpref/src/prefapi.cpp | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +Index: mozilla/modules/libpref/src/prefapi.cpp +=================================================================== +--- mozilla.orig/modules/libpref/src/prefapi.cpp 2006-07-14 02:58:20.000000000 +0200 ++++ mozilla/modules/libpref/src/prefapi.cpp 2007-07-20 13:07:53.000000000 +0200 +@@ -319,23 +319,20 @@ + if (!pref) + return PL_DHASH_NEXT; + + nsCAutoString prefValue; + + // where we're getting our pref from + PrefValue* sourcePref; + +- if (PREF_HAS_USER_VALUE(pref) && +- pref_ValueChanged(pref->defaultPref, +- pref->userPref, +- (PrefType) PREF_TYPE(pref))) +- sourcePref = &pref->userPref; +- else if (PREF_IS_LOCKED(pref)) ++ if (PREF_IS_LOCKED(pref)) + sourcePref = &pref->defaultPref; ++ else if (PREF_HAS_USER_VALUE(pref)) ++ sourcePref = &pref->userPref; + else + // do not save default prefs that haven't changed + return PL_DHASH_NEXT; + + #if MOZ_PROFILESHARING + if ((argData->saveTypes == SAVE_SHARED && + !gSharedPrefHandler->IsPrefShared(pref->key)) || + (argData->saveTypes == SAVE_NONSHARED && +@@ -732,16 +729,27 @@ + Otherwise, set the user value only if it has changed */ + if ( !pref_ValueChanged(pref->defaultPref, value, type) ) + { + if (PREF_HAS_USER_VALUE(pref)) + { + pref->flags &= ~PREF_USERSET; + if (!PREF_IS_LOCKED(pref)) + valueChanged = PR_TRUE; ++ } else { ++ // this is tricky: we have !set_default ... ++ // thus we are setting a user pref; however the user ++ // pref set is same as *current default*; this normally ++ // means to un-set ... however since we have ++ // !PREF_HAS_USER_VALUE(pref) this can only be during ++ // startup ++ pref_SetValue(&pref->userPref, value, type); ++ pref->flags |= PREF_USERSET; ++ if (!PREF_IS_LOCKED(pref)) ++ valueChanged = PR_TRUE; + } + } + else if ( !PREF_HAS_USER_VALUE(pref) || + pref_ValueChanged(pref->userPref, value, type) ) + { + pref_SetValue(&pref->userPref, value, type); + pref->flags |= PREF_USERSET; + if (!PREF_IS_LOCKED(pref)) --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bz233371_att297343_fix_outofscreen_embed_tooltip.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bz233371_att297343_fix_outofscreen_embed_tooltip.patch @@ -0,0 +1,137 @@ +Index: embedding/browser/gtk/src/EmbedWindow.cpp +=================================================================== +RCS file: /cvsroot/mozilla/embedding/browser/gtk/src/EmbedWindow.cpp,v +retrieving revision 1.43 +diff -u -p -8 -r1.43 EmbedWindow.cpp +--- a/embedding/browser/gtk/src/EmbedWindow.cpp 11 Jan 2008 22:16:15 -0000 1.43 ++++ b/embedding/browser/gtk/src/EmbedWindow.cpp 16 Jan 2008 00:08:24 -0000 +@@ -379,72 +379,95 @@ tooltips_paint_window(GtkWidget *window) + + return FALSE; + } + + NS_IMETHODIMP + EmbedWindow::OnShowTooltip(PRInt32 aXCoords, PRInt32 aYCoords, + const PRUnichar *aTipText) + { +- nsAutoString tipText ( aTipText ); +- +- const char* tipString = ToNewUTF8String(tipText); ++ NS_ENSURE_STATE(mOwner && mOwner->mOwningWidget && ++ GTK_WIDGET_REALIZED(mOwner->mOwningWidget)); + + if (sTipWindow) + gtk_widget_destroy(sTipWindow); + +- // get the root origin for this content window +- nsCOMPtr mainWidget; +- mBaseWindow->GetMainWidget(getter_AddRefs(mainWidget)); +- GdkWindow *window; +- window = static_cast(mainWidget->GetNativeData(NS_NATIVE_WINDOW)); +- gint root_x, root_y; +- gdk_window_get_origin(window, &root_x, &root_y); +- +- // XXX work around until I can get pink to figure out why +- // tooltips vanish if they show up right at the origin of the +- // cursor. +- root_y += 10; + + sTipWindow = gtk_window_new(GTK_WINDOW_POPUP); ++ GtkWindow *tipWinAsWindow = GTK_WINDOW(sTipWindow); ++ + gtk_widget_set_app_paintable(sTipWindow, TRUE); +- gtk_window_set_resizable(GTK_WINDOW(sTipWindow), TRUE); ++ gtk_window_set_resizable(tipWinAsWindow, FALSE); + // needed to get colors + fonts etc correctly + gtk_widget_set_name(sTipWindow, "gtk-tooltips"); ++ gtk_container_set_border_width(GTK_CONTAINER(sTipWindow), 4); + + // set up the popup window as a transient of the widget. +- GtkWidget *toplevel_window; +- toplevel_window = gtk_widget_get_toplevel(GTK_WIDGET(mOwner->mOwningWidget)); +- if (!GTK_WINDOW(toplevel_window)) { ++ GtkWidget *widget = (GtkWidget *) mOwner->mOwningWidget; ++ GtkWidget *toplevel = gtk_widget_get_toplevel(widget); ++ if (!GTK_IS_WINDOW(toplevel) || !GTK_WIDGET_TOPLEVEL(toplevel)) { + NS_ERROR("no gtk window in hierarchy!\n"); + return NS_ERROR_FAILURE; + } +- gtk_window_set_transient_for(GTK_WINDOW(sTipWindow), +- GTK_WINDOW(toplevel_window)); ++ gtk_window_set_transient_for(tipWinAsWindow, GTK_WINDOW(toplevel)); + +- // realize the widget +- gtk_widget_realize(sTipWindow); +- +- g_signal_connect(G_OBJECT(sTipWindow), "expose_event", +- G_CALLBACK(tooltips_paint_window), NULL); ++ g_signal_connect (sTipWindow, "expose-event", ++ G_CALLBACK(tooltips_paint_window), NULL); + + // set up the label for the tooltip +- GtkWidget *label = gtk_label_new(tipString); ++ GtkWidget *label = gtk_label_new(NS_ConvertUTF16toUTF8(aTipText).get()); + // wrap automatically + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); ++ gtk_misc_set_alignment (GTK_MISC(label), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(sTipWindow), label); +- gtk_container_set_border_width(GTK_CONTAINER(sTipWindow), 4); +- // set the coords for the widget +- gtk_widget_set_uposition(sTipWindow, aXCoords + root_x, +- aYCoords + root_y); ++ gtk_widget_show(label); ++ ++ GdkScreen *screen = gtk_widget_get_screen(widget); ++ gtk_window_set_screen (tipWinAsWindow, screen); ++ ++ gint monitor_num = gdk_screen_get_monitor_at_window(screen, widget->window); ++ if (monitor_num < 0) ++ monitor_num = 0; ++ ++ GdkRectangle monitor; ++ gdk_screen_get_monitor_geometry(screen, monitor_num, &monitor); ++ ++ gtk_widget_ensure_style(sTipWindow); ++ ++ GtkRequisition req; ++ gtk_widget_size_request(sTipWindow, &req); ++ ++ gint x, y; ++ gdk_window_get_origin(widget->window, &x, &y); ++ ++ x += aXCoords; ++ y += aYCoords; ++ ++ // Ideally we'd query the cursor size and hotspot, ++ // but there appears to be no way to do that */ ++ int xoffset = 8, yoffset = 8; ++ ++ if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL) { ++ x -= req.width + xoffset; ++ } else { ++ x += xoffset; ++ } + +- // and show it. +- gtk_widget_show_all(sTipWindow); ++ if (x + req.width > monitor.x + monitor.width) ++ x = monitor.x + monitor.width - req.width; ++ else if (x < monitor.x) ++ x = monitor.x; ++ ++ if (y + req.height + yoffset <= monitor.y + monitor.height) ++ y += yoffset; ++ else ++ y -= req.height + yoffset; + +- nsMemory::Free( (void*)tipString ); ++ gtk_window_move(tipWinAsWindow, x, y); ++ gtk_widget_show(sTipWindow); + + return NS_OK; + } + + NS_IMETHODIMP + EmbedWindow::OnHideTooltip(void) + { + if (sTipWindow) --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX_pc_honour_system_nspr_nss.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX_pc_honour_system_nspr_nss.patch @@ -0,0 +1,114 @@ +--- + xulrunner/installer/Makefile.in | 17 ++++++++++++++--- + xulrunner/installer/libxul-embedding-unstable.pc.in | 2 +- + xulrunner/installer/libxul-embedding.pc.in | 2 +- + xulrunner/installer/mozilla-nss.pc.in | 6 +++--- + 4 files changed, 19 insertions(+), 8 deletions(-) + +Index: mozilla/xulrunner/installer/Makefile.in +=================================================================== +--- mozilla.orig/xulrunner/installer/Makefile.in ++++ mozilla/xulrunner/installer/Makefile.in +@@ -90,40 +90,51 @@ + mozilla-plugin.pc \ + mozilla-gtkmozembed.pc \ + mozilla-gtkmozembed-embedding.pc \ + $(NULL) + + ifdef MOZ_NATIVE_NSPR + NSPR_NAME=nspr + NSPR_VERSION=$(shell $(NSPR_CONFIG) --version) ++FULL_NSPR_CFLAGS=$(shell $(NSPR_CONFIG) --cflags) ++FULL_NSPR_LIBS=$(shell $(NSPR_CONFIG) --libs) + else +-pkg_config_files += mozilla-nspr.pc + NSPR_NAME=mozilla-nspr + FULL_NSPR_CFLAGS=-I\$${includedir}/stable + FULL_NSPR_LIBS=$(subst $(prefix),\$${sdkdir},$(shell $(DEPTH)/nsprpub/config/nspr-config --libs)) + NSPR_VERSION=$(shell $(DEPTH)/nsprpub/config/nspr-config --version) + endif ++pkg_config_files += mozilla-nspr.pc + + $(warning FULL_NSPR_CFLAGS=$(FULL_NSPR_CFLAGS)) + +-ifndef MOZ_NATIVE_NSS +-pkg_config_files += mozilla-nss.pc ++ifdef MOZ_NATIVE_NSS ++NSPR_VERSION=$(shell $(NSS_CONFIG) --version) ++FULL_NSS_CFLAGS=$(shell $(NSS_CONFIG) --cflags) ++FULL_NSS_LIBS=$(shell $(NSS_CONFIG) --libs) ++else ++NSS_VERSION=$(shell $(DEPTH)/nsprpub/config/nss-config --version) ++FULL_NSS_CFLAGS=-I\$${includedir}/stable ++FULL_NSS_LIBS=$(subst $(prefix),\$${sdkdir},$(shell $(DEPTH)/nsprpub/config/nss-config --libs)) + endif ++pkg_config_files += mozilla-nss.pc + + %.pc: $(srcdir)/%.pc.in Makefile.in Makefile $(DEPTH)/config/autoconf.mk + cat $< | sed \ + -e "s|%prefix%|$(prefix)|" \ + -e "s|%includedir%|$(includedir)|" \ + -e "s|%idldir%|$(idldir)|" \ + -e "s|%sdkdir%|$(sdkdir)|" \ + -e "s|%MOZ_APP_NAME%|$(MOZ_APP_NAME)|" \ + -e "s|%MOZILLA_VERSION%|$(MOZ_APP_VERSION)|" \ + -e "s|%FULL_NSPR_LIBS%|$(FULL_NSPR_LIBS)|" \ + -e "s|%FULL_NSPR_CFLAGS%|$(FULL_NSPR_CFLAGS)|" \ ++ -e "s|%FULL_NSS_LIBS%|$(FULL_NSS_LIBS)|" \ ++ -e "s|%FULL_NSS_CFLAGS%|$(FULL_NSS_CFLAGS)|" \ + -e "s|%NSPR_NAME%|$(NSPR_NAME)|" \ + -e "s|%NSPR_VERSION%|$(NSPR_VERSION)|" > $@ + chmod 644 $@ + + install:: $(pkg_config_files) + @echo pkg_config_file: $(pkg_config_files) + $(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(libdir)/pkgconfig + +Index: mozilla/xulrunner/installer/libxul-embedding-unstable.pc.in +=================================================================== +--- mozilla.orig/xulrunner/installer/libxul-embedding-unstable.pc.in ++++ mozilla/xulrunner/installer/libxul-embedding-unstable.pc.in +@@ -3,9 +3,9 @@ + includedir=%includedir% + idldir=%idldir% + includetype=unstable + + Name: libxul-embedding-unstable + Description: Static library for version-independent embedding of the Mozilla runtime (unstable API) + Version: %MOZILLA_VERSION% + Libs: -L${sdkdir}/lib -lxpcomglue +-Cflags: -DXPCOM_GLUE -I${includedir}/${includetype} -fshort-wchar ++Cflags: -DXPCOM_GLUE -I${includedir}/${includetype} -fshort-wchar %FULL_NSPR_CFLAGS% +Index: mozilla/xulrunner/installer/libxul-embedding.pc.in +=================================================================== +--- mozilla.orig/xulrunner/installer/libxul-embedding.pc.in ++++ mozilla/xulrunner/installer/libxul-embedding.pc.in +@@ -7,9 +7,9 @@ + # Note: the default pkg-config cflags will only list include directories + # that contain stable (frozen or safe for linking) header files. To include + # nonfrozen headers, run pkg-config with --define-variable=includetype=unstable + + Name: libxul-embedding + Description: Static library for version-independent embedding of the Mozilla runtime + Version: %MOZILLA_VERSION% + Libs: -L${sdkdir}/lib -lxpcomglue +-Cflags: -DXPCOM_GLUE -I${includedir}/${includetype} -fshort-wchar ++Cflags: -DXPCOM_GLUE -I${includedir}/${includetype} -fshort-wchar %FULL_NSPR_CFLAGS% +Index: mozilla/xulrunner/installer/mozilla-nss.pc.in +=================================================================== +--- mozilla.orig/xulrunner/installer/mozilla-nss.pc.in ++++ mozilla/xulrunner/installer/mozilla-nss.pc.in +@@ -1,10 +1,10 @@ + prefix=%prefix% + sdkdir=%sdkdir% + includedir=%includedir% + + Name: NSS + Description: Mozilla Network Security Services +-Version: %MOZILLA_VERSION% ++Version: %NSS_VERSION% + Requires: %NSPR_NAME% >= %NSPR_VERSION% +-Libs: -L${sdkdir}/lib -lnss3 -lnssutil3 -lsmime3 -lssl3 -lsoftokn3 +-Cflags: -I${includedir}/stable ++Libs: %FULL_NSS_LIBS% ++Cflags: %FULL_NSS_CFLAGS% --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/add_syspref_dir.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/add_syspref_dir.patch @@ -0,0 +1,148 @@ +--- + modules/libpref/src/nsPrefService.cpp | 8 ++++++++ + toolkit/xre/nsXREDirProvider.cpp | 4 ++++ + xpcom/io/nsAppDirectoryServiceDefs.h | 1 + + xpcom/io/nsAppFileLocationProvider.cpp | 10 ++++++++++ + 4 files changed, 23 insertions(+) + +Index: mozilla/toolkit/xre/nsXREDirProvider.cpp +=================================================================== +--- mozilla.orig/toolkit/xre/nsXREDirProvider.cpp ++++ mozilla/toolkit/xre/nsXREDirProvider.cpp +@@ -609,16 +609,17 @@ + nsCOMPtr subdir; + while (NS_SUCCEEDED(files->GetNextFile(getter_AddRefs(subdir))) && subdir) { + mAppBundleDirectories.AppendObject(subdir); + LoadPlatformDirectory(subdir, mAppBundleDirectories); + } + } + + static const char *const kAppendPrefDir[] = { "defaults", "preferences", nsnull }; ++static const char *const kAppendSysPrefDir[] = { "defaults", "syspref", nsnull }; + + #ifdef DEBUG_bsmedberg + static void + DumpFileArray(const char *key, + nsCOMArray dirs) + { + fprintf(stderr, "nsXREDirProvider::GetFilesInternal(%s)\n", key); + +@@ -665,16 +666,19 @@ + else if (!strcmp(aProperty, NS_APP_PREFS_DEFAULTS_DIR_LIST)) { + nsCOMArray directories; + + LoadBundleDirectories(); + + LoadAppDirIntoArray(mXULAppDir, kAppendPrefDir, directories); + LoadDirsIntoArray(mAppBundleDirectories, + kAppendPrefDir, directories); ++ LoadAppDirIntoArray(mXULAppDir, kAppendSysPrefDir, directories); ++ LoadDirsIntoArray(mAppBundleDirectories, ++ kAppendSysPrefDir, directories); + + rv = NS_NewArrayEnumerator(aResult, directories); + } + else if (!strcmp(aProperty, NS_EXT_PREFS_DEFAULTS_DIR_LIST)) { + nsCOMArray directories; + + LoadBundleDirectories(); + LoadDirsIntoArray(mExtensionDirectories, +Index: mozilla/modules/libpref/src/nsPrefService.cpp +=================================================================== +--- mozilla.orig/modules/libpref/src/nsPrefService.cpp ++++ mozilla/modules/libpref/src/nsPrefService.cpp +@@ -807,16 +807,24 @@ + #endif + }; + + rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, NS_ARRAY_LENGTH(specialFiles)); + if (NS_FAILED(rv)) { + NS_WARNING("Error parsing application default preferences."); + } + ++ /* now, parse the "application" default system preferences */ ++ rv = NS_GetSpecialDirectory(NS_APP_SYSPREF_DEFAULTS_50_DIR, getter_AddRefs(defaultPrefDir)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, NS_ARRAY_LENGTH(specialFiles)); ++ if (NS_FAILED(rv)) { ++ NS_WARNING("Error parsing application default preferences."); ++ } ++ + rv = pref_LoadPrefsInDirList(NS_APP_PREFS_DEFAULTS_DIR_LIST); + NS_ENSURE_SUCCESS(rv, rv); + + NS_CreateServicesFromCategory(NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID, + nsnull, NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID); + + nsCOMPtr observerService = + do_GetService("@mozilla.org/observer-service;1", &rv); +Index: mozilla/xpcom/io/nsAppDirectoryServiceDefs.h +=================================================================== +--- mozilla.orig/xpcom/io/nsAppDirectoryServiceDefs.h ++++ mozilla/xpcom/io/nsAppDirectoryServiceDefs.h +@@ -58,16 +58,17 @@ + // Files and directories which exist on a per-product basis + // -------------------------------------------------------------------------------------- + + #define NS_APP_APPLICATION_REGISTRY_FILE "AppRegF" + #define NS_APP_APPLICATION_REGISTRY_DIR "AppRegD" + + #define NS_APP_DEFAULTS_50_DIR "DefRt" // The root dir of all defaults dirs + #define NS_APP_PREF_DEFAULTS_50_DIR "PrfDef" ++#define NS_APP_SYSPREF_DEFAULTS_50_DIR "SysPrfDef" + #define NS_APP_PROFILE_DEFAULTS_50_DIR "profDef" // The profile defaults of the "current" + // locale. Should be first choice. + #define NS_APP_PROFILE_DEFAULTS_NLOC_50_DIR "ProfDefNoLoc" // The profile defaults of the "default" + // installed locale. Second choice + // when above is not available. + + #define NS_APP_USER_PROFILES_ROOT_DIR "DefProfRt" // The dir where user profile dirs live. + #define NS_APP_USER_PROFILES_LOCAL_ROOT_DIR "DefProfLRt" // The dir where user profile temp dirs live. +Index: mozilla/xpcom/io/nsAppFileLocationProvider.cpp +=================================================================== +--- mozilla.orig/xpcom/io/nsAppFileLocationProvider.cpp ++++ mozilla/xpcom/io/nsAppFileLocationProvider.cpp +@@ -98,16 +98,17 @@ + #ifdef XP_MACOSX + #define NS_MACOSX_USER_PLUGIN_DIR "OSXUserPlugins" + #define NS_MACOSX_LOCAL_PLUGIN_DIR "OSXLocalPlugins" + #define NS_MAC_CLASSIC_PLUGIN_DIR "MacSysPlugins" + #endif + + #define DEFAULTS_DIR_NAME NS_LITERAL_CSTRING("defaults") + #define DEFAULTS_PREF_DIR_NAME NS_LITERAL_CSTRING("pref") ++#define DEFAULTS_SYSPREF_DIR_NAME NS_LITERAL_CSTRING("syspref") + #define DEFAULTS_PROFILE_DIR_NAME NS_LITERAL_CSTRING("profile") + #define RES_DIR_NAME NS_LITERAL_CSTRING("res") + #define CHROME_DIR_NAME NS_LITERAL_CSTRING("chrome") + #define PLUGINS_DIR_NAME NS_LITERAL_CSTRING("plugins") + #define SEARCH_DIR_NAME NS_LITERAL_CSTRING("searchplugins") + + //***************************************************************************** + // nsAppFileLocationProvider::Constructor/Destructor +@@ -164,16 +165,25 @@ + { + rv = CloneMozBinDirectory(getter_AddRefs(localFile)); + if (NS_SUCCEEDED(rv)) { + rv = localFile->AppendRelativeNativePath(DEFAULTS_DIR_NAME); + if (NS_SUCCEEDED(rv)) + rv = localFile->AppendRelativeNativePath(DEFAULTS_PREF_DIR_NAME); + } + } ++ else if (nsCRT::strcmp(prop, NS_APP_SYSPREF_DEFAULTS_50_DIR) == 0) ++ { ++ rv = CloneMozBinDirectory(getter_AddRefs(localFile)); ++ if (NS_SUCCEEDED(rv)) { ++ rv = localFile->AppendRelativeNativePath(DEFAULTS_DIR_NAME); ++ if (NS_SUCCEEDED(rv)) ++ rv = localFile->AppendRelativeNativePath(DEFAULTS_SYSPREF_DIR_NAME); ++ } ++ } + else if (nsCRT::strcmp(prop, NS_APP_PROFILE_DEFAULTS_50_DIR) == 0 || + nsCRT::strcmp(prop, NS_APP_PROFILE_DEFAULTS_NLOC_50_DIR) == 0) + { + rv = CloneMozBinDirectory(getter_AddRefs(localFile)); + if (NS_SUCCEEDED(rv)) { + rv = localFile->AppendRelativeNativePath(DEFAULTS_DIR_NAME); + if (NS_SUCCEEDED(rv)) + rv = localFile->AppendRelativeNativePath(DEFAULTS_PROFILE_DIR_NAME); --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX_urlclassifier_prefs_in_toolkit.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX_urlclassifier_prefs_in_toolkit.patch @@ -0,0 +1,37 @@ +--- + toolkit/components/url-classifier/Makefile.in | 3 + toolkit/components/url-classifier/pref/url-classifier.js | 8 + + toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp | 62 +++++++--- + 3 files changed, 59 insertions(+), 14 deletions(-) + +Index: mozilla/toolkit/components/url-classifier/pref/url-classifier.js +=================================================================== +--- /dev/null ++++ mozilla/toolkit/components/url-classifier/pref/url-classifier.js +@@ -0,0 +1,8 @@ ++ ++// Maximum size of the sqlite3 cache during an update, in bytes ++#ifdef MOZ_WIDGET_GTK2 ++pref("urlclassifier.updatecachemax", 104857600); ++#else ++pref("urlclassifier.updatecachemax", -1); ++#endif ++ +Index: mozilla/toolkit/components/url-classifier/Makefile.in +=================================================================== +--- mozilla.orig/toolkit/components/url-classifier/Makefile.in ++++ mozilla/toolkit/components/url-classifier/Makefile.in +@@ -46,10 +46,13 @@ + DIRS = public src + + ifdef ENABLE_TESTS + ifndef MOZ_ENABLE_LIBXUL + TOOL_DIRS += tests + endif + endif + ++PREF_JS_EXPORTS = $(srcdir)/pref/url-classifier.js ++GARBAGE += $(addprefix $(DIST)/bin/defaults/pref/,url-classifier.js) ++ + include $(topsrcdir)/config/rules.mk + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/series +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/series @@ -0,0 +1,20 @@ +installer_use_stdout_for_missing_files.patch +dont_install_so_in_dev.patch +rename_venkman_addon.patch +protect_tests_by_ifdefs.patch +dom_inspector_support_for_prism.patch +bzXXX_pc_honour_system_nspr_nss.patch +bzXXX_no_zlib_export_if_native.patch +bzXXX_gre_extension_plugin_support.patch +bz233371_att297343_fix_outofscreen_embed_tooltip.patch +bzXXX_attXXX_fix_remember_password_for_embedders_without_branding.patch +#drop_bz418016.patch +#bzr423334_att310581_leak_initparser.patch +add_syspref_dir.patch +bzXXX_autoconfig_in_gre.patch +bzXXX_gre_autoreg.patch +bzXXX-dont-reset-user-prefs-on-upgrade.patch +#bz321315_gconf_backend_for_19.patch +bzXXX_urlclassifier_prefs_in_toolkit.patch +bz368428_attachment_308130.patch + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/dont_install_so_in_dev.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/dont_install_so_in_dev.patch @@ -0,0 +1,28 @@ +--- + toolkit/mozapps/installer/packager.mk | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Index: mozilla/toolkit/mozapps/installer/packager.mk +=================================================================== +--- mozilla.orig/toolkit/mozapps/installer/packager.mk ++++ mozilla/toolkit/mozapps/installer/packager.mk +@@ -419,17 +419,18 @@ + (cd $(DESTDIR)$(idldir)/stable && tar -xf -) + (cd $(DIST)/idl && tar $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DESTDIR)$(idldir)/unstable && tar -xf -) + # SDK directory is the libs + a bunch of symlinks + $(NSINSTALL) -D $(DESTDIR)$(sdkdir)/sdk/lib + if test -f $(DIST)/sdk/include/xpcom-config.h; then \ + $(SYSINSTALL) $(IFLAGS1) $(DIST)/sdk/include/xpcom-config.h $(DESTDIR)$(sdkdir); \ + fi +- (cd $(DIST)/sdk/lib && tar $(TAR_CREATE_FLAGS) - .) | (cd $(DESTDIR)$(sdkdir)/sdk/lib && tar -xf -) ++ (cd $(DIST)/sdk/lib && tar --exclude='*.so' $(TAR_CREATE_FLAGS) - .) | (cd $(DESTDIR)$(sdkdir)/sdk/lib && tar -xf -) ++ ln -s $(addprefix $(installdir)/,$(notdir $(wildcard $(DIST)/sdk/lib/*.so))) $(DESTDIR)$(sdkdir)/sdk/lib + $(RM) -f $(DESTDIR)$(sdkdir)/lib $(DESTDIR)$(sdkdir)/bin $(DESTDIR)$(sdkdir)/sdk/include $(DESTDIR)$(sdkdir)/include $(DESTDIR)$(sdkdir)/sdk/idl $(DESTDIR)$(sdkdir)/idl + ln -s $(sdkdir)/sdk/lib $(DESTDIR)$(sdkdir)/lib + ln -s $(installdir) $(DESTDIR)$(sdkdir)/bin + ln -s $(includedir)/stable $(DESTDIR)$(sdkdir)/sdk/include + ln -s $(includedir)/unstable $(DESTDIR)$(sdkdir)/include + ln -s $(idldir)/stable $(DESTDIR)$(sdkdir)/sdk/idl + ln -s $(idldir)/unstable $(DESTDIR)$(sdkdir)/idl + endif # INSTALL_SDK --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bz368428_attachment_308130.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bz368428_attachment_308130.patch @@ -0,0 +1,147 @@ + + * fix Bug 368428 – XUL FastLoad cache corruption when application running + while upgrading ... updated patch with "antiLockZipGrip" + +-- +--- + modules/libjar/nsJAR.cpp | 18 ++++++++++++++++-- + modules/libjar/nsJAR.h | 5 +++++ + 2 files changed, 21 insertions(+), 2 deletions(-) + +Index: mozilla/modules/libjar/nsJAR.cpp +=================================================================== +--- mozilla.orig/modules/libjar/nsJAR.cpp ++++ mozilla/modules/libjar/nsJAR.cpp +@@ -122,16 +122,17 @@ + + // The following initialization makes a guess of 10 entries per jarfile. + nsJAR::nsJAR(): mManifestData(nsnull, nsnull, DeleteManifestEntry, nsnull, 10), + mParsedManifest(PR_FALSE), + mGlobalStatus(JAR_MANIFEST_NOT_PARSED), + mReleaseTime(PR_INTERVAL_NO_TIMEOUT), + mCache(nsnull), + mLock(nsnull), ++ mMtime(0), + mTotalItemsInManifest(0) + { + } + + nsJAR::~nsJAR() + { + Close(); + } +@@ -162,26 +163,30 @@ + + //---------------------------------------------- + // nsIZipReader implementation + //---------------------------------------------- + + NS_IMETHODIMP + nsJAR::Open(nsIFile* zipFile) + { ++ NS_ENSURE_TRUE(zipFile, NS_ERROR_FAILURE); + if (mLock) return NS_ERROR_FAILURE; // Already open! + + mZipFile = zipFile; ++ nsresult rv = zipFile->GetLastModifiedTime(&mMtime); ++ if (NS_FAILED(rv)) return rv; ++ + mLock = PR_NewLock(); + NS_ENSURE_TRUE(mLock, NS_ERROR_OUT_OF_MEMORY); + + PRFileDesc *fd = OpenFile(); + NS_ENSURE_TRUE(fd, NS_ERROR_FAILURE); + +- nsresult rv = mZip.OpenArchive(fd); ++ rv = mZip.OpenArchive(fd); + if (NS_FAILED(rv)) Close(); + + return rv; + } + + NS_IMETHODIMP + nsJAR::GetFile(nsIFile* *result) + { +@@ -1116,35 +1121,44 @@ + #endif + } + + NS_IMETHODIMP + nsZipReaderCache::GetZip(nsIFile* zipFile, nsIZipReader* *result) + { + NS_ENSURE_ARG_POINTER(zipFile); + nsresult rv; ++ nsCOMPtr antiLockZipGrip; + nsAutoLock lock(mLock); + + #ifdef ZIP_CACHE_HIT_RATE + mZipCacheLookups++; + #endif + + nsCAutoString path; + rv = zipFile->GetNativePath(path); + if (NS_FAILED(rv)) return rv; + ++ PRInt64 Mtime; ++ rv = zipFile->GetLastModifiedTime(&Mtime); ++ if (NS_FAILED(rv)) return rv; ++ + nsCStringKey key(path); + nsJAR* zip = static_cast(static_cast(mZips.Get(&key))); // AddRefs +- if (zip) { ++ if (zip && Mtime == zip->GetMtime()) { + #ifdef ZIP_CACHE_HIT_RATE + mZipCacheHits++; + #endif + zip->ClearReleaseTime(); + } + else { ++ if (zip) { ++ antiLockZipGrip = zip; ++ mZips.Remove(&key); ++ } + zip = new nsJAR(); + if (zip == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(zip); + zip->SetZipReaderCache(this); + + rv = zip->Open(zipFile); + if (NS_FAILED(rv)) { +Index: mozilla/modules/libjar/nsJAR.h +=================================================================== +--- mozilla.orig/modules/libjar/nsJAR.h ++++ mozilla/modules/libjar/nsJAR.h +@@ -128,27 +128,32 @@ + void ClearReleaseTime() { + mReleaseTime = PR_INTERVAL_NO_TIMEOUT; + } + + void SetZipReaderCache(nsZipReaderCache* cache) { + mCache = cache; + } + ++ PRInt64 GetMtime() { ++ return mMtime; ++ } ++ + protected: + //-- Private data members + nsCOMPtr mZipFile; // The zip/jar file on disk + nsZipArchive mZip; // The underlying zip archive + nsObjectHashtable mManifestData; // Stores metadata for each entry + PRBool mParsedManifest; // True if manifest has been parsed + nsCOMPtr mPrincipal; // The entity which signed this file + PRInt16 mGlobalStatus; // Global signature verification status + PRIntervalTime mReleaseTime; // used by nsZipReaderCache for flushing entries + nsZipReaderCache* mCache; // if cached, this points to the cache it's contained in + PRLock* mLock; ++ PRInt64 mMtime; + PRInt32 mTotalItemsInManifest; + + //-- Private functions + PRFileDesc* OpenFile(); + + nsresult ParseManifest(); + void ReportError(const char* aFilename, PRInt16 errorCode); + nsresult LoadEntry(const char* aFilename, char** aBuf, --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/dom_inspector_support_for_prism.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/dom_inspector_support_for_prism.patch @@ -0,0 +1,34 @@ +--- + extensions/inspector/install.rdf | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Index: mozilla/extensions/inspector/install.rdf +=================================================================== +--- mozilla.orig/extensions/inspector/install.rdf ++++ mozilla/extensions/inspector/install.rdf +@@ -40,16 +40,25 @@ + + {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} + 2.0a + 2.0.* + + + + ++ ++ ++ prism@developer.mozilla.org ++ 0.4 ++ 1.0.0.* ++ ++ ++ ++ + + + toolkit@mozilla.org + 1.9a1 + 1.9.0.* + + + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX_gre_autoreg.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX_gre_autoreg.patch @@ -0,0 +1,82 @@ +Index: xpcom/build/nsXPComInit.cpp +=================================================================== +RCS file: /cvsroot/mozilla/xpcom/build/nsXPComInit.cpp,v +retrieving revision 1.261 +diff -u -p -8 -r1.261 nsXPComInit.cpp +--- a/xpcom/build/nsXPComInit.cpp 8 Mar 2008 09:50:29 -0000 1.261 ++++ b/xpcom/build/nsXPComInit.cpp 2 Apr 2008 20:39:53 -0000 +@@ -284,52 +284,63 @@ RegisterGenericFactory(nsIComponentRegis + // In order to support the installer, we need + // to be told out of band if we should cause + // an autoregister. If the file ".autoreg" exists in the binary + // directory, we check its timestamp against the timestamp of the + // compreg.dat file. If the .autoreg file is newer, we autoregister. + static PRBool CheckUpdateFile() + { + nsresult rv; +- nsCOMPtr file; ++ ++ nsCOMPtr pfile; + rv = nsDirectoryService::gService->Get(NS_XPCOM_CURRENT_PROCESS_DIR, + NS_GET_IID(nsIFile), +- getter_AddRefs(file)); +- ++ getter_AddRefs(pfile)); + if (NS_FAILED(rv)) { + NS_WARNING("Getting NS_XPCOM_CURRENT_PROCESS_DIR failed"); + return PR_FALSE; + } ++ pfile->AppendNative(nsDependentCString(".autoreg")); ++ PRBool pexists; ++ pfile->Exists(&pexists); + +- file->AppendNative(nsDependentCString(".autoreg")); +- +- PRBool exists; +- file->Exists(&exists); +- if (!exists) ++ ++ nsCOMPtr gfile; ++ rv = nsDirectoryService::gService->Get(NS_GRE_DIR, ++ NS_GET_IID(nsIFile), ++ getter_AddRefs(gfile)); ++ gfile->AppendNative(nsDependentCString(".autoreg")); ++ PRBool gexists; ++ gfile->Exists(&gexists); ++ ++ ++ if (!pexists && !gexists) + return PR_FALSE; + + nsCOMPtr compregFile; + rv = nsDirectoryService::gService->Get(NS_XPCOM_COMPONENT_REGISTRY_FILE, + NS_GET_IID(nsIFile), + getter_AddRefs(compregFile)); + + + if (NS_FAILED(rv)) { + NS_WARNING("Getting NS_XPCOM_COMPONENT_REGISTRY_FILE failed"); + return PR_FALSE; + } + ++ PRBool exists; + if (NS_FAILED(compregFile->Exists(&exists)) || !exists) + return PR_TRUE; + +- PRInt64 compregModTime, autoregModTime; ++ PRInt64 compregModTime, autoreg1ModTime, autoreg2ModTime; + compregFile->GetLastModifiedTime(&compregModTime); +- file->GetLastModifiedTime(&autoregModTime); ++ pfile->GetLastModifiedTime(&autoreg1ModTime); ++ gfile->GetLastModifiedTime(&autoreg2ModTime); + +- return LL_CMP(autoregModTime, >, compregModTime); ++ return LL_CMP(PR_MAX(autoreg1ModTime, autoreg2ModTime), >, compregModTime); + } + + + nsComponentManagerImpl* nsComponentManagerImpl::gComponentManager = NULL; + PRBool gXPCOMShuttingDown = PR_FALSE; + + // For each class that wishes to support nsIClassInfo, add a line like this + // NS_DECL_CLASSINFO(nsMyClass) --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzr423334_att310581_leak_initparser.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzr423334_att310581_leak_initparser.patch @@ -0,0 +1,30 @@ +--- + xulrunner/stub/nsXULStub.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +Index: mozilla/xulrunner/stub/nsXULStub.cpp +=================================================================== +--- mozilla.orig/xulrunner/stub/nsXULStub.cpp ++++ mozilla/xulrunner/stub/nsXULStub.cpp +@@ -231,17 +231,20 @@ + iniPath); + + greFound = (access(greDir, R_OK) == 0); + + strncpy(lastSlash, "application.ini", sizeof(iniPath) - (lastSlash - iniPath)); + + #endif + +- nsINIParser parser; ++ // Leak the INI parser intentionally, because it allocates memory using the ++ // libc malloc and, once we load libxul, would deallocate it using ++ // jemalloc free() ++ nsINIParser &parser = *new nsINIParser(); + rv = parser.Init(iniPath); + if (NS_FAILED(rv)) { + fprintf(stderr, "Could not read application.ini\n"); + return 1; + } + + if (!greFound) { + char minVersion[VERSION_MAXLEN]; --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX_attXXX_fix_remember_password_for_embedders_without_branding.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX_attXXX_fix_remember_password_for_embedders_without_branding.patch @@ -0,0 +1,35 @@ +Index: ./toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js +=================================================================== +RCS file: /cvsroot/mozilla/toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js,v +retrieving revision 1.30 +diff -u -p -8 -r1.30 nsLoginManagerPrompter.js +--- a/toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js 9 Mar 2008 02:25:40 -0000 1.30 ++++ b/toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js 9 Mar 2008 23:33:24 -0000 +@@ -560,18 +560,25 @@ LoginManagerPrompter.prototype = { + this._getLocalizedString("notifyBarRememberButtonText"); + var rememberButtonAccessKey = + this._getLocalizedString("notifyBarRememberButtonAccessKey"); + var notNowButtonText = + this._getLocalizedString("notifyBarNotNowButtonText"); + var notNowButtonAccessKey = + this._getLocalizedString("notifyBarNotNowButtonAccessKey"); + +- var brandShortName = +- this._brandBundle.GetStringFromName("brandShortName"); ++ // XXX asac: anything more reasonable than "" we can guess for ++ // embedders that don't provide branding?) ++ var brandShortName = ""; ++ try { ++ brandShortName = ++ this._brandBundle.GetStringFromName("brandShortName"); ++ } catch (e) { ++ this.log ("no brandShortName available for prompting - most likely incomplete embedding."); ++ } + var notificationText = this._getLocalizedString( + "savePasswordText", [brandShortName]); + + // The callbacks in |buttons| have a closure to access the variables + // in scope here; set one to |this._pwmgr| so we can get back to pwmgr + // without a getService() call. + var pwmgr = this._pwmgr; + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bz384304_fix_recursive_symlinks.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bz384304_fix_recursive_symlinks.patch @@ -0,0 +1,26 @@ +--- + xulrunner/app/mozilla.in | 1 + + 1 file changed, 1 insertion(+) + +Index: mozilla/xulrunner/app/mozilla.in +=================================================================== +--- mozilla.orig/xulrunner/app/mozilla.in ++++ mozilla/xulrunner/app/mozilla.in +@@ -107,16 +107,17 @@ + dist_bin="$curdir" + found=1 + else + here=`/bin/pwd` + while [ -h "$progname" ]; do + bn=`basename "$progname"` + cd `dirname "$progname"` + progname=`/bin/ls -l "$bn" | sed -e 's/^.* -> //' ` ++ progbase=`basename "$progname"` + if [ ! -x "$progname" ]; then + break + fi + curdir=`dirname "$progname"` + run_moz="$curdir/run-mozilla.sh" + if [ -x "$run_moz" ]; then + cd "$curdir" + dist_bin=`pwd` --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/installer_use_stdout_for_missing_files.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/installer_use_stdout_for_missing_files.patch @@ -0,0 +1,27 @@ +--- + xpinstall/packager/Packager.pm | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: mozilla/xpinstall/packager/Packager.pm +=================================================================== +--- mozilla.orig/xpinstall/packager/Packager.pm ++++ mozilla/xpinstall/packager/Packager.pm +@@ -142,17 +142,17 @@ + (-d "$srcdir/$line") && do { + ($debug >= 10) && print "directory copy.\n"; + do_copydir ("$srcdir/$line"); + next LINE; + }; + + # if we hit this, it's either a file in the package file that is + # not in the src directory, or it is not a valid entry. +- warn "Warning: package error or possible missing or unnecessary file: $line ($package, $lineno).\n"; ++ print "Warning: package error or possible missing or unnecessary file: $line ($package, $lineno).\n"; + + } # LINE + + close (MANIFEST); + chdir ($saved_cwd); + + } + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bz321315_gconf_backend_for_19.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bz321315_gconf_backend_for_19.patch @@ -0,0 +1,3437 @@ +diff -Naur mozilla.orig/config/autoconf.mk.in mozilla/config/autoconf.mk.in +--- mozilla.orig/config/autoconf.mk.in 2008-03-18 10:37:00.000000000 -0700 ++++ mozilla/config/autoconf.mk.in 2008-04-10 11:33:28.000000000 -0700 +@@ -246,6 +246,7 @@ + MOZ_GNOMEVFS_CFLAGS = @MOZ_GNOMEVFS_CFLAGS@ + MOZ_GNOMEVFS_LIBS = @MOZ_GNOMEVFS_LIBS@ + ++MOZ_ENABLE_GCONF = @MOZ_ENABLE_GCONF@ + MOZ_GCONF_CFLAGS = @MOZ_GCONF_CFLAGS@ + MOZ_GCONF_LIBS = @MOZ_GCONF_LIBS@ + +diff -Naur mozilla.orig/configure.in mozilla/configure.in +--- mozilla.orig/configure.in 2008-03-20 12:17:09.000000000 -0700 ++++ mozilla/configure.in 2008-04-10 11:39:22.000000000 -0700 +@@ -4957,6 +4957,7 @@ + ]) + fi + ++ AC_SUBST(MOZ_ENABLE_GCONF) + AC_SUBST(MOZ_GCONF_CFLAGS) + AC_SUBST(MOZ_GCONF_LIBS) + +diff -Naur mozilla.orig/extensions/pref/system-pref/src/gconf/Makefile.in mozilla/extensions/pref/system-pref/src/gconf/Makefile.in +--- mozilla.orig/extensions/pref/system-pref/src/gconf/Makefile.in 2006-04-28 07:54:52.000000000 -0700 ++++ mozilla/extensions/pref/system-pref/src/gconf/Makefile.in 2008-04-01 16:50:49.000000000 -0700 +@@ -42,45 +42,37 @@ + + include $(DEPTH)/config/autoconf.mk + +-MODULE = system-pref +-LIBRARY_NAME = system-pref ++MODULE = syspref-gconf ++MODULE_NAME = nsSystemPrefServiceModule ++LIBRARY_NAME = syspref-gconf ++ifneq ($(OS_ARCH),WINNT) ++SHORT_LIBNAME = spgconf ++endif ++ ++EXPORT_LIBRARY = 1 ++IS_COMPONENT = 1 ++FORCE_STATIC_LIB = 1 + LIBXUL_LIBRARY = 1 + + REQUIRES = pref \ ++ system-pref \ + string \ + xpcom \ + embedcomponents \ ++ necko \ + $(NULL) + + CPPSRCS = \ + nsSystemPrefService.cpp \ +- nsSystemPrefFactory.cpp \ + $(NULL) + +-SHARED_LIBRARY_LIBS = ../libsystem-pref_s.a +- + EXTRA_DSO_LDOPTS = \ +- -L$(DIST)/bin \ + $(MOZ_COMPONENT_LIBS) \ +- $(MOZ_GTK2_LIBS) \ +- $(NULL) +- +-EXPORT_LIBRARY = 1 +-IS_COMPONENT = 1 +-MODULE_NAME = nsSystemPrefModule +- +-EXPORTS = \ +- nsSystemPrefService.h \ ++ $(MOZ_GTK2_LIBS) \ ++ $(MOZ_GCONF_LIBS) \ + $(NULL) + + include $(topsrcdir)/config/rules.mk + +-CFLAGS += $(MOZ_GTK2_CFLAGS) +-CXXFLAGS += $(MOZ_GTK2_CFLAGS) +- +-LOCAL_INCLUDES = -I$(srcdir)/.. +- +-export:: +- $(INSTALL) $(srcdir)/../nsSystemPrefFactory.cpp . +- +-GARBAGE += nsSystemPrefFactory.cpp ++CFLAGS += $(MOZ_GTK2_CFLAGS) $(MOZ_GCONF_CFLAGS) ++CXXFLAGS += $(MOZ_GTK2_CFLAGS) $(MOZ_GCONF_CFLAGS) +diff -Naur mozilla.orig/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp +--- mozilla.orig/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp 2007-07-08 00:08:21.000000000 -0700 ++++ mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp 2008-04-01 16:50:49.000000000 -0700 +@@ -23,7 +23,7 @@ + * + * Original Author: Bolian Yin (bolian.yin@sun.com) + * +- * Contributor(s): ++ * Contributor(s): Robert O'Callahan/Novell (rocallahan@novell.com) + * + * 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 +@@ -41,6 +41,7 @@ + + #include + #include ++#include + + #include "plstr.h" + #include "nsCOMPtr.h" +@@ -48,867 +49,1270 @@ + #include "nsIServiceManager.h" + #include "nsIObserver.h" + #include "nsWeakReference.h" +- ++#include "nsIPrefBranch2.h" ++#include "nsISystemPrefService.h" ++#include "nsDataHashtable.h" ++#include "nsHashKeys.h" ++#include "nsICategoryManager.h" ++#include "nsIGenericFactory.h" + #include "nsString.h" +-#include "nsSystemPrefLog.h" +-#include "nsSystemPrefService.h" +- +-/************************************************************************* +- * The strange thing here is that we load the gconf library manually and +- * search the function pointers we need. If that process fails, no gconf +- * support is available in mozilla. The aim is to make mozilla independent +- * on gconf, in both compile time and run time. +- ************************************************************************/ +- +-//gconf types +-extern "C" { +- +- typedef enum { +- GCONF_VALUE_INVALID, +- GCONF_VALUE_STRING, +- GCONF_VALUE_INT, +- GCONF_VALUE_FLOAT, +- GCONF_VALUE_BOOL, +- GCONF_VALUE_SCHEMA, +- +- GCONF_VALUE_LIST, +- GCONF_VALUE_PAIR +- +- }GConfValueType; +- +- typedef struct { +- GConfValueType type; +- }GConfValue; +- +- typedef void * (*GConfClientGetDefaultType) (void); +- typedef PRBool (*GConfClientGetBoolType) (void *client, const gchar *key, +- GError **err); +- typedef gchar* (*GConfClientGetStringType) (void *client, const gchar *key, +- GError **err); +- typedef PRInt32 (*GConfClientGetIntType) (void *client, const gchar *key, +- GError **err); +- typedef GSList* (*GConfClientGetListType) (void *client, const gchar *key, +- GConfValueType list_type, +- GError **err); +- typedef void (*GConfClientNotifyFuncType) (void* client, guint cnxn_id, +- void *entry, +- gpointer user_data); +- typedef guint (*GConfClientNotifyAddType) (void* client, +- const gchar* namespace_section, +- GConfClientNotifyFuncType func, +- gpointer user_data, +- GFreeFunc destroy_notify, +- GError** err); +- typedef void (*GConfClientNotifyRemoveType) (void *client, +- guint cnxn); +- typedef void (*GConfClientAddDirType) (void *client, +- const gchar *dir, +- guint8 preload, +- GError **err); +- typedef void (*GConfClientRemoveDirType) (void *client, +- const gchar *dir, +- GError **err); +- +- typedef const char* (*GConfEntryGetKeyType) (const void *entry); +- typedef GConfValue* (*GConfEntryGetValueType) (const void *entry); +- +- typedef const char* (*GConfValueGetStringType) (const GConfValue *value); +- typedef PRInt32 (*GConfValueGetIntType) (const GConfValue *value); +- typedef PRBool (*GConfValueGetBoolType) (const GConfValue *value); ++#include "nsIPermissionManager.h" + +- +- static void gconf_key_listener (void* client, guint cnxn_id, +- void *entry, gpointer user_data); +-} ++#define NS_SYSTEMPREF_SERVICE_CID \ ++ { /* {3724e748-b088-4bf8-9298-aad426b66293} */ \ ++ 0x3724e748, \ ++ 0xb088, \ ++ 0x4bf8, \ ++ { 0x92, 0x98, 0xaa, 0xd4, 0x26, 0xb6, 0x62, 0x93 } \ ++ } ++ ++#define NS_SYSTEMPREF_SERVICE_CLASSNAME "System Preferences Platform Service" ++ ++/** ++ * We can link directly to the gconf library. If it's not available, ++ * this component just won't load and no system prefs will be offered. ++ */ ++ ++#define NUM_ELEM(a) (sizeof(a)/sizeof(a[0])) ++ ++class nsSystemPrefService; ++ ++/** ++ * List the preferences that have a simple mapping between Moz and gconf. ++ * These preferences have the same meaning and their values are ++ * automatically converted. ++ */ ++struct SimplePrefMapping { ++ const char *mozPrefName; ++ const char *gconfPrefName; ++ /** ++ * If this is PR_FALSE, then we never allow Mozilla to change ++ * this setting. The Mozilla pref will always be locked. ++ * If this is PR_TRUE then Mozilla will be allowed to change ++ * the setting --- but only if it is writable in gconf. ++ */ ++ PRBool allowWritesFromMozilla; ++}; ++typedef nsresult (* ComplexGConfPrefChanged)(nsSystemPrefService* aPrefService, ++ GConfClient* aClient); ++typedef nsresult (* ComplexMozPrefChanged)(nsSystemPrefService* aPrefService, ++ GConfClient* aClient); ++struct ComplexGConfPrefMapping { ++ const char* gconfPrefName; ++ ComplexGConfPrefChanged callback; ++}; + +-struct GConfCallbackData +-{ +- GConfProxy *proxy; +- void * userData; +- PRUint32 atom; +- PRUint32 notifyId; ++struct ComplexMozPrefMapping { ++ const char* mozPrefName; ++ ComplexMozPrefChanged callback; + }; +-////////////////////////////////////////////////////////////////////// +-// GConPrxoy is a thin wrapper for easy use of gconf funcs. It loads the +-// gconf library and initializes the func pointers for later use. +-////////////////////////////////////////////////////////////////////// +-class GConfProxy ++ ++class nsSystemPrefService : public nsISystemPrefService + { + public: +- GConfProxy(nsSystemPrefService* aSysPrefService); +- ~GConfProxy(); +- PRBool Init(); +- +- nsresult GetBoolPref(const char *aMozKey, PRBool *retval); +- nsresult GetCharPref(const char *aMozKey, char **retval); +- nsresult GetIntPref(const char *aMozKey, PRInt32 *retval); ++ NS_DECL_ISUPPORTS + +- nsresult NotifyAdd (PRUint32 aAtom, void *aUserData); +- nsresult NotifyRemove (PRUint32 aAtom, const void *aUserData); ++ nsresult Init(); + +- nsresult GetAtomForMozKey(const char *aMozKey, PRUint32 *aAtom) { +- return GetAtom(aMozKey, 0, aAtom); +- } +- const char *GetMozKey(PRUint32 aAtom) { +- return GetKey(aAtom, 0); ++ virtual nsresult LoadSystemPreferences(nsISystemPref* aPrefs); ++ virtual nsresult NotifyMozillaPrefChanged(const char* aPrefName); ++ virtual nsresult NotifyUnloadSystemPreferences(); ++ ++ nsSystemPrefService(); ++ virtual ~nsSystemPrefService(); ++ ++ nsISystemPref* GetPrefs() { return mPref; } ++ SimplePrefMapping* GetSimpleCallbackData(PRUint32 aKey) { ++ SimplePrefMapping* result = nsnull; ++ mGConfSimpleCallbacks.Get(aKey, &result); ++ return result; ++ } ++ ComplexGConfPrefMapping* GetComplexCallbackData(PRUint32 aKey) { ++ ComplexGConfPrefMapping* result = nsnull; ++ mGConfComplexCallbacks.Get(aKey, &result); ++ return result; + } + +- void OnNotify(void *aClient, void * aEntry, PRUint32 aNotifyId, +- GConfCallbackData *aData); +- + private: +- void *mGConfClient; +- PRLibrary *mGConfLib; +- PRBool mInitialized; +- nsSystemPrefService *mSysPrefService; +- +- //listeners +- nsAutoVoidArray *mObservers; +- +- void InitFuncPtrs(); +- //gconf public func ptrs +- +- //gconf client funcs +- GConfClientGetDefaultType GConfClientGetDefault; +- GConfClientGetBoolType GConfClientGetBool; +- GConfClientGetStringType GConfClientGetString; +- GConfClientGetIntType GConfClientGetInt; +- GConfClientGetListType GConfClientGetList; +- GConfClientNotifyAddType GConfClientNotifyAdd; +- GConfClientNotifyRemoveType GConfClientNotifyRemove; +- GConfClientAddDirType GConfClientAddDir; +- GConfClientRemoveDirType GConfClientRemoveDir; +- +- //gconf entry funcs +- GConfEntryGetValueType GConfEntryGetValue; +- GConfEntryGetKeyType GConfEntryGetKey; +- +- //gconf value funcs +- GConfValueGetBoolType GConfValueGetBool; +- GConfValueGetStringType GConfValueGetString; +- GConfValueGetIntType GConfValueGetInt; +- +- //pref name translating stuff +- nsresult GetAtom(const char *aKey, PRUint8 aNameType, PRUint32 *aAtom); +- nsresult GetAtomForGConfKey(const char *aGConfKey, PRUint32 *aAtom) \ +- {return GetAtom(aGConfKey, 1, aAtom);} +- const char *GetKey(PRUint32 aAtom, PRUint8 aNameType); +- const char *GetGConfKey(PRUint32 aAtom) \ +- {return GetKey(aAtom, 1); } +- inline const char *MozKey2GConfKey(const char *aMozKey); +- +- //const strings +- static const char sPrefGConfKey[]; +- static const char sDefaultLibName1[]; +- static const char sDefaultLibName2[]; ++ nsISystemPref* mPref; ++ nsDataHashtable mGConfSimpleCallbacks; ++ nsDataHashtable mGConfComplexCallbacks; ++ // This is set to PR_FALSE temporarily to stop listening to gconf ++ // change notifications (while we change gconf values) ++ PRPackedBool mListenToGConf; + }; + +-struct SysPrefCallbackData { +- nsISupports *observer; +- PRBool bIsWeakRef; +- PRUint32 prefAtom; +-}; +- +-PRBool PR_CALLBACK +-sysPrefDeleteObserver(void *aElement, void *aData) { +- SysPrefCallbackData *pElement = +- static_cast(aElement); +- NS_RELEASE(pElement->observer); +- nsMemory::Free(pElement); +- return PR_TRUE; +-} +- +-NS_IMPL_ISUPPORTS2(nsSystemPrefService, nsIPrefBranch, nsIPrefBranch2) +- +-/* public */ + nsSystemPrefService::nsSystemPrefService() +- :mInitialized(PR_FALSE), +- mGConf(nsnull), +- mObservers(nsnull) ++ : mPref(nsnull), mListenToGConf(PR_TRUE) + { ++ mGConfSimpleCallbacks.Init(); ++ mGConfComplexCallbacks.Init(); + } + + nsSystemPrefService::~nsSystemPrefService() + { +- mInitialized = PR_FALSE; +- +- if (mGConf) +- delete mGConf; +- if (mObservers) { +- (void)mObservers->EnumerateForwards(sysPrefDeleteObserver, nsnull); +- delete mObservers; +- } ++ NotifyUnloadSystemPreferences(); + } + + nsresult + nsSystemPrefService::Init() + { +- if (!gSysPrefLog) { +- gSysPrefLog = PR_NewLogModule("Syspref"); +- if (!gSysPrefLog) return NS_ERROR_OUT_OF_MEMORY; +- } +- +- SYSPREF_LOG(("Init SystemPref Service\n")); +- if (mInitialized) +- return NS_ERROR_FAILURE; +- +- if (!mGConf) { +- mGConf = new GConfProxy(this); +- if (!mGConf->Init()) { +- delete mGConf; +- mGConf = nsnull; +- return NS_ERROR_FAILURE; +- } +- } +- +- mInitialized = PR_TRUE; + return NS_OK; + } + +-/* readonly attribute string root; */ +-NS_IMETHODIMP nsSystemPrefService::GetRoot(char * *aRoot) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++NS_IMPL_ISUPPORTS1(nsSystemPrefService, nsISystemPrefService) + +-/* long getPrefType (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::GetPrefType(const char *aPrefName, PRInt32 *_retval) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; ++static GConfClient* GetGConf() { ++ return gconf_client_get_default(); + } + +-/* boolean getBoolPref (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::GetBoolPref(const char *aPrefName, PRBool *_retval) ++static PRBool VerifyMatchingTypes(nsISystemPref* aPrefs, ++ const char* aMozPref, GConfValue* aVal) + { +- return mInitialized ? +- mGConf->GetBoolPref(aPrefName, _retval) : NS_ERROR_FAILURE; +-} ++ nsCOMPtr prefBranch = aPrefs->GetPrefUserBranch(); ++ PRInt32 type; ++ nsresult rv = prefBranch->GetPrefType(aMozPref, &type); ++ if (NS_FAILED(rv)) { ++ // pref probably doesn't exist. Let gconf set it. ++ return PR_TRUE; ++ } + +-/* void setBoolPref (in string aPrefName, in long aValue); */ +-NS_IMETHODIMP nsSystemPrefService::SetBoolPref(const char *aPrefName, PRInt32 aValue) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; ++ PRBool ok; ++ switch (aVal->type) { ++ case GCONF_VALUE_STRING: ++ ok = type == nsIPrefBranch2::PREF_STRING; ++ break; ++ case GCONF_VALUE_INT: ++ ok = type == nsIPrefBranch2::PREF_INT; ++ break; ++ case GCONF_VALUE_BOOL: ++ ok = type == nsIPrefBranch2::PREF_BOOL; ++ break; ++ default: ++ NS_ERROR("Unhandled gconf preference type"); ++ return PR_FALSE; ++ } ++ ++ NS_ASSERTION(ok, "Mismatched gconf/Mozilla pref types"); ++ return ok; + } + +-/* string getCharPref (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::GetCharPref(const char *aPrefName, char **_retval) +-{ +- return mInitialized ? +- mGConf->GetCharPref(aPrefName, _retval) : NS_ERROR_FAILURE; +-} ++/** ++ * Map a gconf pref value into the corresponding Mozilla pref. ++ */ ++static nsresult ApplySimpleMapping(SimplePrefMapping* aMap, ++ nsISystemPref* aPrefs, ++ GConfClient* aClient) ++{ ++ GConfValue* val = gconf_client_get(aClient, aMap->gconfPrefName, nsnull); ++ if (!val) { ++ // No gconf key, so there's really nothing to do ++ return NS_OK; ++ } + +-/* void setCharPref (in string aPrefName, in string aValue); */ +-NS_IMETHODIMP nsSystemPrefService::SetCharPref(const char *aPrefName, const char *aValue) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++ VerifyMatchingTypes(aPrefs, aMap->mozPrefName, val); + +-/* long getIntPref (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::GetIntPref(const char *aPrefName, PRInt32 *_retval) +-{ +- return mInitialized ? +- mGConf->GetIntPref(aPrefName, _retval) : NS_ERROR_FAILURE; +-} ++ PRBool locked = !aMap->allowWritesFromMozilla || ++ !gconf_client_key_is_writable(aClient, aMap->gconfPrefName, nsnull); ++ nsresult rv; ++ switch (val->type) { ++ case GCONF_VALUE_STRING: { ++ const char* str = gconf_value_get_string(val); ++ rv = aPrefs->SetOverridingMozillaStringPref(aMap->mozPrefName, str, locked); ++ // XXX do we need to free 'str' here? ++ break; ++ } ++ case GCONF_VALUE_INT: ++ rv = aPrefs->SetOverridingMozillaIntPref(aMap->mozPrefName, ++ gconf_value_get_int(val), locked); ++ break; ++ case GCONF_VALUE_BOOL: ++ rv = aPrefs->SetOverridingMozillaBoolPref(aMap->mozPrefName, ++ gconf_value_get_bool(val), locked); ++ break; ++ default: ++ NS_ERROR("Unusable gconf value type"); ++ rv = NS_ERROR_FAILURE; ++ break; ++ } ++ ++ gconf_value_free(val); ++ return rv; ++} ++ ++/** ++ * Map a Mozilla pref into the corresponding gconf pref, if ++ * that's allowed. ++ */ ++static nsresult ReverseApplySimpleMapping(SimplePrefMapping* aMap, ++ nsISystemPref* aPrefs, ++ GConfClient* aClient) ++{ ++ // Verify that the gconf key has the right type, if it exists ++ GConfValue* val = gconf_client_get(aClient, aMap->gconfPrefName, nsnull); ++ if (val) { ++ VerifyMatchingTypes(aPrefs, aMap->mozPrefName, val); ++ gconf_value_free(val); ++ } ++ ++ PRBool writable = aMap->allowWritesFromMozilla && ++ gconf_client_key_is_writable(aClient, aMap->gconfPrefName, nsnull); ++ if (!writable) { ++ NS_ERROR("Gconf key is not writable"); ++ return NS_ERROR_FAILURE; ++ } + +-/* void setIntPref (in string aPrefName, in long aValue); */ +-NS_IMETHODIMP nsSystemPrefService::SetIntPref(const char *aPrefName, PRInt32 aValue) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++ nsCOMPtr prefBranch = aPrefs->GetPrefUserBranch(); ++ PRInt32 type; ++ nsresult rv = prefBranch->GetPrefType(aMap->mozPrefName, &type); ++ if (NS_FAILED(rv)) { ++ NS_ERROR("Writing back a pref that doesn't exist?"); ++ return rv; ++ } + +-/* void getComplexValue (in string aPrefName, in nsIIDRef aType, [iid_is (aType), retval] out nsQIResult aValue); */ +-NS_IMETHODIMP nsSystemPrefService::GetComplexValue(const char *aPrefName, const nsIID & aType, void * *aValue) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++ switch (type) { ++ case nsIPrefBranch2::PREF_STRING: ++ { ++ char* result; ++ rv = prefBranch->GetCharPref(aMap->mozPrefName, &result); ++ if (NS_FAILED(rv)) ++ return rv; + +-/* void setComplexValue (in string aPrefName, in nsIIDRef aType, in nsISupports aValue); */ +-NS_IMETHODIMP nsSystemPrefService::SetComplexValue(const char *aPrefName, const nsIID & aType, nsISupports *aValue) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++ gconf_client_set_string(aClient, aMap->gconfPrefName, result, nsnull); ++ nsMemory::Free(result); ++ } ++ break; ++ case nsIPrefBranch2::PREF_INT: ++ { ++ PRInt32 result; ++ rv = prefBranch->GetIntPref(aMap->mozPrefName, &result); ++ if (NS_FAILED(rv)) ++ return rv; + +-/* void clearUserPref (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::ClearUserPref(const char *aPrefName) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++ gconf_client_set_int(aClient, aMap->gconfPrefName, result, nsnull); ++ } ++ break; ++ case nsIPrefBranch2::PREF_BOOL: ++ { ++ PRBool result; ++ rv = prefBranch->GetBoolPref(aMap->mozPrefName, &result); ++ if (NS_FAILED(rv)) ++ return rv; + +-/* void lockPref (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::LockPref(const char *aPrefName) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++ gconf_client_set_bool(aClient, aMap->gconfPrefName, result, nsnull); ++ } ++ break; ++ default: ++ NS_ERROR("Unhandled gconf preference type"); ++ return NS_ERROR_FAILURE; ++ } + +-/* boolean prefHasUserValue (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::PrefHasUserValue(const char *aPrefName, PRBool *_retval) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; ++ return NS_OK; + } + +-/* boolean prefIsLocked (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::PrefIsLocked(const char *aPrefName, PRBool *_retval) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; +-} ++/* BEGIN preference mapping definition area ++ * ++ * There are a few rules that our preference maps have to obey: ++ * ++ * 1) Each mapping defines a relationship R between a set of GConf preferences and ++ * a set of Mozilla preferences that must *always* be true. Thus, when a Mozilla ++ * pref changes or a gconf pref changes, we may need to change something on the ++ * other side to preserve R. If a GConf preference is read-only, then we may ++ * need to lock one or more Mozilla preferences to avoid a situation where the ++ * Mozilla preference changes and we can't update the GConf preference to ++ * ensure R continues to hold. ++ * ++ * 2) If an unlocked Mozilla preference is changed, then we can only ++ * preserve R by changing GConf preferences; we are not allowed to ++ * change Mozilla preferences. ++ * ++ * 3) If a GConf preference is changed, then we can only preserve R by ++ * changing Moozilla preferences; we are nt allowed to change GConf ++ * preferences. ++ * ++ * For "simple" mappings, the relationship R is just of the form ++ * "GConf preference 'A' is equal to Mozilla preference 'B'". R is ++ * preserved by setting A to B when B changes, and by setting B to A ++ * when A changes. If A is read-only then we lock B (or we may just ++ * decide to lock B for other reasons). Thus rules 1-3 are satisfied. ++ * ++ * For "complex" mappings we have more complicated ++ * relationships. These are documented below. ++ */ ++ ++static SimplePrefMapping sSimplePrefMappings[] = { ++ // GNOME proxy settings; allow these to be set through the Firefox UI ++ {"network.proxy.http", "/system/http_proxy/host", PR_TRUE}, ++ {"network.proxy.http_port", "/system/http_proxy/port", PR_TRUE}, ++ {"network.proxy.ftp", "/system/proxy/ftp_host", PR_TRUE}, ++ {"network.proxy.ftp_port", "/system/proxy/ftp_port", PR_TRUE}, ++ {"network.proxy.ssl", "/system/proxy/secure_host", PR_TRUE}, ++ {"network.proxy.ssl_port", "/system/proxy/secure_port", PR_TRUE}, ++ {"network.proxy.socks", "/system/proxy/socks_host", PR_TRUE}, ++ {"network.proxy.socks_port", "/system/proxy/socks_port", PR_TRUE}, ++ {"network.proxy.autoconfig_url", "/system/proxy/autoconfig_url", PR_TRUE}, ++ ++ // GNOME accessibility setting; never allow this to be set by Firefox ++ {"config.use_system_prefs.accessibility", ++ "/desktop/gnome/interface/accessibility", PR_FALSE}, ++ ++ // GConf Firefox preferences; allow these to be set through the Firefox UI ++ {"security.enable_java", "/apps/firefox/web/java_enabled", PR_TRUE}, ++ {"javascript.enabled", "/apps/firefox/web/javascript_enabled", PR_TRUE}, ++ {"browser.startup.homepage", "/apps/firefox/general/homepage_url", PR_TRUE}, ++ {"browser.cache.disk.capacity", "/apps/firefox/web/cache_size", PR_TRUE}, ++ {"network.cookie.lifetimePolicy", "/apps/firefox/web/cookie_accept", PR_TRUE}, ++ ++ // UI lockdown settings; never allow these to be set by Firefox. There is no ++ // Firefox UI for these but they could otherwise be set via about:config. ++ {"config.lockdown.printing", "/desktop/gnome/lockdown/disable_printing", PR_FALSE}, ++ {"config.lockdown.printsetup", "/desktop/gnome/lockdown/disable_print_setup", PR_FALSE}, ++ {"config.lockdown.savepage", "/desktop/gnome/lockdown/disable_save_to_disk", PR_FALSE}, ++ {"config.lockdown.history", "/apps/firefox/lockdown/disable_history", PR_FALSE}, ++ {"config.lockdown.toolbarediting", "/apps/firefox/lockdown/disable_toolbar_editing", PR_FALSE}, ++ {"config.lockdown.urlbar", "/apps/firefox/lockdown/disable_url_bar", PR_FALSE}, ++ {"config.lockdown.bookmark", "/apps/firefox/lockdown/disable_bookmark_editing", PR_FALSE}, ++ {"config.lockdown.disable_themes", "/apps/firefox/lockdown/disable_themes", PR_FALSE}, ++ {"config.lockdown.disable_extensions", "/apps/firefox/lockdown/disable_extensions", PR_FALSE}, ++ {"config.lockdown.searchbar", "/apps/firefox/lockdown/disable_searchbar", PR_FALSE}, ++ {"config.lockdown.hidebookmark", "/apps/firefox/lockdown/hide_bookmark", PR_FALSE}, ++}; + +-/* void unlockPref (in string aPrefName); */ +-NS_IMETHODIMP nsSystemPrefService::UnlockPref(const char *aPrefName) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; ++static nsresult ApplyListPref(nsSystemPrefService* aPrefService, ++ GConfClient* aClient, ++ const char* aGConfKey, const char* aMozKey, ++ char aSeparator) ++{ ++ GSList* list = gconf_client_get_list(aClient, aGConfKey, ++ GCONF_VALUE_STRING, nsnull); ++ nsCAutoString str; ++ for (GSList* l = list; l; l = l->next) { ++ str.Append((const char*)l->data); ++ if (l->next) { ++ str.Append(aSeparator); ++ } ++ } ++ PRBool lock = !gconf_client_key_is_writable(aClient, aGConfKey, nsnull); ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaStringPref(aMozKey, str.get(), lock); ++ // XXX does this free the strings? Should it? ++ g_slist_free(list); ++ return rv; ++} ++static nsresult ReverseApplyListPref(nsSystemPrefService* aPrefService, ++ GConfClient* aClient, ++ const char* aGConfKey, const char* aMozKey, ++ char aSeparator) ++{ ++ char* data = nsnull; ++ nsCOMPtr prefs = ++ aPrefService->GetPrefs()->GetPrefUserBranch(); ++ prefs->GetCharPref(aMozKey, &data); ++ if (!data) ++ return NS_ERROR_FAILURE; ++ nsresult rv = NS_OK; ++ GSList* list = nsnull; ++ PRInt32 i = 0; ++ while (data[i]) { ++ const char* nextComma = strchr(data+i, ','); ++ PRInt32 tokLen = nextComma ? nextComma - (data+i) : strlen(data+i); ++ char* tok = strndup(data+i, tokLen); ++ if (!tok) ++ break; ++ GSList* newList = g_slist_append(list, tok); ++ if (!newList) { ++ rv = NS_ERROR_OUT_OF_MEMORY; ++ break; ++ } ++ list = newList; ++ if (!nextComma) ++ break; ++ i = nextComma + 1 - data; ++ } ++ nsMemory::Free(data); ++ if (NS_SUCCEEDED(rv)) { ++ gconf_client_set_list(aClient, aGConfKey, GCONF_VALUE_STRING, list, nsnull); ++ } ++ for (GSList* l = list; l; l = l->next) { ++ free(l->data); ++ } ++ g_slist_free(list); ++ return rv; + } + +-/* void deleteBranch (in string aStartingAt); */ +-NS_IMETHODIMP nsSystemPrefService::DeleteBranch(const char *aStartingAt) ++/** ++ * The relationship R is ++ * "network.negotiate-auth.trusted-uris" is the comma-separated concatenation ++ * of the elements of the list "/apps/firefox/general/trusted_URIs" ++ */ ++static const char GConfKey_TrustedURIs[] = "/apps/firefox/general/trusted_URIs"; ++static const char MozKey_TrustedURIs[] = "network.negotiate-auth.trusted-uris"; ++static nsresult ApplyTrustedURIs(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ return ApplyListPref(aPrefService, aClient, ++ GConfKey_TrustedURIs, MozKey_TrustedURIs, ','); ++} ++static nsresult ReverseApplyTrustedURIs(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ return ReverseApplyListPref(aPrefService, aClient, ++ GConfKey_TrustedURIs, MozKey_TrustedURIs, ','); ++} ++ ++/** ++ * The relationship R is ++ * "network.negotiate-auth.delegation-uris" is the comma-separated concatenation ++ * of the elements of the list "/apps/firefox/general/delegation_URIs" ++ */ ++static const char GConfKey_DelegationURIs[] = "/apps/firefox/general/delegation_URIs"; ++static const char MozKey_DelegationURIs[] = "network.negotiate-auth.delegation-uris"; ++static nsresult ApplyDelegationURIs(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ return ApplyListPref(aPrefService, aClient, ++ GConfKey_DelegationURIs, MozKey_DelegationURIs, ','); ++} ++static nsresult ReverseApplyDelegationURIs(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ return ReverseApplyListPref(aPrefService, aClient, ++ GConfKey_DelegationURIs, MozKey_DelegationURIs, ','); ++} ++ ++/** ++ * The relationship R is ++ * "network.proxy.no_proxies_on" is the comma-separated concatenation ++ * of the elements of the list "/system/http_proxy/ignore_hosts" ++ */ ++static const char GConfKey_IgnoreHosts[] = "/system/http_proxy/ignore_hosts"; ++static const char MozKey_IgnoreHosts[] = "network.proxy.no_proxies_on"; ++static nsresult ApplyIgnoreHosts(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ return ApplyListPref(aPrefService, aClient, ++ GConfKey_IgnoreHosts, MozKey_IgnoreHosts, ','); ++} ++static nsresult ReverseApplyIgnoreHosts(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ return ReverseApplyListPref(aPrefService, aClient, ++ GConfKey_IgnoreHosts, MozKey_IgnoreHosts, ','); ++} ++ ++/** ++ * The relationship R is ++ * ("/system/proxy/mode" is 'manual' if and only if "network.proxy.type" is eProxyConfig_Manual (1)) ++ * AND ("/system/proxy/mode" is 'auto' if and only if "network.proxy.type" is eProxyConfig_PAC (2)) ++ * ++ * [This means 'none' matches any value of "network.proxy.type" other than 1 or 2.] ++ */ ++static const char GConfKey_ProxyMode[] = "/system/proxy/mode"; ++static const char MozKey_ProxyMode[] = "network.proxy.type"; ++static nsresult ApplyProxyMode(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) + { +- return NS_ERROR_NOT_IMPLEMENTED; ++ char* str = gconf_client_get_string(aClient, GConfKey_ProxyMode, nsnull); ++ if (!str) ++ return NS_ERROR_FAILURE; ++ PRInt32 val = -1; ++ nsCOMPtr prefs = ++ aPrefService->GetPrefs()->GetPrefUserBranch(); ++ prefs->GetIntPref(MozKey_ProxyMode, &val); ++ if (val < 0) ++ return NS_ERROR_FAILURE; ++ if (!strcmp(str, "manual")) { ++ val = 1; ++ } else if (!strcmp(str, "auto")) { ++ val = 2; ++ } else if (strcmp(str, "none")) { ++ // invalid value for this gconf pref; do nothing ++ g_free(str); ++ return NS_OK; ++ } else { ++ if (val == 1 || val == 2) { ++ // We need to make it something that 'none' maps to ++ val = 0; ++ } ++ } ++ g_free(str); ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_ProxyMode, nsnull); ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaIntPref(MozKey_ProxyMode, val, lock); ++ return rv; ++} ++static nsresult ReverseApplyProxyMode(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRInt32 val = -1; ++ nsCOMPtr prefs = ++ aPrefService->GetPrefs()->GetPrefUserBranch(); ++ prefs->GetIntPref(MozKey_ProxyMode, &val); ++ if (val < 0) ++ return NS_ERROR_FAILURE; ++ const char* str; ++ switch (val) { ++ case 1: str = "manual"; break; ++ case 2: str = "auto"; break; ++ default: str = "none"; break; ++ } ++ gconf_client_set_string(aClient, GConfKey_ProxyMode, str, nsnull); ++ return NS_OK; + } + +-/* void getChildList (in string aStartingAt, out unsigned long aCount, [array, size_is (aCount), retval] out string aChildArray); */ +-NS_IMETHODIMP nsSystemPrefService::GetChildList(const char *aStartingAt, PRUint32 *aCount, char ***aChildArray) ++/** ++ * The relationship R is ++ * If "/apps/firefox/web/download_defaultfolder" is the empty string, then ++ * "browser.download.useDownloadDir" is false; ++ * otherwise "browser.download.useDownloadDir" is true and "browser.download.folderList" ++ * is (0 if "/apps/firefox/web/download_defaultfolder" is "Desktop"; ++ * 1 if "/apps/firefox/web/download_defaultfolder" is "My Downloads"; ++ * 3 if "/apps/firefox/web/download_defaultfolder" is "Home"; ++ * otherwise 2 and "browser.download.dir" = "/apps/firefox/web/download_defaultfolder") ++ */ ++static const char GConfKey_DownloadFolder[] = "/apps/firefox/web/download_defaultfolder"; ++static const char MozKey_UseDownloadDir[] = "browser.download.useDownloadDir"; ++static const char MozKey_DownloadDirType[] = "browser.download.folderList"; ++static const char MozKey_DownloadDirExplicit[] = "browser.download.dir"; ++static nsresult ApplyDownloadFolder(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) + { +- return NS_ERROR_NOT_IMPLEMENTED; ++ char* str = gconf_client_get_string(aClient, GConfKey_DownloadFolder, nsnull); ++ if (!str) ++ return NS_ERROR_FAILURE; ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DownloadFolder, nsnull); ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_UseDownloadDir, *str != 0, lock); ++ if (NS_FAILED(rv)) { ++ g_free(str); ++ return rv; ++ } ++ PRInt32 dirType = 0; ++ if (!strcmp(str, "Desktop")) { ++ dirType = 0; ++ } else if (!strcmp(str, "My Downloads")) { ++ dirType = 1; ++ } else if (!strcmp(str, "Home")) { ++ dirType = 3; ++ } else { ++ dirType = 2; ++ } ++ // Always set all three Mozilla preferences. This is simpler and avoids ++ // problems; e.g., if the gconf value changes from "/home/rocallahan" to "Desktop" ++ // we might leave MozKey_DownloadDirType accidentally locked. ++ rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaIntPref(MozKey_DownloadDirType, dirType, lock); ++ if (NS_SUCCEEDED(rv)) { ++ rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaStringPref(MozKey_DownloadDirExplicit, str, lock); ++ } ++ g_free(str); ++ return rv; + } + +-/* void resetBranch (in string aStartingAt); */ +-NS_IMETHODIMP nsSystemPrefService::ResetBranch(const char *aStartingAt) +-{ +- return NS_ERROR_NOT_IMPLEMENTED; ++static nsresult ReverseApplyDownloadFolder(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRBool useDownloadDir = PR_FALSE; ++ const char* result; ++ char* explicitStr = nsnull; ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ prefs->GetBoolPref(MozKey_UseDownloadDir, &useDownloadDir); ++ if (!useDownloadDir) { ++ result = ""; ++ } else { ++ PRInt32 type = -1; ++ prefs->GetIntPref(MozKey_DownloadDirType, &type); ++ if (type < 0) ++ return NS_ERROR_FAILURE; ++ switch (type) { ++ case 0: result = "Desktop"; break; ++ case 1: result = "My Downloads"; break; ++ case 2: ++ prefs->GetCharPref(MozKey_DownloadDirExplicit, &explicitStr); ++ result = explicitStr; ++ break; ++ case 3: result = "Home"; break; ++ default: ++ NS_ERROR("Unknown download dir type"); ++ return NS_ERROR_FAILURE; ++ } ++ } ++ if (!result) ++ return NS_ERROR_FAILURE; ++ gconf_client_set_string(aClient, GConfKey_DownloadFolder, ++ result, nsnull); ++ nsMemory::Free(explicitStr); ++ return NS_OK; + } + +-/* void addObserver (in string aDomain, in nsIObserver aObserver, in boolean aHoldWeak); */ +-NS_IMETHODIMP nsSystemPrefService::AddObserver(const char *aDomain, nsIObserver *aObserver, PRBool aHoldWeak) +-{ +- nsresult rv; +- +- NS_ENSURE_ARG_POINTER(aDomain); +- NS_ENSURE_ARG_POINTER(aObserver); +- +- NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE); +- +- PRUint32 prefAtom; +- // make sure the pref name is supported +- rv = mGConf->GetAtomForMozKey(aDomain, &prefAtom); +- NS_ENSURE_SUCCESS(rv, rv); +- +- if (!mObservers) { +- mObservers = new nsAutoVoidArray(); +- if (mObservers == nsnull) +- return NS_ERROR_OUT_OF_MEMORY; +- } +- +- SysPrefCallbackData *pCallbackData = (SysPrefCallbackData *) +- nsMemory::Alloc(sizeof(SysPrefCallbackData)); +- if (pCallbackData == nsnull) +- return NS_ERROR_OUT_OF_MEMORY; +- +- pCallbackData->bIsWeakRef = aHoldWeak; +- pCallbackData->prefAtom = prefAtom; +- // hold a weak reference to the observer if so requested +- nsCOMPtr observerRef; +- if (aHoldWeak) { +- nsCOMPtr weakRefFactory = +- do_QueryInterface(aObserver); +- if (!weakRefFactory) { +- // the caller didn't give us a object that supports weak reference. +- // ... tell them +- nsMemory::Free(pCallbackData); +- return NS_ERROR_INVALID_ARG; +- } +- nsCOMPtr tmp = do_GetWeakReference(weakRefFactory); +- observerRef = tmp; ++/** ++ * The relationship R is ++ * "/apps/firefox/web/disable_cookies" is true if and only if ++ * "network.cookie.cookieBehavior" is 2 ('dontUse') ++ */ ++static const char GConfKey_DisableCookies[] = "/apps/firefox/web/disable_cookies"; ++static const char MozKey_CookieBehavior[] = "network.cookie.cookieBehavior"; ++static const char MozKey_CookieExceptions[] = "network.cookie.honorExceptions"; ++static const char MozKey_CookieViewExceptions[] = "pref.privacy.disable_button.cookie_exceptions"; ++static nsresult ApplyDisableCookies(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableCookies, nsnull); ++ PRInt32 behavior = -1; ++ nsCOMPtr prefs = ++ aPrefService->GetPrefs()->GetPrefUserBranch(); ++ prefs->GetIntPref(MozKey_CookieBehavior, &behavior); ++ if (behavior < 0) ++ return NS_ERROR_FAILURE; ++ if (disable) { ++ behavior = 2; + } else { +- observerRef = aObserver; ++ if (behavior == 2) { ++ behavior = 0; ++ } + } ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableCookies, nsnull); ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_CookieExceptions, !lock, lock); ++ if (NS_FAILED(rv)) ++ return rv; ++ rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_CookieViewExceptions, lock, lock); ++ if (NS_FAILED(rv)) ++ return rv; ++ return aPrefService->GetPrefs()-> ++ SetOverridingMozillaIntPref(MozKey_CookieBehavior, behavior, lock); ++} ++static nsresult ReverseApplyDisableCookies(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRInt32 behavior = -1; ++ nsCOMPtr prefs = ++ aPrefService->GetPrefs()->GetPrefUserBranch(); ++ prefs->GetIntPref(MozKey_CookieBehavior, &behavior); ++ if (behavior < 0) ++ return NS_ERROR_FAILURE; ++ gconf_client_set_bool(aClient, GConfKey_DisableCookies, behavior == 2, nsnull); ++ return NS_OK; ++} + +- rv = mGConf->NotifyAdd(prefAtom, pCallbackData); +- if (NS_FAILED(rv)) { +- nsMemory::Free(pCallbackData); +- return rv; ++static char const* windowOpenFeatures[] = { ++ "dom.disable_window_open_feature.close", ++ "dom.disable_window_open_feature.directories", ++ "dom.disable_window_open_feature.location", ++ "dom.disable_window_open_feature.menubar", ++ "dom.disable_window_open_feature.minimizable", ++ "dom.disable_window_open_feature.personalbar", ++ "dom.disable_window_open_feature.resizable", ++ "dom.disable_window_open_feature.scrollbars", ++ "dom.disable_window_open_feature.status", ++ "dom.disable_window_open_feature.titlebar", ++ "dom.disable_window_open_feature.toolbar" ++}; ++/** ++ * The relationship R is ++ * "/apps/firefox/lockdown/disable_javascript_chrome" is true if and only if ++ * all of windowOpenFeatures are true ++ */ ++static const char GConfKey_DisableJSChrome[] = ++ "/apps/firefox/lockdown/disable_javascript_chrome"; ++static nsresult ApplyWindowOpen(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableJSChrome, nsnull); ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableJSChrome, nsnull); ++ PRBool curValues[NUM_ELEM(windowOpenFeatures)]; ++ PRUint32 i; ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ PRBool allDisabled = PR_TRUE; ++ for (i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) { ++ nsresult rv = prefs->GetBoolPref(windowOpenFeatures[i], &curValues[i]); ++ if (NS_FAILED(rv)) ++ return rv; ++ if (!curValues[i]) { ++ allDisabled = PR_FALSE; ++ } ++ } ++ for (i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) { ++ PRBool newVal = curValues[i]; ++ if (disable) { ++ newVal = PR_TRUE; ++ } else if (allDisabled) { ++ // If all disable-window-open-feature prefs are currently ++ // PR_TRUE, then we need to set at least one of them to ++ // PR_FALSE. Set all of them to PR_FALSE. ++ newVal = PR_FALSE; ++ } // If at least one disable-window-open-feature pref is ++ // currently PR_FALSE, then we don't need to change anything ++ // when the gconf pref says don't disable ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(windowOpenFeatures[i], newVal, lock); ++ if (NS_FAILED(rv)) ++ return rv; + } +- +- pCallbackData->observer = observerRef; +- NS_ADDREF(pCallbackData->observer); +- +- mObservers->AppendElement(pCallbackData); + return NS_OK; + } + +-/* void removeObserver (in string aDomain, in nsIObserver aObserver); */ +-NS_IMETHODIMP nsSystemPrefService::RemoveObserver(const char *aDomain, nsIObserver *aObserver) ++static nsresult ReverseApplyWindowOpen(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) + { +- nsresult rv; +- +- NS_ENSURE_ARG_POINTER(aDomain); +- NS_ENSURE_ARG_POINTER(aObserver); +- NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE); +- +- if (!mObservers) +- return NS_OK; +- +- PRUint32 prefAtom; +- // make sure the pref name is supported +- rv = mGConf->GetAtomForMozKey(aDomain, &prefAtom); +- NS_ENSURE_SUCCESS(rv, rv); +- +- // need to find the index of observer, so we can remove it +- PRIntn count = mObservers->Count(); +- if (count <= 0) +- return NS_OK; +- +- PRIntn i; +- SysPrefCallbackData *pCallbackData; +- for (i = 0; i < count; ++i) { +- pCallbackData = (SysPrefCallbackData *)mObservers->ElementAt(i); +- if (pCallbackData) { +- nsCOMPtr observerRef; +- if (pCallbackData->bIsWeakRef) { +- nsCOMPtr weakRefFactory = +- do_QueryInterface(aObserver); +- if (weakRefFactory) { +- nsCOMPtr tmp = +- do_GetWeakReference(aObserver); +- observerRef = tmp; +- } +- } +- if (!observerRef) +- observerRef = aObserver; +- +- if (pCallbackData->observer == observerRef && +- pCallbackData->prefAtom == prefAtom) { +- rv = mGConf->NotifyRemove(prefAtom, pCallbackData); +- if (NS_SUCCEEDED(rv)) { +- mObservers->RemoveElementAt(i); +- NS_RELEASE(pCallbackData->observer); +- nsMemory::Free(pCallbackData); +- } +- return rv; +- } ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ PRBool allDisabled = PR_TRUE; ++ PRBool curValues[NUM_ELEM(windowOpenFeatures)]; ++ for (PRUint32 i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) { ++ nsresult rv = prefs->GetBoolPref(windowOpenFeatures[i], &curValues[i]); ++ if (NS_FAILED(rv)) ++ return rv; ++ if (!curValues[i]) { ++ allDisabled = PR_FALSE; + } + } ++ gconf_client_set_bool(aClient, GConfKey_DisableJSChrome, allDisabled, nsnull); + return NS_OK; + } + +-void +-nsSystemPrefService::OnPrefChange(PRUint32 aPrefAtom, void *aData) +-{ +- if (!mInitialized) +- return; ++/** ++ * The relationship R is ++ * If "/apps/firefox/lockdown/disable_unsafe_protocol" is true then ++ * -- "network.protocol-handler.blocked-default" is true ++ * -- "network.protocol-handler.blocked.XYZ" is false if and only if ++ * XYZ is a builtin non-disablable protocol or in ++ * "/apps/firefox/lockdown/additional_safe_protocols" ++ * AND if "/apps/firefox/lockdown/disable_unsafe_protocol" is false then ++ * -- "network.protocol-handler.blocked-default" is false ++ * -- if "network.protocol-handler.blocked.XYZ" exists then it is false ++ */ ++static const char GConfKey_DisableUnsafeProtocols[] = ++ "/apps/firefox/lockdown/disable_unsafe_protocol"; ++static const char GConfKey_AdditionalSafeProtocols[] = ++ "/apps/firefox/lockdown/additional_safe_protocols"; ++static const char MozKey_BlockedDefault[] = ++ "network.protocol-handler.blocked-default"; ++static const char MozKey_BlockedPrefix[] = ++ "network.protocol-handler.blocked."; ++static const char* nonDisablableBuiltinProtocols[] = ++ { "about", "data", "jar", "keyword", "resource", "viewsource", ++ "chrome", "moz-icon", "javascript", "file" }; ++static PRBool FindString(const char** aList, PRInt32 aCount, ++ const char* aStr) ++{ ++ for (PRInt32 i = 0; i < aCount; ++i) { ++ if (!strcmp(aStr, aList[i])) ++ return PR_TRUE; ++ } ++ return PR_FALSE; ++} ++typedef nsDataHashtable StringSet; ++/** Collect the set of protocol names that we want to set preferences for */ ++static nsresult AddAllProtocols(nsSystemPrefService* aPrefService, ++ const char* aSafeProtocols, ++ StringSet* aProtocolSet, ++ StringSet* aSafeSet) ++{ ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ PRUint32 childCount; ++ char **childArray = nsnull; ++ nsresult rv = prefs->GetChildList(MozKey_BlockedPrefix, &childCount, &childArray); ++ if (NS_FAILED(rv)) ++ return rv; ++ PRUint32 i; ++ for (i = 0; i < childCount; ++i) { ++ nsDependentCString tmp(childArray[i] + NUM_ELEM(MozKey_BlockedPrefix)-1); ++ aProtocolSet->Put(tmp, 1); // copies ++ } ++ for (i = 0; i < NUM_ELEM(nonDisablableBuiltinProtocols); ++i) { ++ nsDependentCString tmp(nonDisablableBuiltinProtocols[i]); ++ aProtocolSet->Put(tmp, 1); ++ } ++ i = 0; ++ while (aSafeProtocols[i]) { ++ const char* nextComma = strchr(aSafeProtocols+i, ','); ++ PRUint32 tokLen = nextComma ? nextComma - (aSafeProtocols+i) ++ : strlen(aSafeProtocols+i); ++ nsCAutoString tok(aSafeProtocols+i, tokLen); ++ aProtocolSet->Put(tok, 1); ++ aSafeSet->Put(tok, 1); ++ if (nextComma) { ++ i = nextComma - aSafeProtocols + 1; ++ } else { ++ break; ++ } ++ } ++ NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(childCount, childArray); ++ return NS_OK; ++} + +- SysPrefCallbackData *pData = (SysPrefCallbackData *)aData; +- if (pData->prefAtom != aPrefAtom) +- return; ++struct ProtocolPrefClosure { ++ StringSet safeProtocolSet; ++ nsIPrefBranch2* prefs; ++ nsISystemPref* prefSetter; ++ PRPackedBool disableUnsafe; ++ PRPackedBool lock; ++}; + +- nsCOMPtr observer; +- if (pData->bIsWeakRef) { +- nsCOMPtr weakRef = +- do_QueryInterface(pData->observer); +- if(weakRef) +- observer = do_QueryReferent(weakRef); +- if (!observer) { +- // this weak referenced observer went away, remove it from the list +- nsresult rv = mGConf->NotifyRemove(aPrefAtom, pData); +- if (NS_SUCCEEDED(rv)) { +- mObservers->RemoveElement(pData); +- NS_RELEASE(pData->observer); +- nsMemory::Free(pData); ++static PLDHashOperator PR_CALLBACK SetProtocolPref(const nsACString& aKey, ++ int aItem, ++ void* aClosure) ++{ ++ ProtocolPrefClosure* closure = static_cast(aClosure); ++ const nsCString& protocol = PromiseFlatCString(aKey); ++ PRBool blockProtocol = PR_FALSE; ++ if (closure->disableUnsafe && ++ !FindString(nonDisablableBuiltinProtocols, ++ NUM_ELEM(nonDisablableBuiltinProtocols), protocol.get()) && ++ !closure->safeProtocolSet.Get(aKey, nsnull)) { ++ blockProtocol = PR_TRUE; ++ } ++ ++ nsCAutoString prefName; ++ prefName.Append(MozKey_BlockedPrefix); ++ prefName.Append(protocol); ++ closure->prefSetter->SetOverridingMozillaBoolPref(prefName.get(), blockProtocol, ++ closure->lock); ++ return PL_DHASH_NEXT; ++} ++static nsresult ApplyUnsafeProtocols(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableUnsafeProtocols, nsnull) ++ || !gconf_client_key_is_writable(aClient, GConfKey_AdditionalSafeProtocols, nsnull); ++ gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableUnsafeProtocols, nsnull); ++ char* protocols = gconf_client_get_string(aClient, GConfKey_AdditionalSafeProtocols, nsnull); ++ if (!protocols) ++ return NS_ERROR_FAILURE; ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_BlockedDefault, disable, lock); ++ StringSet protocolSet; ++ ProtocolPrefClosure closure; ++ protocolSet.Init(); ++ closure.safeProtocolSet.Init(); ++ if (NS_SUCCEEDED(rv)) { ++ rv = AddAllProtocols(aPrefService, protocols, &protocolSet, ++ &closure.safeProtocolSet); ++ } ++ if (NS_SUCCEEDED(rv)) { ++ closure.disableUnsafe = disable; ++ closure.lock = lock; ++ closure.prefSetter = aPrefService->GetPrefs(); ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ closure.prefs = prefs; ++ protocolSet.EnumerateRead(SetProtocolPref, &closure); ++ } ++ g_free(protocols); ++ return rv; ++} ++ ++static nsresult ReverseApplyUnsafeProtocols(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ PRBool blockedDefault; ++ nsresult rv = prefs->GetBoolPref(MozKey_BlockedDefault, &blockedDefault); ++ if (NS_FAILED(rv)) ++ return rv; ++ nsCAutoString enabledProtocols; ++ PRUint32 childCount; ++ char **childArray = nsnull; ++ rv = prefs->GetChildList(MozKey_BlockedPrefix, &childCount, &childArray); ++ if (NS_FAILED(rv)) ++ return rv; ++ for (PRUint32 i = 0; i < childCount; ++i) { ++ PRBool val = PR_FALSE; ++ prefs->GetBoolPref(childArray[i], &val); ++ if (val) { ++ if (enabledProtocols.Length() > 0) { ++ enabledProtocols.Append(','); + } +- return; ++ enabledProtocols.Append(childArray[i] + NUM_ELEM(MozKey_BlockedPrefix)-1); + } + } +- else +- observer = do_QueryInterface(pData->observer); ++ NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(childCount, childArray); ++ gconf_client_set_bool(aClient, GConfKey_DisableUnsafeProtocols, blockedDefault, nsnull); ++ gconf_client_set_string(aClient, GConfKey_AdditionalSafeProtocols, ++ enabledProtocols.get(), nsnull); ++ return NS_OK; ++} + +- if (observer) +- observer->Observe(static_cast(this), +- NS_SYSTEMPREF_PREFCHANGE_TOPIC_ID, +- NS_ConvertUTF8toUTF16(mGConf->GetMozKey(aPrefAtom)). +- get()); ++/** ++ * Set config.lockdown.setwallpaper if and only if ++ * /desktop/gnome/background/picture_filename is write-only. Always ++ * lock it. ++ */ ++static const char MozKey_LockdownWallpaper[] = "config.lockdown.setwallpaper"; ++static const char GConfKey_WallpaperSetting[] = ++ "/desktop/gnome/background/picture_filename"; ++static nsresult ApplyWallpaper(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRBool canSetWallpaper = ++ gconf_client_key_is_writable(aClient, GConfKey_WallpaperSetting, nsnull); ++ return aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_LockdownWallpaper, ++ !canSetWallpaper, PR_TRUE); ++} ++// No ReverseApplyWallpaper because this Mozilla pref can never be ++// modified ++ ++/** ++ * The relationship R is ++ * "signon.rememberSignons" is true if and only if "/apps/firefox/web/disable_save_password" ++ * is false. ++ */ ++static const char MozKey_RememberSignons[] = "signon.rememberSignons"; ++static const char GConfKey_DisableSavePassword[] = "/apps/firefox/web/disable_save_password"; ++static nsresult ApplyDisableSavePassword(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisableSavePassword, nsnull); ++ gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisableSavePassword, nsnull); ++ return aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_RememberSignons, !disable, lock); ++} ++ ++static nsresult ReverseApplyDisableSavePassword(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ PRBool remember; ++ nsresult rv = prefs->GetBoolPref(MozKey_RememberSignons, &remember); ++ if (NS_FAILED(rv)) ++ return rv; ++ gconf_client_set_bool(aClient, GConfKey_DisableSavePassword, !remember, nsnull); ++ return NS_OK; + } + +-/************************************************************* +- * GConfProxy ++/** ++ * The relationship R is ++ * "permissions.default.image" is 1 (nsIPermissionManager::ALLOW_ACTION) if and only if ++ * "/apps/firefox/web/images_load" is 0, AND ++ * "permissions.default.image" is 2 (nsIPermissionManager::DENY_ACTION) if and only if ++ * "/apps/firefox/web/images_load" is 2, AND ++ * "permissions.default.image" is 3 if and only if "/apps/firefox/web/images_load" is 1 + * +- ************************************************************/ +- +-struct GConfFuncListType { +- const char *FuncName; +- PRFuncPtr FuncPtr; +-}; +- +-struct PrefNamePair { +- const char *mozPrefName; +- const char *gconfPrefName; +-}; +- +-const char +-GConfProxy::sPrefGConfKey[] = "accessibility.unix.gconf2.shared-library"; +-const char GConfProxy::sDefaultLibName1[] = "libgconf-2.so.4"; +-const char GConfProxy::sDefaultLibName2[] = "libgconf-2.so"; +- +-#define GCONF_FUNCS_POINTER_BEGIN \ +- static GConfFuncListType sGConfFuncList[] = { +-#define GCONF_FUNCS_POINTER_ADD(func_name) \ +- {func_name, nsnull}, +-#define GCONF_FUNCS_POINTER_END \ +- {nsnull, nsnull}, }; +- +-GCONF_FUNCS_POINTER_BEGIN +- GCONF_FUNCS_POINTER_ADD("gconf_client_get_default") // 0 +- GCONF_FUNCS_POINTER_ADD("gconf_client_get_bool") // 1 +- GCONF_FUNCS_POINTER_ADD("gconf_client_get_string") //2 +- GCONF_FUNCS_POINTER_ADD("gconf_client_get_int") //3 +- GCONF_FUNCS_POINTER_ADD("gconf_client_notify_add") //4 +- GCONF_FUNCS_POINTER_ADD("gconf_client_notify_remove") //5 +- GCONF_FUNCS_POINTER_ADD("gconf_client_add_dir") //6 +- GCONF_FUNCS_POINTER_ADD("gconf_client_remove_dir") //7 +- GCONF_FUNCS_POINTER_ADD("gconf_entry_get_value") //8 +- GCONF_FUNCS_POINTER_ADD("gconf_entry_get_key") //9 +- GCONF_FUNCS_POINTER_ADD("gconf_value_get_bool") //10 +- GCONF_FUNCS_POINTER_ADD("gconf_value_get_string") //11 +- GCONF_FUNCS_POINTER_ADD("gconf_value_get_int") //12 +- GCONF_FUNCS_POINTER_ADD("gconf_client_get_list") //13 +-GCONF_FUNCS_POINTER_END +- +-///////////////////////////////////////////////////////////////////////////// +-// the list is the mapping table, between mozilla prefs and gconf prefs +-// It is expected to include all the pref pairs that are related in mozilla +-// and gconf. +-// +-// Note: the prefs listed here are not neccessarily be read from gconf, they +-// are the prefs that could be read from gconf. Mozilla has another +-// list (see sSysPrefList in nsSystemPref.cpp) that decide which prefs +-// are really read. +-////////////////////////////////////////////////////////////////////////////// +- +-static const PrefNamePair sPrefNameMapping[] = { +-#include "gconf_pref_list.inc" +- {nsnull, nsnull}, +-}; +- +-PRBool PR_CALLBACK +-gconfDeleteObserver(void *aElement, void *aData) { +- nsMemory::Free(aElement); +- return PR_TRUE; ++ * Also, we set pref.advanced.images.disable_button.view_image iff ++ * /apps/firefox/web/images_load is read-only ++ * And we set permissions.default.honorExceptions iff ++ * /apps/firefox/web/images_load is not read-only ++ */ ++static const char MozKey_ImagePermissions[] = "permissions.default.image"; ++static const char MozKey_ImageExceptions[] = "permissions.honorExceptions.image"; ++static const char MozKey_ImageViewExceptions[] = "pref.advanced.images.disable_button.view_image"; ++static const char GConfKey_LoadImages[] = "/apps/firefox/web/images_load"; ++static nsresult ApplyLoadImages(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_LoadImages, nsnull); ++ // 0 == accept, 1 == no-foreign, 2 == reject ++ gint setting = gconf_client_get_int(aClient, GConfKey_LoadImages, nsnull); ++ PRInt32 pref; ++ switch (setting) { ++ case 0: pref = nsIPermissionManager::ALLOW_ACTION; break; ++ case 2: pref = nsIPermissionManager::DENY_ACTION; break; ++ case 1: pref = 3; break; ++ default: return NS_ERROR_FAILURE; ++ } ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_ImageExceptions, !lock, lock); ++ if (NS_FAILED(rv)) ++ return rv; ++ rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_ImageViewExceptions, lock, lock); ++ if (NS_FAILED(rv)) ++ return rv; ++ return aPrefService->GetPrefs()-> ++ SetOverridingMozillaIntPref(MozKey_ImagePermissions, pref, lock); + } + +-GConfProxy::GConfProxy(nsSystemPrefService *aSysPrefService): +- mGConfClient(nsnull), +- mGConfLib(nsnull), +- mInitialized(PR_FALSE), +- mSysPrefService(aSysPrefService), +- mObservers(nsnull) ++static nsresult ReverseApplyLoadImages(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) + { ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ PRInt32 pref; ++ nsresult rv = prefs->GetIntPref(MozKey_ImagePermissions, &pref); ++ if (NS_FAILED(rv)) ++ return rv; ++ gint setting; ++ switch (pref) { ++ case nsIPermissionManager::ALLOW_ACTION: setting = 0; break; ++ case nsIPermissionManager::DENY_ACTION: setting = 2; break; ++ case 3: setting = 1; break; ++ default: return NS_ERROR_FAILURE; ++ } ++ gconf_client_set_int(aClient, GConfKey_LoadImages, setting, nsnull); ++ return NS_OK; + } + +-GConfProxy::~GConfProxy() ++/** ++ * The relationship R is ++ * "/apps/firefox/web/disable_popups" is true if and only if ++ * "dom.disable_open_during_load" is true ++ * AND if "/apps/firefox/web/disable_popups" is true then ++ * "privacy.popups.showBrowserMessage" is false. ++ */ ++static const char MozKey_DisablePopups[] = "dom.disable_open_during_load"; ++static const char MozKey_DisableBrowserPopupMessage[] = "privacy.popups.showBrowserMessage"; ++static const char GConfKey_DisablePopups[] = "/apps/firefox/web/disable_popups"; ++static nsresult ApplyDisablePopups(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) ++{ ++ PRBool lock = !gconf_client_key_is_writable(aClient, GConfKey_DisablePopups, nsnull); ++ gboolean disable = gconf_client_get_bool(aClient, GConfKey_DisablePopups, nsnull); ++ nsresult rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_DisablePopups, disable, lock); ++ if (NS_SUCCEEDED(rv)) { ++ if (disable) { ++ rv = aPrefService->GetPrefs()-> ++ SetOverridingMozillaBoolPref(MozKey_DisableBrowserPopupMessage, PR_TRUE, lock); ++ } else { ++ rv = aPrefService->GetPrefs()-> ++ StopOverridingMozillaPref(MozKey_DisableBrowserPopupMessage); ++ } ++ } ++ return rv; ++} ++ ++static nsresult ReverseApplyDisablePopups(nsSystemPrefService* aPrefService, ++ GConfClient* aClient) + { +- if (mGConfClient) +- g_object_unref(G_OBJECT(mGConfClient)); ++ nsCOMPtr prefs = aPrefService->GetPrefs()->GetPrefUserBranch(); ++ PRBool disabled; ++ nsresult rv = prefs->GetBoolPref(MozKey_DisablePopups, &disabled); ++ if (NS_FAILED(rv)) ++ return rv; ++ gconf_client_set_bool(aClient, GConfKey_DisablePopups, disabled, nsnull); ++ return NS_OK; ++} + +- if (mObservers) { +- (void)mObservers->EnumerateForwards(gconfDeleteObserver, nsnull); +- delete mObservers; +- } ++static ComplexGConfPrefMapping sComplexGConfPrefMappings[] = { ++ {GConfKey_TrustedURIs, ApplyTrustedURIs}, ++ {GConfKey_DelegationURIs, ApplyDelegationURIs}, ++ {GConfKey_IgnoreHosts, ApplyIgnoreHosts}, ++ {GConfKey_ProxyMode, ApplyProxyMode}, ++ {GConfKey_DownloadFolder, ApplyDownloadFolder}, ++ {GConfKey_DisableCookies, ApplyDisableCookies}, ++ {GConfKey_DisableJSChrome, ApplyWindowOpen}, ++ {GConfKey_DisableUnsafeProtocols, ApplyUnsafeProtocols}, ++ {GConfKey_AdditionalSafeProtocols, ApplyUnsafeProtocols}, ++ {GConfKey_WallpaperSetting, ApplyWallpaper}, ++ {GConfKey_DisableSavePassword, ApplyDisableSavePassword}, ++ {GConfKey_LoadImages, ApplyLoadImages}, ++ {GConfKey_DisablePopups, ApplyDisablePopups} ++}; ++static ComplexMozPrefMapping sComplexMozPrefMappings[] = { ++ {MozKey_TrustedURIs, ReverseApplyTrustedURIs}, ++ {MozKey_DelegationURIs, ReverseApplyDelegationURIs}, ++ {MozKey_IgnoreHosts, ReverseApplyIgnoreHosts}, ++ {MozKey_ProxyMode, ReverseApplyProxyMode}, ++ {MozKey_UseDownloadDir, ReverseApplyDownloadFolder}, ++ {MozKey_DownloadDirType, ReverseApplyDownloadFolder}, ++ {MozKey_DownloadDirExplicit, ReverseApplyDownloadFolder}, ++ {MozKey_CookieBehavior, ReverseApplyDisableCookies}, ++ {MozKey_RememberSignons, ReverseApplyDisableSavePassword}, ++ {MozKey_ImagePermissions, ReverseApplyLoadImages}, ++ {MozKey_DisablePopups, ReverseApplyDisablePopups} ++}; ++// The unsafe protocol preferences are handled specially because ++// they affect an unknown number of Mozilla preferences ++// Window opener permissions are also handled specially so we don't have to ++// repeat the windowOpenFeatures list. ++ ++static PR_CALLBACK void GConfSimpleNotification(GConfClient* client, ++ guint cnxn_id, ++ GConfEntry *entry, ++ gpointer user_data) ++{ ++ nsSystemPrefService* service = static_cast(user_data); ++ SimplePrefMapping* map = static_cast( ++ service->GetSimpleCallbackData(cnxn_id)); ++ NS_ASSERTION(map, "Can't find mapping for callback"); ++ if (!map) ++ return; + +- // bug 379666: can't unload GConf-2 since it registers atexit handlers +- //PR_UnloadLibrary(mGConfLib); ++ ApplySimpleMapping(map, service->GetPrefs(), client); + } + +-PRBool +-GConfProxy::Init() +-{ +- SYSPREF_LOG(("GConfProxy:: Init GConfProxy\n")); +- if (!mSysPrefService) +- return PR_FALSE; +- if (mInitialized) +- return PR_TRUE; ++static PR_CALLBACK void GConfComplexNotification(GConfClient* client, ++ guint cnxn_id, ++ GConfEntry *entry, ++ gpointer user_data) ++{ ++ nsSystemPrefService* service = static_cast(user_data); ++ ComplexGConfPrefMapping* map = static_cast( ++ service->GetComplexCallbackData(cnxn_id)); ++ NS_ASSERTION(map, "Can't find mapping for callback"); ++ if (!map) ++ return; + +- nsCOMPtr pref = do_GetService(NS_PREF_CONTRACTID); +- if (!pref) +- return PR_FALSE; ++ map->callback(service, GetGConf()); ++} + +- nsXPIDLCString gconfLibName; +- nsresult rv; ++static const char GConfKey_Homepage_Url[] = ++ "/apps/firefox/general/homepage_url"; + +- //check if gconf-2 library is given in prefs +- rv = pref->GetCharPref(sPrefGConfKey, getter_Copies(gconfLibName)); +- if (NS_SUCCEEDED(rv)) { +- //use the library name in the preference +- SYSPREF_LOG(("GConf library in prefs is %s\n", gconfLibName.get())); +- mGConfLib = PR_LoadLibrary(gconfLibName.get()); +- } +- else { +- SYSPREF_LOG(("GConf library not specified in prefs, try the default: " +- "%s and %s\n", sDefaultLibName1, sDefaultLibName2)); +- mGConfLib = PR_LoadLibrary(sDefaultLibName1); +- if (!mGConfLib) +- mGConfLib = PR_LoadLibrary(sDefaultLibName2); ++nsresult nsSystemPrefService::LoadSystemPreferences(nsISystemPref* aPrefs) ++{ ++ mPref = aPrefs; ++ ++ GConfClient* client = GetGConf(); ++ PRUint32 i; ++ nsCOMPtr userPrefs = aPrefs->GetPrefUserBranch(); ++ ++ // Update gconf settings with any Mozilla settings that have ++ // changed from the default. Do it before we register our ++ // gconf notifications. ++ for (i = 0; i < NUM_ELEM(sSimplePrefMappings); ++i) { ++ gconf_client_add_dir(client, sSimplePrefMappings[i].gconfPrefName, ++ GCONF_CLIENT_PRELOAD_NONE, nsnull); ++ ++ PRBool hasUserPref = PR_FALSE; ++ nsresult rv = ++ userPrefs->PrefHasUserValue(sSimplePrefMappings[i].mozPrefName, ++ &hasUserPref); ++ if (NS_FAILED(rv)) ++ return rv; ++ if (hasUserPref && sSimplePrefMappings[i].allowWritesFromMozilla && ++ gconf_client_key_is_writable(client, ++ sSimplePrefMappings[i].gconfPrefName, ++ nsnull)) { ++ rv = ReverseApplySimpleMapping(&sSimplePrefMappings[i], ++ aPrefs, client); ++ if (NS_FAILED(rv)) ++ return rv; ++ } + } +- +- if (!mGConfLib) { +- SYSPREF_LOG(("Fail to load GConf library\n")); +- return PR_FALSE; ++ for (i = 0; i < NUM_ELEM(sComplexGConfPrefMappings); ++i) { ++ gconf_client_add_dir(client, sComplexGConfPrefMappings[i].gconfPrefName, ++ GCONF_CLIENT_PRELOAD_NONE, nsnull); ++ } ++ ComplexMozPrefChanged lastMozCallback = nsnull; ++ for (i = 0; i < NUM_ELEM(sComplexMozPrefMappings); ++i) { ++ PRBool hasUserPref = PR_FALSE; ++ nsresult rv = ++ userPrefs->PrefHasUserValue(sComplexMozPrefMappings[i].mozPrefName, ++ &hasUserPref); ++ if (NS_FAILED(rv)) ++ return rv; ++ if (hasUserPref) { ++ ComplexMozPrefChanged cb = sComplexMozPrefMappings[i].callback; ++ if (cb != lastMozCallback) { ++ cb(this, client); ++ lastMozCallback = cb; ++ } ++ } + } +- +- //check every func we need in the gconf library +- GConfFuncListType *funcList; +- PRFuncPtr func; +- for (funcList = sGConfFuncList; funcList->FuncName; ++funcList) { +- func = PR_FindFunctionSymbol(mGConfLib, funcList->FuncName); +- if (!func) { +- SYSPREF_LOG(("Check GConf Func Error: %s", funcList->FuncName)); +- goto init_failed_unload; ++ ++ // Register simple mappings and callbacks ++ for (i = 0; i < NUM_ELEM(sSimplePrefMappings); ++i) { ++ guint cx = gconf_client_notify_add(client, ++ sSimplePrefMappings[i].gconfPrefName, ++ GConfSimpleNotification, this, ++ nsnull, nsnull); ++ mGConfSimpleCallbacks.Put(cx, &sSimplePrefMappings[i]); ++ nsresult rv = ApplySimpleMapping(&sSimplePrefMappings[i], aPrefs, client); ++ if (NS_FAILED(rv)) ++ return rv; ++ } ++ ++ ComplexGConfPrefChanged lastCallback = nsnull; ++ for (i = 0; i < NUM_ELEM(sComplexGConfPrefMappings); ++i) { ++ guint cx = gconf_client_notify_add(client, ++ sComplexGConfPrefMappings[i].gconfPrefName, ++ GConfComplexNotification, this, ++ nsnull, nsnull); ++ mGConfComplexCallbacks.Put(cx, &sComplexGConfPrefMappings[i]); ++ ComplexGConfPrefChanged cb = sComplexGConfPrefMappings[i].callback; ++ if (cb != lastCallback) { ++ cb(this, client); ++ lastCallback = cb; + } +- funcList->FuncPtr = func; + } + +- InitFuncPtrs(); +- +- mGConfClient = GConfClientGetDefault(); +- +- // Don't unload past this point, since GConf's initialization of ORBit +- // causes atexit handlers to be registered. ++ if (!gconf_client_get(client, GConfKey_DisablePopups, nsnull)) ++ { ++ gconf_client_set_bool(client, GConfKey_DisablePopups, true, nsnull); ++ } + +- if (!mGConfClient) { +- SYSPREF_LOG(("Fail to Get default gconf client\n")); +- goto init_failed; ++ if (!gconf_client_get(client, GConfKey_Homepage_Url, nsnull)) ++ { ++ gconf_client_set_string(client, GConfKey_Homepage_Url, "", nsnull); + } +- mInitialized = PR_TRUE; +- return PR_TRUE; + +- init_failed_unload: +- PR_UnloadLibrary(mGConfLib); +- init_failed: +- mGConfLib = nsnull; +- return PR_FALSE; +-} ++ ApplyUnsafeProtocols(this, client); + +-nsresult +-GConfProxy::GetBoolPref(const char *aMozKey, PRBool *retval) +-{ +- NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE); +- *retval = GConfClientGetBool(mGConfClient, MozKey2GConfKey(aMozKey), NULL); + return NS_OK; + } + +-nsresult +-GConfProxy::GetCharPref(const char *aMozKey, char **retval) ++nsresult nsSystemPrefService::NotifyMozillaPrefChanged(const char* aPrefName) + { +- NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE); +- +- const gchar *gconfkey = MozKey2GConfKey(aMozKey); +- +- if (!strcmp (aMozKey, "network.proxy.no_proxies_on")) { +- GSList *s; +- nsCString noproxy; +- GSList *gslist = GConfClientGetList(mGConfClient, gconfkey, +- GCONF_VALUE_STRING, NULL); ++ PRUint32 i; ++ GConfClient* client = GetGConf(); + +- for (s = gslist; s; s = g_slist_next(s)) { +- noproxy += (char *)s->data; +- noproxy += ", "; +- g_free ((char *)s->data); ++ for (i = 0; i < NUM_ELEM(sSimplePrefMappings); ++i) { ++ if (!strcmp(aPrefName, sSimplePrefMappings[i].mozPrefName)) { ++ ReverseApplySimpleMapping(&sSimplePrefMappings[i], ++ mPref, client); + } +- g_slist_free (gslist); ++ } + +- *retval = PL_strdup(noproxy.get()); +- } else { +- gchar *str = GConfClientGetString(mGConfClient, gconfkey, NULL); +- if (str) { +- *retval = PL_strdup(str); +- g_free (str); ++ for (i = 0; i < NUM_ELEM(sComplexMozPrefMappings); ++i) { ++ if (!strcmp(aPrefName, sComplexMozPrefMappings[i].mozPrefName)) { ++ sComplexMozPrefMappings[i].callback(this, client); + } + } + +- return NS_OK; +-} +- +-nsresult +-GConfProxy::GetIntPref(const char *aMozKey, PRInt32 *retval) +-{ +- NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE); +- if (strcmp (aMozKey, "network.proxy.type") == 0) { +- gchar *str; +- +- str = GConfClientGetString(mGConfClient, +- MozKey2GConfKey (aMozKey), NULL); +- +- if (str) { +- if (strcmp (str, "manual") == 0) +- *retval = 1; +- else if (strcmp (str, "auto") == 0) +- *retval = 2; +- else +- *retval = 0; +- +- g_free (str); +- } else +- *retval = 0; +- } else { +- *retval = GConfClientGetInt(mGConfClient, +- MozKey2GConfKey(aMozKey), NULL); ++ for (i = 0; i < NUM_ELEM(windowOpenFeatures); ++i) { ++ if (!strcmp(aPrefName, windowOpenFeatures[i])) { ++ ReverseApplyWindowOpen(this, client); ++ } + } + ++ ReverseApplyUnsafeProtocols(this, client); ++ + return NS_OK; + } + +-nsresult +-GConfProxy::NotifyAdd (PRUint32 aAtom, void *aUserData) ++static PLDHashOperator PR_CALLBACK UnregisterSimple(const PRUint32& aKey, ++ SimplePrefMapping* aData, ++ void* aClosure) + { +- NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE); +- +- const char *gconfKey = GetGConfKey(aAtom); +- if (!gconfKey) +- return NS_ERROR_FAILURE; +- +- if (!mObservers) { +- mObservers = new nsAutoVoidArray(); +- if (mObservers == nsnull) +- return NS_ERROR_OUT_OF_MEMORY; +- } +- +- GConfCallbackData *pData = (GConfCallbackData *) +- nsMemory::Alloc(sizeof(GConfCallbackData)); +- NS_ENSURE_TRUE(pData, NS_ERROR_OUT_OF_MEMORY); +- +- pData->proxy = this; +- pData->userData = aUserData; +- pData->atom = aAtom; +- mObservers->AppendElement(pData); +- +- GConfClientAddDir(mGConfClient, gconfKey, +- 0, // GCONF_CLIENT_PRELOAD_NONE, don't preload anything +- NULL); +- +- pData->notifyId = GConfClientNotifyAdd(mGConfClient, gconfKey, +- gconf_key_listener, pData, +- NULL, NULL); +- return NS_OK; ++ GConfClient* client = GetGConf(); ++ gconf_client_notify_remove(client, aKey); ++ gconf_client_remove_dir(client, aData->gconfPrefName, nsnull); ++ return PL_DHASH_NEXT; + } + +-nsresult +-GConfProxy::NotifyRemove (PRUint32 aAtom, const void *aUserData) ++static PLDHashOperator PR_CALLBACK UnregisterComplex(const PRUint32& aKey, ++ ComplexGConfPrefMapping* aData, ++ void* aClosure) + { +- NS_ENSURE_TRUE(mInitialized, NS_ERROR_FAILURE); +- +- PRIntn count = mObservers->Count(); +- if (count <= 0) +- return NS_OK; +- +- PRIntn i; +- GConfCallbackData *pData; +- for (i = 0; i < count; ++i) { +- pData = (GConfCallbackData *)mObservers->ElementAt(i); +- if (pData && pData->atom == aAtom && pData->userData == aUserData) { +- GConfClientNotifyRemove(mGConfClient, pData->notifyId); +- GConfClientRemoveDir(mGConfClient, +- GetGConfKey(pData->atom), NULL); +- mObservers->RemoveElementAt(i); +- nsMemory::Free(pData); +- break; +- } +- } +- return NS_OK; ++ GConfClient* client = GetGConf(); ++ gconf_client_notify_remove(client, aKey); ++ gconf_client_remove_dir(client, aData->gconfPrefName, nsnull); ++ return PL_DHASH_NEXT; + } + +-void +-GConfProxy::InitFuncPtrs() +-{ +- //gconf client funcs +- GConfClientGetDefault = +- (GConfClientGetDefaultType) sGConfFuncList[0].FuncPtr; +- GConfClientGetBool = +- (GConfClientGetBoolType) sGConfFuncList[1].FuncPtr; +- GConfClientGetString = +- (GConfClientGetStringType) sGConfFuncList[2].FuncPtr; +- GConfClientGetInt = +- (GConfClientGetIntType) sGConfFuncList[3].FuncPtr; +- GConfClientNotifyAdd = +- (GConfClientNotifyAddType) sGConfFuncList[4].FuncPtr; +- GConfClientNotifyRemove = +- (GConfClientNotifyRemoveType) sGConfFuncList[5].FuncPtr; +- GConfClientAddDir = +- (GConfClientAddDirType) sGConfFuncList[6].FuncPtr; +- GConfClientRemoveDir = +- (GConfClientRemoveDirType) sGConfFuncList[7].FuncPtr; +- +- //gconf entry funcs +- GConfEntryGetValue = (GConfEntryGetValueType) sGConfFuncList[8].FuncPtr; +- GConfEntryGetKey = (GConfEntryGetKeyType) sGConfFuncList[9].FuncPtr; +- +- //gconf value funcs +- GConfValueGetBool = (GConfValueGetBoolType) sGConfFuncList[10].FuncPtr; +- GConfValueGetString = (GConfValueGetStringType) sGConfFuncList[11].FuncPtr; +- GConfValueGetInt = (GConfValueGetIntType) sGConfFuncList[12].FuncPtr; +- +- //gconf client list func +- GConfClientGetList = +- (GConfClientGetListType) sGConfFuncList[13].FuncPtr; +-} +- +-void +-GConfProxy::OnNotify(void *aClient, void * aEntry, PRUint32 aNotifyId, +- GConfCallbackData *aData) ++nsresult nsSystemPrefService::NotifyUnloadSystemPreferences() + { +- if (!mInitialized || !aEntry || (mGConfClient != aClient) || !aData) +- return; +- +- if (GConfEntryGetValue(aEntry) == NULL) +- return; ++ // Unregister callbacks ++ mGConfSimpleCallbacks.EnumerateRead(UnregisterSimple, this); ++ mGConfSimpleCallbacks.Clear(); ++ mGConfComplexCallbacks.EnumerateRead(UnregisterComplex, this); ++ mGConfComplexCallbacks.Clear(); + +- PRUint32 prefAtom; +- nsresult rv = GetAtomForGConfKey(GConfEntryGetKey(aEntry), &prefAtom); +- if (NS_FAILED(rv)) +- return; +- +- mSysPrefService->OnPrefChange(prefAtom, aData->userData); ++ return NS_OK; + } + +-nsresult +-GConfProxy::GetAtom(const char *aKey, PRUint8 aNameType, PRUint32 *aAtom) +-{ +- if (!aKey) +- return NS_ERROR_FAILURE; +- PRUint32 prefSize = sizeof(sPrefNameMapping) / sizeof(sPrefNameMapping[0]); +- for (PRUint32 index = 0; index < prefSize; ++index) { +- if (!strcmp((aNameType == 0) ? sPrefNameMapping[index].mozPrefName : +- sPrefNameMapping[index].gconfPrefName, aKey)) { +- *aAtom = index; +- return NS_OK; +- } +- } +- return NS_ERROR_FAILURE; +-} ++// Factory stuff + +-const char * +-GConfProxy::GetKey(PRUint32 aAtom, PRUint8 aNameType) +-{ +- PRUint32 mapSize = sizeof(sPrefNameMapping) / sizeof(sPrefNameMapping[0]); +- if (aAtom >= 0 && aAtom < mapSize) +- return (aNameType == 0) ? sPrefNameMapping[aAtom].mozPrefName : +- sPrefNameMapping[aAtom].gconfPrefName; +- return NULL; +-} ++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemPrefService, Init) + +-inline const char * +-GConfProxy::MozKey2GConfKey(const char *aMozKey) +-{ +- PRUint32 atom; +- nsresult rv = GetAtomForMozKey(aMozKey, &atom); +- if (NS_SUCCEEDED(rv)) +- return GetGConfKey(atom); +- return NULL; +-} ++static const nsModuleComponentInfo components[] = { ++ { NS_SYSTEMPREF_SERVICE_CLASSNAME, ++ NS_SYSTEMPREF_SERVICE_CID, ++ NS_SYSTEMPREF_SERVICE_CONTRACTID, ++ nsSystemPrefServiceConstructor, ++ }, ++}; + +-/* static */ +-void gconf_key_listener (void* client, guint cnxn_id, +- void *entry, gpointer user_data) +-{ +- SYSPREF_LOG(("...SYSPREF_LOG...key listener get called \n")); +- if (!user_data) +- return; +- GConfCallbackData *pData = reinterpret_cast +- (user_data); +- pData->proxy->OnNotify(client, entry, cnxn_id, pData); +-} ++NS_IMPL_NSGETMODULE(nsSystemPrefServiceModule, components) +diff -Naur mozilla.orig/extensions/pref/system-pref/src/gconf/nsSystemPrefService.h mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.h +--- mozilla.orig/extensions/pref/system-pref/src/gconf/nsSystemPrefService.h 2005-02-23 08:15:37.000000000 -0800 ++++ mozilla/extensions/pref/system-pref/src/gconf/nsSystemPrefService.h 1969-12-31 16:00:00.000000000 -0800 +@@ -1,93 +0,0 @@ +-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +-/* vim:expandtab:shiftwidth=4:tabstop=4: +- */ +-/* ***** BEGIN LICENSE BLOCK ***** +- * Version: NPL 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.org code. +- * +- * The Initial Developer of the Original Code is Sun Microsystems, Inc. +- * Portions created by Sun Microsystems are Copyright (C) 2003 Sun +- * Microsystems, Inc. All Rights Reserved. +- * +- * Original Author: Bolian Yin (bolian.yin@sun.com) +- * +- * 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 NPL, 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 NPL, the GPL or the LGPL. +- * +- * ***** END LICENSE BLOCK ***** */ +- +-#ifndef __SYSTEM_PREF_SERVICE_H__ +-#define __SYSTEM_PREF_SERVICE_H__ +- +-#include "prlink.h" +-#include "nsVoidArray.h" +-#include "nsWeakPtr.h" +-#include "nsIPrefBranch.h" +-#include "nsIPrefBranch2.h" +- +-class GConfProxy; +- +-//////////////////////////////////////////////////////////////////////////// +-// nsSystemPrefService provide a interface for read system prefs. It is +-// platform related. This directory (system-pref/gconf) impls it for gconf +-// on the gconf platform. +-//////////////////////////////////////////////////////////////////////////// +- +-class nsSystemPrefService : public nsIPrefBranch2 +-{ +-public: +- NS_DECL_ISUPPORTS +- NS_DECL_NSIPREFBRANCH +- NS_DECL_NSIPREFBRANCH2 +- +- nsSystemPrefService(); +- virtual ~nsSystemPrefService(); +- nsresult Init(); +- +- void OnPrefChange(PRUint32 aPrefAtom, void *aData); +- +-private: +- PRBool mInitialized; +- GConfProxy *mGConf; +- +- //listeners +- nsAutoVoidArray *mObservers; +-}; +- +-#define NS_SYSTEMPREF_SERVICE_CID \ +- { /* {94f1de09-d0e5-4ca8-94c2-98b049316b7f} */ \ +- 0x94f1de09, \ +- 0xd0e5, \ +- 0x4ca8, \ +- { 0x94, 0xc2, 0x98, 0xb0, 0x49, 0x31, 0x6b, 0x7f } \ +- } +- +-#define NS_SYSTEMPREF_SERVICE_CONTRACTID "@mozilla.org/system-preference-service;1" +-#define NS_SYSTEMPREF_SERVICE_CLASSNAME "System Preferences Service" +- +-#define NS_SYSTEMPREF_PREFCHANGE_TOPIC_ID "nsSystemPrefService:pref-changed" +- +-#endif /* __SYSTEM_PREF_SERVICE_H__ */ +diff -Naur mozilla.orig/extensions/pref/system-pref/src/Makefile.in mozilla/extensions/pref/system-pref/src/Makefile.in +--- mozilla.orig/extensions/pref/system-pref/src/Makefile.in 2005-12-31 04:14:42.000000000 -0800 ++++ mozilla/extensions/pref/system-pref/src/Makefile.in 2008-04-01 16:50:49.000000000 -0700 +@@ -43,12 +43,14 @@ + include $(DEPTH)/config/autoconf.mk + + MODULE = system-pref +-LIBRARY_NAME = system-pref_s ++MODULE_NAME = nsSystemPrefModule ++LIBRARY_NAME = system-pref + ifneq ($(OS_ARCH),WINNT) + SHORT_LIBNAME = syspref + endif + +-# We want to force the creation of a static lib. ++IS_COMPONENT = 1 ++EXPORT_LIBRARY = 1 + FORCE_STATIC_LIB = 1 + LIBXUL_LIBRARY = 1 + +@@ -58,27 +60,22 @@ + pref \ + $(NULL) + +-ifdef MOZ_ENABLE_GTK2 ++ifdef MOZ_ENABLE_GCONF + DIRS = gconf + endif + +-EXTRA_DSO_LDOPTS = \ +- -L$(DIST)/bin \ +- $(MOZ_COMPONENT_LIBS) \ +- $(NULL) +- + CPPSRCS = \ + nsSystemPref.cpp \ ++ nsSystemPrefFactory.cpp \ + $(NULL) + ++EXTRA_DSO_LDOPTS = \ ++ $(MOZ_COMPONENT_LIBS) \ ++ $(NULL) ++ + EXPORTS = \ +- nsSystemPrefLog.h \ ++ nsISystemPrefService.h \ + $(NULL) + +-include $(topsrcdir)/config/rules.mk + +-ifdef MOZ_ENABLE_GTK2 +-INCLUDES += \ +- -I$(srcdir)/gconf \ +- $(NULL) +-endif ++include $(topsrcdir)/config/rules.mk +diff -Naur mozilla.orig/extensions/pref/system-pref/src/nsISystemPrefService.h mozilla/extensions/pref/system-pref/src/nsISystemPrefService.h +--- mozilla.orig/extensions/pref/system-pref/src/nsISystemPrefService.h 1969-12-31 16:00:00.000000000 -0800 ++++ mozilla/extensions/pref/system-pref/src/nsISystemPrefService.h 2008-04-01 16:50:49.000000000 -0700 +@@ -0,0 +1,109 @@ ++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++/* vim:expandtab:shiftwidth=4:tabstop=4: ++ */ ++/* ***** 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.org code. ++ * ++ * The Initial Developer of the Original Code is Novell ++ * Portions created by Novell are Copyright (C) 2005 Novell, ++ * All Rights Reserved. ++ * ++ * Original Author: Robert O'Callahan (rocallahan@novell.com) ++ * ++ * 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 NPL, 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 NPL, the GPL or the LGPL. ++ * ++ * ***** END LICENSE BLOCK ***** */ ++ ++#ifndef nsISystemPrefService_h__ ++#define nsISystemPrefService_h__ ++ ++#include "nsCOMPtr.h" ++#include "nsIPrefBranchInternal.h" ++ ++#define NS_SYSTEMPREF_SERVICE_CONTRACTID "@mozilla.org/system-preferences-service;1" ++ ++#define NS_ISYSTEMPREFSERVICE_IID \ ++{ 0x006e1cfd, 0xd66a, 0x40b9, \ ++ { 0x84, 0xa1, 0x84, 0xf3, 0xe6, 0xa2, 0xca, 0xbc } } ++ ++class nsISystemPref { ++public: ++ /** ++ * Call one of these three methods to override a Mozilla ++ * preference with a system value. You can call it multiple ++ * times to change the value of a given preference to track ++ * the underlying system value. ++ * ++ * If aLocked is true then we set the default preference and ++ * lock it so the user value is ignored. If aLocked is false ++ * then we unlock the Mozilla preference and set the Mozilla ++ * user value. ++ */ ++ virtual nsresult SetOverridingMozillaBoolPref(const char* aPrefName, ++ PRBool aValue, PRBool aLocked, ++ PRBool aPresent = PR_TRUE) = 0; ++ virtual nsresult SetOverridingMozillaIntPref(const char* aPrefName, ++ PRInt32 aValue, PRBool aLocked, ++ PRBool aPresent = PR_TRUE) = 0; ++ virtual nsresult SetOverridingMozillaStringPref(const char* aPrefName, ++ const char* aValue, PRBool aLocked, ++ PRBool aPresent = PR_TRUE) = 0; ++ virtual nsresult StopOverridingMozillaPref(const char* aPrefName) = 0; ++ virtual already_AddRefed GetPrefUserBranch() = 0; ++ virtual already_AddRefed GetPrefDefaultBranch() = 0; ++}; ++ ++class nsISystemPrefService : public nsISupports { ++public: ++ NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISYSTEMPREFSERVICE_IID) ++ ++ /** ++ * Load the system prefs from the store into their corresponding ++ * Mozilla prefs, calling SetOverridingMozillaPref on each ++ * such pref. ++ */ ++ virtual nsresult LoadSystemPreferences(nsISystemPref* aPrefs) = 0; ++ ++ /** ++ * Notify that a Mozilla user pref that is being overridden by the ++ * store has changed. The new value of the Mozilla pref should be ++ * written back to the store. ++ */ ++ virtual nsresult NotifyMozillaPrefChanged(const char* aPrefName) = 0; ++ ++ /** ++ * Notify that we're about to stop using the system prefs. After ++ * this, nsSystemPref will automatically stop overriding all ++ * Mozilla prefs that are being overridden. ++ */ ++ virtual nsresult NotifyUnloadSystemPreferences() = 0; ++}; ++ ++NS_DEFINE_STATIC_IID_ACCESSOR(nsISystemPrefService, NS_ISYSTEMPREFSERVICE_IID) ++ ++#endif +diff -Naur mozilla.orig/extensions/pref/system-pref/src/nsSystemPref.cpp mozilla/extensions/pref/system-pref/src/nsSystemPref.cpp +--- mozilla.orig/extensions/pref/system-pref/src/nsSystemPref.cpp 2006-04-17 15:03:46.000000000 -0700 ++++ mozilla/extensions/pref/system-pref/src/nsSystemPref.cpp 2008-04-01 16:50:49.000000000 -0700 +@@ -24,6 +24,7 @@ + * Original Author: Bolian Yin (bolian.yin@sun.com) + * + * Contributor(s): ++ * Robert O'Callahan (rocallahan@novell.com) + * + * 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 +@@ -41,66 +42,60 @@ + + #include "nsSystemPref.h" + #include "nsIObserverService.h" ++#include "nsIAppStartupNotifier.h" ++#include "nsIPrefService.h" ++#include "nsIPrefBranch.h" ++#include "nsICategoryManager.h" ++#include "nsIServiceManager.h" + + #include "nsSystemPrefLog.h" +-#include "nsSystemPrefService.h" + #include "nsString.h" + +-const char sSysPrefString[] = "config.use_system_prefs"; +-union MozPrefValue { +- char * stringVal; +- PRInt32 intVal; +- PRBool boolVal; +-}; ++#include + + struct SysPrefItem { +- const char *prefName; // mozilla pref string name +- MozPrefValue defaultValue; // store the mozilla default value +- PRBool isLocked; // store the mozilla lock status ++ // Saved values on both branches ++ PRInt32 savedUserValueScalar; ++ char* savedUserValueString; ++ PRInt32 savedDefaultValueScalar; ++ char* savedDefaultValueString; ++ // When this is true, then the value was locked originally ++ PRPackedBool savedLocked; ++ // When this is true, then there was a user value ++ PRPackedBool savedUserPresent; ++ PRPackedBool ignore; ++ + SysPrefItem() { +- prefName = nsnull; +- defaultValue.intVal = 0; +- defaultValue.stringVal = nsnull; +- defaultValue.boolVal = PR_FALSE; +- isLocked = PR_FALSE; ++ savedUserValueScalar = 0; ++ savedUserValueString = nsnull; ++ savedDefaultValueScalar = 0; ++ savedDefaultValueString = nsnull; ++ savedUserPresent = PR_FALSE; ++ savedLocked = PR_FALSE; ++ ignore = PR_FALSE; + } +- void SetPrefName(const char *aPrefName) { +- prefName = aPrefName; ++ ++ virtual ~SysPrefItem() { ++ nsMemory::Free(savedUserValueString); ++ nsMemory::Free(savedDefaultValueString); + } + }; + +-// all prefs that mozilla need to read from host system if they are available +-static const char *sSysPrefList[] = { +- "network.proxy.http", +- "network.proxy.http_port", +- "network.proxy.ftp", +- "network.proxy.ftp_port", +- "network.proxy.ssl", +- "network.proxy.ssl_port", +- "network.proxy.socks", +- "network.proxy.socks_port", +- "network.proxy.no_proxies_on", +- "network.proxy.autoconfig_url", +- "network.proxy.type", +- "config.use_system_prefs.accessibility", +-}; ++static const char sSysPrefString[] = "config.use_system_prefs"; + + PRLogModuleInfo *gSysPrefLog = NULL; + + NS_IMPL_ISUPPORTS2(nsSystemPref, nsIObserver, nsISupportsWeakReference) + +-nsSystemPref::nsSystemPref(): +- mSysPrefService(nsnull), +- mEnabled(PR_FALSE), +- mSysPrefs(nsnull) ++nsSystemPref::nsSystemPref() : mIgnorePrefSetting(PR_FALSE) + { ++ mSavedPrefs.Init(); ++ mCachedUserPrefBranch = nsnull; ++ mCachedDefaultPrefBranch = nsnull; + } + + nsSystemPref::~nsSystemPref() + { +- mSysPrefService = nsnull; +- mEnabled = PR_FALSE; +- delete [] mSysPrefs; + } + + /////////////////////////////////////////////////////////////////////////////// +@@ -131,6 +126,54 @@ + return(rv); + } + ++already_AddRefed ++nsSystemPref::GetPrefUserBranch() ++{ ++ if (mCachedUserPrefBranch) { ++ NS_ADDREF(mCachedUserPrefBranch); ++ return mCachedUserPrefBranch; ++ } ++ ++ nsresult rv; ++ nsCOMPtr prefService = ++ do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); ++ if (NS_FAILED(rv)) ++ return nsnull; ++ nsCOMPtr prefBranch; ++ rv = prefService->GetBranch(nsnull, getter_AddRefs(prefBranch)); ++ if (NS_FAILED(rv)) ++ return nsnull; ++ nsCOMPtr pb2(do_QueryInterface(prefBranch)); ++ if (!pb2) ++ return nsnull; ++ ++ nsIPrefBranch2* result = nsnull; ++ pb2.swap(result); ++ return result; ++} ++ ++already_AddRefed ++nsSystemPref::GetPrefDefaultBranch() ++{ ++ if (mCachedDefaultPrefBranch) { ++ NS_ADDREF(mCachedDefaultPrefBranch); ++ return mCachedDefaultPrefBranch; ++ } ++ ++ nsresult rv; ++ nsCOMPtr prefService = ++ do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); ++ if (NS_FAILED(rv)) ++ return nsnull; ++ nsCOMPtr prefBranch; ++ rv = prefService->GetDefaultBranch(nsnull, getter_AddRefs(prefBranch)); ++ if (NS_FAILED(rv)) ++ return nsnull; ++ nsIPrefBranch* pb = nsnull; ++ prefBranch.swap(pb); ++ return pb; ++} ++ + /////////////////////////////////////////////////////////////////////////////// + // nsSystemPref::Observe + // Observe notifications from mozilla pref system and system prefs (if enabled) +@@ -145,330 +188,438 @@ + if (!aTopic) + return NS_OK; + +- // if we are notified by pref service +- // check the system pref settings ++ nsCOMPtr userBranch = GetPrefUserBranch(); ++ PRBool enabled; ++ rv = userBranch->GetBoolPref(sSysPrefString, &enabled); ++ if (NS_FAILED(rv)) { ++ SYSPREF_LOG(("...Failed to Get %s\n", sSysPrefString)); ++ return rv; ++ } ++ + if (!nsCRT::strcmp(aTopic, NS_PREFSERVICE_READ_TOPIC_ID)) { ++ // The prefs have just loaded. This is the first thing that ++ // happens to us. + SYSPREF_LOG(("Observed: %s\n", aTopic)); + +- nsCOMPtr prefBranch = +- do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); +- if (NS_FAILED(rv)) +- return rv; +- +- rv = prefBranch->GetBoolPref(sSysPrefString, &mEnabled); ++ // listen on changes to use_system_pref. It's OK to ++ // hold a strong reference because we don't keep a reference ++ // to the pref branch. ++ rv = userBranch->AddObserver(sSysPrefString, this, PR_TRUE); + if (NS_FAILED(rv)) { +- SYSPREF_LOG(("...FAil to Get %s\n", sSysPrefString)); ++ SYSPREF_LOG(("...Failed to add observer for %s\n", sSysPrefString)); + return rv; + } + +- // if there is no system pref service, assume nothing happen to us +- mSysPrefService = do_GetService(NS_SYSTEMPREF_SERVICE_CONTRACTID, &rv); +- if (NS_FAILED(rv) || !mSysPrefService) { +- SYSPREF_LOG(("...No System Pref Service\n")); ++ NS_ASSERTION(!mSysPrefService, "Should not be already enabled"); ++ if (!enabled) { ++ // Don't load the system pref service if the preference is ++ // not set. + return NS_OK; + } + +- // listen on its changes +- rv = prefBranch->AddObserver(sSysPrefString, this, PR_TRUE); +- if (NS_FAILED(rv)) { +- SYSPREF_LOG(("...FAil to add observer for %s\n", sSysPrefString)); +- return rv; +- } +- +- if (!mEnabled) { +- SYSPREF_LOG(("%s is disabled\n", sSysPrefString)); +- return NS_OK; +- } + SYSPREF_LOG(("%s is enabled\n", sSysPrefString)); +- rv = UseSystemPrefs(); +- +- } +- // sSysPrefString value was changed, update ... +- else if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) && +- NS_ConvertUTF8toUTF16(sSysPrefString).Equals(aData)) { +- SYSPREF_LOG(("++++++ Notify: topic=%s data=%s\n", +- aTopic, NS_ConvertUTF16toUTF8(aData).get())); + +- nsCOMPtr prefBranch = +- do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); ++ rv = LoadSystemPrefs(); + if (NS_FAILED(rv)) + return rv; + +- PRBool enabled = mEnabled; +- rv = prefBranch->GetBoolPref(sSysPrefString, &mEnabled); +- if (enabled != mEnabled) { +- if (mEnabled) +- //read prefs from system +- rv = UseSystemPrefs(); +- else +- //roll back to mozilla prefs +- rv = UseMozillaPrefs(); ++ // Lock config.use_system_prefs so the user can't undo ++ // it. Really this should already be locked because if it's ++ // not locked at a lower level the user can set it to false in ++ // their in prefs.js. But only do this if the value was not ++ // specially set by the user; if it was set by the user, then ++ // locking it would actually unset the value! And the user ++ // should be allowed to turn off something they set ++ // themselves. ++ PRBool hasUserValue; ++ rv = userBranch->PrefHasUserValue(sSysPrefString, &hasUserValue); ++ if (NS_SUCCEEDED(rv) && !hasUserValue) { ++ userBranch->LockPref(sSysPrefString); + } + } + +- // if the system pref notify us that some pref has been changed by user +- // outside mozilla. We need to read it again. +- else if (!nsCRT::strcmp(aTopic, NS_SYSTEMPREF_PREFCHANGE_TOPIC_ID) && +- aData) { +- NS_ASSERTION(mEnabled == PR_TRUE, "Should not listen when disabled"); +- SYSPREF_LOG(("====== System Pref Notify topic=%s data=%s\n", +- aTopic, (char*)aData)); +- rv = ReadSystemPref(NS_LossyConvertUTF16toASCII(aData).get()); +- return NS_OK; +- } else if (!nsCRT::strcmp(aTopic,"profile-before-change")) { +- //roll back to mozilla prefs +- if (mEnabled) +- UseMozillaPrefs(); +- mEnabled = PR_FALSE; +- mSysPrefService = nsnull; +- delete [] mSysPrefs; +- mSysPrefs = nsnull; +- } else +- SYSPREF_LOG(("Not needed topic Received %s\n", aTopic)); +- return rv; +-} ++ if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) && ++ nsDependentString(aData).EqualsASCII(sSysPrefString)) { ++ // sSysPrefString value was changed, update... ++ SYSPREF_LOG(("++++++ Notify: topic=%s data=%s\n", ++ aTopic, NS_ConvertUTF16toUTF8(aData).get())); ++ if (mSysPrefService && !enabled) ++ return RestoreMozillaPrefs(); ++ if (!mSysPrefService && enabled) { ++ // Don't lock it. If the user enabled use_system_prefs, ++ // they should be allowed to unlock it. ++ return LoadSystemPrefs(); ++ } + +-/* private */ ++ // didn't change? ++ return NS_OK; ++ } + +-//////////////////////////////////////////////////////////////// +-// nsSystemPref::UseSystemPrefs +-// Read all the prefs in the table from system, listen for their +-// changes in system pref service. +-//////////////////////////////////////////////////////////////// +-nsresult +-nsSystemPref::UseSystemPrefs() +-{ +- SYSPREF_LOG(("\n====Now Use system prefs==\n")); +- nsresult rv = NS_OK; +- if (!mSysPrefService) { +- return NS_ERROR_FAILURE; ++ if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) { ++ // some other pref changed, tell the backend if there is one ++ if (mSysPrefService && !mIgnorePrefSetting) { ++ NS_LossyConvertUTF16toASCII tmp(aData); ++#ifdef DEBUG ++ PRBool isLocked; ++ userBranch->PrefIsLocked(tmp.get(), &isLocked); ++ NS_ASSERTION(!isLocked, "Locked pref is changing?"); ++#endif ++ SysPrefItem* item; ++ if (!mSavedPrefs.Get(tmp, &item)) { ++ NS_ERROR("Notified about pref change that we didn't ask about?"); ++ } else { ++ if (!item->ignore) { ++ mSysPrefService->NotifyMozillaPrefChanged(tmp.get()); ++ } ++ } ++ } ++ return NS_OK; + } + +- PRIntn sysPrefCount= sizeof(sSysPrefList) / sizeof(sSysPrefList[0]); ++ if (!nsCRT::strcmp(aTopic,"profile-before-change")) ++ return RestoreMozillaPrefs(); + +- if (!mSysPrefs) { +- mSysPrefs = new SysPrefItem[sysPrefCount]; +- if (!mSysPrefs) +- return NS_ERROR_OUT_OF_MEMORY; +- for (PRIntn index = 0; index < sysPrefCount; ++index) +- mSysPrefs[index].SetPrefName(sSysPrefList[index]); +- } ++ SYSPREF_LOG(("Not needed topic Received %s\n", aTopic)); + +- for (PRIntn index = 0; index < sysPrefCount; ++index) { +- // save mozilla prefs +- SaveMozDefaultPref(mSysPrefs[index].prefName, +- &mSysPrefs[index].defaultValue, +- &mSysPrefs[index].isLocked); +- +- // get the system prefs +- ReadSystemPref(mSysPrefs[index].prefName); +- SYSPREF_LOG(("Add Listener on %s\n", mSysPrefs[index].prefName)); +- mSysPrefService->AddObserver(mSysPrefs[index].prefName, +- this, PR_TRUE); +- } + return rv; + } + +-////////////////////////////////////////////////////////////////////// +-// nsSystemPref::ReadSystemPref +-// Read a pref value from system pref service, and lock it in mozilla. +-////////////////////////////////////////////////////////////////////// + nsresult +-nsSystemPref::ReadSystemPref(const char *aPrefName) ++nsSystemPref::SetOverridingMozillaBoolPref(const char* aPrefName, ++ PRBool aValue, PRBool aLock, PRBool aPresent) + { +- if (!mSysPrefService) +- return NS_ERROR_FAILURE; +- nsresult rv; +- +- nsCOMPtr prefBranch +- (do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); +- if (NS_FAILED(rv)) +- return rv; +- +- SYSPREF_LOG(("about to read aPrefName %s\n", aPrefName)); ++ return OverridePref(aPrefName, nsIPrefBranch::PREF_BOOL, ++ (void*)aValue, aLock, aPresent); ++} + +- prefBranch->UnlockPref(aPrefName); ++nsresult ++nsSystemPref::SetOverridingMozillaIntPref(const char* aPrefName, ++ PRInt32 aValue, PRBool aLock, PRBool aPresent) ++{ ++ return OverridePref(aPrefName, nsIPrefBranch::PREF_INT, ++ (void*)aValue, aLock, aPresent); ++} + +- PRInt32 prefType = nsIPrefBranch::PREF_INVALID; +- nsXPIDLCString strValue; +- PRInt32 intValue = 0; +- PRBool boolValue = PR_FALSE; ++nsresult ++nsSystemPref::SetOverridingMozillaStringPref(const char* aPrefName, ++ const char* aValue, PRBool aLock, PRBool aPresent) ++{ ++ return OverridePref(aPrefName, nsIPrefBranch::PREF_STRING, ++ (void*)aValue, aLock, aPresent); ++} + +- rv = prefBranch->GetPrefType(aPrefName, &prefType); +- if (NS_FAILED(rv)) +- return rv; +- switch (prefType) { ++static nsresult RestorePrefValue(PRInt32 aPrefType, ++ const char* aPrefName, ++ SysPrefItem* aItem, ++ nsIPrefBranch* aUser, ++ nsIPrefBranch* aDefault) ++{ ++ switch (aPrefType) { + case nsIPrefBranch::PREF_STRING: +- mSysPrefService->GetCharPref(aPrefName, getter_Copies(strValue)); +- SYSPREF_LOG(("system value is %s\n", strValue.get())); +- +- prefBranch->SetCharPref(aPrefName, strValue.get()); ++ aDefault->SetCharPref(aPrefName, ++ aItem->savedDefaultValueString); ++ if (aItem->savedUserPresent) { ++ aUser->SetCharPref(aPrefName, aItem->savedUserValueString); ++ } + break; + case nsIPrefBranch::PREF_INT: +- mSysPrefService->GetIntPref(aPrefName, &intValue); +- SYSPREF_LOG(("system value is %d\n", intValue)); +- +- prefBranch->SetIntPref(aPrefName, intValue); ++ aDefault->SetIntPref(aPrefName, aItem->savedDefaultValueScalar); ++ if (aItem->savedUserPresent) { ++ aUser->SetIntPref(aPrefName, aItem->savedUserValueScalar); ++ } + break; + case nsIPrefBranch::PREF_BOOL: +- mSysPrefService->GetBoolPref(aPrefName, &boolValue); +- SYSPREF_LOG(("system value is %s\n", boolValue ? "TRUE" : "FALSE")); +- +- prefBranch->SetBoolPref(aPrefName, boolValue); ++ aDefault->SetBoolPref(aPrefName, aItem->savedDefaultValueScalar); ++ if (aItem->savedUserPresent) { ++ aUser->SetBoolPref(aPrefName, aItem->savedUserValueScalar); ++ } + break; + default: +- SYSPREF_LOG(("Fail to system value for it\n")); ++ NS_ERROR("Unknown preference type"); + return NS_ERROR_FAILURE; + } +- prefBranch->LockPref(aPrefName); ++ ++ if (!aItem->savedUserPresent) { ++ aUser->DeleteBranch(aPrefName); ++ } ++ + return NS_OK; + } + +-////////////////////////////////////////////////////////////////////// +-// nsSystemPref::UseMozillaPrefs +-// Restore mozilla default prefs, remove system pref listeners +-///////////////////////////////////////////////////////////////////// +-nsresult +-nsSystemPref::UseMozillaPrefs() ++static PLDHashOperator PR_CALLBACK RestorePref(const nsACString& aKey, ++ SysPrefItem* aItem, ++ void* aClosure) + { +- nsresult rv = NS_OK; +- SYSPREF_LOG(("\n====Now rollback to Mozilla prefs==\n")); ++ nsSystemPref* prefs = static_cast(aClosure); ++ nsCOMPtr userBranch = prefs->GetPrefUserBranch(); ++ const nsCString& prefName = PromiseFlatCString(aKey); ++ ++ PRInt32 prefType = nsIPrefBranch::PREF_INVALID; ++ nsresult rv = userBranch->GetPrefType(prefName.get(), &prefType); ++ if (NS_FAILED(rv)) ++ return PL_DHASH_NEXT; ++ PRBool isLocked; ++ userBranch->PrefIsLocked(prefName.get(), &isLocked); ++ if (NS_FAILED(rv)) ++ return PL_DHASH_NEXT; + +- // if we did not use system prefs, do nothing +- if (!mSysPrefService) +- return NS_OK; ++ // Remove our observer before we change the value ++ userBranch->RemoveObserver(prefName.get(), prefs); ++ // Remember to ignore this item. Because some prefs start with "config.use_system_prefs", ++ // which we always observe, even after we remove the observer, changes to the pref will ++ // still be observed by us. We must ignore them. ++ aItem->ignore = PR_TRUE; + +- PRIntn sysPrefCount= sizeof(sSysPrefList) / sizeof(sSysPrefList[0]); +- for (PRIntn index = 0; index < sysPrefCount; ++index) { +- // restore mozilla default value and free string memory if needed +- RestoreMozDefaultPref(mSysPrefs[index].prefName, +- &mSysPrefs[index].defaultValue, +- mSysPrefs[index].isLocked); +- SYSPREF_LOG(("stop listening on %s\n", mSysPrefs[index].prefName)); +- mSysPrefService->RemoveObserver(mSysPrefs[index].prefName, +- this); ++ // Unlock the pref so we can set it ++ if (isLocked) { ++ userBranch->UnlockPref(prefName.get()); + } +- return rv; ++ ++ nsCOMPtr defaultBranch = prefs->GetPrefDefaultBranch(); ++ ++ RestorePrefValue(prefType, prefName.get(), aItem, ++ userBranch, defaultBranch); ++ ++ if (aItem->savedLocked) { ++ userBranch->LockPref(prefName.get()); ++ } ++ ++ return PL_DHASH_NEXT; + } + +-//////////////////////////////////////////////////////////////////////////// +-// nsSystemPref::RestoreMozDefaultPref +-// Save the saved mozilla default value. +-// It is also responsible for allocate the string memory when needed, because +-// this method know what type of value is stored. +-///////////////////////////////////////////////////////////////////////////// + nsresult +-nsSystemPref::SaveMozDefaultPref(const char *aPrefName, +- MozPrefValue *aPrefValue, +- PRBool *aLocked) +-{ +- NS_ENSURE_ARG_POINTER(aPrefName); +- NS_ENSURE_ARG_POINTER(aPrefValue); +- NS_ENSURE_ARG_POINTER(aLocked); +- +- nsresult rv; ++nsSystemPref::StopOverridingMozillaPref(const char* aPrefName) ++{ ++ SysPrefItem* item; ++ nsDependentCString prefNameStr(aPrefName); ++ if (!mSavedPrefs.Get(prefNameStr, &item)) ++ return NS_OK; + +- nsCOMPtr prefBranch = +- do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); +- if (NS_FAILED(rv)) +- return rv; ++ RestorePref(prefNameStr, item, this); ++ mSavedPrefs.Remove(prefNameStr); ++ //delete item; ++ return NS_OK; ++} + +- SYSPREF_LOG(("Save Mozilla value for %s\n", aPrefName)); ++/* private */ + ++nsresult ++nsSystemPref::OverridePref(const char* aPrefName, PRInt32 aType, ++ void* aValue, PRBool aLock, PRBool aPresent) ++{ ++ nsCOMPtr userBranch = GetPrefUserBranch(); ++ nsCOMPtr defaultBranch = GetPrefDefaultBranch(); + PRInt32 prefType = nsIPrefBranch::PREF_INVALID; +- nsXPIDLCString strValue; +- +- rv = prefBranch->GetPrefType(aPrefName, &prefType); ++ nsresult rv = userBranch->GetPrefType(aPrefName, &prefType); + if (NS_FAILED(rv)) + return rv; +- switch (prefType) { +- case nsIPrefBranch::PREF_STRING: +- prefBranch->GetCharPref(aPrefName, +- getter_Copies(strValue)); +- SYSPREF_LOG(("Mozilla value is %s", strValue.get())); +- +- if (aPrefValue->stringVal) +- PL_strfree(aPrefValue->stringVal); +- aPrefValue->stringVal = PL_strdup(strValue.get()); +- break; +- case nsIPrefBranch::PREF_INT: +- prefBranch->GetIntPref(aPrefName, &aPrefValue->intVal); +- SYSPREF_LOG(("Mozilla value is %d\n", aPrefValue->intVal)); + +- break; +- case nsIPrefBranch::PREF_BOOL: +- prefBranch->GetBoolPref(aPrefName, &aPrefValue->boolVal); +- SYSPREF_LOG(("Mozilla value is %s\n", +- aPrefValue->boolVal ? "TRUE" : "FALSE")); ++ PRBool isLocked; ++ rv = userBranch->PrefIsLocked(aPrefName, &isLocked); ++ if (NS_FAILED(rv)) ++ return rv; ++ PRBool hasUserValue; ++ rv = userBranch->PrefHasUserValue(aPrefName, &hasUserValue); ++ if (NS_FAILED(rv)) ++ return rv; + +- break; +- default: +- SYSPREF_LOG(("Fail to Read Mozilla value for it\n")); +- return NS_ERROR_FAILURE; ++ if (prefType == 0) { ++ // Preference does not exist. Allow the system prefs to ++ // set it. ++ } else { ++ NS_ASSERTION(aType == prefType, ++ "System pref engine passed incorrect type for Mozilla pref"); ++ if (aType != prefType) ++ return NS_ERROR_FAILURE; ++ } ++ ++ if (prefType != 0) { ++ nsDependentCString prefNameStr(aPrefName); ++ SysPrefItem* item = nsnull; ++ if (!mSavedPrefs.Get(prefNameStr, &item)) { ++ // Need to save the existing value away ++ item = new SysPrefItem(); ++ if (!item) ++ return NS_ERROR_OUT_OF_MEMORY; ++ ++ item->savedLocked = isLocked; ++ item->savedUserPresent = hasUserValue; ++ ++ switch (prefType) { ++ case nsIPrefBranch::PREF_STRING: ++ if (hasUserValue) { ++ userBranch->GetCharPref(aPrefName, &item->savedUserValueString); ++ } ++ defaultBranch->GetCharPref(aPrefName, &item->savedDefaultValueString); ++ break; ++ case nsIPrefBranch::PREF_INT: ++ if (hasUserValue) { ++ userBranch->GetIntPref(aPrefName, &item->savedUserValueScalar); ++ } ++ defaultBranch->GetIntPref(aPrefName, &item->savedDefaultValueScalar); ++ break; ++ case nsIPrefBranch::PREF_BOOL: ++ if (hasUserValue) { ++ userBranch->GetBoolPref(aPrefName, &item->savedUserValueScalar); ++ } ++ defaultBranch->GetBoolPref(aPrefName, &item->savedDefaultValueScalar); ++ break; ++ default: ++ NS_ERROR("Unknown preference type"); ++ delete item; ++ return NS_ERROR_FAILURE; ++ } ++ ++ mSavedPrefs.Put(prefNameStr, item); ++ ++ // Watch the user value in case it changes on the Mozilla side ++ // If 'aLock' is true then it shouldn't change and we don't ++ // need the observer, but don't bother optimizing for that. ++ userBranch->AddObserver(aPrefName, this, PR_TRUE); ++ } else { ++ if (isLocked != aLock) { ++ // restore pref value on user and default branches ++ RestorePrefValue(prefType, aPrefName, item, ++ userBranch, defaultBranch); ++ } ++ } + } +- rv = prefBranch->PrefIsLocked(aPrefName, aLocked); +- SYSPREF_LOG((" (%s).\n", aLocked ? "Locked" : "NOT Locked")); +- return rv; +-} + +-//////////////////////////////////////////////////////////////////////////// +-// nsSystemPref::RestoreMozDefaultPref +-// Restore the saved mozilla default value to pref service. +-// It is also responsible for free the string memory when needed, because +-// this method know what type of value is stored. +-///////////////////////////////////////////////////////////////////////////// +-nsresult +-nsSystemPref::RestoreMozDefaultPref(const char *aPrefName, +- MozPrefValue *aPrefValue, +- PRBool aLocked) +-{ +- NS_ENSURE_ARG_POINTER(aPrefName); ++ // We need to ignore pref changes due to our own calls here ++ mIgnorePrefSetting = PR_TRUE; + +- nsresult rv; ++ // Unlock it if it's locked, so we can set it ++ if (isLocked) { ++ rv = userBranch->UnlockPref(aPrefName); ++ if (NS_FAILED(rv)) ++ return rv; ++ } + +- nsCOMPtr prefBranch = +- do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); ++ // Set the pref on the default branch if we're locking it, because ++ // only the default branch gets used when the pref is locked. ++ // Set the pref on the user branch if we're not locking it, because ++ // that's where the user change will go. ++ nsIPrefBranch* settingBranch = ++ aLock ? defaultBranch.get() : static_cast(userBranch.get()); ++ ++ if (!aPresent) { ++ rv = settingBranch->DeleteBranch(aPrefName); ++ } else { ++ switch (aType) { ++ case nsIPrefBranch::PREF_STRING: ++ rv = settingBranch->SetCharPref(aPrefName, (const char*)aValue); ++ break; ++ case nsIPrefBranch::PREF_INT: ++ rv = settingBranch->SetIntPref(aPrefName, (PRInt32)(NS_PTR_TO_INT32(aValue))); ++ break; ++ case nsIPrefBranch::PREF_BOOL: ++ rv = settingBranch->SetBoolPref(aPrefName, (PRBool)(NS_PTR_TO_INT32(aValue))); ++ break; ++ default: ++ NS_ERROR("Unknown preference type"); ++ mIgnorePrefSetting = PR_FALSE; ++ return NS_ERROR_FAILURE; ++ } ++ } + if (NS_FAILED(rv)) + return rv; ++ if (aLock) { ++ rv = userBranch->LockPref(aPrefName); ++ } + +- SYSPREF_LOG(("Restore Mozilla value for %s\n", aPrefName)); ++ mIgnorePrefSetting = PR_FALSE; ++ return rv; ++} + +- PRInt32 prefType = nsIPrefBranch::PREF_INVALID; +- rv = prefBranch->GetPrefType(aPrefName, &prefType); ++nsresult ++nsSystemPref::FixupLockdownPrefs() ++{ ++ nsCOMPtr userPrefs = GetPrefUserBranch(); ++ nsCOMPtr defaultPrefs = GetPrefUserBranch(); ++ PRUint32 childCount; ++ char **childArray = nsnull; ++ nsresult rv = userPrefs->GetChildList("config.lockdown.", ++ &childCount, &childArray); + if (NS_FAILED(rv)) + return rv; ++ for (PRUint32 i = 0; i < childCount; ++i) { ++ PRInt32 type; ++ rv = defaultPrefs->GetPrefType(childArray[i], &type); ++ if (NS_FAILED(rv)) ++ return rv; ++ NS_ASSERTION(type == nsIPrefBranch2::PREF_BOOL, ++ "All config.lockdown.* prefs should be boolean"); ++ if (type == nsIPrefBranch2::PREF_BOOL) { ++ rv = defaultPrefs->SetBoolPref(childArray[i], PR_FALSE); ++ if (NS_FAILED(rv)) ++ return rv; ++ } ++ } ++ NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(childCount, childArray); ++ return NS_OK; ++} + +- // unlock, if it is locked +- prefBranch->UnlockPref(aPrefName); ++nsresult ++nsSystemPref::LoadSystemPrefs() ++{ ++ SYSPREF_LOG(("\n====Now Use system prefs==\n")); ++ NS_ASSERTION(!mSysPrefService, ++ "Shouldn't have the pref service here"); ++ nsresult rv; ++ mSysPrefService = do_GetService(NS_SYSTEMPREF_SERVICE_CONTRACTID, &rv); ++ if (NS_FAILED(rv) || !mSysPrefService) { ++ FixupLockdownPrefs(); ++ SYSPREF_LOG(("...No System Pref Service\n")); ++ return NS_OK; ++ } + +- switch (prefType) { +- case nsIPrefBranch::PREF_STRING: +- prefBranch->SetCharPref(aPrefName, +- aPrefValue->stringVal); +- SYSPREF_LOG(("Mozilla value is %s\n", aPrefValue->stringVal)); ++ // Cache the pref-branch while we load up the system prefs. ++ NS_ASSERTION(!mCachedUserPrefBranch, ++ "Shouldn't have a cache here"); ++ nsCOMPtr userBranch = GetPrefUserBranch(); ++ nsCOMPtr defaultBranch = GetPrefDefaultBranch(); ++ mCachedDefaultPrefBranch = defaultBranch; ++ mCachedUserPrefBranch = userBranch; ++ rv = mSysPrefService->LoadSystemPreferences(this); ++ mCachedDefaultPrefBranch = nsnull; ++ mCachedUserPrefBranch = nsnull; ++ ++ if (NS_FAILED(rv)) { ++ // Restore all modified preferences to their original values ++ mSavedPrefs.EnumerateRead(RestorePref, this); ++ mSavedPrefs.Clear(); ++ mSysPrefService = nsnull; ++ } ++ ++ return rv; ++} + +- PL_strfree(aPrefValue->stringVal); +- aPrefValue->stringVal = nsnull; ++nsresult ++nsSystemPref::RestoreMozillaPrefs() ++{ ++ SYSPREF_LOG(("\n====Now rollback to Mozilla prefs==\n")); + +- break; +- case nsIPrefBranch::PREF_INT: +- prefBranch->SetIntPref(aPrefName, aPrefValue->intVal); +- SYSPREF_LOG(("Mozilla value is %d\n", aPrefValue->intVal)); ++ NS_ASSERTION(mSysPrefService, ++ "Should have the pref service here"); ++ if (!mSysPrefService) ++ return NS_ERROR_FAILURE; + +- break; +- case nsIPrefBranch::PREF_BOOL: +- prefBranch->SetBoolPref(aPrefName, aPrefValue->boolVal); +- SYSPREF_LOG(("Mozilla value is %s\n", +- aPrefValue->boolVal ? "TRUE" : "FALSE")); ++ nsCOMPtr userBranch = GetPrefUserBranch(); ++ nsCOMPtr defaultBranch = GetPrefDefaultBranch(); ++ mCachedDefaultPrefBranch = defaultBranch; ++ mCachedUserPrefBranch = userBranch; ++ ++ mSysPrefService->NotifyUnloadSystemPreferences(); ++ // Restore all modified preferences to their original values ++ mSavedPrefs.EnumerateRead(RestorePref, this); ++ mSavedPrefs.Clear(); ++ ++ mCachedDefaultPrefBranch = nsnull; ++ mCachedUserPrefBranch = nsnull; ++ ++ mSysPrefService = nsnull; + +- break; +- default: +- SYSPREF_LOG(("Fail to Restore Mozilla value for it\n")); +- return NS_ERROR_FAILURE; +- } ++ FixupLockdownPrefs(); + +- // restore its old lock status +- if (aLocked) +- prefBranch->LockPref(aPrefName); + return NS_OK; + } +diff -Naur mozilla.orig/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp mozilla/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp +--- mozilla.orig/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp 2003-04-14 19:28:25.000000000 -0700 ++++ mozilla/extensions/pref/system-pref/src/nsSystemPrefFactory.cpp 2008-04-01 16:50:49.000000000 -0700 +@@ -42,10 +42,10 @@ + #include "nsICategoryManager.h" + #include "nsIGenericFactory.h" + #include "nsSystemPref.h" +-#include "nsSystemPrefService.h" ++#include "nsIServiceManager.h" ++#include "nsIAppStartupNotifier.h" + + NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemPref, Init) +-NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemPrefService, Init) + + // Registering nsSystemPref module as part of the app-startup category to get + // it instantiated. +@@ -96,11 +96,6 @@ + RegisterSystemPref, + UnRegisterSystemPref, + }, +- { NS_SYSTEMPREF_SERVICE_CLASSNAME, +- NS_SYSTEMPREF_SERVICE_CID, +- NS_SYSTEMPREF_SERVICE_CONTRACTID, +- nsSystemPrefServiceConstructor, +- }, + }; + + NS_IMPL_NSGETMODULE(nsSystemPrefModule, components) +diff -Naur mozilla.orig/extensions/pref/system-pref/src/nsSystemPref.h mozilla/extensions/pref/system-pref/src/nsSystemPref.h +--- mozilla.orig/extensions/pref/system-pref/src/nsSystemPref.h 2005-02-23 08:15:37.000000000 -0800 ++++ mozilla/extensions/pref/system-pref/src/nsSystemPref.h 2008-04-01 16:50:49.000000000 -0700 +@@ -23,7 +23,7 @@ + * + * Original Author: Bolian Yin (bolian.yin@sun.com) + * +- * Contributor(s): ++ * Contributor(s): Robert O'Callahan/Novell (rocallahan@novell.com) + * + * 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 +@@ -45,16 +45,14 @@ + #include "nsCOMPtr.h" + #include "nsXPCOM.h" + #include "nsCRT.h" +-#include "nsIAppStartupNotifier.h" +-#include "nsICategoryManager.h" +-#include "nsIServiceManager.h" + #include "nsWeakReference.h" +-#include "nsIPrefService.h" +-#include "nsIPrefBranch2.h" ++#include "nsClassHashtable.h" ++#include "nsHashKeys.h" ++#include "nsMemory.h" + +-#include ++#include "nsISystemPrefService.h" ++#include "nsIObserver.h" + +-union MozPrefValue; + struct SysPrefItem; + + ////////////////////////////////////////////////////////////////////////// +@@ -62,18 +60,34 @@ + // nsSystemPref, as an extension of mozilla pref service, reads some mozilla + // prefs from host system when the feature is enabled ("config.system-pref"). + // +-// nsSystemPref listens on NS_PREFSERVICE_READ_TOPIC_ID. When notified, +-// nsSystemPref will start the nsSystemPrefService (platform specific) to +-// read all the interested prefs (listed in sSysPrefList table) from system +-// and lock these prefs from user's modification. +-// +-// This feature will make mozilla integrated better into host platforms. If +-// users want to change the prefs read from system, the system provided pref +-// editor (i.e. gconf-editor in gnome) should be used. ++// nsSystemPref listens on NS_PREFSERVICE_READ_TOPIC_ID. When ++// notified, nsSystemPref will start the nsSystemPrefService (platform ++// specific) and tell it to override Mozilla prefs with its own ++// settings. ++// ++// When overriding a Mozilla preference the prefservice can request the ++// pref be locked or unlocked. If the pref is locked then we set the default ++// value and lock it in Mozilla so the user value is ignored and the user cannot ++// change the value. If the pref is unlocked then we set the user value ++// and unlock it in Mozilla so the user can change it. If the user changes it, ++// then the prefservice is notified so it can copy the value back to its ++// underlying store. ++// ++// We detect changes to Mozilla prefs by observing pref changes in the ++// user branch. ++// ++// For testing purposes, if the user toggles on ++// config.use_system_prefs then we save the current preferences before ++// overriding them from gconf, and if the user toggles off ++// config.use_system_prefs *in the same session* then we restore the ++// preferences. If the user exits without turning off use_system_prefs ++// then the saved values are lost and the new values are permanent. ++// + ////////////////////////////////////////////////////////////////////////// + + class nsSystemPref : public nsIObserver, +- public nsSupportsWeakReference ++ public nsSupportsWeakReference, ++ public nsISystemPref + { + public: + NS_DECL_ISUPPORTS +@@ -83,23 +97,39 @@ + virtual ~nsSystemPref(); + nsresult Init(void); + ++ // nsISystemPref ++ virtual nsresult SetOverridingMozillaBoolPref(const char* aPrefName, ++ PRBool aValue, PRBool aLocked, ++ PRBool aPresent = PR_TRUE); ++ virtual nsresult SetOverridingMozillaIntPref(const char* aPrefName, ++ PRInt32 aValue, PRBool aLocked, ++ PRBool aPresent = PR_TRUE); ++ virtual nsresult SetOverridingMozillaStringPref(const char* aPrefName, ++ const char* aValue, PRBool aLocked, ++ PRBool aPresent = PR_TRUE); ++ virtual nsresult StopOverridingMozillaPref(const char* aPrefName); ++ virtual already_AddRefed GetPrefUserBranch(); ++ virtual already_AddRefed GetPrefDefaultBranch(); ++ + private: +- // funcs used to load system prefs and save mozilla default prefs +- nsresult UseSystemPrefs(); +- nsresult ReadSystemPref(const char *aPrefName); +- nsresult SaveMozDefaultPref(const char *aPrefName, +- MozPrefValue *aPrefVal, +- PRBool *aLocked); +- +- // funcs used to load mozilla default prefs +- nsresult UseMozillaPrefs(); +- nsresult RestoreMozDefaultPref(const char *aPrefName, +- MozPrefValue *aPrefVal, +- PRBool aLocked); +- +- nsCOMPtr mSysPrefService; +- PRBool mEnabled; // system pref is enabled or not +- SysPrefItem *mSysPrefs; ++ // If we don't load the system prefs for any reason, then ++ // set all config.lockdown.* preferences to PR_FALSE so that ++ // residual lockdown settings are removed. ++ nsresult FixupLockdownPrefs(); ++ ++ nsresult LoadSystemPrefs(); ++ ++ nsresult RestoreMozillaPrefs(); ++ ++ nsresult OverridePref(const char* aPrefName, PRInt32 aType, ++ void* aValue, PRBool aLock, PRBool aPresent); ++ ++ nsCOMPtr mSysPrefService; ++ nsClassHashtable mSavedPrefs; ++ // weak pointers to cached prefbranches ++ nsIPrefBranch2* mCachedUserPrefBranch; ++ nsIPrefBranch* mCachedDefaultPrefBranch; ++ PRPackedBool mIgnorePrefSetting; + }; + + #define NS_SYSTEMPREF_CID \ +diff -Naur mozilla.orig/toolkit/library/libxul-config.mk mozilla/toolkit/library/libxul-config.mk +--- mozilla.orig/toolkit/library/libxul-config.mk 2008-02-25 17:28:51.000000000 -0800 ++++ mozilla/toolkit/library/libxul-config.mk 2008-04-10 11:38:00.000000000 -0700 +@@ -266,6 +266,7 @@ + ifdef MOZ_ENABLE_GTK2 + COMPONENT_LIBS += widget_gtk2 + ifdef MOZ_PREF_EXTENSIONS ++COMPONENT_LIBS += syspref-gconf + COMPONENT_LIBS += system-pref + endif + endif +diff -Naur mozilla.orig/toolkit/library/libxul-rules.mk mozilla/toolkit/library/libxul-rules.mk +--- mozilla.orig/toolkit/library/libxul-rules.mk 2008-03-08 01:43:03.000000000 -0800 ++++ mozilla/toolkit/library/libxul-rules.mk 2008-04-10 11:38:07.000000000 -0700 +@@ -89,6 +89,12 @@ + EXTRA_DSO_LDOPTS += $(MOZ_PANGO_LIBS) + endif + ++ifdef MOZ_ENABLE_GTK2 ++ifdef MOZ_PREF_EXTENSIONS ++EXTRA_DSO_LDOPTS += $(MOZ_GCONF_LIBS) ++endif ++endif ++ + EXTRA_DSO_LDOPTS += $(MOZ_CAIRO_LIBS) + + export:: dlldeps.cpp +diff -Naur mozilla.orig/toolkit/library/nsStaticXULComponents.cpp mozilla/toolkit/library/nsStaticXULComponents.cpp +--- mozilla.orig/toolkit/library/nsStaticXULComponents.cpp 2008-02-25 17:28:51.000000000 -0800 ++++ mozilla/toolkit/library/nsStaticXULComponents.cpp 2008-04-10 11:38:14.000000000 -0700 +@@ -136,7 +136,8 @@ + #ifdef MOZ_ENABLE_GTK2 + #ifdef MOZ_PREF_EXTENSIONS + #define SYSTEMPREF_MODULES MODULE(nsSystemPrefModule) \ +- MODULE(nsAutoConfigModule) ++ MODULE(nsAutoConfigModule) \ ++ MODULE(nsSystemPrefServiceModule) + #else + #define SYSTEMPREF_MODULES + #endif --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX_gre_extension_plugin_support.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX_gre_extension_plugin_support.patch @@ -0,0 +1,417 @@ +--- + toolkit/mozapps/extensions/src/nsExtensionManager.js.in | 27 ++++++--- + toolkit/xre/nsXREDirProvider.cpp | 5 + + xpcom/io/nsAppDirectoryServiceDefs.h | 1 + xpcom/io/nsAppFileLocationProvider.cpp | 47 ++++++++++++++-- + xpcom/io/nsAppFileLocationProvider.h | 2 + 5 files changed, 71 insertions(+), 11 deletions(-) + +Index: mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in +=================================================================== +--- mozilla.orig/toolkit/mozapps/extensions/src/nsExtensionManager.js.in ++++ mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in +@@ -92,16 +92,17 @@ + const UNKNOWN_XPCOM_ABI = "unknownABI"; + + const FILE_DEFAULT_THEME_JAR = "classic.jar"; + const TOOLKIT_ID = "toolkit@mozilla.org" + + const KEY_PROFILEDIR = "ProfD"; + const KEY_PROFILEDS = "ProfDS"; + const KEY_APPDIR = "XCurProcD"; ++const KEY_GREDIR = "GreD"; + const KEY_TEMPDIR = "TmpD"; + + const EM_ACTION_REQUESTED_TOPIC = "em-action-requested"; + const EM_ITEM_INSTALLED = "item-installed"; + const EM_ITEM_UPGRADED = "item-upgraded"; + const EM_ITEM_UNINSTALLED = "item-uninstalled"; + const EM_ITEM_ENABLED = "item-enabled"; + const EM_ITEM_DISABLED = "item-disabled"; +@@ -111,16 +112,17 @@ + const OP_NEEDS_INSTALL = "needs-install"; + const OP_NEEDS_UPGRADE = "needs-upgrade"; + const OP_NEEDS_UNINSTALL = "needs-uninstall"; + const OP_NEEDS_ENABLE = "needs-enable"; + const OP_NEEDS_DISABLE = "needs-disable"; + + const KEY_APP_PROFILE = "app-profile"; + const KEY_APP_GLOBAL = "app-global"; ++const KEY_GRE_GLOBAL = "gre-global"; + const KEY_APP_SYSTEM_LOCAL = "app-system-local"; + const KEY_APP_SYSTEM_SHARE = "app-system-share"; + const KEY_APP_SYSTEM_USER = "app-system-user"; + + const CATEGORY_INSTALL_LOCATIONS = "extension-install-locations"; + const CATEGORY_UPDATE_PARAMS = "extension-update-params"; + + const PREFIX_NS_EM = "http://www.mozilla.org/2004/em-rdf#"; +@@ -2011,16 +2013,17 @@ + " ... rolling back file moves and aborting installation."); + rollbackMove(); + cleanUpTrash(itemLocationTrash); + throw e; + } + } + } + else if (installLocation.name == KEY_APP_PROFILE || ++ installLocation.name == KEY_GRE_GLOBAL || + installLocation.name == KEY_APP_GLOBAL || + installLocation.name == KEY_APP_SYSTEM_USER) { + // Check for a pointer file and move it aside if it exists + var pointerFile = installLocation.location.clone(); + pointerFile.append(itemID); + if (pointerFile.exists() && !pointerFile.isDirectory()) { + var trashFileName = itemID + "-trash"; + var itemLocationTrash = installLocation.location.clone(); +@@ -2417,17 +2420,25 @@ + + gConsole = Cc["@mozilla.org/consoleservice;1"]. + getService(Ci.nsIConsoleService); + + gRDF = Cc["@mozilla.org/rdf/rdf-service;1"]. + getService(Ci.nsIRDFService); + gInstallManifestRoot = gRDF.GetResource(RDFURI_INSTALL_MANIFEST_ROOT); + +- // Register Global Install Location ++ // Register Global GRE Install Location ++ var greGlobalExtensions = getDirNoCreate(KEY_GREDIR, [DIR_EXTENSIONS]); ++ var priority = Ci.nsIInstallLocation.PRIORITY_APP_SYSTEM_GLOBAL; ++ var greGlobalLocation = new DirectoryInstallLocation(KEY_GRE_GLOBAL, ++ greGlobalExtensions, true, ++ priority); ++ InstallLocations.put(greGlobalLocation); ++ ++ // Register Global Application Install Location + var appGlobalExtensions = getDirNoCreate(KEY_APPDIR, [DIR_EXTENSIONS]); + var priority = Ci.nsIInstallLocation.PRIORITY_APP_SYSTEM_GLOBAL; + var globalLocation = new DirectoryInstallLocation(KEY_APP_GLOBAL, + appGlobalExtensions, true, + priority, false); + InstallLocations.put(globalLocation); + + // Register App-Profile Install Location +@@ -3613,17 +3624,17 @@ + badItems.push(id); + continue; + } + + if (ds.getItemProperty(id, "appManaged") == "true") { + // Force an update of the metadata for appManaged extensions since the + // last modified time is not updated for directories on FAT / FAT32 + // filesystems when software update applies a new version of the app. +- if (location.name == KEY_APP_GLOBAL) { ++ if (location.name == KEY_APP_GLOBAL || location.name == KEY_GRE_GLOBAL) { + var installRDF = location.getItemFile(id, FILE_INSTALL_MANIFEST); + if (installRDF.exists()) { + var metadataDS = getInstallManifest(installRDF); + ds.addItemMetadata(id, metadataDS, location); + ds.updateProperty(id, "compatible"); + } + } + } +@@ -3771,17 +3782,17 @@ + + // return early to avoid migrating data twice if we already have a + // toolkit 1.8 extension datasource. + if (dsExists) + return; + + // Prepare themes for installation + // Only enumerate directories in the app-profile and app-global locations. +- var locations = [KEY_APP_PROFILE, KEY_APP_GLOBAL]; ++ var locations = [KEY_APP_PROFILE, KEY_APP_GLOBAL, KEY_GRE_GLOBAL]; + for (var i = 0; i < locations.length; ++i) { + var location = InstallLocations.get(locations[i]); + if (!location.canAccess) + continue; + + var entries = location.itemLocations; + var entry; + while ((entry = entries.nextFile)) { +@@ -3837,17 +3848,18 @@ + // items since the datasource hasn't been created yet. + var itemsToCheck = []; + if (this._checkForFileChanges()) { + // Create a list of all items that are to be installed so we can migrate + // these items's settings to the new datasource. + var items = PendingOperations.getOperations(OP_NEEDS_INSTALL); + for (i = items.length - 1; i >= 0; --i) { + if (items[i].locationKey == KEY_APP_PROFILE || +- items[i].locationKey == KEY_APP_GLOBAL) ++ items[i].locationKey == KEY_APP_GLOBAL || ++ items[i].locationKey == KEY_GRE_GLOBAL) + itemsToCheck.push(items[i].id); + } + this._finishOperations(); + } + + // If there are no items to migrate settings for return early. + if (itemsToCheck.length == 0) + return; +@@ -4933,16 +4945,17 @@ + StartupCache.put(installLocation, id, OP_NONE, true); + var restartRequired = this.installRequiresRestart(id, ds.getItemProperty(id, "type")) + this._updateManifests(restartRequired); + return; + } + } + } + else if (installLocation.name == KEY_APP_PROFILE || ++ installLocation.name == KEY_GRE_GLOBAL || + installLocation.name == KEY_APP_GLOBAL || + installLocation.name == KEY_APP_SYSTEM_USER) { + // Check for a pointer file and remove it if it exists + var pointerFile = installLocation.location.clone(); + pointerFile.append(id); + if (pointerFile.exists() && !pointerFile.isDirectory()) + pointerFile.remove(false); + } +@@ -7094,17 +7107,17 @@ + // with and maintained by this application AND it is installed in the + // global install location (i.e. the place installed by the app installer) + // it is and can be managed by the update file - it's not an item that has + // been manually installed by the user into their profile dir, and as such + // it is always compatible with the next release of the application since + // we will continue to support it. + var locationKey = this.getItemProperty(id, "installLocation"); + var appManaged = this.getItemProperty(id, "appManaged") == "true"; +- if (appManaged && locationKey == KEY_APP_GLOBAL) ++ if (appManaged && (locationKey == KEY_APP_GLOBAL || locationKey == KEY_GRE_GLOBAL)) + continue; + + if (type != -1 && (type & desiredType) && + !this.isCompatible(this, item, appVersion, platformVersion)) + items.push(this.getItemForID(id)); + } + return items; + }, +@@ -7660,17 +7673,17 @@ + // Assert properties with single values + var singleProps = ["version", "updateURL", "updateService", "optionsURL", + "aboutURL", "iconURL", "internalName", "updateKey"]; + + // Items installed into restricted Install Locations can also be locked + // (can't be removed or disabled), and hidden (not shown in the UI) + if (installLocation.restricted) + singleProps = singleProps.concat(["locked", "hidden"]); +- if (installLocation.name == KEY_APP_GLOBAL) ++ if (installLocation.name == KEY_APP_GLOBAL || installLocation.name == KEY_GRE_GLOBAL) + singleProps = singleProps.concat(["appManaged"]); + for (var i = 0; i < singleProps.length; ++i) { + var property = EM_R(singleProps[i]); + var literal = installManifest.GetTarget(gInstallManifestRoot, property, true); + // If literal is null, _setProperty will remove any existing. + this._setProperty(this._inner, targetRes, property, literal); + } + +@@ -8326,17 +8339,17 @@ + + /** + * Get the em:appManaged property. This prevents extensions from hiding + * extensions installed into locations other than the app-global location. + */ + _rdfGet_appManaged: function(item, property) { + var id = stripPrefix(item.Value, PREFIX_ITEM_URI); + var locationKey = this.getItemProperty(id, "installLocation"); +- if (locationKey != KEY_APP_GLOBAL) ++ if (locationKey != KEY_APP_GLOBAL && locationKey != KEY_GRE_GLOBAL) + return EM_L("false"); + return null; + }, + + /** + * Get the em:hidden property. This prevents extensions from hiding + * extensions installed into locations other than restricted locations. + */ +Index: mozilla/xpcom/io/nsAppDirectoryServiceDefs.h +=================================================================== +--- mozilla.orig/xpcom/io/nsAppDirectoryServiceDefs.h ++++ mozilla/xpcom/io/nsAppDirectoryServiceDefs.h +@@ -71,16 +71,17 @@ + + #define NS_APP_USER_PROFILES_ROOT_DIR "DefProfRt" // The dir where user profile dirs live. + #define NS_APP_USER_PROFILES_LOCAL_ROOT_DIR "DefProfLRt" // The dir where user profile temp dirs live. + + #define NS_APP_RES_DIR "ARes" + #define NS_APP_CHROME_DIR "AChrom" + #define NS_APP_PLUGINS_DIR "APlugns" // Deprecated - use NS_APP_PLUGINS_DIR_LIST + #define NS_APP_SEARCH_DIR "SrchPlugns" ++#define NS_GRE_PLUGINS_DIR "GrePlugns" // Usually you want NS_APP_PLUGINS_DIR_LIST + + #define NS_APP_CHROME_DIR_LIST "AChromDL" + #define NS_APP_PLUGINS_DIR_LIST "APluginsDL" + #define NS_APP_SEARCH_DIR_LIST "SrchPluginsDL" + + // -------------------------------------------------------------------------------------- + // Files and directories which exist on a per-profile basis + // These locations are typically provided by the profile mgr +Index: mozilla/xpcom/io/nsAppFileLocationProvider.cpp +=================================================================== +--- mozilla.orig/xpcom/io/nsAppFileLocationProvider.cpp ++++ mozilla/xpcom/io/nsAppFileLocationProvider.cpp +@@ -194,16 +194,22 @@ + rv = localFile->AppendRelativeNativePath(RES_DIR_NAME); + } + else if (nsCRT::strcmp(prop, NS_APP_CHROME_DIR) == 0) + { + rv = CloneMozBinDirectory(getter_AddRefs(localFile)); + if (NS_SUCCEEDED(rv)) + rv = localFile->AppendRelativeNativePath(CHROME_DIR_NAME); + } ++ else if (nsCRT::strcmp(prop, NS_GRE_PLUGINS_DIR) == 0) ++ { ++ rv = CloneMozGreDirectory(getter_AddRefs(localFile)); ++ if (NS_SUCCEEDED(rv)) ++ rv = localFile->AppendRelativeNativePath(PLUGINS_DIR_NAME); ++ } + else if (nsCRT::strcmp(prop, NS_APP_PLUGINS_DIR) == 0) + { + rv = CloneMozBinDirectory(getter_AddRefs(localFile)); + if (NS_SUCCEEDED(rv)) + rv = localFile->AppendRelativeNativePath(PLUGINS_DIR_NAME); + } + #ifdef XP_MACOSX + else if (nsCRT::strcmp(prop, NS_MACOSX_USER_PLUGIN_DIR) == 0) +@@ -276,16 +282,51 @@ + + if (localFile && NS_SUCCEEDED(rv)) + return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)_retval); + + return rv; + } + + ++NS_METHOD nsAppFileLocationProvider::CloneMozGreDirectory(nsILocalFile **aLocalFile) ++{ ++ NS_ENSURE_ARG_POINTER(aLocalFile); ++ nsresult rv; ++ ++ if (!mMozGreDirectory) ++ { ++ // Get the mozilla bin directory ++ // 1. Check the directory service first for NS_XPCOM_CURRENT_PROCESS_DIR ++ // This will be set if a directory was passed to NS_InitXPCOM ++ // 2. If that doesn't work, set it to be the current process directory ++ nsCOMPtr ++ directoryService(do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv)); ++ if (NS_FAILED(rv)) ++ return rv; ++ ++ rv = directoryService->Get(NS_GRE_DIR, NS_GET_IID(nsIFile), getter_AddRefs(mMozGreDirectory)); ++ if (NS_FAILED(rv)) ++ return rv; ++ } ++ ++ nsCOMPtr aFile; ++ rv = mMozGreDirectory->Clone(getter_AddRefs(aFile)); ++ if (NS_FAILED(rv)) ++ return rv; ++ ++ nsCOMPtr lfile = do_QueryInterface (aFile); ++ if (!lfile) ++ return NS_ERROR_FAILURE; ++ ++ NS_IF_ADDREF(*aLocalFile = lfile); ++ return NS_OK; ++} ++ ++ + NS_METHOD nsAppFileLocationProvider::CloneMozBinDirectory(nsILocalFile **aLocalFile) + { + NS_ENSURE_ARG_POINTER(aLocalFile); + nsresult rv; + + if (!mMozBinDirectory) + { + // Get the mozilla bin directory +@@ -578,30 +619,30 @@ + { + NS_ENSURE_ARG_POINTER(_retval); + *_retval = nsnull; + nsresult rv = NS_ERROR_FAILURE; + + if (!nsCRT::strcmp(prop, NS_APP_PLUGINS_DIR_LIST)) + { + #ifdef XP_MACOSX +- static const char* osXKeys[] = { NS_APP_PLUGINS_DIR, NS_MACOSX_USER_PLUGIN_DIR, NS_MACOSX_LOCAL_PLUGIN_DIR, nsnull }; +- static const char* os9Keys[] = { NS_APP_PLUGINS_DIR, NS_MAC_CLASSIC_PLUGIN_DIR, nsnull }; ++ static const char* osXKeys[] = { NS_APP_PLUGINS_DIR, NS_GRE_PLUGINS_DIR, NS_MACOSX_USER_PLUGIN_DIR, NS_MACOSX_LOCAL_PLUGIN_DIR, nsnull }; ++ static const char* os9Keys[] = { NS_APP_PLUGINS_DIR, NS_GRE_PLUGINS_DIR, NS_MAC_CLASSIC_PLUGIN_DIR, nsnull }; + static const char** keys; + + if (!keys) { + OSErr err; + long response; + err = ::Gestalt(gestaltSystemVersion, &response); + keys = (!err && response >= 0x00001000) ? osXKeys : os9Keys; + } + + *_retval = new nsAppDirectoryEnumerator(this, keys); + #else +- static const char* keys[] = { nsnull, NS_USER_PLUGINS_DIR, NS_APP_PLUGINS_DIR, nsnull }; ++ static const char* keys[] = { nsnull, NS_USER_PLUGINS_DIR, NS_APP_PLUGINS_DIR, NS_GRE_PLUGINS_DIR, nsnull }; + if (!keys[0] && !(keys[0] = PR_GetEnv("MOZ_PLUGIN_PATH"))) { + static const char nullstr = 0; + keys[0] = &nullstr; + } + *_retval = new nsPathsDirectoryEnumerator(this, keys); + #endif + NS_IF_ADDREF(*_retval); + rv = *_retval ? NS_OK : NS_ERROR_OUT_OF_MEMORY; +Index: mozilla/xpcom/io/nsAppFileLocationProvider.h +=================================================================== +--- mozilla.orig/xpcom/io/nsAppFileLocationProvider.h ++++ mozilla/xpcom/io/nsAppFileLocationProvider.h +@@ -55,22 +55,24 @@ + NS_DECL_NSIDIRECTORYSERVICEPROVIDER + NS_DECL_NSIDIRECTORYSERVICEPROVIDER2 + + private: + ~nsAppFileLocationProvider() {} + + protected: + NS_METHOD CloneMozBinDirectory(nsILocalFile **aLocalFile); ++ NS_METHOD CloneMozGreDirectory(nsILocalFile **aLocalFile); + /** + * Get the product directory. This is a user-specific directory for storing + * application settings (e.g. the Application Data directory on windows + * systems). + * @param aLocal If true, should try to get a directory that is only stored + * locally (ie not transferred with roaming profiles) + */ + NS_METHOD GetProductDirectory(nsILocalFile **aLocalFile, + PRBool aLocal = PR_FALSE); + NS_METHOD GetDefaultUserProfileRoot(nsILocalFile **aLocalFile, + PRBool aLocal = PR_FALSE); + + nsCOMPtr mMozBinDirectory; ++ nsCOMPtr mMozGreDirectory; + }; +Index: mozilla/toolkit/xre/nsXREDirProvider.cpp +=================================================================== +--- mozilla.orig/toolkit/xre/nsXREDirProvider.cpp ++++ mozilla/toolkit/xre/nsXREDirProvider.cpp +@@ -747,18 +747,21 @@ + + rv = NS_NewArrayEnumerator(aResult, directories); + } + else if (!strcmp(aProperty, NS_APP_PLUGINS_DIR_LIST)) { + static const char *const kAppendPlugins[] = { "plugins", nsnull }; + nsCOMArray directories; + + // The root dirserviceprovider does quite a bit for us: we're mainly +- // interested in xulapp and extension-provided plugins. ++ // interested in gre, xulapp, and extension-provided plugins. + LoadBundleDirectories(); ++ LoadAppDirIntoArray(mGREDir, ++ kAppendPlugins, ++ directories); + LoadDirsIntoArray(mAppBundleDirectories, + kAppendPlugins, + directories); + LoadDirsIntoArray(mExtensionDirectories, + kAppendPlugins, + directories); + + rv = NS_NewArrayEnumerator(aResult, directories); --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/protect_tests_by_ifdefs.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/protect_tests_by_ifdefs.patch @@ -0,0 +1,94 @@ +--- + content/xul/content/Makefile.in | 6 +++++- + dom/Makefile.in | 6 +++++- + toolkit/components/commandlines/Makefile.in | 5 ++++- + toolkit/components/downloads/Makefile.in | 6 +++++- + 4 files changed, 19 insertions(+), 4 deletions(-) + +Index: mozilla/content/xul/content/Makefile.in +=================================================================== +--- mozilla.orig/content/xul/content/Makefile.in ++++ mozilla/content/xul/content/Makefile.in +@@ -38,12 +38,16 @@ + DEPTH = ../../.. + topsrcdir = @top_srcdir@ + srcdir = @srcdir@ + VPATH = @srcdir@ + + include $(DEPTH)/config/autoconf.mk + + MODULE = xul +-DIRS = src test ++DIRS = src ++ ++ifdef ENABLE_TESTS ++DIRS += test ++endif + + include $(topsrcdir)/config/rules.mk + +Index: mozilla/toolkit/components/downloads/Makefile.in +=================================================================== +--- mozilla.orig/toolkit/components/downloads/Makefile.in ++++ mozilla/toolkit/components/downloads/Makefile.in +@@ -37,12 +37,16 @@ + + DEPTH = ../../.. + topsrcdir = @top_srcdir@ + srcdir = @srcdir@ + VPATH = @srcdir@ + + include $(DEPTH)/config/autoconf.mk + +-DIRS = public src test ++DIRS = public src ++ ++ifdef ENABLE_TESTS ++DIRS += test ++endif + + include $(topsrcdir)/config/rules.mk + +Index: mozilla/toolkit/components/commandlines/Makefile.in +=================================================================== +--- mozilla.orig/toolkit/components/commandlines/Makefile.in ++++ mozilla/toolkit/components/commandlines/Makefile.in +@@ -40,12 +40,15 @@ + srcdir = @srcdir@ + VPATH = @srcdir@ + + include $(DEPTH)/config/autoconf.mk + + DIRS = \ + public \ + src \ +- test \ + $(NULL) + ++ifdef ENABLE_TESTS ++DIRS += test ++endif ++ + include $(topsrcdir)/config/rules.mk +Index: mozilla/dom/Makefile.in +=================================================================== +--- mozilla.orig/dom/Makefile.in ++++ mozilla/dom/Makefile.in +@@ -38,12 +38,16 @@ + DEPTH = .. + topsrcdir = @top_srcdir@ + srcdir = @srcdir@ + VPATH = @srcdir@ + + include $(DEPTH)/config/autoconf.mk + + MODULE = dom +-DIRS = public src locales tests ++DIRS = public src locales ++ ++ifdef ENABLE_TESTS ++DIRS += tests ++endif + + include $(topsrcdir)/config/rules.mk + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX_autoconfig_in_gre.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX_autoconfig_in_gre.patch @@ -0,0 +1,35 @@ +--- + extensions/pref/autoconfig/src/nsReadConfig.cpp | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Index: mozilla/extensions/pref/autoconfig/src/nsReadConfig.cpp +=================================================================== +--- mozilla.orig/extensions/pref/autoconfig/src/nsReadConfig.cpp ++++ mozilla/extensions/pref/autoconfig/src/nsReadConfig.cpp +@@ -279,20 +279,25 @@ + getter_AddRefs(jsFile)); + if (NS_FAILED(rv)) + return rv; + + #ifdef XP_MAC + jsFile->AppendNative(NS_LITERAL_CSTRING("Essential Files")); + #endif + } else { +- rv = NS_GetSpecialDirectory(NS_APP_DEFAULTS_50_DIR, ++ rv = NS_GetSpecialDirectory(NS_GRE_DIR, + getter_AddRefs(jsFile)); + if (NS_FAILED(rv)) + return rv; ++ ++ rv = jsFile->AppendNative(NS_LITERAL_CSTRING("defaults")); ++ if (NS_FAILED(rv)) ++ return rv; ++ + rv = jsFile->AppendNative(NS_LITERAL_CSTRING("autoconfig")); + if (NS_FAILED(rv)) + return rv; + } + rv = jsFile->AppendNative(nsDependentCString(aFileName)); + if (NS_FAILED(rv)) + return rv; + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/drop_bz418016.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/drop_bz418016.patch @@ -0,0 +1,61 @@ +--- + memory/jemalloc/Makefile.in | 9 +-------- + toolkit/library/Makefile.in | 8 -------- + 2 files changed, 1 insertion(+), 16 deletions(-) + +Index: mozilla/memory/jemalloc/Makefile.in +=================================================================== +--- mozilla.orig/memory/jemalloc/Makefile.in ++++ mozilla/memory/jemalloc/Makefile.in +@@ -76,29 +76,22 @@ + rm $(CRT_OBJ_DIR)/build/intel/{libcmt,libcpmt}.lib + else + # Using a pre-built DLL, so just install it. + libs:: $(WIN32_CUSTOM_CRT_DIR)/mozcrt19.dll + $(INSTALL) $< $(FINAL_TARGET) + endif + + else ++# for other platforms, just build jemalloc as a shared lib + + MODULE_OPTIMIZE_FLAGS = -O2 + LIBRARY_NAME = jemalloc + +-ifeq (Darwin,$(OS_TARGET)) +-# Build jemalloc as a shared lib, so that the library init function is executed. + FORCE_SHARED_LIB= 1 +-else +-# Make jemalloc part of libxul, in order to reduce dynamic loading overhead. +-MODULE = jemalloc +-LIBXUL_LIBRARY = 1 +-FORCE_STATIC_LIB = 1 +-endif + + CSRCS = \ + jemalloc.c \ + $(NULL) + + #XXX: PGO on Linux causes problems here + # See bug 419470 + NO_PROFILE_GUIDED_OPTIMIZE = 1 +Index: mozilla/toolkit/library/Makefile.in +=================================================================== +--- mozilla.orig/toolkit/library/Makefile.in ++++ mozilla/toolkit/library/Makefile.in +@@ -244,16 +244,8 @@ + ifdef MOZ_JAVAXPCOM + dlldeps-javaxpcom.cpp: $(topsrcdir)/extensions/java/xpcom/src/dlldeps-javaxpcom.cpp + $(INSTALL) $^ . + endif + + ifneq (,$(filter layout-debug,$(MOZ_EXTENSIONS))) + DEFINES += -DMOZ_ENABLE_EXTENSION_LAYOUT_DEBUG + endif +- +-ifdef MOZ_MEMORY +-ifneq ($(OS_ARCH),WINNT) +-ifneq ($(OS_ARCH),Darwin) +-EXTRA_DSO_LDOPTS += $(DEPTH)/memory/jemalloc/$(LIB_PREFIX)jemalloc.$(LIB_SUFFIX) +-endif +-endif +-endif --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/rename_venkman_addon.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/rename_venkman_addon.patch @@ -0,0 +1,120 @@ +--- + extensions/venkman/Makefile.in | 2 +- + extensions/venkman/locales/Makefile.in | 2 +- + extensions/venkman/locales/generic/install.rdf | 2 +- + extensions/venkman/resources/Makefile.in | 2 +- + extensions/venkman/xpi/resources/install.rdf | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + +Index: mozilla/extensions/venkman/Makefile.in +=================================================================== +--- mozilla.orig/extensions/venkman/Makefile.in ++++ mozilla/extensions/venkman/Makefile.in +@@ -48,17 +48,17 @@ + + EXTRA_COMPONENTS = js/venkman-service.js + DIST_FILES = xpi/resources/install.rdf + + VENKMAN_VERSION=$(shell cat $(srcdir)/version.txt) + + XPI_NAME = venkman + NO_JAR_AUTO_REG = 1 +-INSTALL_EXTENSION_ID = {f13b157f-b174-47e7-a34d-4815ddfdfeb8} ++INSTALL_EXTENSION_ID = venkman@mozilla.org + XPI_PKGNAME = venkman-$(VENKMAN_VERSION) + + # include config.mk before using the AB_CD var it sets in an if statement + include $(topsrcdir)/config/config.mk + + # always build en-US locale, add build locale if supported + BUILD_LOCALES = en-US + ifneq (,$(filter $(AB_CD),$(shell cat $(srcdir)/locales/all-locales))) +Index: mozilla/extensions/venkman/locales/Makefile.in +=================================================================== +--- mozilla.orig/extensions/venkman/locales/Makefile.in ++++ mozilla/extensions/venkman/locales/Makefile.in +@@ -43,17 +43,17 @@ + relativesrcdir = extensions/venkman/locales + + VENKMAN_VERSION=$(shell cat $(srcdir)/../version.txt) + VENKMAN_BASE_VERSION=$(shell echo "$(VENKMAN_VERSION)" | sed "s|\([0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\).*|\1|") + + XPI_NAME = venkman + USE_EXTENSION_MANIFEST = 1 + NO_JAR_AUTO_REG = 1 +-INSTALL_EXTENSION_ID = {f13b157f-b174-47e7-a34d-4815ddfdfeb8} ++INSTALL_EXTENSION_ID = venkman@mozilla.org + XPI_PKGNAME = venkman-$(VENKMAN_VERSION) + + # include config.mk before we override the AB_CD var it sets + include $(topsrcdir)/config/config.mk + + # if the wanted language is not in all-locales, fall back to en-US + ifeq (,$(filter $(AB_CD),$(shell cat $(srcdir)/all-locales))) + override AB_CD = en-US +Index: mozilla/extensions/venkman/locales/generic/install.rdf +=================================================================== +--- mozilla.orig/extensions/venkman/locales/generic/install.rdf ++++ mozilla/extensions/venkman/locales/generic/install.rdf +@@ -10,17 +10,17 @@ + em:homepageURL="@MOZ_LANGPACK_HOMEPAGE@"> + #ifdef MOZ_LANGPACK_CONTRIBUTORS + @MOZ_LANGPACK_CONTRIBUTORS@ + #endif + + + + +- {f13b157f-b174-47e7-a34d-4815ddfdfeb8} ++ venkman@mozilla.org + @VENKMAN_BASE_VERSION@ + @VENKMAN_BASE_VERSION@.* + + + + + + +Index: mozilla/extensions/venkman/resources/Makefile.in +=================================================================== +--- mozilla.orig/extensions/venkman/resources/Makefile.in ++++ mozilla/extensions/venkman/resources/Makefile.in +@@ -43,15 +43,15 @@ + + include $(DEPTH)/config/autoconf.mk + + VENKMAN_VERSION=$(shell cat $(srcdir)/../version.txt) + + XPI_NAME = venkman + USE_EXTENSION_MANIFEST = 1 + NO_JAR_AUTO_REG = 1 +-INSTALL_EXTENSION_ID = {f13b157f-b174-47e7-a34d-4815ddfdfeb8} ++INSTALL_EXTENSION_ID = venkman@mozilla.org + XPI_PKGNAME = venkman-$(VENKMAN_VERSION) + + DEFINES += -DVENKMAN_VERSION=$(VENKMAN_VERSION) + + include $(topsrcdir)/config/rules.mk + +Index: mozilla/extensions/venkman/xpi/resources/install.rdf +=================================================================== +--- mozilla.orig/extensions/venkman/xpi/resources/install.rdf ++++ mozilla/extensions/venkman/xpi/resources/install.rdf +@@ -1,16 +1,16 @@ + + + #filter substitution + + + + +- {f13b157f-b174-47e7-a34d-4815ddfdfeb8} ++ venkman@mozilla.org + @VENKMAN_VERSION@ + + + + + {ec8030f7-c20a-464f-9b0e-13a3a9e97384} + 0.9 + 3.0 --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/patches/bzXXX_no_zlib_export_if_native.patch +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/patches/bzXXX_no_zlib_export_if_native.patch @@ -0,0 +1,27 @@ +Index: modules/zlib/standalone/Makefile.in +=================================================================== +RCS file: /cvsroot/mozilla/modules/zlib/standalone/Makefile.in,v +retrieving revision 1.20 +diff -u -p -8 -r1.20 Makefile.in +--- mozilla/modules/zlib/standalone/Makefile.in 31 Dec 2005 16:02:07 -0000 1.20 ++++ mozilla/modules/zlib/standalone/Makefile.in 1 Jan 2008 23:27:42 -0000 +@@ -43,17 +43,19 @@ VPATH = @srcdir@ + + include $(DEPTH)/config/autoconf.mk + include $(srcdir)/../src/objs.mk + + MODULE = zlib + LIBRARY_NAME = mozz_s + + CSRCS = $(MODULES_ZLIB_SRC_LCSRCS) ++ifndef MOZ_NATIVE_ZLIB + EXPORTS = $(MODULES_ZLIB_SRC_EXPORTS) ++endif + + FORCE_STATIC_LIB = 1 + SRCS_IN_OBJDIR = 1 + + ifeq ($(OS_ARCH),WINNT) + USE_STATIC_LIBS=1 + endif + --- xulrunner-1.9-1.9.0.14+build2+nobinonly.orig/debian/translation-support/install.rdf.in +++ xulrunner-1.9-1.9.0.14+build2+nobinonly/debian/translation-support/install.rdf.in @@ -0,0 +1,24 @@ + + + + + + + + + + toolkit@mozilla.org + @EM_TOOLKIT_MIN_VERSION@ + @EM_TOOLKIT_MAX_VERSION@ + + + +