Loading xpinstall/public/idl/Install.idl +2 −5 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ interface Install long AddSubcomponent( in wstring regName, in InstallVersion version, in wstring version, in wstring jarSource, in InstallFolder folder, in wstring targetName, Loading @@ -84,7 +84,7 @@ interface Install InstallFolder GetComponentFolder( in wstring regName, in wstring subdirectory); InstallFolder GetFolder(in InstallFolder targetFolder, InstallFolder GetFolder(in wstring targetFolder, in wstring subdirectory); long GetLastError(); Loading @@ -110,7 +110,4 @@ interface Install long Uninstall( in wstring packageName); long ExtractFileFromJar(in wstring jarfile, in wstring finalFile, out wstring tempFile); }; No newline at end of file xpinstall/public/nsIDOMInstall.h +6 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ #include "nsIScriptContext.h" class nsIDOMInstallFolder; class nsIDOMInstallVersion; #define NS_IDOMINSTALL_IID \ { 0x18c2f988, 0xb09f, 0x11d2, \ Loading Loading @@ -80,7 +79,7 @@ public: NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn)=0; NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn)=0; NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn)=0; NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn)=0; Loading @@ -96,7 +95,7 @@ public: NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn)=0; NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn)=0; NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn)=0; NS_IMETHOD GetLastError(PRInt32* aReturn)=0; Loading @@ -113,8 +112,6 @@ public: NS_IMETHOD StartInstall(const nsString& aUserPackageName, const nsString& aPackageName, const nsString& aVersion, PRInt32 aFlags, PRInt32* aReturn)=0; NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn)=0; NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aReturn)=0; }; Loading @@ -123,7 +120,7 @@ public: NS_IMETHOD GetRegPackageName(nsString& aRegPackageName); \ NS_IMETHOD AbortInstall(); \ NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn); \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); \ NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn); \ NS_IMETHOD DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn); \ NS_IMETHOD DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn); \ Loading @@ -131,7 +128,7 @@ public: NS_IMETHOD FinalizeInstall(PRInt32* aReturn); \ NS_IMETHOD Gestalt(const nsString& aSelector, PRInt32* aReturn); \ NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn); \ NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn); \ NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn); \ NS_IMETHOD GetLastError(PRInt32* aReturn); \ NS_IMETHOD GetWinProfile(nsIDOMInstallFolder* aFolder, const nsString& aFile, PRInt32* aReturn); \ NS_IMETHOD GetWinRegistry(PRInt32* aReturn); \ Loading @@ -140,7 +137,6 @@ public: NS_IMETHOD SetPackageFolder(nsIDOMInstallFolder* aFolder); \ NS_IMETHOD StartInstall(const nsString& aUserPackageName, const nsString& aPackageName, const nsString& aVersion, PRInt32 aFlags, PRInt32* aReturn); \ NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn); \ NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aReturn); \ Loading @@ -149,7 +145,7 @@ public: NS_IMETHOD GetRegPackageName(nsString& aRegPackageName) { return _to##GetRegPackageName(aRegPackageName); } \ NS_IMETHOD AbortInstall() { return _to##AbortInstall(); } \ NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn) { return _to##AddDirectory(aRegName, aVersion, aJarSource, aFolder, aSubdir, aForceMode, aReturn); } \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn) { return _to##AddSubcomponent(aRegName, aVersion, aJarSource, aFolder, aTargetName, aForceMode, aReturn); } \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn) { return _to##AddSubcomponent(aRegName, aVersion, aJarSource, aFolder, aTargetName, aForceMode, aReturn); } \ NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn) { return _to##DeleteComponent(aRegistryName, aReturn); } \ NS_IMETHOD DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn) { return _to##DeleteFile(aFolder, aRelativeFileName, aReturn); } \ NS_IMETHOD DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn) { return _to##DiskSpaceAvailable(aFolder, aReturn); } \ Loading @@ -157,7 +153,7 @@ public: NS_IMETHOD FinalizeInstall(PRInt32* aReturn) { return _to##FinalizeInstall(aReturn); } \ NS_IMETHOD Gestalt(const nsString& aSelector, PRInt32* aReturn) { return _to##Gestalt(aSelector, aReturn); } \ NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn) { return _to##GetComponentFolder(aRegName, aSubdirectory, aReturn); } \ NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn) { return _to##GetFolder(aTargetFolder, aSubdirectory, aReturn); } \ NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn) { return _to##GetFolder(aTargetFolder, aSubdirectory, aReturn); } \ NS_IMETHOD GetLastError(PRInt32* aReturn) { return _to##GetLastError(aReturn); } \ NS_IMETHOD GetWinProfile(nsIDOMInstallFolder* aFolder, const nsString& aFile, PRInt32* aReturn) { return _to##GetWinProfile(aFolder, aFile, aReturn); } \ NS_IMETHOD GetWinRegistry(PRInt32* aReturn) { return _to##GetWinRegistry(aReturn); } \ Loading @@ -166,7 +162,6 @@ public: NS_IMETHOD SetPackageFolder(nsIDOMInstallFolder* aFolder) { return _to##SetPackageFolder(aFolder); } \ NS_IMETHOD StartInstall(const nsString& aUserPackageName, const nsString& aPackageName, const nsString& aVersion, PRInt32 aFlags, PRInt32* aReturn) { return _to##StartInstall(aUserPackageName, aPackageName, aVersion, aFlags, aReturn); } \ NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn) { return _to##Uninstall(aPackageName, aReturn); } \ NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aReturn) { return _to##ExtractFileFromJar(aJarfile, aFinalFile, aTempFile, aReturn); } \ extern nsresult NS_InitInstallClass(nsIScriptContext *aContext, void **aPrototype); Loading xpinstall/src/makefile.win +3 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,9 @@ OBJS = \ .\$(OBJDIR)\nsSoftwareUpdateStream.obj \ .\$(OBJDIR)\nsInstallErrorMessages.obj \ .\$(OBJDIR)\nsInstallFile.obj \ .\$(OBJDIR)\nsInstallDelete.obj \ .\$(OBJDIR)\nsInstallExecute.obj \ .\$(OBJDIR)\nsInstallPatch.obj \ $(NULL) include <$(DEPTH)\config\rules.mak> Loading xpinstall/src/nsInstall.cpp +319 −25 Original line number Diff line number Diff line Loading @@ -24,12 +24,16 @@ #include "nsIDOMInstallVersion.h" #include "nsInstallFile.h" #include "nsInstallDelete.h" #include "nsInstallExecute.h" #include "nscore.h" #include "nsIFactory.h" #include "nsISupports.h" #include "nsVector.h" #include "nsHashtable.h" #include "prmem.h" #include "pratom.h" Loading @@ -41,6 +45,7 @@ static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); static NS_DEFINE_IID(kIInstall_IID, NS_IDOMINSTALL_IID); static NS_DEFINE_IID(kIInstallFolder_IID, NS_IDOMINSTALLFOLDER_IID); Loading Loading @@ -145,18 +150,182 @@ nsInstall::GetRegPackageName(nsString& aRegPackageName) NS_IMETHODIMP nsInstall::AbortInstall() { return NS_OK; nsInstallObject* ie; if (mInstalledFiles != nsnull) { PRUint32 i=0; for (i=0; i < mInstalledFiles->GetSize(); i++) { ie = (nsInstallObject *)mInstalledFiles->Get(i); if (ie == nsnull) continue; ie->Abort(); } } CleanUp(); return NS_OK; } //FIX: Should we use empty strings or nulls for parameters that do not need values. NS_IMETHODIMP nsInstall::AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn) { nsInstallFile* ie = nsnull; PRInt32 result; if ( aJarSource == "null" || aFolder == nsnull) { *aReturn = SaveError(nsIDOMInstall::SUERR_INVALID_ARGUMENTS); return NS_OK; } result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsString* qualifiedRegName = nsnull; if ( aRegName == "" ) { // Default subName = location in jar file qualifiedRegName = GetQualifiedRegName( aJarSource ); } else { qualifiedRegName = GetQualifiedRegName( aRegName ); } if (qualifiedRegName == nsnull) { *aReturn = SaveError( SUERR_BAD_PACKAGE_NAME ); return NS_OK; } nsString subdirectory(aSubdir); if (subdirectory != "") { subdirectory.Append("/"); } PRBool bInstall; nsVector paths; result = ExtractDirEntries(aJarSource, &paths); PRInt32 pathsUpperBound = paths.GetUpperBound(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } for (int i=0; i< pathsUpperBound; i++) { nsInstallVersion* newVersion = new nsInstallVersion(); nsString *fullRegName = new nsString(*qualifiedRegName); fullRegName->Append("/"); fullRegName->Append(*(nsString *)paths[i]); char* fullRegNameCString = fullRegName->ToNewCString(); if ( (aForceMode == PR_FALSE) && (aVersion == "null") && (VR_ValidateComponent(fullRegNameCString) == 0)) { VERSION versionStruct; VR_GetVersion( fullRegNameCString, &versionStruct); //fix: when we have overloading! nsInstallVersion* oldVer = new nsInstallVersion(); oldVer->Init(versionStruct.major, versionStruct.minor, versionStruct.release, versionStruct.build); newVersion->Init(aVersion); PRInt32 areTheyEqual; newVersion->CompareTo(oldVer, &areTheyEqual); delete newVersion; bInstall = ( areTheyEqual > 0 ); if (oldVer) delete oldVer; } else { // file doesn't exist or "forced" install bInstall = PR_TRUE; } delete fullRegNameCString; if (bInstall) { nsString *newJarSource = new nsString(aJarSource); newJarSource->Append("/"); newJarSource->Append(*(nsString *)paths[i]); nsString* newSubDir; if (subdirectory != "") { newSubDir = new nsString(subdirectory); newSubDir->Append(*(nsString*)paths[i]); } else { newSubDir = new nsString(*(nsString*)paths[i]); } ie = new nsInstallFile( this, *fullRegName, newVersion, *newJarSource, aFolder, *newSubDir, aForceMode, &result); delete fullRegName; delete newJarSource; delete newSubDir; delete newVersion; if (result == SU_SUCCESS) { result = ScheduleForInstall( ie ); } else { delete ie; } } } if (qualifiedRegName != nsnull) delete qualifiedRegName; *aReturn = SaveError( result ); return NS_OK; } NS_IMETHODIMP nsInstall::AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, Loading @@ -164,13 +333,14 @@ nsInstall::AddSubcomponent(const nsString& aRegName, PRInt32* aReturn) { nsInstallFile* ie; nsString* qualifiedRegName; nsString* qualifiedRegName = nsnull; PRInt32 errcode = SU_SUCCESS; if ( aJarSource == "null" || aFolder == nsnull) { return nsIDOMInstall::SUERR_INVALID_ARGUMENTS; *aReturn = SaveError( nsIDOMInstall::SUERR_INVALID_ARGUMENTS ); return NS_OK; } PRInt32 result = SanityCheck(); Loading Loading @@ -200,10 +370,13 @@ nsInstall::AddSubcomponent(const nsString& aRegName, /* Check for existence of the newer version */ nsInstallVersion *newVersion = new nsInstallVersion(); newVersion->Init(aVersion); PRBool versionNewer = PR_FALSE; char* qualifiedRegNameString = qualifiedRegName->ToNewCString(); if ( (aForceMode == PR_FALSE ) && (aVersion != nsnull) && ( VR_ValidateComponent( qualifiedRegNameString ) == 0 ) ) if ( (aForceMode == PR_FALSE ) && (aVersion != "null") && ( VR_ValidateComponent( qualifiedRegNameString ) == 0 ) ) { VERSION versionStruct; Loading @@ -217,7 +390,7 @@ nsInstall::AddSubcomponent(const nsString& aRegName, versionStruct.build); PRInt32 areTheyEqual; aVersion->CompareTo((nsInstallVersion*)oldVersion, &areTheyEqual); newVersion->CompareTo((nsInstallVersion*)oldVersion, &areTheyEqual); if ( areTheyEqual != nsIDOMInstallVersion::SU_EQUAL ) versionNewer = PR_TRUE; Loading @@ -236,41 +409,93 @@ nsInstall::AddSubcomponent(const nsString& aRegName, if (versionNewer) { PRInt32 error; ie = new nsInstallFile( this, *qualifiedRegName, aVersion, newVersion, aJarSource, aFolder, aTargetName, aForceMode, &error ); &errcode ); if (error == SU_SUCCESS) if (errcode == SU_SUCCESS) { error = ScheduleForInstall( ie ); errcode = ScheduleForInstall( ie ); } if (error != SU_SUCCESS) else { *aReturn = SaveError( error ); return NS_OK; delete ie; } } if (qualifiedRegName != nsnull) delete qualifiedRegName; if (newVersion != nsnull) delete newVersion; *aReturn = SaveError( errcode ); return NS_OK; } NS_IMETHODIMP nsInstall::DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn) { PRInt32 result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsString* qualifiedRegName = GetQualifiedRegName( aRegistryName); if (qualifiedRegName == nsnull) { *aReturn = SaveError( SUERR_BAD_PACKAGE_NAME ); return NS_OK; } nsInstallDelete* id = new nsInstallDelete(this, NULL, *qualifiedRegName, &result); if (result == SU_SUCCESS) { result = ScheduleForInstall( id ); } delete qualifiedRegName; *aReturn = SaveError(result); return NS_OK; } NS_IMETHODIMP nsInstall::DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn) { PRInt32 result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsInstallDelete* id = new nsInstallDelete(this, aFolder, aRelativeFileName, &result); if (result == SU_SUCCESS) { result = ScheduleForInstall( id ); } if (result == SUERR_FILE_DOES_NOT_EXIST) { result = SU_SUCCESS; } *aReturn = SaveError(result); return NS_OK; } Loading @@ -283,6 +508,22 @@ nsInstall::DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn) NS_IMETHODIMP nsInstall::Execute(const nsString& aJarSource, const nsString& aArgs, PRInt32* aReturn) { PRInt32 result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsInstallExecute* ie = new nsInstallExecute(this, aJarSource, aArgs, &result); if (result == SU_SUCCESS) { result = ScheduleForInstall( ie ); } *aReturn = SaveError(result); return NS_OK; } Loading Loading @@ -348,24 +589,41 @@ nsInstall::FinalizeInstall(PRInt32* aReturn) NS_IMETHODIMP nsInstall::Gestalt(const nsString& aSelector, PRInt32* aReturn) { *aReturn = nsnull; return NS_OK; } NS_IMETHODIMP nsInstall::GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder) { *aFolder = nsnull; return NS_OK; } NS_IMETHODIMP nsInstall::GetFolder(nsIDOMInstallFolder* targetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder) nsInstall::GetFolder(const nsString& targetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder) { nsInstallFolder* spec = nsnull; *aFolder = nsnull; // FIX: What was this for? if ((! targetFolder.EqualsIgnoreCase("Installed")) && (! targetFolder.EqualsIgnoreCase("file:///")) ) { spec = new nsInstallFolder(); spec->Init(targetFolder, aSubdirectory, mUserPackageName); } nsresult result = spec->QueryInterface(kIInstallFolder_IID, (void**)aFolder); if (result != NS_OK) *aFolder = nsnull; return NS_OK; } NS_IMETHODIMP nsInstall::GetLastError(PRInt32* aReturn) { *aReturn = mLastError; return NS_OK; } Loading Loading @@ -458,9 +716,10 @@ nsInstall::StartInstall(const nsString& aUserPackageName, const nsString& aPacka delete mVersionInfo; mVersionInfo = new nsInstallVersion(); mVersionInfo->Init(aVersion); /* this will go away when we have params in constructs in XPCOM */ mVersionInfo->Init(aVersion); mInstalledFiles = new nsVector(); mPatchList = new nsHashtable(); /* this function should also check security!!! */ *aReturn = OpenJARFile(); Loading Loading @@ -515,12 +774,34 @@ nsInstall::Uninstall(const nsString& aPackageName, PRInt32* aReturn) return NS_OK; } NS_IMETHODIMP //////////////////////////////////////// PRInt32 nsInstall::ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* error) { *error = SU_SUCCESS; return NS_OK; } void nsInstall::AddPatch(nsHashKey *aKey, nsString* fileName) { if (mPatchList != nsnull) { mPatchList->Put(aKey, fileName); } } void nsInstall::GetPatch(nsHashKey *aKey, nsString* fileName) { if (mPatchList != nsnull) { fileName = (nsString*) mPatchList->Get(aKey); } } ///////////////////////////////////////////////////////////////////////// // Private Methods ///////////////////////////////////////////////////////////////////////// Loading Loading @@ -673,7 +954,7 @@ nsInstall::GetQualifiedRegName(const nsString& name ) if (mUserPackageName != "") { qualifiedRegName = new nsString(mUserPackageName); qualifiedRegName += '/'; qualifiedRegName->Append("/"); qualifiedRegName->Append(name); } else Loading Loading @@ -790,6 +1071,12 @@ nsInstall::CleanUp(void) mInstalledFiles = nsnull; } if (mPatchList) { // do I need to delete every entry? delete mPatchList; } mPackageName = ""; // used to see if StartInstall() has been called //CloseProgressDialog(); Loading @@ -805,6 +1092,13 @@ void nsInstall::CloseJARFile(void) { } PRInt32 nsInstall::ExtractDirEntries(const nsString& directory, nsVector *paths) { return SU_SUCCESS; } ///////////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////////// Loading xpinstall/src/nsInstall.h +13 −6 Original line number Diff line number Diff line Loading @@ -8,15 +8,17 @@ #include "nsIScriptObjectOwner.h" #include "nsVector.h" #include "nsHashtable.h" #include "nsIDOMInstall.h" #include "nsInstallObject.h" #include "nsSoftwareUpdate.h" #include "nsInstallFolder.h" #include "nsInstallVersion.h" #include "nsInstallObject.h" class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall { public: Loading @@ -35,7 +37,7 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall NS_IMETHOD AbortInstall(); NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn); NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn); NS_IMETHOD DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn); NS_IMETHOD DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn); Loading @@ -43,7 +45,7 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall NS_IMETHOD FinalizeInstall(PRInt32* aReturn); NS_IMETHOD Gestalt(const nsString& aSelector, PRInt32* aReturn); NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder); NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder); NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder); NS_IMETHOD GetLastError(PRInt32* aReturn); NS_IMETHOD GetWinProfile(nsIDOMInstallFolder* aFolder, const nsString& aFile, PRInt32* aReturn); NS_IMETHOD GetWinRegistry(PRInt32* aReturn); Loading @@ -54,9 +56,10 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn); /*needs to be noscript*/ NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aError); PRInt32 ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aError); void AddPatch(nsHashKey *aKey, nsString* fileName); void GetPatch(nsHashKey *aKey, nsString* fileName); private: void *mScriptObject; Loading @@ -72,7 +75,9 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall nsInstallVersion* mVersionInfo; /* Component version info */ nsInstallFolder* mPackageFolder; nsVector* mInstalledFiles; nsHashtable* mPatchList; PRInt32 mLastError; Loading @@ -89,9 +94,11 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall PRInt32 OpenJARFile(void); void CloseJARFile(void); PRInt32 ExtractDirEntries(const nsString& directory, nsVector *paths); PRInt32 ScheduleForInstall(nsInstallObject* ob); }; Loading Loading
xpinstall/public/idl/Install.idl +2 −5 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ interface Install long AddSubcomponent( in wstring regName, in InstallVersion version, in wstring version, in wstring jarSource, in InstallFolder folder, in wstring targetName, Loading @@ -84,7 +84,7 @@ interface Install InstallFolder GetComponentFolder( in wstring regName, in wstring subdirectory); InstallFolder GetFolder(in InstallFolder targetFolder, InstallFolder GetFolder(in wstring targetFolder, in wstring subdirectory); long GetLastError(); Loading @@ -110,7 +110,4 @@ interface Install long Uninstall( in wstring packageName); long ExtractFileFromJar(in wstring jarfile, in wstring finalFile, out wstring tempFile); }; No newline at end of file
xpinstall/public/nsIDOMInstall.h +6 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ #include "nsIScriptContext.h" class nsIDOMInstallFolder; class nsIDOMInstallVersion; #define NS_IDOMINSTALL_IID \ { 0x18c2f988, 0xb09f, 0x11d2, \ Loading Loading @@ -80,7 +79,7 @@ public: NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn)=0; NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn)=0; NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn)=0; NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn)=0; Loading @@ -96,7 +95,7 @@ public: NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn)=0; NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn)=0; NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn)=0; NS_IMETHOD GetLastError(PRInt32* aReturn)=0; Loading @@ -113,8 +112,6 @@ public: NS_IMETHOD StartInstall(const nsString& aUserPackageName, const nsString& aPackageName, const nsString& aVersion, PRInt32 aFlags, PRInt32* aReturn)=0; NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn)=0; NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aReturn)=0; }; Loading @@ -123,7 +120,7 @@ public: NS_IMETHOD GetRegPackageName(nsString& aRegPackageName); \ NS_IMETHOD AbortInstall(); \ NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn); \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); \ NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn); \ NS_IMETHOD DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn); \ NS_IMETHOD DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn); \ Loading @@ -131,7 +128,7 @@ public: NS_IMETHOD FinalizeInstall(PRInt32* aReturn); \ NS_IMETHOD Gestalt(const nsString& aSelector, PRInt32* aReturn); \ NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn); \ NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn); \ NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn); \ NS_IMETHOD GetLastError(PRInt32* aReturn); \ NS_IMETHOD GetWinProfile(nsIDOMInstallFolder* aFolder, const nsString& aFile, PRInt32* aReturn); \ NS_IMETHOD GetWinRegistry(PRInt32* aReturn); \ Loading @@ -140,7 +137,6 @@ public: NS_IMETHOD SetPackageFolder(nsIDOMInstallFolder* aFolder); \ NS_IMETHOD StartInstall(const nsString& aUserPackageName, const nsString& aPackageName, const nsString& aVersion, PRInt32 aFlags, PRInt32* aReturn); \ NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn); \ NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aReturn); \ Loading @@ -149,7 +145,7 @@ public: NS_IMETHOD GetRegPackageName(nsString& aRegPackageName) { return _to##GetRegPackageName(aRegPackageName); } \ NS_IMETHOD AbortInstall() { return _to##AbortInstall(); } \ NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn) { return _to##AddDirectory(aRegName, aVersion, aJarSource, aFolder, aSubdir, aForceMode, aReturn); } \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn) { return _to##AddSubcomponent(aRegName, aVersion, aJarSource, aFolder, aTargetName, aForceMode, aReturn); } \ NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn) { return _to##AddSubcomponent(aRegName, aVersion, aJarSource, aFolder, aTargetName, aForceMode, aReturn); } \ NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn) { return _to##DeleteComponent(aRegistryName, aReturn); } \ NS_IMETHOD DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn) { return _to##DeleteFile(aFolder, aRelativeFileName, aReturn); } \ NS_IMETHOD DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn) { return _to##DiskSpaceAvailable(aFolder, aReturn); } \ Loading @@ -157,7 +153,7 @@ public: NS_IMETHOD FinalizeInstall(PRInt32* aReturn) { return _to##FinalizeInstall(aReturn); } \ NS_IMETHOD Gestalt(const nsString& aSelector, PRInt32* aReturn) { return _to##Gestalt(aSelector, aReturn); } \ NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn) { return _to##GetComponentFolder(aRegName, aSubdirectory, aReturn); } \ NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn) { return _to##GetFolder(aTargetFolder, aSubdirectory, aReturn); } \ NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aReturn) { return _to##GetFolder(aTargetFolder, aSubdirectory, aReturn); } \ NS_IMETHOD GetLastError(PRInt32* aReturn) { return _to##GetLastError(aReturn); } \ NS_IMETHOD GetWinProfile(nsIDOMInstallFolder* aFolder, const nsString& aFile, PRInt32* aReturn) { return _to##GetWinProfile(aFolder, aFile, aReturn); } \ NS_IMETHOD GetWinRegistry(PRInt32* aReturn) { return _to##GetWinRegistry(aReturn); } \ Loading @@ -166,7 +162,6 @@ public: NS_IMETHOD SetPackageFolder(nsIDOMInstallFolder* aFolder) { return _to##SetPackageFolder(aFolder); } \ NS_IMETHOD StartInstall(const nsString& aUserPackageName, const nsString& aPackageName, const nsString& aVersion, PRInt32 aFlags, PRInt32* aReturn) { return _to##StartInstall(aUserPackageName, aPackageName, aVersion, aFlags, aReturn); } \ NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn) { return _to##Uninstall(aPackageName, aReturn); } \ NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aReturn) { return _to##ExtractFileFromJar(aJarfile, aFinalFile, aTempFile, aReturn); } \ extern nsresult NS_InitInstallClass(nsIScriptContext *aContext, void **aPrototype); Loading
xpinstall/src/makefile.win +3 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,9 @@ OBJS = \ .\$(OBJDIR)\nsSoftwareUpdateStream.obj \ .\$(OBJDIR)\nsInstallErrorMessages.obj \ .\$(OBJDIR)\nsInstallFile.obj \ .\$(OBJDIR)\nsInstallDelete.obj \ .\$(OBJDIR)\nsInstallExecute.obj \ .\$(OBJDIR)\nsInstallPatch.obj \ $(NULL) include <$(DEPTH)\config\rules.mak> Loading
xpinstall/src/nsInstall.cpp +319 −25 Original line number Diff line number Diff line Loading @@ -24,12 +24,16 @@ #include "nsIDOMInstallVersion.h" #include "nsInstallFile.h" #include "nsInstallDelete.h" #include "nsInstallExecute.h" #include "nscore.h" #include "nsIFactory.h" #include "nsISupports.h" #include "nsVector.h" #include "nsHashtable.h" #include "prmem.h" #include "pratom.h" Loading @@ -41,6 +45,7 @@ static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); static NS_DEFINE_IID(kIInstall_IID, NS_IDOMINSTALL_IID); static NS_DEFINE_IID(kIInstallFolder_IID, NS_IDOMINSTALLFOLDER_IID); Loading Loading @@ -145,18 +150,182 @@ nsInstall::GetRegPackageName(nsString& aRegPackageName) NS_IMETHODIMP nsInstall::AbortInstall() { return NS_OK; nsInstallObject* ie; if (mInstalledFiles != nsnull) { PRUint32 i=0; for (i=0; i < mInstalledFiles->GetSize(); i++) { ie = (nsInstallObject *)mInstalledFiles->Get(i); if (ie == nsnull) continue; ie->Abort(); } } CleanUp(); return NS_OK; } //FIX: Should we use empty strings or nulls for parameters that do not need values. NS_IMETHODIMP nsInstall::AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn) { nsInstallFile* ie = nsnull; PRInt32 result; if ( aJarSource == "null" || aFolder == nsnull) { *aReturn = SaveError(nsIDOMInstall::SUERR_INVALID_ARGUMENTS); return NS_OK; } result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsString* qualifiedRegName = nsnull; if ( aRegName == "" ) { // Default subName = location in jar file qualifiedRegName = GetQualifiedRegName( aJarSource ); } else { qualifiedRegName = GetQualifiedRegName( aRegName ); } if (qualifiedRegName == nsnull) { *aReturn = SaveError( SUERR_BAD_PACKAGE_NAME ); return NS_OK; } nsString subdirectory(aSubdir); if (subdirectory != "") { subdirectory.Append("/"); } PRBool bInstall; nsVector paths; result = ExtractDirEntries(aJarSource, &paths); PRInt32 pathsUpperBound = paths.GetUpperBound(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } for (int i=0; i< pathsUpperBound; i++) { nsInstallVersion* newVersion = new nsInstallVersion(); nsString *fullRegName = new nsString(*qualifiedRegName); fullRegName->Append("/"); fullRegName->Append(*(nsString *)paths[i]); char* fullRegNameCString = fullRegName->ToNewCString(); if ( (aForceMode == PR_FALSE) && (aVersion == "null") && (VR_ValidateComponent(fullRegNameCString) == 0)) { VERSION versionStruct; VR_GetVersion( fullRegNameCString, &versionStruct); //fix: when we have overloading! nsInstallVersion* oldVer = new nsInstallVersion(); oldVer->Init(versionStruct.major, versionStruct.minor, versionStruct.release, versionStruct.build); newVersion->Init(aVersion); PRInt32 areTheyEqual; newVersion->CompareTo(oldVer, &areTheyEqual); delete newVersion; bInstall = ( areTheyEqual > 0 ); if (oldVer) delete oldVer; } else { // file doesn't exist or "forced" install bInstall = PR_TRUE; } delete fullRegNameCString; if (bInstall) { nsString *newJarSource = new nsString(aJarSource); newJarSource->Append("/"); newJarSource->Append(*(nsString *)paths[i]); nsString* newSubDir; if (subdirectory != "") { newSubDir = new nsString(subdirectory); newSubDir->Append(*(nsString*)paths[i]); } else { newSubDir = new nsString(*(nsString*)paths[i]); } ie = new nsInstallFile( this, *fullRegName, newVersion, *newJarSource, aFolder, *newSubDir, aForceMode, &result); delete fullRegName; delete newJarSource; delete newSubDir; delete newVersion; if (result == SU_SUCCESS) { result = ScheduleForInstall( ie ); } else { delete ie; } } } if (qualifiedRegName != nsnull) delete qualifiedRegName; *aReturn = SaveError( result ); return NS_OK; } NS_IMETHODIMP nsInstall::AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, Loading @@ -164,13 +333,14 @@ nsInstall::AddSubcomponent(const nsString& aRegName, PRInt32* aReturn) { nsInstallFile* ie; nsString* qualifiedRegName; nsString* qualifiedRegName = nsnull; PRInt32 errcode = SU_SUCCESS; if ( aJarSource == "null" || aFolder == nsnull) { return nsIDOMInstall::SUERR_INVALID_ARGUMENTS; *aReturn = SaveError( nsIDOMInstall::SUERR_INVALID_ARGUMENTS ); return NS_OK; } PRInt32 result = SanityCheck(); Loading Loading @@ -200,10 +370,13 @@ nsInstall::AddSubcomponent(const nsString& aRegName, /* Check for existence of the newer version */ nsInstallVersion *newVersion = new nsInstallVersion(); newVersion->Init(aVersion); PRBool versionNewer = PR_FALSE; char* qualifiedRegNameString = qualifiedRegName->ToNewCString(); if ( (aForceMode == PR_FALSE ) && (aVersion != nsnull) && ( VR_ValidateComponent( qualifiedRegNameString ) == 0 ) ) if ( (aForceMode == PR_FALSE ) && (aVersion != "null") && ( VR_ValidateComponent( qualifiedRegNameString ) == 0 ) ) { VERSION versionStruct; Loading @@ -217,7 +390,7 @@ nsInstall::AddSubcomponent(const nsString& aRegName, versionStruct.build); PRInt32 areTheyEqual; aVersion->CompareTo((nsInstallVersion*)oldVersion, &areTheyEqual); newVersion->CompareTo((nsInstallVersion*)oldVersion, &areTheyEqual); if ( areTheyEqual != nsIDOMInstallVersion::SU_EQUAL ) versionNewer = PR_TRUE; Loading @@ -236,41 +409,93 @@ nsInstall::AddSubcomponent(const nsString& aRegName, if (versionNewer) { PRInt32 error; ie = new nsInstallFile( this, *qualifiedRegName, aVersion, newVersion, aJarSource, aFolder, aTargetName, aForceMode, &error ); &errcode ); if (error == SU_SUCCESS) if (errcode == SU_SUCCESS) { error = ScheduleForInstall( ie ); errcode = ScheduleForInstall( ie ); } if (error != SU_SUCCESS) else { *aReturn = SaveError( error ); return NS_OK; delete ie; } } if (qualifiedRegName != nsnull) delete qualifiedRegName; if (newVersion != nsnull) delete newVersion; *aReturn = SaveError( errcode ); return NS_OK; } NS_IMETHODIMP nsInstall::DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn) { PRInt32 result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsString* qualifiedRegName = GetQualifiedRegName( aRegistryName); if (qualifiedRegName == nsnull) { *aReturn = SaveError( SUERR_BAD_PACKAGE_NAME ); return NS_OK; } nsInstallDelete* id = new nsInstallDelete(this, NULL, *qualifiedRegName, &result); if (result == SU_SUCCESS) { result = ScheduleForInstall( id ); } delete qualifiedRegName; *aReturn = SaveError(result); return NS_OK; } NS_IMETHODIMP nsInstall::DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn) { PRInt32 result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsInstallDelete* id = new nsInstallDelete(this, aFolder, aRelativeFileName, &result); if (result == SU_SUCCESS) { result = ScheduleForInstall( id ); } if (result == SUERR_FILE_DOES_NOT_EXIST) { result = SU_SUCCESS; } *aReturn = SaveError(result); return NS_OK; } Loading @@ -283,6 +508,22 @@ nsInstall::DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn) NS_IMETHODIMP nsInstall::Execute(const nsString& aJarSource, const nsString& aArgs, PRInt32* aReturn) { PRInt32 result = SanityCheck(); if (result != nsIDOMInstall::SU_SUCCESS) { *aReturn = SaveError( result ); return NS_OK; } nsInstallExecute* ie = new nsInstallExecute(this, aJarSource, aArgs, &result); if (result == SU_SUCCESS) { result = ScheduleForInstall( ie ); } *aReturn = SaveError(result); return NS_OK; } Loading Loading @@ -348,24 +589,41 @@ nsInstall::FinalizeInstall(PRInt32* aReturn) NS_IMETHODIMP nsInstall::Gestalt(const nsString& aSelector, PRInt32* aReturn) { *aReturn = nsnull; return NS_OK; } NS_IMETHODIMP nsInstall::GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder) { *aFolder = nsnull; return NS_OK; } NS_IMETHODIMP nsInstall::GetFolder(nsIDOMInstallFolder* targetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder) nsInstall::GetFolder(const nsString& targetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder) { nsInstallFolder* spec = nsnull; *aFolder = nsnull; // FIX: What was this for? if ((! targetFolder.EqualsIgnoreCase("Installed")) && (! targetFolder.EqualsIgnoreCase("file:///")) ) { spec = new nsInstallFolder(); spec->Init(targetFolder, aSubdirectory, mUserPackageName); } nsresult result = spec->QueryInterface(kIInstallFolder_IID, (void**)aFolder); if (result != NS_OK) *aFolder = nsnull; return NS_OK; } NS_IMETHODIMP nsInstall::GetLastError(PRInt32* aReturn) { *aReturn = mLastError; return NS_OK; } Loading Loading @@ -458,9 +716,10 @@ nsInstall::StartInstall(const nsString& aUserPackageName, const nsString& aPacka delete mVersionInfo; mVersionInfo = new nsInstallVersion(); mVersionInfo->Init(aVersion); /* this will go away when we have params in constructs in XPCOM */ mVersionInfo->Init(aVersion); mInstalledFiles = new nsVector(); mPatchList = new nsHashtable(); /* this function should also check security!!! */ *aReturn = OpenJARFile(); Loading Loading @@ -515,12 +774,34 @@ nsInstall::Uninstall(const nsString& aPackageName, PRInt32* aReturn) return NS_OK; } NS_IMETHODIMP //////////////////////////////////////// PRInt32 nsInstall::ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* error) { *error = SU_SUCCESS; return NS_OK; } void nsInstall::AddPatch(nsHashKey *aKey, nsString* fileName) { if (mPatchList != nsnull) { mPatchList->Put(aKey, fileName); } } void nsInstall::GetPatch(nsHashKey *aKey, nsString* fileName) { if (mPatchList != nsnull) { fileName = (nsString*) mPatchList->Get(aKey); } } ///////////////////////////////////////////////////////////////////////// // Private Methods ///////////////////////////////////////////////////////////////////////// Loading Loading @@ -673,7 +954,7 @@ nsInstall::GetQualifiedRegName(const nsString& name ) if (mUserPackageName != "") { qualifiedRegName = new nsString(mUserPackageName); qualifiedRegName += '/'; qualifiedRegName->Append("/"); qualifiedRegName->Append(name); } else Loading Loading @@ -790,6 +1071,12 @@ nsInstall::CleanUp(void) mInstalledFiles = nsnull; } if (mPatchList) { // do I need to delete every entry? delete mPatchList; } mPackageName = ""; // used to see if StartInstall() has been called //CloseProgressDialog(); Loading @@ -805,6 +1092,13 @@ void nsInstall::CloseJARFile(void) { } PRInt32 nsInstall::ExtractDirEntries(const nsString& directory, nsVector *paths) { return SU_SUCCESS; } ///////////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////////// Loading
xpinstall/src/nsInstall.h +13 −6 Original line number Diff line number Diff line Loading @@ -8,15 +8,17 @@ #include "nsIScriptObjectOwner.h" #include "nsVector.h" #include "nsHashtable.h" #include "nsIDOMInstall.h" #include "nsInstallObject.h" #include "nsSoftwareUpdate.h" #include "nsInstallFolder.h" #include "nsInstallVersion.h" #include "nsInstallObject.h" class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall { public: Loading @@ -35,7 +37,7 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall NS_IMETHOD AbortInstall(); NS_IMETHOD AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn); NS_IMETHOD AddSubcomponent(const nsString& aRegName, nsIDOMInstallVersion* aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); NS_IMETHOD AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, nsIDOMInstallFolder* aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn); NS_IMETHOD DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn); NS_IMETHOD DeleteFile(nsIDOMInstallFolder* aFolder, const nsString& aRelativeFileName, PRInt32* aReturn); NS_IMETHOD DiskSpaceAvailable(nsIDOMInstallFolder* aFolder, PRInt32* aReturn); Loading @@ -43,7 +45,7 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall NS_IMETHOD FinalizeInstall(PRInt32* aReturn); NS_IMETHOD Gestalt(const nsString& aSelector, PRInt32* aReturn); NS_IMETHOD GetComponentFolder(const nsString& aRegName, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder); NS_IMETHOD GetFolder(nsIDOMInstallFolder* aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder); NS_IMETHOD GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsIDOMInstallFolder** aFolder); NS_IMETHOD GetLastError(PRInt32* aReturn); NS_IMETHOD GetWinProfile(nsIDOMInstallFolder* aFolder, const nsString& aFile, PRInt32* aReturn); NS_IMETHOD GetWinRegistry(PRInt32* aReturn); Loading @@ -54,9 +56,10 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall NS_IMETHOD Uninstall(const nsString& aPackageName, PRInt32* aReturn); /*needs to be noscript*/ NS_IMETHOD ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aError); PRInt32 ExtractFileFromJar(const nsString& aJarfile, const nsString& aFinalFile, nsString& aTempFile, PRInt32* aError); void AddPatch(nsHashKey *aKey, nsString* fileName); void GetPatch(nsHashKey *aKey, nsString* fileName); private: void *mScriptObject; Loading @@ -72,7 +75,9 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall nsInstallVersion* mVersionInfo; /* Component version info */ nsInstallFolder* mPackageFolder; nsVector* mInstalledFiles; nsHashtable* mPatchList; PRInt32 mLastError; Loading @@ -89,9 +94,11 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall PRInt32 OpenJARFile(void); void CloseJARFile(void); PRInt32 ExtractDirEntries(const nsString& directory, nsVector *paths); PRInt32 ScheduleForInstall(nsInstallObject* ob); }; Loading