diff --git a/content/xslt/src/xpath/txXPCOMExtensionFunction.cpp b/content/xslt/src/xpath/txXPCOMExtensionFunction.cpp index f590e72af2d4..83e182e80732 100644 --- a/content/xslt/src/xpath/txXPCOMExtensionFunction.cpp +++ b/content/xslt/src/xpath/txXPCOMExtensionFunction.cpp @@ -191,13 +191,10 @@ private: static nsresult LookupFunction(const char *aContractID, nsIAtom* aName, nsIID &aIID, - PRUint16 &aMethodIndex, nsISupports **aHelper) + PRUint16 &aMethodIndex) { nsresult rv; - nsCOMPtr helper = do_GetService(aContractID, &rv); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr classInfo = do_QueryInterface(helper, &rv); + nsCOMPtr classInfo = do_GetClassObject(aContractID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr iim = @@ -255,7 +252,8 @@ LookupFunction(const char *aContractID, nsIAtom* aName, nsIID &aIID, aIID = *iid; aMethodIndex = methodIndex; - return helper->QueryInterface(aIID, (void**)aHelper); + + return NS_OK; } } @@ -270,10 +268,11 @@ TX_ResolveFunctionCallXPCOM(const nsCString &aContractID, PRInt32 aNamespaceID, { nsIID iid; PRUint16 methodIndex; - nsCOMPtr helper; + nsresult rv = LookupFunction(aContractID.get(), aName, iid, methodIndex); + NS_ENSURE_SUCCESS(rv, rv); - nsresult rv = LookupFunction(aContractID.get(), aName, iid, methodIndex, - getter_AddRefs(helper)); + nsCOMPtr helper; + rv = CallGetService(aContractID.get(), iid, getter_AddRefs(helper)); NS_ENSURE_SUCCESS(rv, rv); if (!aFunction) { diff --git a/content/xslt/src/xslt/txEXSLTRegExFunctions.js b/content/xslt/src/xslt/txEXSLTRegExFunctions.js index bb3dfb9a087a..a6620e1cd51a 100644 --- a/content/xslt/src/xslt/txEXSLTRegExFunctions.js +++ b/content/xslt/src/xslt/txEXSLTRegExFunctions.js @@ -50,31 +50,22 @@ function txEXSLTRegExFunctions() { } +var SingletonInstance = null; + txEXSLTRegExFunctions.prototype = { - classID: EXSLT_REGEXP_CID, + classID: Components.ID("{18a03189-067b-4978-b4f1-bafe35292ed6}"), - QueryInterface: XPCOMUtils.generateQI([Ci.txIEXSLTRegExFunctions, - Ci.nsIClassInfo]), + QueryInterface: function(iid) { + if (iid.equals(Ci.nsISupports) || + iid.equals(Ci.txIEXSLTRegExFunctions)) + return this; - // nsIClassInfo - getInterfaces: function(countRef) { - var interfaces = [ - Ci.txIEXSLTRegExFunctions - ]; - countRef.value = interfaces.length; + if (iid.equals(Ci.nsIClassInfo)) + return txEXSLTRegExModule.factory - return interfaces; + throw Components.results.NS_ERROR_NO_INTERFACE; }, - getHelperForLanguage: function(language) { - return null; - }, - - implementationLanguage: Ci.nsIProgrammingLanguage.JAVASCRIPT, - flags: 0, - - - // txIEXSLTRegExFunctions match: function(context, str, regex, flags) { var nodeset = Components.classes[NODESET_CONTRACTID] .createInstance(Ci.txINodeSet); @@ -110,6 +101,38 @@ txEXSLTRegExFunctions.prototype = { var re = new RegExp(regex, flags); return re.test(str); + }, + + _xpcom_factory: { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory, + Ci.nsIClassInfo]), + + createInstance: function(outer, iid) { + if (outer != null) + throw Components.results.NS_ERROR_NO_AGGREGATION; + + if (SingletonInstance == null) + SingletonInstance = new txEXSLTRegExFunctions(); + + return SingletonInstance.QueryInterface(iid); + }, + + getInterfaces: function(countRef) { + var interfaces = [ + Ci.txIEXSLTRegExFunctions + ]; + countRef.value = interfaces.length; + + return interfaces; + }, + + getHelperForLanguage: function(language) { + return null; + }, + + classID: EXSLT_REGEXP_CID, + implementationLanguage: Ci.nsIProgrammingLanguage.JAVASCRIPT, + flags: Ci.nsIClassInfo.SINGLETON } } diff --git a/content/xslt/tests/mochitest/Makefile.in b/content/xslt/tests/mochitest/Makefile.in index bdb067c6f7e2..26cc770bd6a5 100644 --- a/content/xslt/tests/mochitest/Makefile.in +++ b/content/xslt/tests/mochitest/Makefile.in @@ -52,7 +52,6 @@ _TEST_FILES = test_bug319374.xhtml \ test_bug511487.html \ test_bug551412.html \ test_bug551654.html \ - test_exslt_regex.html \ $(NULL) libs:: $(_TEST_FILES) diff --git a/content/xslt/tests/mochitest/test_exslt_regex.html b/content/xslt/tests/mochitest/test_exslt_regex.html deleted file mode 100644 index 25056f3b1bea..000000000000 --- a/content/xslt/tests/mochitest/test_exslt_regex.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Test for EXSLT Regular Expression Extensions - - - - - -

- -
-
-
- -