Getting closer to milestone 2. More additions to the functionality of

xpinstall.

This is not part of the build process yet.
This commit is contained in:
dougt%netscape.com 1999-02-22 23:10:23 +00:00
Родитель 2c0336ef71
Коммит 9b13163cbb
12 изменённых файлов: 376 добавлений и 133 удалений

Просмотреть файл

@ -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,
@ -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();
@ -110,7 +110,4 @@ interface Install
long Uninstall( in wstring packageName);
long ExtractFileFromJar(in wstring jarfile, in wstring finalFile, out wstring tempFile);
};

Просмотреть файл

@ -25,7 +25,6 @@
#include "nsIScriptContext.h"
class nsIDOMInstallFolder;
class nsIDOMInstallVersion;
#define NS_IDOMINSTALL_IID \
{ 0x18c2f988, 0xb09f, 0x11d2, \
@ -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;
@ -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;
@ -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;
};
@ -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); \
@ -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); \
@ -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); \
@ -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); } \
@ -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); } \
@ -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);

Просмотреть файл

@ -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>

Просмотреть файл

@ -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"
@ -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);
@ -145,18 +150,182 @@ nsInstall::GetRegPackageName(nsString& aRegPackageName)
NS_IMETHODIMP
nsInstall::AbortInstall()
{
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,
@ -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();
@ -199,11 +369,14 @@ 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;
@ -217,12 +390,12 @@ 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;
if( oldVersion )
if ( oldVersion )
delete oldVersion;
}
else
@ -236,42 +409,94 @@ 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)
{
return NS_OK;
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;
}
NS_IMETHODIMP
@ -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;
}
@ -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)
{
return NS_OK;
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;
}
@ -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();
@ -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
/////////////////////////////////////////////////////////////////////////
@ -673,7 +954,7 @@ nsInstall::GetQualifiedRegName(const nsString& name )
if (mUserPackageName != "")
{
qualifiedRegName = new nsString(mUserPackageName);
qualifiedRegName += '/';
qualifiedRegName->Append("/");
qualifiedRegName->Append(name);
}
else
@ -789,6 +1070,12 @@ nsInstall::CleanUp(void)
delete (mInstalledFiles);
mInstalledFiles = nsnull;
}
if (mPatchList)
{
// do I need to delete every entry?
delete mPatchList;
}
mPackageName = ""; // used to see if StartInstall() has been called
@ -805,6 +1092,13 @@ void
nsInstall::CloseJARFile(void)
{
}
PRInt32
nsInstall::ExtractDirEntries(const nsString& directory, nsVector *paths)
{
return SU_SUCCESS;
}
/////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////

Просмотреть файл

@ -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:
@ -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);
@ -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);
@ -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;
@ -72,7 +75,9 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall
nsInstallVersion* mVersionInfo; /* Component version info */
nsInstallFolder* mPackageFolder;
nsVector* mInstalledFiles;
nsHashtable* mPatchList;
PRInt32 mLastError;
@ -89,8 +94,10 @@ class nsInstall: public nsIScriptObjectOwner, public nsIDOMInstall
PRInt32 OpenJARFile(void);
void CloseJARFile(void);
PRInt32 ExtractDirEntries(const nsString& directory, nsVector *paths);
PRInt32 ScheduleForInstall(nsInstallObject* ob);
PRInt32 ScheduleForInstall(nsInstallObject* ob);
};

Просмотреть файл

@ -30,7 +30,7 @@
#include "VerReg.h"
#include "nsInstallFile.h"
#include "nsIDOMInstall.h"
#include "nsInstall.h"
#include "nsIDOMInstallFolder.h"
#include "nsIDOMInstallVersion.h"
@ -60,7 +60,7 @@ static PRBool endsWith(nsString* str, char* string_to_find)
inJarLocation - location inside the JAR file
inFinalFileSpec - final location on disk
*/
nsInstallFile::nsInstallFile(nsIDOMInstall* inInstall,
nsInstallFile::nsInstallFile(nsInstall* inInstall,
const nsString& inVRName,
nsIDOMInstallVersion* inVInfo,
const nsString& inJarLocation,
@ -135,8 +135,6 @@ nsInstallFile::~nsInstallFile()
*/
PRInt32 nsInstallFile::Prepare()
{
char *errorMsg = NULL;
if (mInstall == NULL || mFinalFile == NULL || mJarLocation == NULL)
return nsIDOMInstall::SUERR_INVALID_ARGUMENTS;
@ -153,7 +151,7 @@ PRInt32 nsInstallFile::Prepare()
*/
PRInt32 nsInstallFile::Complete()
{
int err;
PRInt32 err;
int refCount;
int rc;
@ -226,6 +224,8 @@ PRInt32 nsInstallFile::Complete()
{
refCount = 0;
}
//FIX need to delete char* created by .ToNewCString(). There should be 5 of them. mcmullen told me that
// he was working on a nsAutoString that would do this.
if (!mUpgradeFile)
{
@ -234,7 +234,7 @@ PRInt32 nsInstallFile::Complete()
rc = 1 + refCount;
nsString tempString;
mVersionInfo->ToString(tempString);
VR_Install( vr_name, final_file, (char*)(PRUnichar*) tempString, PR_FALSE );
VR_Install( vr_name, final_file, tempString.ToNewCString(), PR_FALSE );
VR_SetRefCount( vr_name, rc );
}
else
@ -243,14 +243,14 @@ PRInt32 nsInstallFile::Complete()
{
nsString tempString;
mVersionInfo->ToString(tempString);
VR_Install( vr_name, final_file, (char*)(PRUnichar*) tempString, PR_FALSE);
VR_Install( vr_name, final_file, tempString.ToNewCString(), PR_FALSE);
VR_SetRefCount( vr_name, 2 );
}
else
{
nsString tempString;
mVersionInfo->ToString(tempString);
VR_Install( vr_name, final_file, (char*)(PRUnichar*) tempString, PR_FALSE );
VR_Install( vr_name, final_file, tempString.ToNewCString(), PR_FALSE );
VR_SetRefCount( vr_name, 1 );
}
}
@ -261,14 +261,14 @@ PRInt32 nsInstallFile::Complete()
{
nsString tempString;
mVersionInfo->ToString(tempString);
VR_Install( vr_name, final_file, (char*)(PRUnichar*) tempString, PR_FALSE );
VR_Install( vr_name, final_file, tempString.ToNewCString(), PR_FALSE );
VR_SetRefCount( vr_name, 1 );
}
else
{
nsString tempString;
mVersionInfo->ToString(tempString);
VR_Install( vr_name, final_file, (char*)(PRUnichar*) tempString, PR_FALSE );
VR_Install( vr_name, final_file, tempString.ToNewCString(), PR_FALSE );
VR_SetRefCount( vr_name, 0 );
}
}

Просмотреть файл

@ -24,7 +24,7 @@
#include "nsInstallObject.h"
#include "nsIDOMInstall.h"
#include "nsInstall.h"
#include "nsIDOMInstallFolder.h"
#include "nsIDOMInstallVersion.h"
@ -43,7 +43,7 @@ class nsInstallFile : public nsInstallObject
* inJarLocation - location inside the JAR file
* inFinalFileSpec - final location on disk
*************************************************************/
nsInstallFile( nsIDOMInstall* inInstall,
nsInstallFile( nsInstall* inInstall,
const nsString& inVRName,
nsIDOMInstallVersion* inVInfo,
const nsString& inJarLocation,

Просмотреть файл

@ -124,7 +124,6 @@ nsInstallFolder::nsInstallFolder()
{
mScriptObject = nsnull;
char *errorMsg = NULL;
mUrlPath = mFolderID = mVersionRegistryPath = mUserPackageName = nsnull;
NS_INIT_REFCNT();
@ -233,12 +232,19 @@ NS_IMETHODIMP
nsInstallFolder::MakeFullPath(const nsString& aRelativePath, nsString& aFullPath)
{
nsString *tempString = GetNativePath(aRelativePath);
aFullPath.SetLength(0);
aFullPath.Append( *mUrlPath );
aFullPath.Append( *tempString );
if (mUrlPath != nsnull)
{
aFullPath.Append( *mUrlPath );
}
if (tempString)
if (tempString != nsnull)
{
aFullPath.Append( *tempString );
delete tempString;
}
return NS_OK;
}

Просмотреть файл

@ -20,13 +20,14 @@
#define nsInstallObject_h__
#include "prtypes.h"
#include "nsIDOMInstall.h"
class nsInstall;
class nsInstallObject
{
public:
/* Public Methods */
nsInstallObject(nsIDOMInstall* inInstall) {mInstall = inInstall; }
nsInstallObject(nsInstall* inInstall) {mInstall = inInstall; }
/* Override with your set-up action */
virtual PRInt32 Prepare() = 0;
@ -45,7 +46,7 @@ class nsInstallObject
virtual PRBool RegisterPackageNode() = 0;
protected:
nsIDOMInstall* mInstall;
nsInstall* mInstall;
};
#endif /* nsInstallObject_h__ */

Просмотреть файл

@ -28,7 +28,6 @@
#include "nsString.h"
#include "nsIDOMInstall.h"
#include "nsIDOMInstallFolder.h"
#include "nsIDOMInstallVersion.h"
#include "nsIScriptNameSpaceManager.h"
#include "nsRepository.h"
#include "nsDOMCID.h"
@ -39,11 +38,9 @@ static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID);
static NS_DEFINE_IID(kIScriptGlobalObjectIID, NS_ISCRIPTGLOBALOBJECT_IID);
static NS_DEFINE_IID(kIInstallIID, NS_IDOMINSTALL_IID);
static NS_DEFINE_IID(kIInstallFolderIID, NS_IDOMINSTALLFOLDER_IID);
static NS_DEFINE_IID(kIInstallVersionIID, NS_IDOMINSTALLVERSION_IID);
NS_DEF_PTR(nsIDOMInstall);
NS_DEF_PTR(nsIDOMInstallFolder);
NS_DEF_PTR(nsIDOMInstallVersion);
//
// Install property ids
@ -264,7 +261,7 @@ InstallAddSubcomponent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, js
JSBool rBool = JS_FALSE;
PRInt32 nativeRet;
nsAutoString b0;
nsIDOMInstallVersionPtr b1;
nsAutoString b1;
nsAutoString b2;
nsIDOMInstallFolderPtr b3;
nsAutoString b4;
@ -281,13 +278,7 @@ InstallAddSubcomponent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, js
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b1,
kIInstallVersionIID,
"InstallVersion",
cx,
argv[1])) {
return JS_FALSE;
}
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
nsJSUtils::nsConvertJSValToString(b2, cx, argv[2]);
@ -606,7 +597,7 @@ InstallGetFolder(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r
nsIDOMInstall *nativeThis = (nsIDOMInstall*)JS_GetPrivate(cx, obj);
JSBool rBool = JS_FALSE;
nsIDOMInstallFolder* nativeRet;
nsIDOMInstallFolderPtr b0;
nsAutoString b0;
nsAutoString b1;
*rval = JSVAL_NULL;
@ -618,13 +609,7 @@ InstallGetFolder(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r
if (argc >= 2) {
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
kIInstallFolderIID,
"InstallFolder",
cx,
argv[0])) {
return JS_FALSE;
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
@ -973,49 +958,6 @@ InstallUninstall(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r
}
//
// Native method ExtractFileFromJar
//
PR_STATIC_CALLBACK(JSBool)
InstallExtractFileFromJar(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMInstall *nativeThis = (nsIDOMInstall*)JS_GetPrivate(cx, obj);
JSBool rBool = JS_FALSE;
PRInt32 nativeRet;
nsAutoString b0;
nsAutoString b1;
nsAutoString b2;
*rval = JSVAL_NULL;
// If there's no private data, this must be the prototype, so ignore
if (nsnull == nativeThis) {
return JS_TRUE;
}
if (argc >= 3) {
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
nsJSUtils::nsConvertJSValToString(b2, cx, argv[2]);
if (NS_OK != nativeThis->ExtractFileFromJar(b0, b1, b2, &nativeRet)) {
return JS_FALSE;
}
*rval = INT_TO_JSVAL(nativeRet);
}
else {
JS_ReportError(cx, "Function ExtractFileFromJar requires 3 parameters");
return JS_FALSE;
}
return JS_TRUE;
}
/***********************************************************************/
//
// class for Install
@ -1069,7 +1011,6 @@ static JSFunctionSpec InstallMethods[] =
{"SetPackageFolder", InstallSetPackageFolder, 1},
{"StartInstall", InstallStartInstall, 4},
{"Uninstall", InstallUninstall, 1},
{"ExtractFileFromJar", InstallExtractFileFromJar, 3},
{0}
};

Просмотреть файл

@ -125,10 +125,9 @@ int RunInstallJS(char* installJSFile)
NS_RELEASE(scriptContextOwner);
}
}
aWindow->Close();
NS_RELEASE(aWindow);
}
aWindow->Release();
return 0;
}

Просмотреть файл

@ -157,7 +157,7 @@ nsSoftwareUpdateListener::OnDataAvailable(nsIURL* aURL, nsIInputStream *pIStream
if (err == NS_OK)
{
if( PR_Write(mOutFileDesc, buffer, len) == -1 )
if ( PR_Write(mOutFileDesc, buffer, len) == -1 )
{
/* Error */
return -1;