mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 18:55:30 +00:00
Fix for bug 303522 (cvs diff content/base/src/nsDocument.cpp! Object's nsIClassInfo lies about it's interfacescvs diff content/base/src/nsDocument.cpp! classname: HTMLDocument unimplemented interface name: nsIDOMXPathEvaluator). r/sr=jst.
This commit is contained in:
parent
a7e445b38f
commit
634525a4d1
@ -136,6 +136,7 @@ static NS_DEFINE_CID(kDOMEventGroupCID, NS_DOMEVENTGROUP_CID);
|
||||
|
||||
#include "nsDateTimeFormatCID.h"
|
||||
#include "nsIDateTimeFormat.h"
|
||||
#include "nsIComponentRegistrar.h"
|
||||
|
||||
static NS_DEFINE_CID(kCharsetAliasCID, NS_CHARSETALIAS_CID);
|
||||
static NS_DEFINE_CID(kDateTimeFormatCID, NS_DATETIMEFORMAT_CID);
|
||||
@ -827,23 +828,32 @@ NS_INTERFACE_MAP_BEGIN(nsDocument)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIRadioGroupContainer)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocument)
|
||||
if (aIID.Equals(NS_GET_IID(nsIDOMXPathEvaluator)) &&
|
||||
(!gCheckedForXPathDOM || gHaveXPathDOM)) {
|
||||
if (aIID.Equals(NS_GET_IID(nsIDOMXPathEvaluator))) {
|
||||
nsresult rv;
|
||||
if (!gCheckedForXPathDOM) {
|
||||
nsCOMPtr<nsIComponentRegistrar> cr;
|
||||
rv = NS_GetComponentRegistrar(getter_AddRefs(cr));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
gCheckedForXPathDOM = PR_TRUE;
|
||||
|
||||
cr->IsContractIDRegistered(NS_XPATH_EVALUATOR_CONTRACTID,
|
||||
&gHaveXPathDOM);
|
||||
}
|
||||
|
||||
if (!gHaveXPathDOM) {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
if (!mXPathDocument) {
|
||||
nsCOMPtr<nsIDOMXPathEvaluator> evaluator;
|
||||
nsresult rv;
|
||||
evaluator = do_CreateInstance(NS_XPATH_EVALUATOR_CONTRACTID, &rv);
|
||||
gCheckedForXPathDOM = PR_TRUE;
|
||||
gHaveXPathDOM = (evaluator != nsnull);
|
||||
if (rv == NS_ERROR_FACTORY_NOT_REGISTERED) {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIXPathEvaluatorInternal> internal =
|
||||
do_QueryInterface(evaluator);
|
||||
if (internal) {
|
||||
internal->SetDocument(this);
|
||||
internal->SetDocument(this);
|
||||
}
|
||||
|
||||
mXPathDocument = new nsXPathDocumentTearoff(evaluator, this);
|
||||
|
Loading…
Reference in New Issue
Block a user