From 121072fe86b1964d1733d1d91edb327fb32c2ac3 Mon Sep 17 00:00:00 2001 From: "dveditz%netscape.com" Date: Tue, 15 Feb 2000 01:32:12 +0000 Subject: [PATCH] New wstring nsIRegistry interface, bug 23859; new version registry name for mozilla, bug 10533; log now created by install wizards too, bug 26309; downloaded file cleanup moved into manager, bug 24249; scaffolding for bug 12817 and 12361 (conditional autoreg) git-svn-id: svn://10.0.0.236/trunk@60771 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/intl/chardet/src/nsCharDetModule.cpp | 36 +++--- mozilla/intl/strres/src/nsStringBundle.cpp | 2 +- .../uconv/public/nsICharsetConverterManager.h | 4 +- .../uconv/src/nsCharsetConverterManager.cpp | 8 +- mozilla/intl/uconv/ucvcn/nsUCvCnModule.cpp | 4 +- mozilla/intl/uconv/ucvibm/nsUCvIBMModule.cpp | 4 +- mozilla/intl/uconv/ucvja/nsUCvJaModule.cpp | 4 +- mozilla/intl/uconv/ucvko/nsUCvKoModule.cpp | 4 +- .../intl/uconv/ucvlatin/nsUCvLatinModule.cpp | 4 +- mozilla/intl/uconv/ucvtw2/nsUCvTw2Module.cpp | 4 +- mozilla/modules/libreg/src/vr_stubs.c | 8 +- mozilla/modules/libreg/xpcom/nsIRegistry.idl | 18 ++- mozilla/modules/libreg/xpcom/nsRegistry.cpp | 121 +++++++++++++++++- .../streamconv/test/TestStreamConv.cpp | 2 +- mozilla/profile/src/nsProfileAccess.cpp | 64 ++++----- mozilla/xpcom/components/makefile.win | 2 +- .../xpcom/components/nsCategoryManager.cpp | 4 +- .../xpcom/components/nsComponentManager.cpp | 46 +++---- mozilla/xpcom/components/nsIRegistry.idl | 18 ++- mozilla/xpcom/components/nsRegistry.cpp | 121 +++++++++++++++++- mozilla/xpcom/tools/registry/makefile.win | 4 +- mozilla/xpcom/tools/registry/regExport.cpp | 19 ++- .../xpfe/appshell/src/nsAppShellService.cpp | 3 - mozilla/xpfe/bootstrap/nsAppRunner.cpp | 46 ++++--- mozilla/xpinstall/public/nsISoftwareUpdate.h | 2 +- mozilla/xpinstall/public/nsPIXPIStubHook.idl | 2 +- mozilla/xpinstall/src/ScheduledTasks.cpp | 13 +- mozilla/xpinstall/src/ScheduledTasks.h | 3 +- mozilla/xpinstall/src/makefile.win | 2 +- mozilla/xpinstall/src/nsInstall.cpp | 2 +- .../src/nsLoggingProgressNotifier.cpp | 2 +- mozilla/xpinstall/src/nsSoftwareUpdate.cpp | 32 ++++- mozilla/xpinstall/src/nsSoftwareUpdate.h | 10 +- mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp | 6 - mozilla/xpinstall/src/nsWinProfileItem.h | 2 +- mozilla/xpinstall/src/nsWinRegItem.h | 2 +- mozilla/xpinstall/src/nsXPInstallManager.cpp | 29 ++++- mozilla/xpinstall/stub/xpistub.cpp | 4 +- 38 files changed, 475 insertions(+), 186 deletions(-) diff --git a/mozilla/intl/chardet/src/nsCharDetModule.cpp b/mozilla/intl/chardet/src/nsCharDetModule.cpp index 7319f2dfa72..ed92aacaac0 100644 --- a/mozilla/intl/chardet/src/nsCharDetModule.cpp +++ b/mozilla/intl/chardet/src/nsCharDetModule.cpp @@ -334,56 +334,56 @@ nsCharDetModule::RegisterSelf(nsIComponentManager *aCompMgr, rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "off" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "off"); - rv = registry-> SetString(key, "defaultEnglishText", "Off"); + rv = registry-> SetStringUTF8(key, "type", "off"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Off"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "japsm" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "japsm"); - rv = registry-> SetString(key, "defaultEnglishText", "Japanese"); + rv = registry-> SetStringUTF8(key, "type", "japsm"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Japanese"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "kopsm" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "kopsm"); - rv = registry-> SetString(key, "defaultEnglishText", "Korean"); + rv = registry-> SetStringUTF8(key, "type", "kopsm"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Korean"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "zhtwpsm" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "zhtwpsm"); - rv = registry-> SetString(key, "defaultEnglishText", "Traditional Chinese"); + rv = registry-> SetStringUTF8(key, "type", "zhtwpsm"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Traditional Chinese"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "zhcnpsm" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "zhtwpsm"); - rv = registry-> SetString(key, "defaultEnglishText", "Simplified Chinese"); + rv = registry-> SetStringUTF8(key, "type", "zhtwpsm"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Simplified Chinese"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "zhpsm" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "zhpsm"); - rv = registry-> SetString(key, "defaultEnglishText", "Chinese"); + rv = registry-> SetStringUTF8(key, "type", "zhpsm"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Chinese"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "cjkpsm" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "cjkpsm"); - rv = registry-> SetString(key, "defaultEnglishText", "East Asian"); + rv = registry-> SetStringUTF8(key, "type", "cjkpsm"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "East Asian"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "ruprob" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "ruprob"); - rv = registry-> SetString(key, "defaultEnglishText", "Russian"); + rv = registry-> SetStringUTF8(key, "type", "ruprob"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Russian"); } rv = registry -> AddSubtree(nsIRegistry::Common, NS_CHARSET_DETECTOR_REG_BASE "ukprob" ,&key); if (NS_SUCCEEDED(rv)) { - rv = registry-> SetString(key, "type", "ukprob"); - rv = registry-> SetString(key, "defaultEnglishText", "Ukrainian"); + rv = registry-> SetStringUTF8(key, "type", "ukprob"); + rv = registry-> SetStringUTF8(key, "defaultEnglishText", "Ukrainian"); } done: diff --git a/mozilla/intl/strres/src/nsStringBundle.cpp b/mozilla/intl/strres/src/nsStringBundle.cpp index 314b7369e55..a9da1426654 100644 --- a/mozilla/intl/strres/src/nsStringBundle.cpp +++ b/mozilla/intl/strres/src/nsStringBundle.cpp @@ -406,7 +406,7 @@ nsExtensibleStringBundle::nsExtensibleStringBundle(const char * aRegistryKey, res = node->GetKey(&key); if (NS_FAILED(res)) goto done1; - res = registry->GetString(key, "name", &name); + res = registry->GetStringUTF8(key, "name", &name); if (NS_FAILED(res)) goto done1; res = sbServ->CreateBundle(name, aLocale, &bundle); diff --git a/mozilla/intl/uconv/public/nsICharsetConverterManager.h b/mozilla/intl/uconv/public/nsICharsetConverterManager.h index 43ecc81e060..d1e7e5489e6 100644 --- a/mozilla/intl/uconv/public/nsICharsetConverterManager.h +++ b/mozilla/intl/uconv/public/nsICharsetConverterManager.h @@ -78,10 +78,10 @@ nsUConverterRegSelf( const char* aFromCharset, \ res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); \ if (NS_FAILED(res)) \ goto done; \ - res = registry -> SetString(key, "source", aFromCharset); \ + res = registry -> SetStringUTF8(key, "source", aFromCharset); \ if (NS_FAILED(res)) \ goto done; \ - res = registry -> SetString(key, "destination", aToCharset); \ + res = registry -> SetStringUTF8(key, "destination", aToCharset); \ if (NS_FAILED(res)) \ goto done; \ printf("RegSelf %s to %s converter complete\n", \ diff --git a/mozilla/intl/uconv/src/nsCharsetConverterManager.cpp b/mozilla/intl/uconv/src/nsCharsetConverterManager.cpp index 250f77caac6..2d38356e266 100644 --- a/mozilla/intl/uconv/src/nsCharsetConverterManager.cpp +++ b/mozilla/intl/uconv/src/nsCharsetConverterManager.cpp @@ -228,7 +228,7 @@ nsresult nsCharsetConverterManager::RegisterConverterTitles( res = aRegistry->AddSubtree(nsIRegistry::Common, p, &key); nsAllocator::Free(p); if (NS_FAILED(res)) return res; - res = aRegistry->SetString(key, "name", "resource:/res/charsetTitles.properties"); + res = aRegistry->SetStringUTF8(key, "name", "resource:/res/charsetTitles.properties"); if (NS_FAILED(res)) return res; return NS_OK; @@ -248,7 +248,7 @@ nsresult nsCharsetConverterManager::RegisterConverterData( res = aRegistry->AddSubtree(nsIRegistry::Common, p, &key); nsAllocator::Free(p); if (NS_FAILED(res)) return res; - res = aRegistry->SetString(key, "name", "resource:/res/charsetData.properties"); + res = aRegistry->SetStringUTF8(key, "name", "resource:/res/charsetData.properties"); if (NS_FAILED(res)) return res; return NS_OK; @@ -314,10 +314,10 @@ void nsCharsetConverterManager::FillInfoArrays() res = node->GetKey(&key); if (NS_FAILED(res)) goto done1; - res = registry->GetString(key, "source", &src); + res = registry->GetStringUTF8(key, "source", &src); if (NS_FAILED(res)) goto done1; - res = registry->GetString(key, "destination", &dest); + res = registry->GetStringUTF8(key, "destination", &dest); if (NS_FAILED(res)) goto done1; // XXX do an alias resolution here instead diff --git a/mozilla/intl/uconv/ucvcn/nsUCvCnModule.cpp b/mozilla/intl/uconv/ucvcn/nsUCvCnModule.cpp index 52c44b30a3a..aa4079024c0 100644 --- a/mozilla/intl/uconv/ucvcn/nsUCvCnModule.cpp +++ b/mozilla/intl/uconv/ucvcn/nsUCvCnModule.cpp @@ -397,9 +397,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr, nsCRT::free(cid_string); res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc); + res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest); + res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest); if (NS_FAILED(res)) goto done; } diff --git a/mozilla/intl/uconv/ucvibm/nsUCvIBMModule.cpp b/mozilla/intl/uconv/ucvibm/nsUCvIBMModule.cpp index db4ae4f648c..1f101091205 100644 --- a/mozilla/intl/uconv/ucvibm/nsUCvIBMModule.cpp +++ b/mozilla/intl/uconv/ucvibm/nsUCvIBMModule.cpp @@ -419,9 +419,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr, nsCRT::free(cid_string); res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc); + res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest); + res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest); if (NS_FAILED(res)) goto done; } diff --git a/mozilla/intl/uconv/ucvja/nsUCvJaModule.cpp b/mozilla/intl/uconv/ucvja/nsUCvJaModule.cpp index 28c3ec777bc..a03b948f09c 100644 --- a/mozilla/intl/uconv/ucvja/nsUCvJaModule.cpp +++ b/mozilla/intl/uconv/ucvja/nsUCvJaModule.cpp @@ -431,9 +431,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr, nsCRT::free(cid_string); res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc); + res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest); + res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest); if (NS_FAILED(res)) goto done; } diff --git a/mozilla/intl/uconv/ucvko/nsUCvKoModule.cpp b/mozilla/intl/uconv/ucvko/nsUCvKoModule.cpp index 2e9127ca263..a4151327351 100644 --- a/mozilla/intl/uconv/ucvko/nsUCvKoModule.cpp +++ b/mozilla/intl/uconv/ucvko/nsUCvKoModule.cpp @@ -365,9 +365,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr, nsCRT::free(cid_string); res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc); + res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest); + res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest); if (NS_FAILED(res)) goto done; } diff --git a/mozilla/intl/uconv/ucvlatin/nsUCvLatinModule.cpp b/mozilla/intl/uconv/ucvlatin/nsUCvLatinModule.cpp index fa3f53210d0..70a55a6a31f 100644 --- a/mozilla/intl/uconv/ucvlatin/nsUCvLatinModule.cpp +++ b/mozilla/intl/uconv/ucvlatin/nsUCvLatinModule.cpp @@ -1060,9 +1060,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr, nsCRT::free(cid_string); res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc); + res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest); + res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest); if (NS_FAILED(res)) goto done; } diff --git a/mozilla/intl/uconv/ucvtw2/nsUCvTw2Module.cpp b/mozilla/intl/uconv/ucvtw2/nsUCvTw2Module.cpp index 929cbc13ec0..e8412042884 100644 --- a/mozilla/intl/uconv/ucvtw2/nsUCvTw2Module.cpp +++ b/mozilla/intl/uconv/ucvtw2/nsUCvTw2Module.cpp @@ -445,9 +445,9 @@ NS_IMETHODIMP nsConverterModule::RegisterSelf(nsIComponentManager *aCompMgr, nsCRT::free(cid_string); res = registry -> AddSubtree(nsIRegistry::Common, buff, &key); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "source", g_FactoryData[i].mCharsetSrc); + res = registry -> SetStringUTF8(key, "source", g_FactoryData[i].mCharsetSrc); if (NS_FAILED(res)) goto done; - res = registry -> SetString(key, "destination", g_FactoryData[i].mCharsetDest); + res = registry -> SetStringUTF8(key, "destination", g_FactoryData[i].mCharsetDest); if (NS_FAILED(res)) goto done; } diff --git a/mozilla/modules/libreg/src/vr_stubs.c b/mozilla/modules/libreg/src/vr_stubs.c index d4691d54cdf..d39f9d5a54c 100644 --- a/mozilla/modules/libreg/src/vr_stubs.c +++ b/mozilla/modules/libreg/src/vr_stubs.c @@ -56,10 +56,10 @@ #define MAC_REG "\pMozilla Registry" #define BEOS_REG "/mozilla/registry" -#define DEF_VERREG "/.netscape/registry" -#define WIN_VERREG "\\nsreg.dat" -#define MAC_VERREG "\pNetscape Registry" -#define BEOS_VERREG "/mozilla/registry" +#define DEF_VERREG "/.mozilla/mozver.dat" +#define WIN_VERREG "\\mozver.dat" +#define MAC_VERREG "\pMozilla Versions" +#define BEOS_VERREG "/mozilla/mozver.dat" /* ------------------------------------------------------------------ diff --git a/mozilla/modules/libreg/xpcom/nsIRegistry.idl b/mozilla/modules/libreg/xpcom/nsIRegistry.idl index 051b56315c0..b7153431b19 100644 --- a/mozilla/modules/libreg/xpcom/nsIRegistry.idl +++ b/mozilla/modules/libreg/xpcom/nsIRegistry.idl @@ -36,15 +36,21 @@ interface nsIRegistry : nsISupports const long ApplicationCustomRegistry = -1; void open(in string regFile); - void openWellKnownRegistry(in long regid); - // Deprecated - void openDefault(); - void close(); + void openWellKnownRegistry(in nsWellKnownRegistry regid); + void flush(); boolean isOpen(); - string getString(in nsRegistryKey baseKey, in string path); - void setString(in nsRegistryKey baseKey, in string path, in string value); + nsRegistryKey addKey(in nsRegistryKey baseKey, in wstring keyname); + nsRegistryKey getKey(in nsRegistryKey baseKey, in wstring keyname); + void removeKey(in nsRegistryKey baseKey, in wstring keyname); + + wstring getString(in nsRegistryKey baseKey, in wstring valname); + void setString(in nsRegistryKey baseKey, in wstring valname, in wstring value); + + string getStringUTF8(in nsRegistryKey baseKey, in string path); + void setStringUTF8(in nsRegistryKey baseKey, in string path, in string value); + PRInt32 getInt(in nsRegistryKey baseKey, in string path); void setInt(in nsRegistryKey baseKey, in string path, in PRInt32 value); PRInt64 getLongLong(in nsRegistryKey baseKey, in string path); diff --git a/mozilla/modules/libreg/xpcom/nsRegistry.cpp b/mozilla/modules/libreg/xpcom/nsRegistry.cpp index 552110739b2..780a1f202f1 100644 --- a/mozilla/modules/libreg/xpcom/nsRegistry.cpp +++ b/mozilla/modules/libreg/xpcom/nsRegistry.cpp @@ -33,6 +33,8 @@ #include "nsCOMPtr.h" #include "nsILocalFile.h" #include "nsIServiceManager.h" +#include "nsTextFormatter.h" + /* extra locking for the paranoid */ /* #define EXTRA_THREADSAFE */ #ifndef EXTRA_THREADSAFE @@ -73,6 +75,8 @@ protected: #endif char *mCurRegFile; // these are to prevent open from opening the registry again nsWellKnownRegistry mCurRegID; + + NS_IMETHOD Close(); }; // nsRegistry @@ -482,6 +486,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) { return regerr2nsresult( err ); } +#if 0 /*-------------------------- nsRegistry::OpenDefault --------------------------- | Open the "default" registry; in the case of this libreg-based implementation | | that is done by passing a null file name pointer to NR_RegOpen. | @@ -489,6 +494,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) { NS_IMETHODIMP nsRegistry::OpenDefault() { return OpenWellKnownRegistry(nsIRegistry::ApplicationRegistry); } +#endif /*----------------------------- nsRegistry::Close ------------------------------ | Tests the mReg handle and if non-null, closes the registry via NR_RegClose. | @@ -530,11 +536,122 @@ NS_IMETHODIMP nsRegistry::IsOpen( PRBool *result ) { } +/*--------------------------- nsRegistry::AddKey ------------------------------- +| Add a key into the registry or find an existing one. This is generally used | +| instead of GetKey unless it's an error for the key not to exist already i +------------------------------------------------------------------------------*/ +NS_IMETHODIMP nsRegistry::AddKey( nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval) +{ + if ( !keyname ) + return NS_ERROR_NULL_POINTER; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = AddSubtree( baseKey, utf8name, _retval ); + + Recycle( utf8name ); + return rv; +} + +/*--------------------------- nsRegistry::GetKey ------------------------------- +| returns the nsRegistryKey associated with a given node in the registry | +------------------------------------------------------------------------------*/ +NS_IMETHODIMP nsRegistry::GetKey(nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval) +{ + if ( !keyname || !_retval ) + return NS_ERROR_NULL_POINTER; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = GetSubtree( baseKey, utf8name, _retval ); + + Recycle( utf8name ); + return rv; +} + +/*--------------------------- nsRegistry::RemoveKey ---------------------------- +| Delete a key from the registry | +------------------------------------------------------------------------------*/ +NS_IMETHODIMP nsRegistry::RemoveKey(nsRegistryKey baseKey, const PRUnichar *keyname) +{ + if ( !keyname ) + return NS_ERROR_NULL_POINTER; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = RemoveSubtree( baseKey, utf8name ); + + Recycle( utf8name ); + return rv; +} + +NS_IMETHODIMP nsRegistry::GetString(nsRegistryKey baseKey, const PRUnichar *valname, PRUnichar **_retval) +{ + nsresult rv = NS_OK; + + // Make sure caller gave us place for result. + if ( !valname || !_retval ) + return NS_ERROR_NULL_POINTER; + + // initialize the return value + *_retval = nsnull; + char *tmpstr = nsnull; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + rv = GetStringUTF8( baseKey, utf8name, &tmpstr ); + if (NS_SUCCEEDED(rv)) + { + *_retval = nsTextFormatter::smprintf( L"%s", tmpstr ); + nsCRT::free(tmpstr); + if ( *_retval == nsnull ) + rv = NS_ERROR_OUT_OF_MEMORY; + } + + Recycle( utf8name ); + return rv; +} + +NS_IMETHODIMP nsRegistry::SetString(nsRegistryKey baseKey, const PRUnichar *valname, const PRUnichar *value) +{ + if ( !valname || ! value ) + return NS_ERROR_NULL_POINTER; + + nsresult rv = NS_OK; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) ); + nsString val( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,value), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + char* utf8val = val.ToNewUTF8String(); + + if ( utf8name && utf8val ) + rv = SetStringUTF8( baseKey, utf8name, utf8val ); + else + rv = NS_ERROR_OUT_OF_MEMORY; + + if ( utf8name ) Recycle(utf8name); + if ( utf8val ) Recycle(utf8val); + + return rv; +} + /*--------------------------- nsRegistry::GetString ---------------------------- | First, look for the entry using GetValueInfo. If found, and it's a string, | | allocate space for it and fetch the value. | ------------------------------------------------------------------------------*/ -NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, char **result ) { +NS_IMETHODIMP nsRegistry::GetStringUTF8( nsRegistryKey baseKey, const char *path, char **result ) { nsresult rv = NS_OK; REGERR err = REGERR_OK; @@ -601,7 +718,7 @@ NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, ch /*--------------------------- nsRegistry::SetString ---------------------------- | Simply sets the registry contents using NR_RegSetEntryString. | ------------------------------------------------------------------------------*/ -NS_IMETHODIMP nsRegistry::SetString( nsRegistryKey baseKey, const char *path, const char *value ) { +NS_IMETHODIMP nsRegistry::SetStringUTF8( nsRegistryKey baseKey, const char *path, const char *value ) { REGERR err = REGERR_OK; // Set the contents. PR_Lock(mregLock); diff --git a/mozilla/netwerk/streamconv/test/TestStreamConv.cpp b/mozilla/netwerk/streamconv/test/TestStreamConv.cpp index ac0c17d66a4..e8cd8def8d5 100644 --- a/mozilla/netwerk/streamconv/test/TestStreamConv.cpp +++ b/mozilla/netwerk/streamconv/test/TestStreamConv.cpp @@ -249,7 +249,7 @@ main(int argc, char* argv[]) rv = registry->AddSubtreeRaw(key, "?from=t/foo?to=k/foo", &key1); if (NS_FAILED(rv)) return rv; - registry->Close(); + registry = 0; // close the registry NS_WITH_SERVICE(nsIStreamConverterService, StreamConvService, kStreamConverterServiceCID, &rv); if (NS_FAILED(rv)) return rv; diff --git a/mozilla/profile/src/nsProfileAccess.cpp b/mozilla/profile/src/nsProfileAccess.cpp index abd58524b71..0b8f9a29d4f 100644 --- a/mozilla/profile/src/nsProfileAccess.cpp +++ b/mozilla/profile/src/nsProfileAccess.cpp @@ -99,10 +99,6 @@ nsProfileAccess::~nsProfileAccess() PRBool openalready = PR_FALSE; - m_registry->IsOpen( &openalready); - if (openalready) - m_registry->Close(); - // Release all resources. CRTFREEIF(mCurrentProfile); CRTFREEIF(mVersion); @@ -133,11 +129,8 @@ nsProfileAccess::FreeProfileMembers(nsVoidArray *profiles, PRInt32 numElems) nsresult nsProfileAccess::CloseRegistry() { - nsresult rv = NS_OK; - - rv = m_registry->Close(); - - return rv; + m_registry = 0; + return NS_OK; } // Open the registry. @@ -163,7 +156,7 @@ nsProfileAccess::OpenRegistry() if (NS_FAILED(rv)) return rv; if (!openalready) - rv = m_registry->OpenDefault(); + rv = m_registry->OpenWellKnownRegistry(nsIRegistry::ApplicationRegistry); return rv; } @@ -329,10 +322,10 @@ nsProfileAccess::FillProfileInfo() } // Get the current profile - rv = m_registry->GetString(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, &mCurrentProfile); + rv = m_registry->GetStringUTF8(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, &mCurrentProfile); // Get the profile version - rv = m_registry->GetString(profilesTreeKey, REGISTRY_VERSION_STRING, &mVersion); + rv = m_registry->GetStringUTF8(profilesTreeKey, REGISTRY_VERSION_STRING, &mVersion); if (mVersion == nsnull) { @@ -342,7 +335,7 @@ nsProfileAccess::FillProfileInfo() } // Get the preg info - rv = m_registry->GetString(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, &mHavePREGInfo); + rv = m_registry->GetStringUTF8(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, &mHavePREGInfo); if (mHavePREGInfo == nsnull) { @@ -393,19 +386,19 @@ nsProfileAccess::FillProfileInfo() rv = m_registry->GetSubtree(profilesTreeKey, profile, &profKey); if (NS_FAILED(rv)) return rv; - rv = m_registry->GetString(profKey, REGISTRY_DIRECTORY_STRING, &directory); + rv = m_registry->GetStringUTF8(profKey, REGISTRY_DIRECTORY_STRING, &directory); if (NS_FAILED(rv)) return rv; if (mFixRegEntries) FixRegEntry(&directory); - rv = m_registry->GetString(profKey, REGISTRY_MIGRATED_STRING, getter_Copies(isMigrated)); + rv = m_registry->GetStringUTF8(profKey, REGISTRY_MIGRATED_STRING, getter_Copies(isMigrated)); if (NS_FAILED(rv)) return rv; - rv = m_registry->GetString(profKey, REGISTRY_NC_PROFILE_NAME_STRING, getter_Copies(NCProfileName)); - rv = m_registry->GetString(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, getter_Copies(NCDeniedService)); - rv = m_registry->GetString(profKey, REGISTRY_NC_USER_EMAIL_STRING, getter_Copies(NCEmailAddress)); - rv = m_registry->GetString(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, getter_Copies(NCHavePregInfo)); + rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_PROFILE_NAME_STRING, getter_Copies(NCProfileName)); + rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, getter_Copies(NCDeniedService)); + rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_USER_EMAIL_STRING, getter_Copies(NCEmailAddress)); + rv = m_registry->GetStringUTF8(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, getter_Copies(NCHavePregInfo)); ProfileStruct* profileItem = new ProfileStruct(); if (!profileItem) @@ -663,15 +656,15 @@ nsProfileAccess::UpdateRegistry() if (NS_FAILED(rv)) return rv; // Set the current profile - rv = m_registry->SetString(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, mCurrentProfile); + rv = m_registry->SetStringUTF8(profilesTreeKey, REGISTRY_CURRENT_PROFILE_STRING, mCurrentProfile); if (NS_FAILED(rv)) return rv; // Set the registry version - rv = m_registry->SetString(profilesTreeKey, REGISTRY_VERSION_STRING, mVersion); + rv = m_registry->SetStringUTF8(profilesTreeKey, REGISTRY_VERSION_STRING, mVersion); if (NS_FAILED(rv)) return rv; // Set preg info - rv = m_registry->SetString(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, mHavePREGInfo); + rv = m_registry->SetStringUTF8(profilesTreeKey, REGISTRY_HAVE_PREG_INFO_STRING, mHavePREGInfo); if (NS_FAILED(rv)) return rv; rv = m_registry->EnumerateSubtrees(profilesTreeKey, getter_AddRefs(enumKeys)); @@ -721,16 +714,16 @@ nsProfileAccess::UpdateRegistry() rv = m_registry->GetSubtree(profilesTreeKey, profile, &profKey); if (NS_FAILED(rv)) return rv; - rv = m_registry->SetString(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation); if (NS_FAILED(rv)) return rv; - rv = m_registry->SetString(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated); if (NS_FAILED(rv)) return rv; - rv = m_registry->SetString(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName); - rv = m_registry->SetString(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService); - rv = m_registry->SetString(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress); - rv = m_registry->SetString(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo); profileItem->updateProfileEntry = PR_FALSE; } @@ -749,16 +742,16 @@ nsProfileAccess::UpdateRegistry() rv = m_registry->AddSubtree(profilesTreeKey, profileItem->profileName, &profKey); if (NS_FAILED(rv)) return rv; - rv = m_registry->SetString(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_DIRECTORY_STRING, profileItem->profileLocation); if (NS_FAILED(rv)) return rv; - rv = m_registry->SetString(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_MIGRATED_STRING, profileItem->isMigrated); if (NS_FAILED(rv)) return rv; - rv = m_registry->SetString(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName); - rv = m_registry->SetString(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService); - rv = m_registry->SetString(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress); - rv = m_registry->SetString(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_PROFILE_NAME_STRING, profileItem->NCProfileName); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_SERVICE_DENIAL_STRING, profileItem->NCDeniedService); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_USER_EMAIL_STRING, profileItem->NCEmailAddress); + rv = m_registry->SetStringUTF8(profKey, REGISTRY_NC_HAVE_PREG_INFO_STRING, profileItem->NCHavePregInfo); profileItem->updateProfileEntry = PR_FALSE; } @@ -878,7 +871,7 @@ nsProfileAccess::Get4xProfileInfo(const char *registryName) nsXPIDLCString profLoc; - rv = oldReg->GetString( key, "ProfileLocation", getter_Copies(profLoc)); + rv = oldReg->GetStringUTF8( key, "ProfileLocation", getter_Copies(profLoc)); if (NS_FAILED(rv)) return rv; #if defined(DEBUG_profile) @@ -911,7 +904,6 @@ nsProfileAccess::Get4xProfileInfo(const char *registryName) rv = enumKeys->Next(); if (NS_FAILED(rv)) return rv; } - oldReg->Close(); #elif defined (XP_BEOS) #else diff --git a/mozilla/xpcom/components/makefile.win b/mozilla/xpcom/components/makefile.win index bae2a3783b5..25ed70e9544 100644 --- a/mozilla/xpcom/components/makefile.win +++ b/mozilla/xpcom/components/makefile.win @@ -80,4 +80,4 @@ install:: $(LIBRARY) $(MAKE_INSTALL) $(LIBRARY) $(DIST)\lib clobber:: - rm -f $(DIST)\lib\$(LIBRARY_NAME).lib + $(RM) $(DIST)\lib\$(LIBRARY_NAME).lib diff --git a/mozilla/xpcom/components/nsCategoryManager.cpp b/mozilla/xpcom/components/nsCategoryManager.cpp index 68d36b7fd9a..3613da32e13 100644 --- a/mozilla/xpcom/components/nsCategoryManager.cpp +++ b/mozilla/xpcom/components/nsCategoryManager.cpp @@ -215,7 +215,7 @@ nsCategoryManager::initialize() } nsXPIDLCString value; - mRegistry->GetString(categoryKey, entryName, getter_Copies(value)); + mRegistry->GetStringUTF8(categoryKey, entryName, getter_Copies(value)); AddCategoryEntry(categoryName, entryName, value, PR_FALSE, PR_FALSE, 0); } } @@ -247,7 +247,7 @@ nsCategoryManager::persist( const char* aCategoryName, const char* aKey, const c status = mRegistry->AddSubtreeRaw(mCategoriesRegistryKey, aCategoryName, &categoryRegistryKey); if ( NS_SUCCEEDED(status) ) - status = mRegistry->SetString(categoryRegistryKey, aKey, aValue); + status = mRegistry->SetStringUTF8(categoryRegistryKey, aKey, aValue); return status; } diff --git a/mozilla/xpcom/components/nsComponentManager.cpp b/mozilla/xpcom/components/nsComponentManager.cpp index 6e3de11e817..536f0b800ea 100644 --- a/mozilla/xpcom/components/nsComponentManager.cpp +++ b/mozilla/xpcom/components/nsComponentManager.cpp @@ -45,6 +45,8 @@ #include "xcDll.h" #include "prerror.h" #include "prmem.h" +#include "nsIFile.h" +//#include "mozreg.h" #include "NSReg.h" #include "prcmon.h" @@ -468,7 +470,7 @@ nsComponentManagerImpl::PlatformVersionCheck() if (NS_FAILED(rv)) return rv; nsXPIDLCString buf; - nsresult err = mRegistry->GetString(xpcomKey, versionValueName, + nsresult err = mRegistry->GetStringUTF8(xpcomKey, versionValueName, getter_Copies(buf)); // If there is a version mismatch or no version string, we got an old registry. @@ -537,7 +539,7 @@ nsComponentManagerImpl::PlatformVersionCheck() } - rv = mRegistry->SetString(xpcomKey,versionValueName, NS_XPCOM_COMPONENT_MANAGER_VERSION_STRING); + rv = mRegistry->SetStringUTF8(xpcomKey,versionValueName, NS_XPCOM_COMPONENT_MANAGER_VERSION_STRING); if(NS_FAILED(rv)) { PR_LOG(nsComponentManagerLog, PR_LOG_ALWAYS, @@ -611,18 +613,18 @@ nsComponentManagerImpl::PlatformRegister(const char *cidString, if (NS_FAILED(rv)) return (rv); - rv = mRegistry->SetString(IDkey,classNameValueName, className); + rv = mRegistry->SetStringUTF8(IDkey,classNameValueName, className); if (progID) { - rv = mRegistry->SetString(IDkey,progIDValueName, progID); + rv = mRegistry->SetStringUTF8(IDkey,progIDValueName, progID); } - rv = mRegistry->SetString(IDkey, inprocServerValueName, dll->GetPersistentDescriptorString()); + rv = mRegistry->SetStringUTF8(IDkey, inprocServerValueName, dll->GetPersistentDescriptorString()); if (progID) { nsRegistryKey progIDKey; rv = mRegistry->AddSubtreeRaw(mClassesKey, progID, &progIDKey); - rv = mRegistry->SetString(progIDKey, classIDValueName, cidString); + rv = mRegistry->SetStringUTF8(progIDKey, classIDValueName, cidString); } // XXX Gross. LongLongs dont have a serialization format. This makes @@ -655,7 +657,7 @@ nsComponentManagerImpl::PlatformUnregister(const char *cidString, rv = mRegistry->AddSubtreeRaw(mCLSIDKey, cidString, &cidKey); char *progID = NULL; - rv = mRegistry->GetString(cidKey, progIDValueName, &progID); + rv = mRegistry->GetStringUTF8(cidKey, progIDValueName, &progID); if(NS_SUCCEEDED(rv)) { mRegistry->RemoveSubtreeRaw(mClassesKey, progID); @@ -703,7 +705,7 @@ nsComponentManagerImpl::PlatformFind(const nsCID &aCID, nsFactoryEntry* *result) if (NS_FAILED(rv)) return rv; nsXPIDLCString library; - rv = mRegistry->GetString(cidKey, inprocServerValueName, + rv = mRegistry->GetStringUTF8(cidKey, inprocServerValueName, getter_Copies(library)); if (NS_FAILED(rv)) { @@ -712,7 +714,7 @@ nsComponentManagerImpl::PlatformFind(const nsCID &aCID, nsFactoryEntry* *result) } nsXPIDLCString componentType; - rv = mRegistry->GetString(cidKey, componentTypeValueName, + rv = mRegistry->GetStringUTF8(cidKey, componentTypeValueName, getter_Copies(componentType)); if (NS_FAILED(rv)) @@ -750,7 +752,7 @@ nsComponentManagerImpl::PlatformProgIDToCLSID(const char *aProgID, nsCID *aClass if (NS_FAILED(rv)) return NS_ERROR_FACTORY_NOT_REGISTERED; char *cidString; - rv = mRegistry->GetString(progIDKey, classIDValueName, &cidString); + rv = mRegistry->GetStringUTF8(progIDKey, classIDValueName, &cidString); if(NS_FAILED(rv)) return rv; if (!(aClass->Parse(cidString))) { @@ -778,12 +780,12 @@ nsComponentManagerImpl::PlatformCLSIDToProgID(const nsCID *aClass, PR_FREEIF(cidStr); char* classnameString; - rv = mRegistry->GetString(cidKey, classNameValueName, &classnameString); + rv = mRegistry->GetStringUTF8(cidKey, classNameValueName, &classnameString); if(NS_FAILED(rv)) return rv; *aClassName = classnameString; char* progidString; - rv = mRegistry->GetString(cidKey,progIDValueName,&progidString); + rv = mRegistry->GetStringUTF8(cidKey,progIDValueName,&progidString); if (NS_FAILED(rv)) return rv; *aProgID = progidString; @@ -826,7 +828,7 @@ nsresult nsComponentManagerImpl::PlatformPrePopulateRegistry() // Create the CID entry nsXPIDLCString library; - rv = mRegistry->GetString(cidKey, inprocServerValueName, + rv = mRegistry->GetStringUTF8(cidKey, inprocServerValueName, getter_Copies(library)); if (NS_FAILED(rv)) continue; nsCID aClass; @@ -834,7 +836,7 @@ nsresult nsComponentManagerImpl::PlatformPrePopulateRegistry() if (!(aClass.Parse(cidString))) continue; nsXPIDLCString componentType; - if (NS_FAILED(mRegistry->GetString(cidKey, componentTypeValueName, + if (NS_FAILED(mRegistry->GetStringUTF8(cidKey, componentTypeValueName, getter_Copies(componentType)))) continue; @@ -879,7 +881,7 @@ nsresult nsComponentManagerImpl::PlatformPrePopulateRegistry() if (NS_FAILED(rv)) continue; nsXPIDLCString cidString; - rv = mRegistry->GetString(progidKey, classIDValueName, + rv = mRegistry->GetStringUTF8(progidKey, classIDValueName, getter_Copies(cidString)); if (NS_FAILED(rv)) continue; @@ -1700,7 +1702,7 @@ nsComponentManagerImpl::GetLoaderForType(const char *aType, return rv; char *progID; - rv = mRegistry->GetString(loaderKey, progIDValueName, &progID); + rv = mRegistry->GetStringUTF8(loaderKey, progIDValueName, &progID); if (NS_FAILED(rv)) return rv; @@ -1733,7 +1735,7 @@ nsComponentManagerImpl::RegisterComponentLoader(const char *aType, const char *a /* XXX honour aReplace */ - rv = mRegistry->SetString(loaderKey, progIDValueName, aProgID); + rv = mRegistry->SetStringUTF8(loaderKey, progIDValueName, aProgID); #ifdef DEBUG_shaver_off fprintf(stderr, "nNCI: registered %s as component loader for %s\n", @@ -1762,21 +1764,21 @@ nsComponentManagerImpl::AddComponentToRegistry(const nsCID &aClass, goto out; if (aClassName) { - rv = mRegistry->SetString(IDKey, classNameValueName, aClassName); + rv = mRegistry->SetStringUTF8(IDKey, classNameValueName, aClassName); if (NS_FAILED(rv)) goto out; } - rv = mRegistry->SetString(IDKey, inprocServerValueName, aRegistryName); + rv = mRegistry->SetStringUTF8(IDKey, inprocServerValueName, aRegistryName); if (NS_FAILED(rv)) goto out; - rv = mRegistry->SetString(IDKey, componentTypeValueName, aType); + rv = mRegistry->SetStringUTF8(IDKey, componentTypeValueName, aType); if (NS_FAILED(rv)) goto out; if (aProgID) { - rv = mRegistry->SetString(IDKey, progIDValueName, aProgID); + rv = mRegistry->SetStringUTF8(IDKey, progIDValueName, aProgID); if (NS_FAILED(rv)) goto out; @@ -1784,7 +1786,7 @@ nsComponentManagerImpl::AddComponentToRegistry(const nsCID &aClass, rv = mRegistry->AddSubtreeRaw(mClassesKey, aProgID, &progIDKey); if (NS_FAILED(rv)) goto out; - rv = mRegistry->SetString(progIDKey, classIDValueName, cidString); + rv = mRegistry->SetStringUTF8(progIDKey, classIDValueName, cidString); if (NS_FAILED(rv)) goto out; } diff --git a/mozilla/xpcom/components/nsIRegistry.idl b/mozilla/xpcom/components/nsIRegistry.idl index 051b56315c0..b7153431b19 100644 --- a/mozilla/xpcom/components/nsIRegistry.idl +++ b/mozilla/xpcom/components/nsIRegistry.idl @@ -36,15 +36,21 @@ interface nsIRegistry : nsISupports const long ApplicationCustomRegistry = -1; void open(in string regFile); - void openWellKnownRegistry(in long regid); - // Deprecated - void openDefault(); - void close(); + void openWellKnownRegistry(in nsWellKnownRegistry regid); + void flush(); boolean isOpen(); - string getString(in nsRegistryKey baseKey, in string path); - void setString(in nsRegistryKey baseKey, in string path, in string value); + nsRegistryKey addKey(in nsRegistryKey baseKey, in wstring keyname); + nsRegistryKey getKey(in nsRegistryKey baseKey, in wstring keyname); + void removeKey(in nsRegistryKey baseKey, in wstring keyname); + + wstring getString(in nsRegistryKey baseKey, in wstring valname); + void setString(in nsRegistryKey baseKey, in wstring valname, in wstring value); + + string getStringUTF8(in nsRegistryKey baseKey, in string path); + void setStringUTF8(in nsRegistryKey baseKey, in string path, in string value); + PRInt32 getInt(in nsRegistryKey baseKey, in string path); void setInt(in nsRegistryKey baseKey, in string path, in PRInt32 value); PRInt64 getLongLong(in nsRegistryKey baseKey, in string path); diff --git a/mozilla/xpcom/components/nsRegistry.cpp b/mozilla/xpcom/components/nsRegistry.cpp index 552110739b2..780a1f202f1 100644 --- a/mozilla/xpcom/components/nsRegistry.cpp +++ b/mozilla/xpcom/components/nsRegistry.cpp @@ -33,6 +33,8 @@ #include "nsCOMPtr.h" #include "nsILocalFile.h" #include "nsIServiceManager.h" +#include "nsTextFormatter.h" + /* extra locking for the paranoid */ /* #define EXTRA_THREADSAFE */ #ifndef EXTRA_THREADSAFE @@ -73,6 +75,8 @@ protected: #endif char *mCurRegFile; // these are to prevent open from opening the registry again nsWellKnownRegistry mCurRegID; + + NS_IMETHOD Close(); }; // nsRegistry @@ -482,6 +486,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) { return regerr2nsresult( err ); } +#if 0 /*-------------------------- nsRegistry::OpenDefault --------------------------- | Open the "default" registry; in the case of this libreg-based implementation | | that is done by passing a null file name pointer to NR_RegOpen. | @@ -489,6 +494,7 @@ NS_IMETHODIMP nsRegistry::OpenWellKnownRegistry( nsWellKnownRegistry regid ) { NS_IMETHODIMP nsRegistry::OpenDefault() { return OpenWellKnownRegistry(nsIRegistry::ApplicationRegistry); } +#endif /*----------------------------- nsRegistry::Close ------------------------------ | Tests the mReg handle and if non-null, closes the registry via NR_RegClose. | @@ -530,11 +536,122 @@ NS_IMETHODIMP nsRegistry::IsOpen( PRBool *result ) { } +/*--------------------------- nsRegistry::AddKey ------------------------------- +| Add a key into the registry or find an existing one. This is generally used | +| instead of GetKey unless it's an error for the key not to exist already i +------------------------------------------------------------------------------*/ +NS_IMETHODIMP nsRegistry::AddKey( nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval) +{ + if ( !keyname ) + return NS_ERROR_NULL_POINTER; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = AddSubtree( baseKey, utf8name, _retval ); + + Recycle( utf8name ); + return rv; +} + +/*--------------------------- nsRegistry::GetKey ------------------------------- +| returns the nsRegistryKey associated with a given node in the registry | +------------------------------------------------------------------------------*/ +NS_IMETHODIMP nsRegistry::GetKey(nsRegistryKey baseKey, const PRUnichar *keyname, nsRegistryKey *_retval) +{ + if ( !keyname || !_retval ) + return NS_ERROR_NULL_POINTER; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = GetSubtree( baseKey, utf8name, _retval ); + + Recycle( utf8name ); + return rv; +} + +/*--------------------------- nsRegistry::RemoveKey ---------------------------- +| Delete a key from the registry | +------------------------------------------------------------------------------*/ +NS_IMETHODIMP nsRegistry::RemoveKey(nsRegistryKey baseKey, const PRUnichar *keyname) +{ + if ( !keyname ) + return NS_ERROR_NULL_POINTER; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,keyname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = RemoveSubtree( baseKey, utf8name ); + + Recycle( utf8name ); + return rv; +} + +NS_IMETHODIMP nsRegistry::GetString(nsRegistryKey baseKey, const PRUnichar *valname, PRUnichar **_retval) +{ + nsresult rv = NS_OK; + + // Make sure caller gave us place for result. + if ( !valname || !_retval ) + return NS_ERROR_NULL_POINTER; + + // initialize the return value + *_retval = nsnull; + char *tmpstr = nsnull; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + if ( !utf8name ) + return NS_ERROR_OUT_OF_MEMORY; + + rv = GetStringUTF8( baseKey, utf8name, &tmpstr ); + if (NS_SUCCEEDED(rv)) + { + *_retval = nsTextFormatter::smprintf( L"%s", tmpstr ); + nsCRT::free(tmpstr); + if ( *_retval == nsnull ) + rv = NS_ERROR_OUT_OF_MEMORY; + } + + Recycle( utf8name ); + return rv; +} + +NS_IMETHODIMP nsRegistry::SetString(nsRegistryKey baseKey, const PRUnichar *valname, const PRUnichar *value) +{ + if ( !valname || ! value ) + return NS_ERROR_NULL_POINTER; + + nsresult rv = NS_OK; + + nsString name( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,valname), PR_FALSE ) ); + nsString val( nsSubsumeStr( NS_CONST_CAST(PRUnichar*,value), PR_FALSE ) ); + char* utf8name = name.ToNewUTF8String(); + char* utf8val = val.ToNewUTF8String(); + + if ( utf8name && utf8val ) + rv = SetStringUTF8( baseKey, utf8name, utf8val ); + else + rv = NS_ERROR_OUT_OF_MEMORY; + + if ( utf8name ) Recycle(utf8name); + if ( utf8val ) Recycle(utf8val); + + return rv; +} + /*--------------------------- nsRegistry::GetString ---------------------------- | First, look for the entry using GetValueInfo. If found, and it's a string, | | allocate space for it and fetch the value. | ------------------------------------------------------------------------------*/ -NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, char **result ) { +NS_IMETHODIMP nsRegistry::GetStringUTF8( nsRegistryKey baseKey, const char *path, char **result ) { nsresult rv = NS_OK; REGERR err = REGERR_OK; @@ -601,7 +718,7 @@ NS_IMETHODIMP nsRegistry::GetString( nsRegistryKey baseKey, const char *path, ch /*--------------------------- nsRegistry::SetString ---------------------------- | Simply sets the registry contents using NR_RegSetEntryString. | ------------------------------------------------------------------------------*/ -NS_IMETHODIMP nsRegistry::SetString( nsRegistryKey baseKey, const char *path, const char *value ) { +NS_IMETHODIMP nsRegistry::SetStringUTF8( nsRegistryKey baseKey, const char *path, const char *value ) { REGERR err = REGERR_OK; // Set the contents. PR_Lock(mregLock); diff --git a/mozilla/xpcom/tools/registry/makefile.win b/mozilla/xpcom/tools/registry/makefile.win index 657cdb12cb4..5322a5ffb76 100644 --- a/mozilla/xpcom/tools/registry/makefile.win +++ b/mozilla/xpcom/tools/registry/makefile.win @@ -45,11 +45,11 @@ PDBFILE=regExport include <$(DEPTH)\config\rules.mak> -install:: $(PROGRAMS) +install:: $(OBJDIR) $(PROGRAMS) -for %p in ($(PROGRAMS)) do $(MAKE_INSTALL) %p $(DIST)\bin clobber:: -for %p in ($(PROGRAMS)) do $(RM) %p $(DIST)\bin\%p -$(PROG1): $(OBJDIR) regExport.cpp +#$(PROG1): $(OBJDIR) regExport.cpp diff --git a/mozilla/xpcom/tools/registry/regExport.cpp b/mozilla/xpcom/tools/registry/regExport.cpp index c425a35a2ef..81d5433fd71 100644 --- a/mozilla/xpcom/tools/registry/regExport.cpp +++ b/mozilla/xpcom/tools/registry/regExport.cpp @@ -90,28 +90,37 @@ int main( int argc, char *argv[] ) { rv = reg->Open( argv[1] ); if ( rv == NS_OK ) { - NS_ADDREF(reg); +// NS_ADDREF(reg); printf( "Registry %s opened OK.\n", argv[1] ? argv[1] : "" ); // Recurse over all 3 branches. display( reg, nsIRegistry::Common, "nsRegistry::Common" ); display( reg, nsIRegistry::Users, "nsRegistry::Users" ); - display( reg, nsIRegistry::Common, "nsRegistry::CurrentUser" ); } + NS_RELEASE(reg); if (argc == 1) { // Called with no arguments. Print both the default registry and // the components registry. We already printed the default regsitry. // So just do the component registry. + rv = compMgr->CreateInstanceByProgID(NS_REGISTRY_PROGID, NULL, + NS_GET_IID(nsIRegistry), + (void **) ®); + + // Check result. + if ( NS_FAILED(rv) ) + { + printf( "Error opening creating registry instance, rv=0x%08X\n", (int)rv ); + return rv; + } rv = reg->OpenWellKnownRegistry(nsIRegistry::ApplicationComponentRegistry); if ( rv == NS_OK ) { - NS_ADDREF(reg); - printf( "Registry %s opened OK.\n", argv[1] ? argv[1] : "" ); +// NS_ADDREF(reg); + printf( "\n\n\nRegistry %s opened OK.\n", "\n" ); // Recurse over all 3 branches. display( reg, nsIRegistry::Common, "nsRegistry::Common" ); display( reg, nsIRegistry::Users, "nsRegistry::Users" ); - display( reg, nsIRegistry::Common, "nsRegistry::CurrentUser" ); } } diff --git a/mozilla/xpfe/appshell/src/nsAppShellService.cpp b/mozilla/xpfe/appshell/src/nsAppShellService.cpp index a59088cf539..5d44d189f53 100644 --- a/mozilla/xpfe/appshell/src/nsAppShellService.cpp +++ b/mozilla/xpfe/appshell/src/nsAppShellService.cpp @@ -320,9 +320,6 @@ nsAppShellService::EnumerateComponents( EnumeratorMemberFunction function ) { // Clean up. if ( registry ) { - // Registry was accessed, close it. - registry->Close(); - // Release enumerator (if necessary). NS_IF_RELEASE( components ); diff --git a/mozilla/xpfe/bootstrap/nsAppRunner.cpp b/mozilla/xpfe/bootstrap/nsAppRunner.cpp index 963ffcd4e5f..649906518a9 100644 --- a/mozilla/xpfe/bootstrap/nsAppRunner.cpp +++ b/mozilla/xpfe/bootstrap/nsAppRunner.cpp @@ -165,7 +165,7 @@ static int TranslateReturnValue(nsresult aResult) #include "nsCommandLineServiceMac.h" #endif -extern "C" void NS_SetupRegistry_1(); +extern "C" void NS_SetupRegistry_1(PRBool aNeedAutoreg); static void PrintUsage(void) @@ -221,6 +221,7 @@ static nsresult OpenChromURL( const char * urlstr, PRInt32 height = NS_SIZETOCON return rv; } + static void DumpArbitraryHelp() { nsresult rv; @@ -476,6 +477,27 @@ static nsresult main1(int argc, char* argv[], nsISplashScreen *splashScreen ) // the JS engine. See bugzilla bug 9967 details. fpsetmask(0); #endif + + //---------------------------------------------------------------- + // XPInstall needs to clean up after any updates that couldn't + // be completed because components were in use. This must be done + // **BEFORE** any other libraries are loaded! + // + // Will also check to see if AutoReg is required due to version + // change or installation of new components. If for some reason + // XPInstall can't be loaded we assume Autoreg is required. + // + // (scoped in a block to force release of COMPtr) + //---------------------------------------------------------------- + PRBool needAutoreg = PR_TRUE; + { + nsCOMPtr su = do_GetService(kSoftUpdateCID,&rv); + if (NS_SUCCEEDED(rv)) + { + su->StartupTasks( &needAutoreg ); + } + } +// nsServiceManager::UnregisterService(kSoftUpdateCID); #if XP_MAC stTSMCloser tsmCloser; @@ -485,7 +507,9 @@ static nsresult main1(int argc, char* argv[], nsISplashScreen *splashScreen ) #endif // XXX: This call will be replaced by a registry initialization... - NS_SetupRegistry_1(); + NS_SetupRegistry_1( needAutoreg ); + + // Start up the core services: // Initialize the cmd line service NS_WITH_SERVICE(nsICmdLineService, cmdLineArgs, kCmdLineServiceCID, &rv); @@ -706,24 +730,10 @@ int main(int argc, char* argv[]) rv = NS_InitXPCOM(NULL, NULL); NS_ASSERTION( NS_SUCCEEDED(rv), "NS_InitXPCOM failed" ); - { - //---------------------------------------------------------------- - // XPInstall needs to clean up after any updates that couldn't - // be completed because components were in use. This must be done - // **BEFORE** any other components are loaded! - // - // Will also check to see if AutoReg is required due to version - // change or installation of new components - // - // (scoped in a block to force release of COMPtr) - //---------------------------------------------------------------- - nsCOMPtr su = do_GetService(kSoftUpdateCID,&rv); - if (NS_SUCCEEDED(rv)) - su->StartupTasks(); - } - + nsresult result = main1( argc, argv, splash ); + { // Scoping this in a block to force the pref service to be // released. diff --git a/mozilla/xpinstall/public/nsISoftwareUpdate.h b/mozilla/xpinstall/public/nsISoftwareUpdate.h index 947e4a7ec65..075deb99d8c 100644 --- a/mozilla/xpinstall/public/nsISoftwareUpdate.h +++ b/mozilla/xpinstall/public/nsISoftwareUpdate.h @@ -73,7 +73,7 @@ class nsISoftwareUpdate : public nsISupports NS_IMETHOD InstallJarCallBack() = 0; NS_IMETHOD GetMasterNotifier(nsIXPINotifier **notifier) = 0; NS_IMETHOD SetActiveNotifier(nsIXPINotifier *notifier) = 0; - NS_IMETHOD StartupTasks() = 0; + NS_IMETHOD StartupTasks( PRBool* outAutoreg ) = 0; }; diff --git a/mozilla/xpinstall/public/nsPIXPIStubHook.idl b/mozilla/xpinstall/public/nsPIXPIStubHook.idl index 2a554d40fd2..3868fbf8a4e 100644 --- a/mozilla/xpinstall/public/nsPIXPIStubHook.idl +++ b/mozilla/xpinstall/public/nsPIXPIStubHook.idl @@ -34,5 +34,5 @@ [uuid(089929F0-4ED9-11d3-ABDD-000064657374)] interface nsPIXPIStubHook : nsISupports { - void SetProgramDirectory(in nsIFileSpec dir); + void StubInitialize(in nsIFileSpec dir); }; diff --git a/mozilla/xpinstall/src/ScheduledTasks.cpp b/mozilla/xpinstall/src/ScheduledTasks.cpp index d4fde0ca140..1c7bdc3f9f9 100644 --- a/mozilla/xpinstall/src/ScheduledTasks.cpp +++ b/mozilla/xpinstall/src/ScheduledTasks.cpp @@ -24,7 +24,6 @@ */ #include "nscore.h" -#include "NSReg.h" #include "nsFileSpec.h" #include "nsFileStream.h" #include "nsInstall.h" // for error codes @@ -347,16 +346,10 @@ PRInt32 ReplaceFileNowOrSchedule(nsFileSpec& replacementFile, nsFileSpec& doomed void DeleteScheduledFiles(HREG); void ReplaceScheduledFiles(HREG); -void PerformScheduledTasks(void *data) +void PerformScheduledTasks(HREG reg) { - HREG reg; - - if ( REGERR_OK == NR_RegOpen("", ®) ) - { - DeleteScheduledFiles( reg ); - ReplaceScheduledFiles( reg ); - NR_RegClose(reg); - } + DeleteScheduledFiles( reg ); + ReplaceScheduledFiles( reg ); } diff --git a/mozilla/xpinstall/src/ScheduledTasks.h b/mozilla/xpinstall/src/ScheduledTasks.h index d31203c1e9e..7be3016a033 100644 --- a/mozilla/xpinstall/src/ScheduledTasks.h +++ b/mozilla/xpinstall/src/ScheduledTasks.h @@ -28,6 +28,7 @@ #include "NSReg.h" +//#include "mozreg.h" #include "nsFileSpec.h" PR_BEGIN_EXTERN_C @@ -36,7 +37,7 @@ PRInt32 DeleteFileNowOrSchedule(const nsFileSpec& filename); PRInt32 ReplaceFileNowOrSchedule(nsFileSpec& tmpfile, nsFileSpec& target ); -void PerformScheduledTasks(void *data); +void PerformScheduledTasks(HREG reg); PR_END_EXTERN_C diff --git a/mozilla/xpinstall/src/makefile.win b/mozilla/xpinstall/src/makefile.win index 126bf19d943..04e8a053260 100644 --- a/mozilla/xpinstall/src/makefile.win +++ b/mozilla/xpinstall/src/makefile.win @@ -42,7 +42,6 @@ LCFLAGS = \ LLIBS = \ - $(DIST)\lib\mozreg.lib \ $(DIST)\lib\xpcom.lib \ $(DIST)\lib\js3250.lib \ $(DIST)\lib\jsdombase_s.lib \ @@ -50,6 +49,7 @@ LLIBS = \ $(DIST)\lib\zlib.lib \ $(DIST)\lib\strres.lib \ $(LIBNSPR) \ + $(DIST)\lib\mozreg.lib \ $(NULL) diff --git a/mozilla/xpinstall/src/nsInstall.cpp b/mozilla/xpinstall/src/nsInstall.cpp index 7e9555a3fc0..f119c86ade2 100644 --- a/mozilla/xpinstall/src/nsInstall.cpp +++ b/mozilla/xpinstall/src/nsInstall.cpp @@ -2225,7 +2225,7 @@ nsInstall::CleanUp(void) mPatchList = nsnull; } - if (mPackageFolder != nsnull) + if (mPackageFolder != nsnull) { delete (mPackageFolder); mPackageFolder = nsnull; diff --git a/mozilla/xpinstall/src/nsLoggingProgressNotifier.cpp b/mozilla/xpinstall/src/nsLoggingProgressNotifier.cpp index 7e2a06f239a..38aaff75743 100644 --- a/mozilla/xpinstall/src/nsLoggingProgressNotifier.cpp +++ b/mozilla/xpinstall/src/nsLoggingProgressNotifier.cpp @@ -59,7 +59,7 @@ NS_IMETHODIMP nsLoggingProgressNotifier::BeforeJavascriptEvaluation(const PRUnichar *URL) { nsSpecialSystemDirectory logFile(nsSpecialSystemDirectory::OS_CurrentProcessDirectory); - logFile += "Install.log"; + logFile += "install.log"; mLogStream = new nsOutputFileStream(logFile, PR_WRONLY | PR_CREATE_FILE | PR_APPEND, 0744 ); if (!mLogStream) diff --git a/mozilla/xpinstall/src/nsSoftwareUpdate.cpp b/mozilla/xpinstall/src/nsSoftwareUpdate.cpp index 485ef92399f..4d175d6bef8 100644 --- a/mozilla/xpinstall/src/nsSoftwareUpdate.cpp +++ b/mozilla/xpinstall/src/nsSoftwareUpdate.cpp @@ -104,7 +104,8 @@ nsSoftwareUpdate::GetInstance() nsSoftwareUpdate::nsSoftwareUpdate() : mInstalling(PR_FALSE), - mStubLockout(PR_FALSE) + mStubLockout(PR_FALSE), + mReg(0) { NS_INIT_ISUPPORTS(); @@ -195,6 +196,11 @@ nsSoftwareUpdate::QueryInterface( REFNSIID anIID, void **anInstancePtr ) NS_IMETHODIMP nsSoftwareUpdate::Initialize( nsIAppShellService *anAppShell, nsICmdLineService *aCmdLineService ) { + // Close the registry if open. We left it open through most of startup + // so it wouldn't get opened and closed a lot by different services + if (mReg) + NR_RegClose(mReg); + // prevent use of nsPIXPIStubHook by browser mStubLockout = PR_TRUE; @@ -303,9 +309,17 @@ nsSoftwareUpdate::InstallJarCallBack() NS_IMETHODIMP -nsSoftwareUpdate::StartupTasks() +nsSoftwareUpdate::StartupTasks( PRBool* outAutoreg ) { - PerformScheduledTasks(0); + if (outAutoreg) *outAutoreg = PR_FALSE; + + if ( REGERR_OK == NR_RegOpen("", &mReg) ) + { + // XXX get a return val and if not all replaced autoreg again later + PerformScheduledTasks(mReg); + } + + return NS_OK; } @@ -368,20 +382,24 @@ nsSoftwareUpdate::RegisterNameset() NS_IMETHODIMP -nsSoftwareUpdate::SetProgramDirectory(nsIFileSpec *aDir) +nsSoftwareUpdate::StubInitialize(nsIFileSpec *aDir) { if (mStubLockout) return NS_ERROR_ABORT; else if ( !aDir ) return NS_ERROR_NULL_POINTER; - // only allow once, it would be a mess if we've already started installing + // only allow once, it could be a mess if we've already started installing mStubLockout = PR_TRUE; // fix GetFolder return path mProgramDir = aDir; NS_ADDREF(mProgramDir); + // Create the logfile observer + nsLoggingProgressNotifier *logger = new nsLoggingProgressNotifier(); + RegisterNotifier(logger); + // setup version registry path char* path; nsresult rv = aDir->GetNativePath( &path ); @@ -493,8 +511,8 @@ RegisterSoftwareUpdate( nsIComponentManager *aCompMgr, &key ); nsServiceManager::ReleaseService(NS_REGISTRY_PROGID, registry); } - return rv; + } @@ -507,7 +525,7 @@ static nsModuleComponentInfo components[] = nsSoftwareUpdateConstructor, RegisterSoftwareUpdate }, - + { "InstallTrigger Component", NS_SoftwareUpdateInstallTrigger_CID, NS_INSTALLTRIGGERCOMPONENT_PROGID, diff --git a/mozilla/xpinstall/src/nsSoftwareUpdate.h b/mozilla/xpinstall/src/nsSoftwareUpdate.h index d8d71bf057d..04d6714ea4d 100644 --- a/mozilla/xpinstall/src/nsSoftwareUpdate.h +++ b/mozilla/xpinstall/src/nsSoftwareUpdate.h @@ -11,6 +11,8 @@ #include "nsString.h" #include "nsVoidArray.h" #include "prlock.h" +//#include "mozreg.h" +#include "NSReg.h" class nsInstallInfo; @@ -50,14 +52,14 @@ class nsSoftwareUpdate: public nsIAppShellComponent, NS_IMETHOD InstallJarCallBack(); NS_IMETHOD GetMasterNotifier(nsIXPINotifier **notifier); NS_IMETHOD SetActiveNotifier(nsIXPINotifier *notifier); - NS_IMETHOD StartupTasks(); + NS_IMETHOD StartupTasks( PRBool* outAutoreg ); - /** SetProgramDirectory() is private for the Install Wizard. + /** StubInitialize() is private for the Install Wizard. * The mStubLockout property makes sure this is only called * once, and is also set by the AppShellComponent initialize * so it can't be called during a normal Mozilla run */ - NS_IMETHOD SetProgramDirectory(nsIFileSpec *dir); + NS_IMETHOD StubInitialize(nsIFileSpec *dir); nsSoftwareUpdate(); virtual ~nsSoftwareUpdate(); @@ -75,6 +77,8 @@ class nsSoftwareUpdate: public nsIAppShellComponent, PRBool mStubLockout; nsVoidArray mJarInstallQueue; nsTopProgressNotifier mMasterNotifier; + + HREG mReg; }; diff --git a/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp b/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp index cd5cefa8cf7..818a3c3ac3f 100644 --- a/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp +++ b/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp @@ -443,12 +443,6 @@ extern "C" void RunInstallOnThread(void *data) if (scriptBuffer) delete [] scriptBuffer; - if ( !url.Equals("file:/",PR_FALSE,6) ) - { - // delete the jarfile only if we've downloaded it - jarpath.Delete(PR_FALSE); - } - softwareUpdate->SetActiveNotifier(0); softwareUpdate->InstallJarCallBack(); } diff --git a/mozilla/xpinstall/src/nsWinProfileItem.h b/mozilla/xpinstall/src/nsWinProfileItem.h index 74abafd8c0c..24af95b8357 100644 --- a/mozilla/xpinstall/src/nsWinProfileItem.h +++ b/mozilla/xpinstall/src/nsWinProfileItem.h @@ -45,7 +45,7 @@ public: nsString val, PRInt32 *aReturn); - ~nsWinProfileItem(); + virtual ~nsWinProfileItem(); /** * Completes the install: diff --git a/mozilla/xpinstall/src/nsWinRegItem.h b/mozilla/xpinstall/src/nsWinRegItem.h index 4817b0f0de7..a9d94c50a03 100644 --- a/mozilla/xpinstall/src/nsWinRegItem.h +++ b/mozilla/xpinstall/src/nsWinRegItem.h @@ -54,7 +54,7 @@ public: PRInt32 val, PRInt32* aReturn); - ~nsWinRegItem(); + virtual ~nsWinRegItem(); PRInt32 Prepare(void); diff --git a/mozilla/xpinstall/src/nsXPInstallManager.cpp b/mozilla/xpinstall/src/nsXPInstallManager.cpp index 9c3d29921dd..6dbfb755c4f 100644 --- a/mozilla/xpinstall/src/nsXPInstallManager.cpp +++ b/mozilla/xpinstall/src/nsXPInstallManager.cpp @@ -59,6 +59,10 @@ static NS_DEFINE_IID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID); static NS_DEFINE_CID(kDialogParamBlockCID, NS_DialogParamBlock_CID); +#include "nsIEventQueueService.h" + +static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); + #define XPINSTALL_BUNDLE_URL "chrome://xpinstall/locale/xpinstall.properties" nsXPInstallManager::nsXPInstallManager() @@ -261,6 +265,7 @@ nsXPInstallManager::InitManager(nsXPITriggerInfo* aTriggers) return rv; } + NS_IMETHODIMP nsXPInstallManager::DialogOpened(nsISupports* aWindow) { nsresult rv; @@ -422,6 +427,21 @@ void nsXPInstallManager::Shutdown() mDlg = 0; + // Clean up downloaded files + nsXPITriggerItem* item; + nsFileSpec tmpSpec; + for (PRUint32 i = 0; i < mTriggers->Size(); i++ ) + { + item = NS_STATIC_CAST(nsXPITriggerItem*, mTriggers->Get(i)); + + if ( item && item->mFile && !item->IsFileURL() ) + { + item->mFile->GetFileSpec(&tmpSpec); + tmpSpec.Delete(PR_FALSE); + } + } + + NS_RELEASE_THIS(); } @@ -534,6 +554,8 @@ nsXPInstallManager::OnStopRequest(nsIChannel* channel, nsISupports *ctxt, DownloadNext(); return rv; } + + NS_IMETHODIMP nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt, nsIInputStream *pIStream, @@ -543,7 +565,7 @@ nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt, PRUint32 amt; PRInt32 result; nsresult err; - char buffer[1025]; + char buffer[8*1024]; if (mCancelled) { @@ -554,7 +576,7 @@ nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt, do { - err = pIStream->Read(buffer, 1024, &amt); + err = pIStream->Read(buffer, sizeof(buffer), &amt); if (amt == 0) break; if (NS_FAILED(err)) { @@ -568,7 +590,8 @@ nsXPInstallManager::OnDataAvailable(nsIChannel* channel, nsISupports *ctxt, //printf("mItem->mFile->Write Failed! err:%d amt:%d result:%d\n", err, amt, result); return NS_ERROR_FAILURE; } - } while (amt > 0); + length -= amt; + } while (length > 0); return NS_OK; } diff --git a/mozilla/xpinstall/stub/xpistub.cpp b/mozilla/xpinstall/stub/xpistub.cpp index d79e195628a..971a2be4fae 100644 --- a/mozilla/xpinstall/stub/xpistub.cpp +++ b/mozilla/xpinstall/stub/xpistub.cpp @@ -157,7 +157,7 @@ PR_PUBLIC_API(nsresult) XPI_Init( NS_NewFileSpecWithSpec( dirSpec, getter_AddRefs(iDirSpec) ); if (hook && iDirSpec) - hook->SetProgramDirectory( iDirSpec ); + hook->StubInitialize( iDirSpec ); else return NS_ERROR_NULL_POINTER; @@ -217,7 +217,7 @@ PR_PUBLIC_API(PRInt32) XPI_Install( nsFileURL URL(file); nsString URLstr(URL.GetURLString()); - gInstallStatus = -322; // nsInstall::UNEXPECTED_ERROR + gInstallStatus = -322; // unique stub error code NS_NewFileSpecWithSpec( file, getter_AddRefs(iFile) );