From d67bf77f017f57eab465d1519b03d6f95499c2c6 Mon Sep 17 00:00:00 2001 From: "dougt%netscape.com" Date: Thu, 16 Sep 1999 20:15:58 +0000 Subject: [PATCH] Fixed bug 13835. InstallTrigger.GetVersion() --- xpinstall/public/idl/InstallTrigger.idl | 1 + xpinstall/public/nsIDOMInstallTriggerGlobal.h | 6 ++- xpinstall/src/nsInstallTrigger.cpp | 37 +++++++++++++++++++ xpinstall/src/nsInstallTrigger.h | 1 + xpinstall/src/nsJSInstallTriggerGlobal.cpp | 32 ++++++++++++++++ 5 files changed, 76 insertions(+), 1 deletion(-) diff --git a/xpinstall/public/idl/InstallTrigger.idl b/xpinstall/public/idl/InstallTrigger.idl index e64f0b07248d..f8b46a795c34 100644 --- a/xpinstall/public/idl/InstallTrigger.idl +++ b/xpinstall/public/idl/InstallTrigger.idl @@ -23,4 +23,5 @@ interface InstallTriggerGlobal long CompareVersion( in wstring regName, in wstring version ); + wstring GetVersion( in wstring component ); }; \ No newline at end of file diff --git a/xpinstall/public/nsIDOMInstallTriggerGlobal.h b/xpinstall/public/nsIDOMInstallTriggerGlobal.h index e14297cbfd39..16557bbf1eb9 100644 --- a/xpinstall/public/nsIDOMInstallTriggerGlobal.h +++ b/xpinstall/public/nsIDOMInstallTriggerGlobal.h @@ -15,7 +15,6 @@ * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ -/* AUTO-GENERATED. DO NOT EDIT!!! */ #ifndef nsIDOMInstallTriggerGlobal_h__ #define nsIDOMInstallTriggerGlobal_h__ @@ -57,6 +56,9 @@ public: NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn)=0; NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn)=0; NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn)=0; + + NS_IMETHOD GetVersion(const nsString& component, nsString& version)=0; + }; @@ -74,6 +76,7 @@ public: NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn); \ NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn); \ NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn); \ + NS_IMETHOD GetVersion(const nsString& component, nsString& version); \ @@ -91,6 +94,7 @@ public: NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn) { return _to##CompareVersion(aRegName, aMajor, aMinor, aRelease, aBuild, aReturn); } \ NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn) { return _to##CompareVersion(aRegName, aVersion, aReturn); } \ NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn) { return _to##CompareVersion(aRegName, aVersion, aReturn); } \ + NS_IMETHOD GetVersion(const nsString& component, nsString& version); { return _to##GetVersion(component, version); } \ extern nsresult NS_InitInstallTriggerGlobalClass(nsIScriptContext *aContext, void **aPrototype); diff --git a/xpinstall/src/nsInstallTrigger.cpp b/xpinstall/src/nsInstallTrigger.cpp index 436426b13efa..871babd9f578 100644 --- a/xpinstall/src/nsInstallTrigger.cpp +++ b/xpinstall/src/nsInstallTrigger.cpp @@ -395,6 +395,43 @@ nsInstallTrigger::CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* return NS_OK; } +NS_IMETHODIMP +nsInstallTrigger::GetVersion(const nsString& component, nsString& version) +{ + PRBool enabled; + + UpdateEnabled(&enabled); + if (!enabled) + return NS_OK; + + VERSION cVersion; + char* tempCString; + REGERR status; + + tempCString = component.ToNewCString(); + + status = VR_GetVersion( tempCString, &cVersion ); + + version.SetString(""); + + /* if we got the version */ + if ( status == REGERR_OK && VR_ValidateComponent( tempCString ) == REGERR_OK) + { + nsInstallVersion regNameVersion; + + regNameVersion.Init(cVersion.major, + cVersion.minor, + cVersion.release, + cVersion.build); + + regNameVersion.ToString(version); + } + + if (tempCString) + delete [] tempCString; + + return NS_OK; +} // this will take a nsIURI, and create a temporary file. If it is local, we just us it. diff --git a/xpinstall/src/nsInstallTrigger.h b/xpinstall/src/nsInstallTrigger.h index f7609150a274..6d301bbed44b 100644 --- a/xpinstall/src/nsInstallTrigger.h +++ b/xpinstall/src/nsInstallTrigger.h @@ -42,6 +42,7 @@ class nsInstallTrigger: public nsIScriptObjectOwner, public nsIDOMInstallTrigger NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn); NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn); NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn); + NS_IMETHOD GetVersion(const nsString& component, nsString& version); private: diff --git a/xpinstall/src/nsJSInstallTriggerGlobal.cpp b/xpinstall/src/nsJSInstallTriggerGlobal.cpp index 2f7d33cf3c18..f8996f142eeb 100644 --- a/xpinstall/src/nsJSInstallTriggerGlobal.cpp +++ b/xpinstall/src/nsJSInstallTriggerGlobal.cpp @@ -488,6 +488,37 @@ InstallTriggerGlobalCompareVersion(JSContext *cx, JSObject *obj, uintN argc, jsv return JS_TRUE; } +// +// Native method GetVersion +// +PR_STATIC_CALLBACK(JSBool) +InstallTriggerGlobalGetVersion(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMInstallTriggerGlobal *nativeThis = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj); + + nsAutoString regname; + nsAutoString version; + + *rval = JSVAL_NULL; + + if (nsnull == nativeThis && (JS_FALSE == CreateNativeObject(cx, obj, &nativeThis)) ) + return JS_FALSE; + + // get the registry name argument + ConvertJSValToStr(regname, cx, argv[0]); + + if(NS_OK != nativeThis->GetVersion(regname, version)) + { + return JS_FALSE; + } + + if(version.Equals("")) + *rval = JSVAL_NULL; + else + ConvertStrToJSVal(version, cx, rval); + + return JS_TRUE; +} /***********************************************************************/ // @@ -516,6 +547,7 @@ static JSFunctionSpec InstallTriggerGlobalMethods[] = {"StartSoftwareUpdate", InstallTriggerGlobalStartSoftwareUpdate, 2}, {"ConditionalSoftwareUpdate", InstallTriggerGlobalConditionalSoftwareUpdate, 5}, {"CompareVersion", InstallTriggerGlobalCompareVersion, 5}, + {"GetVersion", InstallTriggerGlobalGetVersion, 2}, {0} };