summaryrefslogtreecommitdiff
path: root/extra/xulrunner/xulrunner-omnijar.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/xulrunner/xulrunner-omnijar.patch')
-rw-r--r--extra/xulrunner/xulrunner-omnijar.patch1737
1 files changed, 0 insertions, 1737 deletions
diff --git a/extra/xulrunner/xulrunner-omnijar.patch b/extra/xulrunner/xulrunner-omnijar.patch
deleted file mode 100644
index 66ec5206c..000000000
--- a/extra/xulrunner/xulrunner-omnijar.patch
+++ /dev/null
@@ -1,1737 +0,0 @@
-# HG changeset patch
-# Parent a7dea879b4b445a23186f438900562155bb39e99
-Bug 620931 part 1 - Use chrome manifest to register resource://gre-resources/
-
-diff --git a/layout/style/jar.mn b/layout/style/jar.mn
---- a/layout/style/jar.mn
-+++ b/layout/style/jar.mn
-@@ -1,8 +1,10 @@
- toolkit.jar:
- * res/ua.css (ua.css)
- res/html.css (html.css)
- res/quirk.css (quirk.css)
- res/viewsource.css (viewsource.css)
- * res/forms.css (forms.css)
- res/arrow.gif (arrow.gif)
- res/arrowd.gif (arrowd.gif)
-+
-+% resource gre-resources %res/
-diff --git a/netwerk/protocol/res/nsResProtocolHandler.cpp b/netwerk/protocol/res/nsResProtocolHandler.cpp
---- a/netwerk/protocol/res/nsResProtocolHandler.cpp
-+++ b/netwerk/protocol/res/nsResProtocolHandler.cpp
-@@ -75,17 +75,16 @@ static nsResProtocolHandler *gResHandler
- //
- // this enables PR_LOG_ALWAYS level information and places all output in
- // the file log.txt
- //
- static PRLogModuleInfo *gResLog;
- #endif
-
- #define kGRE NS_LITERAL_CSTRING("gre")
--#define kGRE_RESOURCES NS_LITERAL_CSTRING("gre-resources")
-
- //----------------------------------------------------------------------------
- // nsResURL : overrides nsStandardURL::GetFile to provide nsIFile resolution
- //----------------------------------------------------------------------------
-
- nsresult
- nsResURL::EnsureFile()
- {
-@@ -197,28 +196,16 @@ nsResProtocolHandler::Init()
- NS_ENSURE_SUCCESS(rv, rv);
-
- //
- // make resource://gre/ point to the GRE directory
- //
- rv = AddSpecialDir(NS_GRE_DIR, kGRE);
- NS_ENSURE_SUCCESS(rv, rv);
-
-- // make resource://gre-resources/ point to gre toolkit[.jar]/res
-- nsCOMPtr<nsIURI> greURI;
-- nsCOMPtr<nsIURI> greResURI;
-- GetSubstitution(kGRE, getter_AddRefs(greURI));
--#ifdef MOZ_CHROME_FILE_FORMAT_JAR
-- NS_NAMED_LITERAL_CSTRING(strGRE_RES_URL, "jar:chrome/toolkit.jar!/res/");
--#else
-- NS_NAMED_LITERAL_CSTRING(strGRE_RES_URL, "chrome/toolkit/res/");
--#endif
-- rv = mIOService->NewURI(strGRE_RES_URL, nsnull, greURI,
-- getter_AddRefs(greResURI));
-- SetSubstitution(kGRE_RESOURCES, greResURI);
- //XXXbsmedberg Neil wants a resource://pchrome/ for the profile chrome dir...
- // but once I finish multiple chrome registration I'm not sure that it is needed
-
- // XXX dveditz: resource://pchrome/ defeats profile directory salting
- // if web content can load it. Tread carefully.
-
- return rv;
- }
-@@ -242,22 +229,16 @@ nsResProtocolHandler::Init(nsIFile *aOmn
- // these entries should be kept in sync with the normal Init function
-
- // resource:/// points to jar:omni.jar!/
- SetSubstitution(EmptyCString(), uri);
-
- // resource://gre/ points to jar:omni.jar!/
- SetSubstitution(kGRE, uri);
-
-- urlStr += "chrome/toolkit/res/";
-- rv = mIOService->NewURI(urlStr, nsnull, nsnull, getter_AddRefs(uri));
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- // resource://gre-resources/ points to jar:omni.jar!/chrome/toolkit/res/
-- SetSubstitution(kGRE_RESOURCES, uri);
- return NS_OK;
- }
- #endif
-
- #ifdef MOZ_IPC
- static PLDHashOperator
- EnumerateSubstitution(const nsACString& aKey,
- nsIURI* aURI,
-# HG changeset patch
-# Parent 3038cccba1a071d6b418e15442d0f2d9f3dcb11d
-Bug 620931 part 2 - When building --with-libxul-sdk, use the right preferences directory
-
-diff --git a/browser/locales/Makefile.in b/browser/locales/Makefile.in
---- a/browser/locales/Makefile.in
-+++ b/browser/locales/Makefile.in
-@@ -183,17 +183,17 @@ install:: $(addsuffix .xml,$(SEARCH_PLUG
- $(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)/searchplugins
-
-
- libs-%:
- $(NSINSTALL) -D $(DIST)/install
- @$(MAKE) -C ../../toolkit/locales libs-$* BOTH_MANIFESTS=1
- @$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$* BOTH_MANIFESTS=1
- @$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$* BOTH_MANIFESTS=1
-- @$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=defaults/pref BOTH_MANIFESTS=1
-+ @$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR) BOTH_MANIFESTS=1
- @$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$* BOTH_MANIFESTS=1
-
-
- repackage-win32-installer: WIN32_INSTALLER_OUT="$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe"
- repackage-win32-installer: $(WIN32_INSTALLER_IN) $(SUBMAKEFILES)
- @echo "Repackaging $(WIN32_INSTALLER_IN) into $(WIN32_INSTALLER_OUT)."
- $(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY) export
- $(MAKE) -C ../installer/windows CONFIG_DIR=l10ngen l10ngen/setup.exe l10ngen/7zSD.sfx
-diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk
---- a/toolkit/mozapps/installer/packager.mk
-+++ b/toolkit/mozapps/installer/packager.mk
-@@ -307,17 +307,17 @@ OMNIJAR_FILES = \
- res \
- defaults \
- greprefs.js \
- jsloader \
- $(NULL)
-
- NON_OMNIJAR_FILES += \
- chrome/icons/\* \
-- defaults/pref/channel-prefs.js \
-+ $(PREF_DIR)/channel-prefs.js \
- res/cursors/\* \
- res/MainMenu.nib/\* \
- $(NULL)
-
- PACK_OMNIJAR = \
- rm -f omni.jar components/binary.manifest && \
- grep -h '^binary-component' components/*.manifest > binary.manifest ; \
- sed -e 's/^binary-component/\#binary-component/' components/components.manifest > components.manifest && \
-# HG changeset patch
-# Parent cd8df8030f7ad7530692bd7c4391a8009df56a02
-Bug 620931 part 3 - Allow GRE and XUL application to use omni.jar independently
-
-We now store two independent locations for an omni.jar, allowing GRE/XRE and
-XUL application to each have their own omni.jar. And since xulrunner setups
-are very independent from the XUL applications, we implement support for both
-omni.jar and non omni.jar cases in the same runtime, with the side effect of
-allowing to switch from one to the other manually without rebuilding the
-binaries.
-
-We let the mozilla::Omnijar API handle both cases, so that callers don't need
-too much work to support them.
-
-We also make the preferences service load the same set of preferences in all
-the various cases (unified vs. separate, omni.jar vs. no omni.jar).
-
-The child process launcher for IPC is modified to pass the base directories
-needed for the mozilla::Omnijar API initialization in the child process.
-
-Finally, the startupcache file name canonicalization is modified to separate
-APP and GRE resources.
-
-diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp
---- a/ipc/glue/GeckoChildProcessHost.cpp
-+++ b/ipc/glue/GeckoChildProcessHost.cpp
-@@ -440,26 +440,29 @@ GeckoChildProcessHost::PerformAsyncLaunc
- // other end of the socketpair() from us
-
- std::vector<std::string> childArgv;
-
- childArgv.push_back(exePath.value());
-
- childArgv.insert(childArgv.end(), aExtraOpts.begin(), aExtraOpts.end());
-
--#ifdef MOZ_OMNIJAR
- // Make sure the child process can find the omnijar
- // See XRE_InitCommandLine in nsAppRunner.cpp
-- nsCAutoString omnijarPath;
-- if (mozilla::OmnijarPath()) {
-- mozilla::OmnijarPath()->GetNativePath(omnijarPath);
-- childArgv.push_back("-omnijar");
-- childArgv.push_back(omnijarPath.get());
-+ nsCAutoString path;
-+ nsCOMPtr<nsIFile> file = mozilla::Omnijar::GetBase(mozilla::Omnijar::GRE);
-+ if (file && NS_SUCCEEDED(file->GetNativePath(path))) {
-+ childArgv.push_back("-grebase");
-+ childArgv.push_back(path.get());
- }
--#endif
-+ file = mozilla::Omnijar::GetBase(mozilla::Omnijar::APP);
-+ if (file && NS_SUCCEEDED(file->GetNativePath(path))) {
-+ childArgv.push_back("-appbase");
-+ childArgv.push_back(path.get());
-+ }
-
- childArgv.push_back(pidstring);
-
- #if defined(MOZ_CRASHREPORTER)
- # if defined(OS_LINUX)
- int childCrashFd, childCrashRemapFd;
- if (!CrashReporter::CreateNotificationPipeForChild(
- &childCrashFd, &childCrashRemapFd))
-@@ -552,26 +555,29 @@ GeckoChildProcessHost::PerformAsyncLaunc
- for (std::vector<std::string>::iterator it = aExtraOpts.begin();
- it != aExtraOpts.end();
- ++it) {
- cmdLine.AppendLooseValue(UTF8ToWide(*it));
- }
-
- cmdLine.AppendLooseValue(std::wstring(mGroupId.get()));
-
--#ifdef MOZ_OMNIJAR
- // Make sure the child process can find the omnijar
- // See XRE_InitCommandLine in nsAppRunner.cpp
-- nsAutoString omnijarPath;
-- if (mozilla::OmnijarPath()) {
-- mozilla::OmnijarPath()->GetPath(omnijarPath);
-- cmdLine.AppendLooseValue(UTF8ToWide("-omnijar"));
-- cmdLine.AppendLooseValue(omnijarPath.get());
-+ nsAutoString path;
-+ nsCOMPtr<nsIFile> file = mozilla::Omnijar::GetBase(mozilla::Omnijar::GRE);
-+ if (file && NS_SUCCEEDED(file->GetPath(path))) {
-+ cmdLine.AppendLooseValue(UTF8ToWide("-grebase"));
-+ cmdLine.AppendLooseValue(path.get());
- }
--#endif
-+ file = mozilla::Omnijar::GetBase(mozilla::Omnijar::APP);
-+ if (file && NS_SUCCEEDED(file->GetPath(path))) {
-+ cmdLine.AppendLooseValue(UTF8ToWide("-appbase"));
-+ cmdLine.AppendLooseValue(path.get());
-+ }
-
- cmdLine.AppendLooseValue(UTF8ToWide(pidstring));
-
- #if defined(MOZ_CRASHREPORTER)
- cmdLine.AppendLooseValue(
- UTF8ToWide(CrashReporter::GetChildNotificationPipe()));
- #endif
-
-diff --git a/js/src/xpconnect/loader/mozJSComponentLoader.cpp b/js/src/xpconnect/loader/mozJSComponentLoader.cpp
---- a/js/src/xpconnect/loader/mozJSComponentLoader.cpp
-+++ b/js/src/xpconnect/loader/mozJSComponentLoader.cpp
-@@ -81,16 +81,17 @@
- #include "nsIConsoleService.h"
- #include "nsIStorageStream.h"
- #include "nsIStringStream.h"
- #include "prmem.h"
- #if defined(XP_WIN)
- #include "nsILocalFileWin.h"
- #endif
- #include "xpcprivate.h"
-+#include "nsIResProtocolHandler.h"
-
- #ifdef MOZ_ENABLE_LIBXUL
- #include "mozilla/scache/StartupCache.h"
- #include "mozilla/scache/StartupCacheUtils.h"
- #endif
- #include "mozilla/Omnijar.h"
-
- #include "jsdbgapi.h"
-@@ -621,34 +622,21 @@ mozJSComponentLoader::LoadModule(nsILoca
-
- const mozilla::Module*
- mozJSComponentLoader::LoadModuleFromJAR(nsILocalFile *aJarFile,
- const nsACString &aComponentPath)
- {
- #if !defined(XPCONNECT_STANDALONE)
- nsresult rv;
-
-- nsCAutoString fullSpec;
--
--#ifdef MOZ_OMNIJAR
-- PRBool equal;
-- rv = aJarFile->Equals(mozilla::OmnijarPath(), &equal);
-- if (NS_SUCCEEDED(rv) && equal) {
-- fullSpec = "resource://gre/";
-- } else {
--#endif
-- nsCAutoString fileSpec;
-- NS_GetURLSpecFromActualFile(aJarFile, fileSpec);
-- fullSpec = "jar:";
-- fullSpec += fileSpec;
-- fullSpec += "!/";
--#ifdef MOZ_OMNIJAR
-- }
--#endif
--
-+ nsCAutoString fullSpec, fileSpec;
-+ NS_GetURLSpecFromActualFile(aJarFile, fileSpec);
-+ fullSpec = "jar:";
-+ fullSpec += fileSpec;
-+ fullSpec += "!/";
- fullSpec += aComponentPath;
-
- nsCOMPtr<nsIURI> uri;
- rv = NS_NewURI(getter_AddRefs(uri), fullSpec);
- if (NS_FAILED(rv))
- return NULL;
-
- nsAutoString hashstring;
-@@ -833,57 +821,138 @@ class JSScriptHolder
- JSScriptHolder(JSContext *cx, JSScript *script)
- : mCx(cx), mScript(script) {}
- ~JSScriptHolder() { ::JS_DestroyScript(mCx, mScript); }
- private:
- JSContext *mCx;
- JSScript *mScript;
- };
-
-+static const char baseName[2][5] = { "gre/", "app/" };
-+
-+static inline PRBool
-+canonicalizeBase(nsCAutoString &spec, nsACString &out, mozilla::Omnijar::Type aType)
-+{
-+ nsCAutoString base;
-+ nsresult rv = mozilla::Omnijar::GetURIString(aType, base);
-+
-+ if (NS_FAILED(rv) || !base.Length())
-+ return PR_FALSE;
-+
-+ if (base.Compare(spec.get(), PR_FALSE, base.Length()))
-+ return PR_FALSE;
-+
-+ out.Append("/resource/");
-+ out.Append(baseName[aType]);
-+ out.Append(Substring(spec, base.Length()));
-+ return PR_TRUE;
-+}
- /**
- * PathifyURI transforms mozilla .js uris into useful zip paths
- * to make it makes it easier to manipulate startup cache entries
- * using standard zip tools.
- * Transformations applied:
-- * * jsloader/<scheme> prefix is used to group mozJSComponentLoader cache entries in
-+ * * jsloader/ prefix is used to group mozJSComponentLoader cache entries in
- * a top-level zip directory.
-- * * In MOZ_OMNIJAR case resource:/// and resource://gre/ URIs refer to the same path
-- * so treat both of them as resource://gre/
-+ * * resource:// URIs are resolved to their corresponding file/jar URI to
-+ * canonicalize resources URIs other than gre and app.
-+ * * Paths under GRE or APP directory have their base path replaced with
-+ * resource/gre or resource/app to avoid depending on install location.
-+ * * jar:file:///path/to/file.jar!/sub/path urls are replaced with
-+ * /path/to/file.jar/sub/path
- * * .bin suffix is added to the end of the path to indicate that jsloader/ entries
- * are binary representations of JS source.
- * For example:
-- * resource://gre/modules/XPCOMUtils.jsm becomes
-- * jsloader/resource/gre/modules/XPCOMUtils.jsm.bin
-+ * resource://gre/modules/XPCOMUtils.jsm or
-+ * file://$GRE_DIR/modules/XPCOMUtils.jsm or
-+ * jar:file://$GRE_DIR/omni.jar!/modules/XPCOMUtils.jsm become
-+ * jsloader/resource/gre/modules/XPCOMUtils.jsm.bin
-+ * file://$PROFILE_DIR/extensions/{uuid}/components/component.js becomes
-+ * jsloader/$PROFILE_DIR/extensions/%7Buuid%7D/components/component.js.bin
-+ * jar:file://$PROFILE_DIR/extensions/some.xpi!/components/component.js becomes
-+ * jsloader/$PROFILE_DIR/extensions/some.xpi/components/component.js.bin
- */
- static nsresult
- PathifyURI(nsIURI *in, nsACString &out)
- {
-- out = "jsloader/";
-- nsCAutoString scheme;
-- nsresult rv = in->GetScheme(scheme);
-- NS_ENSURE_SUCCESS(rv, rv);
-- out.Append(scheme);
-- nsCAutoString host;
-- // OK for GetHost to fail since it's not implemented sometimes
-- in->GetHost(host);
--#ifdef MOZ_OMNIJAR
-- if (scheme.Equals("resource") && host.Length() == 0){
-- host = "gre";
-- }
--#endif
-- if (host.Length()) {
-- out.Append("/");
-- out.Append(host);
-- }
-- nsCAutoString path;
-- rv = in->GetPath(path);
-- NS_ENSURE_SUCCESS(rv, rv);
-- out.Append(path);
-- out.Append(".bin");
-- return NS_OK;
-+ PRBool equals;
-+ nsresult rv;
-+ nsCOMPtr<nsIURI> uri = in;
-+ nsCAutoString spec;
-+
-+ out = "jsloader";
-+
-+ // Resolve resource:// URIs. At the end of this if/else block, we
-+ // have both spec and uri variables identifying the same URI.
-+ if (NS_SUCCEEDED(in->SchemeIs("resource", &equals)) && equals) {
-+ nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ nsCOMPtr<nsIProtocolHandler> ph;
-+ rv = ioService->GetProtocolHandler("resource", getter_AddRefs(ph));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ nsCOMPtr<nsIResProtocolHandler> irph(do_QueryInterface(ph, &rv));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ rv = irph->ResolveURI(in, spec);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ rv = ioService->NewURI(spec, nsnull, nsnull, getter_AddRefs(uri));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ } else {
-+ rv = in->GetSpec(spec);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ }
-+
-+ if (!canonicalizeBase(spec, out, mozilla::Omnijar::GRE) &&
-+ !canonicalizeBase(spec, out, mozilla::Omnijar::APP)) {
-+ if (NS_SUCCEEDED(uri->SchemeIs("file", &equals)) && equals) {
-+ nsCOMPtr<nsIFileURL> baseFileURL;
-+ baseFileURL = do_QueryInterface(uri, &rv);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ nsCAutoString path;
-+ rv = baseFileURL->GetPath(path);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ out.Append(path);
-+ } else if (NS_SUCCEEDED(uri->SchemeIs("jar", &equals)) && equals) {
-+ nsCOMPtr<nsIJARURI> jarURI = do_QueryInterface(uri, &rv);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ nsCOMPtr<nsIURI> jarFileURI;
-+ rv = jarURI->GetJARFile(getter_AddRefs(jarFileURI));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ nsCOMPtr<nsIFileURL> jarFileURL;
-+ jarFileURL = do_QueryInterface(jarFileURI, &rv);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ nsCAutoString path;
-+ rv = jarFileURL->GetPath(path);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ out.Append(path);
-+
-+ rv = jarURI->GetJAREntry(path);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ out.Append("/");
-+ out.Append(path);
-+ } else { // Very unlikely
-+ nsCAutoString spec;
-+ rv = uri->GetSpec(spec);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ out.Append("/");
-+ out.Append(spec);
-+ }
-+ }
-+
-+ out.Append(".bin");
-+ return NS_OK;
- }
-
- /* static */
- #ifdef MOZ_ENABLE_LIBXUL
- nsresult
- mozJSComponentLoader::ReadScript(StartupCache* cache, nsIURI *uri,
- JSContext *cx, JSScript **script)
- {
-diff --git a/modules/libjar/nsJAR.cpp b/modules/libjar/nsJAR.cpp
---- a/modules/libjar/nsJAR.cpp
-+++ b/modules/libjar/nsJAR.cpp
-@@ -171,26 +171,23 @@ nsJAR::Open(nsIFile* zipFile)
- if (mLock) return NS_ERROR_FAILURE; // Already open!
-
- mZipFile = zipFile;
- mOuterZipEntry.Truncate();
-
- mLock = PR_NewLock();
- NS_ENSURE_TRUE(mLock, NS_ERROR_OUT_OF_MEMORY);
-
--#ifdef MOZ_OMNIJAR
- // The omnijar is special, it is opened early on and closed late
- // this avoids reopening it
-- PRBool equals;
-- nsresult rv = zipFile->Equals(mozilla::OmnijarPath(), &equals);
-- if (NS_SUCCEEDED(rv) && equals) {
-- mZip = mozilla::OmnijarReader();
-+ nsZipArchive *zip = mozilla::Omnijar::GetReader(zipFile);
-+ if (zip) {
-+ mZip = zip;
- return NS_OK;
- }
--#endif
- return mZip->OpenArchive(zipFile);
- }
-
- NS_IMETHODIMP
- nsJAR::OpenInner(nsIZipReader *aZipReader, const char *aZipEntry)
- {
- NS_ENSURE_ARG_POINTER(aZipReader);
- NS_ENSURE_ARG_POINTER(aZipEntry);
-@@ -234,23 +231,22 @@ nsJAR::Close()
- mLock = nsnull;
- }
-
- mParsedManifest = PR_FALSE;
- mManifestData.Reset();
- mGlobalStatus = JAR_MANIFEST_NOT_PARSED;
- mTotalItemsInManifest = 0;
-
--#ifdef MOZ_OMNIJAR
-- if (mZip == mozilla::OmnijarReader()) {
-+ if ((mZip == mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE)) ||
-+ (mZip == mozilla::Omnijar::GetReader(mozilla::Omnijar::APP))) {
- mZip.forget();
- mZip = new nsZipArchive();
- return NS_OK;
- }
--#endif
- return mZip->CloseArchive();
- }
-
- NS_IMETHODIMP
- nsJAR::Test(const char *aEntryName)
- {
- return mZip->Test(aEntryName);
- }
-@@ -391,22 +387,21 @@ nsJAR::GetInputStreamWithSpec(const nsAC
- NS_IMETHODIMP
- nsJAR::GetCertificatePrincipal(const char* aFilename, nsIPrincipal** aPrincipal)
- {
- //-- Parameter check
- if (!aPrincipal)
- return NS_ERROR_NULL_POINTER;
- *aPrincipal = nsnull;
-
--#ifdef MOZ_OMNIJAR
- // Don't check signatures in the omnijar - this is only
- // interesting for extensions/XPIs.
-- if (mZip == mozilla::OmnijarReader())
-+ if ((mZip == mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE)) ||
-+ (mZip == mozilla::Omnijar::GetReader(mozilla::Omnijar::APP)))
- return NS_OK;
--#endif
-
- //-- Parse the manifest
- nsresult rv = ParseManifest();
- if (NS_FAILED(rv)) return rv;
- if (mGlobalStatus == JAR_NO_MANIFEST)
- return NS_OK;
-
- PRInt16 requestedStatus;
-diff --git a/modules/libpref/src/nsPrefService.cpp b/modules/libpref/src/nsPrefService.cpp
---- a/modules/libpref/src/nsPrefService.cpp
-+++ b/modules/libpref/src/nsPrefService.cpp
-@@ -67,20 +67,18 @@
-
- #include "prefapi.h"
- #include "prefread.h"
- #include "prefapi_private_data.h"
- #include "PrefTuple.h"
-
- #include "nsITimelineService.h"
-
--#ifdef MOZ_OMNIJAR
- #include "mozilla/Omnijar.h"
- #include "nsZipArchive.h"
--#endif
-
- // Definitions
- #define INITIAL_PREF_FILES 10
- static NS_DEFINE_CID(kZipReaderCID, NS_ZIPREADER_CID);
-
- // Prototypes
- static nsresult openPrefFile(nsIFile* aFile);
- static nsresult pref_InitInitialObjects(void);
-@@ -793,124 +791,144 @@ static nsresult pref_LoadPrefsInDirList(
- pref_LoadPrefsInDir(dir, nsnull, 0);
- }
- }
- }
- }
- return NS_OK;
- }
-
--//----------------------------------------------------------------------------------------
--// Initialize default preference JavaScript buffers from
--// appropriate TEXT resources
--//----------------------------------------------------------------------------------------
--static nsresult pref_InitDefaults()
--{
-- nsCOMPtr<nsIFile> greprefsFile;
-- nsresult rv;
--
-- rv = NS_GetSpecialDirectory(NS_GRE_DIR, getter_AddRefs(greprefsFile));
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- rv = greprefsFile->AppendNative(NS_LITERAL_CSTRING("greprefs.js"));
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- rv = openPrefFile(greprefsFile);
-- if (NS_FAILED(rv)) {
-- NS_WARNING("Error parsing GRE default preferences. Is this an old-style embedding app?");
-- }
--
-- return NS_OK;
--}
--
--#ifdef MOZ_OMNIJAR
- static nsresult pref_ReadPrefFromJar(nsZipArchive* jarReader, const char *name)
- {
- nsZipItemPtr<char> manifest(jarReader, name, true);
- NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE);
-
- PrefParseState ps;
- PREF_InitParseState(&ps, PREF_ReaderCallback, NULL);
- nsresult rv = PREF_ParseBuf(&ps, manifest, manifest.Length());
- PREF_FinalizeParseState(&ps);
-
- return rv;
- }
-
--static nsresult pref_InitAppDefaultsFromOmnijar()
--{
-- nsresult rv;
--
-- nsZipArchive* jarReader = mozilla::OmnijarReader();
-- if (!jarReader)
-- return pref_InitDefaults();
--
-- rv = pref_ReadPrefFromJar(jarReader, "greprefs.js");
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- nsZipFind *findPtr;
-- rv = jarReader->FindInit("defaults/pref/*.js$", &findPtr);
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- nsAutoPtr<nsZipFind> find(findPtr);
--
-- nsTArray<nsCString> prefEntries;
-- const char *entryName;
-- PRUint16 entryNameLen;
-- while (NS_SUCCEEDED(find->FindNext(&entryName, &entryNameLen))) {
-- prefEntries.AppendElement(Substring(entryName, entryName + entryNameLen));
-- }
--
-- prefEntries.Sort();
-- for (PRUint32 i = prefEntries.Length(); i--; ) {
-- rv = pref_ReadPrefFromJar(jarReader, prefEntries[i].get());
-- if (NS_FAILED(rv))
-- NS_WARNING("Error parsing preferences.");
-- }
--
-- return NS_OK;
--}
--#endif
--
-+//----------------------------------------------------------------------------------------
-+// Initialize default preference JavaScript buffers from
-+// appropriate TEXT resources
-+//----------------------------------------------------------------------------------------
- static nsresult pref_InitInitialObjects()
- {
- nsresult rv;
-
-- // first we parse the GRE default prefs. This also works if we're not using a GRE,
--#ifdef MOZ_OMNIJAR
-- rv = pref_InitAppDefaultsFromOmnijar();
--#else
-- rv = pref_InitDefaults();
--#endif
-- NS_ENSURE_SUCCESS(rv, rv);
-+ // In omni.jar case, we load the following prefs:
-+ // - jar:$gre/omni.jar!/greprefs.js
-+ // - jar:$gre/omni.jar!/defaults/pref/*.js
-+ // In non omni.jar case, we load:
-+ // - $gre/greprefs.js
-+ //
-+ // When $app == $gre, we additionally load, in all cases:
-+ // - $gre/defaults/pref/*.js
-+ // This is kept for bug 591866 (channel-prefs.js should not be in omni.jar).
-+ // We load all files instead of channel-prefs.js only to have the same
-+ // behaviour as $app != $gre.
-+ //
-+ // When $app != $gre, we additionally load, in omni.jar case:
-+ // - jar:$app/omni.jar!/defaults/preferences/*.js
-+ // - $app/defaults/preferences/*.js
-+ // and in non omni.jar case:
-+ // - $app/defaults/preferences/*.js
-
-- nsCOMPtr<nsIFile> defaultPrefDir;
-- // now parse the "application" default preferences
-- rv = NS_GetSpecialDirectory(NS_APP_PREF_DEFAULTS_50_DIR, getter_AddRefs(defaultPrefDir));
-- NS_ENSURE_SUCCESS(rv, rv);
-+ nsZipFind *findPtr;
-+ nsAutoPtr<nsZipFind> find;
-+ nsTArray<nsCString> prefEntries;
-+ const char *entryName;
-+ PRUint16 entryNameLen;
-
-- /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */
-- static const char* specialFiles[] = {
-+ nsZipArchive* jarReader = mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE);
-+ if (jarReader) {
-+ // Load jar:$gre/omni.jar!/greprefs.js
-+ rv = pref_ReadPrefFromJar(jarReader, "greprefs.js");
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ // Load jar:$gre/omni.jar!/defaults/pref/*.js
-+ rv = jarReader->FindInit("defaults/pref/*.js$", &findPtr);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ find = findPtr;
-+ while (NS_SUCCEEDED(find->FindNext(&entryName, &entryNameLen))) {
-+ prefEntries.AppendElement(Substring(entryName, entryName + entryNameLen));
-+ }
-+
-+ prefEntries.Sort();
-+ for (PRUint32 i = prefEntries.Length(); i--; ) {
-+ rv = pref_ReadPrefFromJar(jarReader, prefEntries[i].get());
-+ if (NS_FAILED(rv))
-+ NS_WARNING("Error parsing preferences.");
-+ }
-+ } else {
-+ // Load $gre/greprefs.js
-+ nsCOMPtr<nsIFile> greprefsFile;
-+ rv = NS_GetSpecialDirectory(NS_GRE_DIR, getter_AddRefs(greprefsFile));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ rv = greprefsFile->AppendNative(NS_LITERAL_CSTRING("greprefs.js"));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ rv = openPrefFile(greprefsFile);
-+ if (NS_FAILED(rv))
-+ NS_WARNING("Error parsing GRE default preferences. Is this an old-style embedding app?");
-+ }
-+
-+ if (!mozilla::Omnijar::HasOmnijar(mozilla::Omnijar::APP)) {
-+ // Load $gre/defaults/pref/*.js
-+ nsCOMPtr<nsIFile> defaultPrefDir;
-+
-+ rv = NS_GetSpecialDirectory(NS_APP_PREF_DEFAULTS_50_DIR, getter_AddRefs(defaultPrefDir));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */
-+ static const char* specialFiles[] = {
- #if defined(XP_MAC) || defined(XP_MACOSX)
- "macprefs.js"
- #elif defined(XP_WIN)
- "winpref.js"
- #elif defined(XP_UNIX)
- "unix.js"
--#if defined(_AIX)
-+#if defined(VMS)
-+ , "openvms.js"
-+#elif defined(_AIX)
- , "aix.js"
- #endif
- #elif defined(XP_OS2)
- "os2pref.js"
-+#elif defined(XP_BEOS)
-+ "beos.js"
- #endif
-- };
-+ };
-
-- rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, NS_ARRAY_LENGTH(specialFiles));
-- if (NS_FAILED(rv)) {
-- NS_WARNING("Error parsing application default preferences.");
-+ rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, NS_ARRAY_LENGTH(specialFiles));
-+ if (NS_FAILED(rv))
-+ NS_WARNING("Error parsing application default preferences.");
-+ }
-+
-+ // Load jar:$app/omni.jar!/defaults/preferences/*.js
-+ nsZipArchive *appJarReader = mozilla::Omnijar::GetReader(mozilla::Omnijar::APP);
-+ if (appJarReader) {
-+ rv = appJarReader->FindInit("defaults/preferences/*.js$", &findPtr);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ find = findPtr;
-+ prefEntries.Clear();
-+ while (NS_SUCCEEDED(find->FindNext(&entryName, &entryNameLen))) {
-+ prefEntries.AppendElement(Substring(entryName, entryName + entryNameLen));
-+ }
-+ prefEntries.Sort();
-+ for (PRUint32 i = prefEntries.Length(); i--; ) {
-+ rv = pref_ReadPrefFromJar(appJarReader, prefEntries[i].get());
-+ if (NS_FAILED(rv))
-+ NS_WARNING("Error parsing 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);
-
-diff --git a/netwerk/protocol/res/nsResProtocolHandler.cpp b/netwerk/protocol/res/nsResProtocolHandler.cpp
---- a/netwerk/protocol/res/nsResProtocolHandler.cpp
-+++ b/netwerk/protocol/res/nsResProtocolHandler.cpp
-@@ -152,97 +152,62 @@ nsResProtocolHandler::nsResProtocolHandl
- }
-
- nsResProtocolHandler::~nsResProtocolHandler()
- {
- gResHandler = nsnull;
- }
-
- nsresult
--nsResProtocolHandler::AddSpecialDir(const char* aSpecialDir, const nsACString& aSubstitution)
--{
-- nsCOMPtr<nsIFile> file;
-- nsresult rv = NS_GetSpecialDirectory(aSpecialDir, getter_AddRefs(file));
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- nsCOMPtr<nsIURI> uri;
-- rv = mIOService->NewFileURI(file, getter_AddRefs(uri));
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- return SetSubstitution(aSubstitution, uri);
--}
--
--nsresult
- nsResProtocolHandler::Init()
- {
- if (!mSubstitutions.Init(32))
- return NS_ERROR_UNEXPECTED;
-
- nsresult rv;
-
- mIOService = do_GetIOService(&rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
--#ifdef MOZ_OMNIJAR
-- nsCOMPtr<nsIFile> omniJar(mozilla::OmnijarPath());
-- if (omniJar)
-- return Init(omniJar);
--#endif
--
-- // these entries should be kept in sync with the omnijar Init function
-+ nsCAutoString appURI, greURI;
-+ rv = mozilla::Omnijar::GetURIString(mozilla::Omnijar::APP, appURI);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ rv = mozilla::Omnijar::GetURIString(mozilla::Omnijar::GRE, greURI);
-+ NS_ENSURE_SUCCESS(rv, rv);
-
- //
-- // make resource:/// point to the application directory
-+ // make resource:/// point to the application directory or omnijar
- //
-- rv = AddSpecialDir(NS_OS_CURRENT_PROCESS_DIR, EmptyCString());
-+ nsCOMPtr<nsIURI> uri;
-+ rv = NS_NewURI(getter_AddRefs(uri), appURI.Length() ? appURI : greURI);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ rv = SetSubstitution(EmptyCString(), uri);
- NS_ENSURE_SUCCESS(rv, rv);
-
- //
- // make resource://gre/ point to the GRE directory
- //
-- rv = AddSpecialDir(NS_GRE_DIR, kGRE);
-+ if (appURI.Length()) { // We already have greURI in uri if appURI.Length() is 0.
-+ rv = NS_NewURI(getter_AddRefs(uri), greURI);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ }
-+
-+ rv = SetSubstitution(kGRE, uri);
- NS_ENSURE_SUCCESS(rv, rv);
-
- //XXXbsmedberg Neil wants a resource://pchrome/ for the profile chrome dir...
- // but once I finish multiple chrome registration I'm not sure that it is needed
-
- // XXX dveditz: resource://pchrome/ defeats profile directory salting
- // if web content can load it. Tread carefully.
-
- return rv;
- }
-
--#ifdef MOZ_OMNIJAR
--nsresult
--nsResProtocolHandler::Init(nsIFile *aOmniJar)
--{
-- nsresult rv;
-- nsCOMPtr<nsIURI> uri;
-- nsCAutoString omniJarSpec;
-- NS_GetURLSpecFromActualFile(aOmniJar, omniJarSpec, mIOService);
--
-- nsCAutoString urlStr("jar:");
-- urlStr += omniJarSpec;
-- urlStr += "!/";
--
-- rv = mIOService->NewURI(urlStr, nsnull, nsnull, getter_AddRefs(uri));
-- NS_ENSURE_SUCCESS(rv, rv);
--
-- // these entries should be kept in sync with the normal Init function
--
-- // resource:/// points to jar:omni.jar!/
-- SetSubstitution(EmptyCString(), uri);
--
-- // resource://gre/ points to jar:omni.jar!/
-- SetSubstitution(kGRE, uri);
--
-- return NS_OK;
--}
--#endif
--
- #ifdef MOZ_IPC
- static PLDHashOperator
- EnumerateSubstitution(const nsACString& aKey,
- nsIURI* aURI,
- void* aArg)
- {
- nsTArray<ResourceMapping>* resources =
- static_cast<nsTArray<ResourceMapping>*>(aArg);
-diff --git a/startupcache/StartupCache.cpp b/startupcache/StartupCache.cpp
---- a/startupcache/StartupCache.cpp
-+++ b/startupcache/StartupCache.cpp
-@@ -237,27 +237,36 @@ StartupCache::GetBuffer(const char* id,
- nsZipItemPtr<char> zipItem(mArchive, id, true);
- if (zipItem) {
- *outbuf = zipItem.Forget();
- *length = zipItem.Length();
- return NS_OK;
- }
- }
-
--#ifdef MOZ_OMNIJAR
-- if (mozilla::OmnijarReader()) {
-+ if (mozilla::Omnijar::GetReader(mozilla::Omnijar::APP)) {
- // no need to checksum omnijarred entries
-- nsZipItemPtr<char> zipItem(mozilla::OmnijarReader(), id);
-+ nsZipItemPtr<char> zipItem(mozilla::Omnijar::GetReader(mozilla::Omnijar::APP), id);
- if (zipItem) {
- *outbuf = zipItem.Forget();
- *length = zipItem.Length();
- return NS_OK;
- }
- }
--#endif
-+
-+ if (mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE)) {
-+ // no need to checksum omnijarred entries
-+ nsZipItemPtr<char> zipItem(mozilla::Omnijar::GetReader(mozilla::Omnijar::GRE), id);
-+ if (zipItem) {
-+ *outbuf = zipItem.Forget();
-+ *length = zipItem.Length();
-+ return NS_OK;
-+ }
-+ }
-+
- return NS_ERROR_NOT_AVAILABLE;
- }
-
- // Makes a copy of the buffer, client retains ownership of inbuf.
- nsresult
- StartupCache::PutBuffer(const char* id, const char* inbuf, PRUint32 len)
- {
- WaitOnWriteThread();
-diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
---- a/toolkit/xre/nsAppRunner.cpp
-+++ b/toolkit/xre/nsAppRunner.cpp
-@@ -3897,35 +3897,45 @@ XRE_InitCommandLine(int aArgc, char* aAr
- CommandLine::Init(aArgc, canonArgs);
-
- for (int i = 0; i < aArgc; ++i)
- free(canonArgs[i]);
- delete[] canonArgs;
- #endif
- #endif
-
--#ifdef MOZ_OMNIJAR
-- const char *omnijarPath = nsnull;
-- ArgResult ar = CheckArg("omnijar", PR_FALSE, &omnijarPath);
-+ const char *path = nsnull;
-+ ArgResult ar = CheckArg("grebase", PR_FALSE, &path);
- if (ar == ARG_BAD) {
-- PR_fprintf(PR_STDERR, "Error: argument -omnijar requires an omnijar path\n");
-+ PR_fprintf(PR_STDERR, "Error: argument -grebase requires a path argument\n");
- return NS_ERROR_FAILURE;
- }
-
-- if (!omnijarPath)
-+ if (!path)
- return rv;
-
-- nsCOMPtr<nsILocalFile> omnijar;
-- rv = NS_NewNativeLocalFile(nsDependentCString(omnijarPath), PR_TRUE,
-- getter_AddRefs(omnijar));
-- if (NS_SUCCEEDED(rv))
-- mozilla::SetOmnijar(omnijar);
--#endif
--
-- return rv;
-+ nsCOMPtr<nsILocalFile> greBase;
-+ rv = XRE_GetFileFromPath(path, getter_AddRefs(greBase));
-+ if (NS_FAILED(rv))
-+ return rv;
-+
-+ ar = CheckArg("appbase", PR_FALSE, &path);
-+ if (ar == ARG_BAD) {
-+ PR_fprintf(PR_STDERR, "Error: argument -appbase requires a path argument\n");
-+ return NS_ERROR_FAILURE;
-+ }
-+
-+ nsCOMPtr<nsILocalFile> appBase;
-+ if (path) {
-+ rv = XRE_GetFileFromPath(path, getter_AddRefs(appBase));
-+ if (NS_FAILED(rv))
-+ return rv;
-+ }
-+
-+ return mozilla::Omnijar::SetBase(greBase, appBase);
- }
-
- nsresult
- XRE_DeinitCommandLine()
- {
- nsresult rv = NS_OK;
-
- #if defined(MOZ_IPC)
-diff --git a/toolkit/xre/nsEmbedFunctions.cpp b/toolkit/xre/nsEmbedFunctions.cpp
---- a/toolkit/xre/nsEmbedFunctions.cpp
-+++ b/toolkit/xre/nsEmbedFunctions.cpp
-@@ -512,19 +512,17 @@ XRE_InitChildProcess(int aArgc,
- }
-
- // Run the UI event loop on the main thread.
- uiMessageLoop.MessageLoop::Run();
-
- // Allow ProcessChild to clean up after itself before going out of
- // scope and being deleted
- process->CleanUp();
--#ifdef MOZ_OMNIJAR
-- mozilla::SetOmnijar(nsnull);
--#endif
-+ mozilla::Omnijar::SetBase(nsnull, nsnull);
- }
- }
-
- NS_LogTerm();
- return XRE_DeinitCommandLine();
- }
-
- MessageLoop*
-diff --git a/xpcom/build/Makefile.in b/xpcom/build/Makefile.in
---- a/xpcom/build/Makefile.in
-+++ b/xpcom/build/Makefile.in
-@@ -64,28 +64,25 @@ CSRCS = \
- $(NULL)
-
- CPPSRCS = \
- $(XPCOM_GLUE_SRC_LCPPSRCS) \
- $(XPCOM_GLUENS_SRC_LCPPSRCS) \
- nsXPComInit.cpp \
- nsXPCOMStrings.cpp \
- Services.cpp \
-+ Omnijar.cpp \
- $(NULL)
-
- ifndef MOZ_ENABLE_LIBXUL
- ifeq (,$(filter-out WINNT WINCE OS2,$(OS_ARCH)))
- CPPSRCS += dlldeps.cpp
- endif
- endif
-
--ifdef MOZ_OMNIJAR
--CPPSRCS += Omnijar.cpp
--endif
--
- SHARED_LIBRARY_LIBS = \
- $(DEPTH)/chrome/src/$(LIB_PREFIX)chrome_s.$(LIB_SUFFIX) \
- ../ds/$(LIB_PREFIX)xpcomds_s.$(LIB_SUFFIX) \
- ../io/$(LIB_PREFIX)xpcomio_s.$(LIB_SUFFIX) \
- ../components/$(LIB_PREFIX)xpcomcomponents_s.$(LIB_SUFFIX) \
- ../threads/$(LIB_PREFIX)xpcomthreads_s.$(LIB_SUFFIX) \
- ../proxy/src/$(LIB_PREFIX)xpcomproxy_s.$(LIB_SUFFIX) \
- ../base/$(LIB_PREFIX)xpcombase_s.$(LIB_SUFFIX) \
-diff --git a/xpcom/build/Omnijar.cpp b/xpcom/build/Omnijar.cpp
---- a/xpcom/build/Omnijar.cpp
-+++ b/xpcom/build/Omnijar.cpp
-@@ -16,16 +16,17 @@
- *
- * The Initial Developer of the Original Code is
- * Mozilla Foundation.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Michael Wu <mwu@mozilla.com>
-+ * Mike Hommey <mh@glandium.org>
- *
- * 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
-@@ -33,69 +34,175 @@
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
- #include "Omnijar.h"
-
--#include "nsILocalFile.h"
--#include "nsXULAppAPI.h"
-+#include "nsIFile.h"
- #include "nsZipArchive.h"
-+#include "nsNetUtil.h"
-
--static nsILocalFile* sOmnijarPath = nsnull;
--static nsZipArchive* sOmnijarReader = nsnull;
-+namespace mozilla {
-
--static void
--SetupReader()
-+nsIFile *Omnijar::sPath[2] = { nsnull, nsnull };
-+PRBool Omnijar::sIsOmnijar[2] = { PR_FALSE, PR_FALSE };
-+
-+#ifdef MOZ_ENABLE_LIBXUL
-+nsZipArchive *Omnijar::sReader[2] = { nsnull, nsnull };
-+#endif
-+
-+static already_AddRefed<nsIFile>
-+ComputePath(nsIFile *aPath, PRBool &aIsOmnijar)
- {
-- if (!sOmnijarPath) {
-- return;
-+ PRBool isDir;
-+ aIsOmnijar = PR_FALSE;
-+ if (!aPath || NS_FAILED(aPath->IsDirectory(&isDir)) || !isDir)
-+ return nsnull;
-+
-+ nsCOMPtr<nsIFile> path;
-+#ifdef MOZ_ENABLE_LIBXUL
-+ // Search for omni.jar in the given directory
-+ if (!isDir || NS_FAILED(aPath->Clone(getter_AddRefs(path))))
-+ return nsnull;
-+
-+ if (NS_FAILED(path->AppendNative(NS_LITERAL_CSTRING("omni.jar"))))
-+ return nsnull;
-+
-+ if (NS_FAILED(path->Exists(&aIsOmnijar)))
-+ return nsnull;
-+#endif
-+
-+ if (!aIsOmnijar && NS_FAILED(aPath->Clone(getter_AddRefs(path))))
-+ return nsnull;
-+
-+ return path.forget();
-+}
-+
-+nsresult
-+Omnijar::SetBase(nsIFile *aGrePath, nsIFile *aAppPath)
-+{
-+ NS_ABORT_IF_FALSE(aGrePath || !aAppPath, "Omnijar::SetBase(NULL, something) call forbidden");
-+
-+#ifdef MOZ_ENABLE_LIBXUL
-+ if (sReader[GRE]) {
-+ sReader[GRE]->CloseArchive();
-+ delete sReader[GRE];
-+ }
-+ if (sReader[APP]) {
-+ sReader[APP]->CloseArchive();
-+ delete sReader[APP];
-+ }
-+ sReader[APP] = sReader[GRE] = nsnull;
-+#endif
-+
-+ nsresult rv;
-+ PRBool equals;
-+ if (aAppPath) {
-+ rv = aAppPath->Equals(aGrePath, &equals);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+ } else {
-+ equals = PR_TRUE;
- }
-
-- nsZipArchive* zipReader = new nsZipArchive();
-- if (!zipReader) {
-- NS_IF_RELEASE(sOmnijarPath);
-- return;
-+ nsCOMPtr<nsIFile> grePath = ComputePath(aGrePath, sIsOmnijar[GRE]);
-+ nsCOMPtr<nsIFile> appPath = ComputePath(equals ? nsnull : aAppPath, sIsOmnijar[APP]);
-+
-+ NS_IF_RELEASE(sPath[GRE]);
-+ sPath[GRE] = grePath;
-+ NS_IF_ADDREF(sPath[GRE]);
-+
-+ NS_IF_RELEASE(sPath[APP]);
-+ sPath[APP] = appPath;
-+ NS_IF_ADDREF(sPath[APP]);
-+
-+ return NS_OK;
-+}
-+
-+already_AddRefed<nsIFile>
-+Omnijar::GetBase(Type aType)
-+{
-+ NS_ABORT_IF_FALSE(sPath[0], "Omnijar not initialized");
-+
-+ if (!sIsOmnijar[aType]) {
-+ NS_IF_ADDREF(sPath[aType]);
-+ return sPath[aType];
- }
-
-- if (NS_FAILED(zipReader->OpenArchive(sOmnijarPath))) {
-+ nsCOMPtr<nsIFile> file, path;
-+ if (NS_FAILED(sPath[aType]->Clone(getter_AddRefs(file))))
-+ return nsnull;
-+
-+ if (NS_FAILED(file->GetParent(getter_AddRefs(path))))
-+ return nsnull;
-+ return path.forget();
-+}
-+
-+#ifdef MOZ_ENABLE_LIBXUL
-+nsZipArchive *
-+Omnijar::GetReader(Type aType)
-+{
-+ if (!sIsOmnijar[aType])
-+ return nsnull;
-+
-+ if (sReader[aType])
-+ return sReader[aType];
-+
-+ nsZipArchive* zipReader = new nsZipArchive();
-+ if (!zipReader)
-+ return nsnull;
-+
-+ if (NS_FAILED(zipReader->OpenArchive(sPath[aType]))) {
- delete zipReader;
-- NS_IF_RELEASE(sOmnijarPath);
-- return;
-+ return nsnull;
- }
-
-- sOmnijarReader = zipReader;
-+ return (sReader[aType] = zipReader);
- }
-
--nsILocalFile*
--mozilla::OmnijarPath()
-+nsZipArchive *
-+Omnijar::GetReader(nsIFile *aPath)
- {
-- if (!sOmnijarReader)
-- SetupReader();
-+ PRBool equals;
-+ nsresult rv;
-
-- return sOmnijarPath;
-+ if (sIsOmnijar[GRE]) {
-+ rv = sPath[GRE]->Equals(aPath, &equals);
-+ if (NS_SUCCEEDED(rv) && equals)
-+ return GetReader(GRE);
-+ }
-+ if (sIsOmnijar[APP]) {
-+ rv = sPath[APP]->Equals(aPath, &equals);
-+ if (NS_SUCCEEDED(rv) && equals)
-+ return GetReader(APP);
-+ }
-+ return nsnull;
-+}
-+#endif
-+
-+nsresult
-+Omnijar::GetURIString(Type aType, nsCString &result)
-+{
-+ NS_ABORT_IF_FALSE(sPath[0], "Omnijar not initialized");
-+
-+ result = "";
-+
-+ if ((aType == APP) && (!sPath[APP]))
-+ return NS_OK;
-+
-+ nsCAutoString omniJarSpec;
-+ nsresult rv = NS_GetURLSpecFromActualFile(sPath[aType], omniJarSpec);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ if (sIsOmnijar[aType]) {
-+ result = "jar:";
-+ result += omniJarSpec;
-+ result += "!";
-+ } else {
-+ result = omniJarSpec;
-+ }
-+ result += "/";
-+ return NS_OK;
- }
-
--nsZipArchive*
--mozilla::OmnijarReader()
--{
-- if (!sOmnijarReader)
-- SetupReader();
--
-- return sOmnijarReader;
--}
--
--void
--mozilla::SetOmnijar(nsILocalFile* aPath)
--{
-- NS_IF_RELEASE(sOmnijarPath);
-- if (sOmnijarReader) {
-- sOmnijarReader->CloseArchive();
-- delete sOmnijarReader;
-- sOmnijarReader = nsnull;
-- }
--
-- sOmnijarPath = aPath;
-- NS_IF_ADDREF(sOmnijarPath);
--}
--
-+} /* namespace mozilla */
-diff --git a/xpcom/build/Omnijar.h b/xpcom/build/Omnijar.h
---- a/xpcom/build/Omnijar.h
-+++ b/xpcom/build/Omnijar.h
-@@ -16,16 +16,17 @@
- *
- * The Initial Developer of the Original Code is
- * Mozilla Foundation.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Michael Wu <mwu@mozilla.com>
-+ * Mike Hommey <mh@glandium.org>
- *
- * 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
-@@ -34,29 +35,137 @@
- * 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 ***** */
-
- #ifndef mozilla_Omnijar_h
- #define mozilla_Omnijar_h
-
--class nsILocalFile;
-+#include "nscore.h"
-+#include "nsTArray.h"
-+#include "nsCOMPtr.h"
-+#include "nsString.h"
-+
-+class nsIFile;
- class nsZipArchive;
--
--#ifdef MOZ_OMNIJAR
-+class nsIURI;
-
- namespace mozilla {
-
-+#ifdef MOZ_ENABLE_LIBXUL
-+#define OMNIJAR_EXPORT
-+#else
-+#define OMNIJAR_EXPORT NS_EXPORT
-+#endif
-+
-+class OMNIJAR_EXPORT Omnijar {
-+private:
- /**
-- * This returns the path to the omnijar.
-- * If the omnijar isn't available, this function will return null.
-- * Callers should fallback to flat packaging if null.
-+ * Store an nsIFile for either a base directory when there is no omni.jar,
-+ * or omni.jar itself. We can store two paths here, one for GRE
-+ * (corresponding to resource://gre/) and one for APP
-+ * (corresponding to resource:/// and resource://app/), but only
-+ * store one when both point to the same location (unified).
- */
--nsILocalFile *OmnijarPath();
--nsZipArchive *OmnijarReader();
--void SetOmnijar(nsILocalFile* aPath);
-+static nsIFile *sPath[2];
-+/**
-+ * Store whether the corresponding sPath is an omni.jar or a directory
-+ */
-+static PRBool sIsOmnijar[2];
-+
-+#ifdef MOZ_ENABLE_LIBXUL
-+/**
-+ * Cached nsZipArchives for the corresponding sPath
-+ */
-+static nsZipArchive *sReader[2];
-+#endif
-+
-+public:
-+enum Type {
-+ GRE = 0,
-+ APP = 1
-+};
-+
-+/**
-+ * Returns whether SetBase has been called at least once with
-+ * a valid nsIFile
-+ */
-+static PRBool
-+IsInitialized()
-+{
-+ // GRE path is always set after initialization.
-+ return sPath[0] != nsnull;
-+}
-+
-+/**
-+ * Sets the base directories for GRE and APP. APP base directory
-+ * may be nsnull, in case the APP and GRE directories are the same.
-+ */
-+static nsresult SetBase(nsIFile *aGrePath, nsIFile *aAppPath);
-+
-+/**
-+ * Returns an nsIFile pointing to the omni.jar file for GRE or APP.
-+ * Returns nsnull when there is no corresponding omni.jar.
-+ * Also returns nsnull for APP in the unified case.
-+ */
-+static already_AddRefed<nsIFile>
-+GetPath(Type aType)
-+{
-+ NS_ABORT_IF_FALSE(sPath[0], "Omnijar not initialized");
-+
-+ if (sIsOmnijar[aType]) {
-+ NS_IF_ADDREF(sPath[aType]);
-+ return sPath[aType];
-+ }
-+ return nsnull;
-+}
-+
-+/**
-+ * Returns whether GRE or APP use an omni.jar. Returns PR_False when
-+ * using an omni.jar in the unified case.
-+ */
-+static PRBool
-+HasOmnijar(Type aType)
-+{
-+ return sIsOmnijar[aType];
-+}
-+
-+/**
-+ * Returns the base directory for GRE or APP. In the unified case,
-+ * returns nsnull for APP.
-+ */
-+static already_AddRefed<nsIFile> GetBase(Type aType);
-+
-+/**
-+ * Returns a nsZipArchive pointer for the omni.jar file for GRE or
-+ * APP. Returns nsnull in the same cases GetPath() would.
-+ */
-+#ifdef MOZ_ENABLE_LIBXUL
-+static nsZipArchive *GetReader(Type aType);
-+#else
-+static nsZipArchive *GetReader(Type aType) { return nsnull; }
-+#endif
-+
-+/**
-+ * Returns a nsZipArchive pointer for the given path IAOI the given
-+ * path is the omni.jar for either GRE or APP.
-+ */
-+#ifdef MOZ_ENABLE_LIBXUL
-+static nsZipArchive *GetReader(nsIFile *aPath);
-+#else
-+static nsZipArchive *GetReader(nsIFile *aPath) { return nsnull; }
-+#endif
-+
-+/**
-+ * Returns the URI string corresponding to the omni.jar or directory
-+ * for GRE or APP. i.e. jar:/path/to/omni.jar!/ for omni.jar and
-+ * /path/to/base/dir/ otherwise. Returns an empty string for APP in
-+ * the unified case.
-+ * The returned URI is guaranteed to end with a slash.
-+ */
-+static nsresult GetURIString(Type aType, nsCString &result);
-+
-+}; /* class Omnijar */
-
- } /* namespace mozilla */
-
--#endif /* MOZ_OMNIJAR */
--
- #endif /* mozilla_Omnijar_h */
-diff --git a/xpcom/build/nsXPComInit.cpp b/xpcom/build/nsXPComInit.cpp
---- a/xpcom/build/nsXPComInit.cpp
-+++ b/xpcom/build/nsXPComInit.cpp
-@@ -462,35 +462,35 @@ NS_InitXPCOM2(nsIServiceManager* *result
- nsDirectoryService::gService->Set(NS_XPCOM_LIBRARY_FILE, xpcomLib);
- }
-
- if (appFileLocationProvider) {
- rv = nsDirectoryService::gService->RegisterProvider(appFileLocationProvider);
- if (NS_FAILED(rv)) return rv;
- }
-
--#ifdef MOZ_OMNIJAR
- NS_TIME_FUNCTION_MARK("Next: Omnijar init");
-
-- if (!mozilla::OmnijarPath()) {
-- nsCOMPtr<nsILocalFile> omnijar;
-+ if (!mozilla::Omnijar::IsInitialized()) {
-+ nsCOMPtr<nsILocalFile> greDir, appDir;
- nsCOMPtr<nsIFile> file;
-
-- rv = NS_ERROR_FAILURE;
- nsDirectoryService::gService->Get(NS_GRE_DIR,
- NS_GET_IID(nsIFile),
- getter_AddRefs(file));
-- if (file)
-- rv = file->Append(NS_LITERAL_STRING("omni.jar"));
-- if (NS_SUCCEEDED(rv))
-- omnijar = do_QueryInterface(file);
-- if (NS_SUCCEEDED(rv))
-- mozilla::SetOmnijar(omnijar);
-+ greDir = do_QueryInterface(file);
-+
-+ nsDirectoryService::gService->Get(NS_XPCOM_CURRENT_PROCESS_DIR,
-+ NS_GET_IID(nsIFile),
-+ getter_AddRefs(file));
-+ appDir = do_QueryInterface(file);
-+
-+ rv = mozilla::Omnijar::SetBase(greDir, appDir);
-+ NS_ENSURE_SUCCESS(rv, rv);
- }
--#endif
-
- #ifdef MOZ_IPC
- if ((sCommandLineWasInitialized = !CommandLine::IsInitialized())) {
- NS_TIME_FUNCTION_MARK("Next: IPC command line init");
-
- #ifdef OS_WIN
- CommandLine::Init(0, nsnull);
- #else
-@@ -769,18 +769,16 @@ ShutdownXPCOM(nsIServiceManager* servMgr
- sCommandLineWasInitialized = false;
- }
- if (sExitManager) {
- delete sExitManager;
- sExitManager = nsnull;
- }
- #endif
-
--#ifdef MOZ_OMNIJAR
-- mozilla::SetOmnijar(nsnull);
--#endif
-+ mozilla::Omnijar::SetBase(nsnull, nsnull);
-
- NS_LogTerm();
-
- return NS_OK;
- }
-
- } // namespace mozilla
-diff --git a/xpcom/components/nsComponentManager.cpp b/xpcom/components/nsComponentManager.cpp
---- a/xpcom/components/nsComponentManager.cpp
-+++ b/xpcom/components/nsComponentManager.cpp
-@@ -175,18 +175,16 @@ NS_DEFINE_CID(kCategoryManagerCID, NS_CA
- #define COMPMGR_TIME_FUNCTION_CONTRACTID(cid) \
- NS_TIME_FUNCTION_MIN_FMT(5, "%s (line %d) (contractid: %s)", MOZ_FUNCTION_NAME, \
- __LINE__, (cid))
- #else
- #define COMPMGR_TIME_FUNCTION_CID(cid) do {} while (0)
- #define COMPMGR_TIME_FUNCTION_CONTRACTID(cid) do {} while (0)
- #endif
-
--#define kOMNIJAR_PREFIX NS_LITERAL_CSTRING("resource:///")
--
- nsresult
- nsGetServiceFromCategory::operator()(const nsIID& aIID, void** aInstancePtr) const
- {
- nsresult rv;
- nsXPIDLCString value;
- nsCOMPtr<nsICategoryManager> catman;
- nsComponentManagerImpl *compMgr = nsComponentManagerImpl::gComponentManager;
- if (!compMgr) {
-@@ -390,47 +388,44 @@ nsresult nsComponentManagerImpl::Init()
-
- nsCategoryManager::GetSingleton()->SuppressNotifications(true);
-
- RegisterModule(&kXPCOMModule, NULL);
-
- for (PRUint32 i = 0; i < sStaticModules->Length(); ++i)
- RegisterModule((*sStaticModules)[i], NULL);
-
--#ifdef MOZ_OMNIJAR
-- if (mozilla::OmnijarPath()) {
-- nsCOMPtr<nsIZipReader> omnijarReader = new nsJAR();
-- rv = omnijarReader->Open(mozilla::OmnijarPath());
-- if (NS_SUCCEEDED(rv))
-- RegisterJarManifest(omnijarReader, "chrome.manifest", false);
-+ nsCOMPtr<nsIFile> appOmnijar = mozilla::Omnijar::GetPath(mozilla::Omnijar::APP);
-+ if (appOmnijar) {
-+ cl = sModuleLocations->InsertElementAt(1); // Insert after greDir
-+ cl->type = NS_COMPONENT_LOCATION;
-+ cl->location = do_QueryInterface(appOmnijar);
-+ cl->jar = true;
- }
--#endif
-+ nsCOMPtr<nsIFile> greOmnijar = mozilla::Omnijar::GetPath(mozilla::Omnijar::GRE);
-+ if (greOmnijar) {
-+ cl = sModuleLocations->InsertElementAt(0);
-+ cl->type = NS_COMPONENT_LOCATION;
-+ cl->location = do_QueryInterface(greOmnijar);
-+ cl->jar = true;
-+ }
-
- for (PRUint32 i = 0; i < sModuleLocations->Length(); ++i) {
- ComponentLocation& l = sModuleLocations->ElementAt(i);
- if (!l.jar) {
- RegisterManifestFile(l.type, l.location, false);
- continue;
- }
-
- nsCOMPtr<nsIZipReader> reader = do_CreateInstance(kZipReaderCID, &rv);
- rv = reader->Open(l.location);
- if (NS_SUCCEEDED(rv))
- RegisterJarManifest(reader, "chrome.manifest", false);
- }
-
--#ifdef MOZ_OMNIJAR
-- if (mozilla::OmnijarPath()) {
-- cl = sModuleLocations->InsertElementAt(0);
-- cl->type = NS_COMPONENT_LOCATION;
-- cl->location = mozilla::OmnijarPath();
-- cl->jar = true;
-- }
--#endif
--
- nsCategoryManager::GetSingleton()->SuppressNotifications(false);
-
- mStatus = NORMAL;
-
- return NS_OK;
- }
-
- void
-# HG changeset patch
-# Parent ff1b810f78226d7f4010909d3cde05a57fdcf20c
-Bug 620931 part 4 - Fix resource://app/ to always point to the same as resource:///
-
-diff --git a/netwerk/protocol/res/nsResProtocolHandler.cpp b/netwerk/protocol/res/nsResProtocolHandler.cpp
---- a/netwerk/protocol/res/nsResProtocolHandler.cpp
-+++ b/netwerk/protocol/res/nsResProtocolHandler.cpp
-@@ -74,16 +74,17 @@ static nsResProtocolHandler *gResHandler
- // set NSPR_LOG_FILE=log.txt
- //
- // this enables PR_LOG_ALWAYS level information and places all output in
- // the file log.txt
- //
- static PRLogModuleInfo *gResLog;
- #endif
-
-+#define kAPP NS_LITERAL_CSTRING("app")
- #define kGRE NS_LITERAL_CSTRING("gre")
-
- //----------------------------------------------------------------------------
- // nsResURL : overrides nsStandardURL::GetFile to provide nsIFile resolution
- //----------------------------------------------------------------------------
-
- nsresult
- nsResURL::EnsureFile()
-@@ -179,16 +180,22 @@ nsResProtocolHandler::Init()
- nsCOMPtr<nsIURI> uri;
- rv = NS_NewURI(getter_AddRefs(uri), appURI.Length() ? appURI : greURI);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = SetSubstitution(EmptyCString(), uri);
- NS_ENSURE_SUCCESS(rv, rv);
-
- //
-+ // make resource://app/ point to the application directory or omnijar
-+ //
-+ rv = SetSubstitution(kAPP, uri);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ //
- // make resource://gre/ point to the GRE directory
- //
- if (appURI.Length()) { // We already have greURI in uri if appURI.Length() is 0.
- rv = NS_NewURI(getter_AddRefs(uri), greURI);
- NS_ENSURE_SUCCESS(rv, rv);
- }
-
- rv = SetSubstitution(kGRE, uri);
-diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
---- a/toolkit/xre/nsXREDirProvider.cpp
-+++ b/toolkit/xre/nsXREDirProvider.cpp
-@@ -300,19 +300,16 @@ nsXREDirProvider::GetFile(const char* aP
- }
- }
- else if (!strcmp(aProperty, XRE_EXECUTABLE_FILE) && gArgv[0]) {
- nsCOMPtr<nsILocalFile> lf;
- rv = XRE_GetBinaryPath(gArgv[0], getter_AddRefs(lf));
- if (NS_SUCCEEDED(rv))
- file = lf;
- }
-- else if (!strcmp(aProperty, "resource:app")) {
-- rv = GetAppDir()->Clone(getter_AddRefs(file));
-- }
-
- else if (!strcmp(aProperty, NS_APP_PROFILE_DIR_STARTUP) && mProfileDir) {
- return mProfileDir->Clone(aFile);
- }
- else if (!strcmp(aProperty, NS_APP_PROFILE_LOCAL_DIR_STARTUP)) {
- if (mProfileLocalDir)
- return mProfileLocalDir->Clone(aFile);
-
-# HG changeset patch
-# Parent 7d2228db71a299afca60babff632a967d2d6c456
-Bug 620931 part 5 - Enable omni.jar by default on xulrunner
-
-diff --git a/xulrunner/confvars.sh b/xulrunner/confvars.sh
---- a/xulrunner/confvars.sh
-+++ b/xulrunner/confvars.sh
-@@ -36,15 +36,16 @@
- #
- # ***** END LICENSE BLOCK *****
-
- MOZ_APP_NAME=xulrunner
- MOZ_APP_DISPLAYNAME=XULRunner
- MOZ_UPDATER=1
- MOZ_XULRUNNER=1
- MOZ_ENABLE_LIBXUL=1
-+MOZ_CHROME_FILE_FORMAT=omni
- MOZ_STATIC_BUILD_UNSUPPORTED=1
- MOZ_APP_VERSION=$MOZILLA_VERSION
- if test "$MOZ_STORAGE"; then
- MOZ_PLACES=1
- fi
- MOZ_EXTENSIONS_DEFAULT=" gnomevfs"
- MOZ_URL_CLASSIFIER=1