From e31137e2e7a6df2190f35d43dbb1ba60666651e7 Mon Sep 17 00:00:00 2001 From: "Olli.Pettay%helsinki.fi" Date: Wed, 19 Oct 2005 20:55:53 +0000 Subject: [PATCH] Bug 305763, Application control models (support for JS), r=aaronr+allan git-svn-id: svn://10.0.0.236/trunk@182546 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xforms/nsXFormsElementFactory.cpp | 34 +++++++++++++++++-- .../xforms/nsXFormsElementFactory.h | 2 ++ mozilla/extensions/xforms/nsXFormsModule.cpp | 10 ++++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/mozilla/extensions/xforms/nsXFormsElementFactory.cpp b/mozilla/extensions/xforms/nsXFormsElementFactory.cpp index d94fe36f131..899bb574896 100644 --- a/mozilla/extensions/xforms/nsXFormsElementFactory.cpp +++ b/mozilla/extensions/xforms/nsXFormsElementFactory.cpp @@ -41,6 +41,10 @@ #include "nsXFormsInstanceElement.h" #include "nsXFormsSubmissionElement.h" #include "nsXFormsStubElement.h" +#include "nsIDOMDocument.h" +#include "nsXFormsAtoms.h" +#include "nsIDocument.h" +#include "nsIDOMNode.h" #include "nsString.h" // Form controls @@ -195,8 +199,10 @@ nsXFormsElementFactory::HasFeature(nsISupports *aObject, const nsAString& aVersion, PRBool *aReturn) { - *aReturn = aFeature.EqualsLiteral("org.w3c.xforms.dom") && - aVersion.EqualsLiteral("1.0"); + *aReturn = (aFeature.EqualsLiteral("org.w3c.xforms.dom") && + aVersion.EqualsLiteral("1.0")) || + (aFeature.EqualsLiteral(NS_XFORMS_INSTANCE_OWNER) && + aVersion.EqualsLiteral("1.0")); return NS_OK; } @@ -206,5 +212,29 @@ nsXFormsElementFactory::GetFeature(nsISupports *aObject, const nsAString & aVersion, nsISupports **aReturn) { + *aReturn = nsnull; + if (aFeature.EqualsLiteral(NS_XFORMS_INSTANCE_OWNER) && + aVersion.EqualsLiteral("1.0")) { + nsCOMPtr node(do_QueryInterface(aObject)); + NS_ENSURE_STATE(node); + + nsCOMPtr domDoc; + node->GetOwnerDocument(getter_AddRefs(domDoc)); + if (!domDoc) { + // if node is nsIDOMDocument the ownerDocument is null. + domDoc = do_QueryInterface(node); + } + NS_ENSURE_STATE(domDoc); + + nsCOMPtr doc(do_QueryInterface(domDoc)); + NS_ENSURE_STATE(doc); + + nsISupports* owner = + NS_STATIC_CAST(nsISupports*, + doc->GetProperty(nsXFormsAtoms::instanceDocumentOwner)); + NS_IF_ADDREF(*aReturn = owner); + return NS_OK; + } + return NS_ERROR_NOT_AVAILABLE; } diff --git a/mozilla/extensions/xforms/nsXFormsElementFactory.h b/mozilla/extensions/xforms/nsXFormsElementFactory.h index a55a69204d3..c2669e908b3 100644 --- a/mozilla/extensions/xforms/nsXFormsElementFactory.h +++ b/mozilla/extensions/xforms/nsXFormsElementFactory.h @@ -39,6 +39,8 @@ #include "nsIXTFElementFactory.h" #include "nsIDOMNSFeatureFactory.h" +#define NS_XFORMS_INSTANCE_OWNER "org.mozilla.xforms.instanceOwner" + #define NS_XFORMSELEMENTFACTORY_CID \ {0xc068f682, 0x03b5, 0x4e96, {0x81, 0xe1, 0x60, 0x13, 0xf9, 0x12, 0x88, 0xb2}} diff --git a/mozilla/extensions/xforms/nsXFormsModule.cpp b/mozilla/extensions/xforms/nsXFormsModule.cpp index d024c933783..f403e825d17 100644 --- a/mozilla/extensions/xforms/nsXFormsModule.cpp +++ b/mozilla/extensions/xforms/nsXFormsModule.cpp @@ -74,6 +74,13 @@ RegisterXFormsModule(nsIComponentManager *aCompMgr, PR_TRUE, PR_TRUE, getter_Copies(previous)); NS_ENSURE_SUCCESS(rv, rv); + rv = + catman->AddCategoryEntry(NS_DOMNS_FEATURE_PREFIX NS_XFORMS_INSTANCE_OWNER, + "1.0", + NS_XTF_ELEMENT_FACTORY_CONTRACTID_PREFIX NS_NAMESPACE_XFORMS, + PR_TRUE, PR_TRUE, getter_Copies(previous)); + NS_ENSURE_SUCCESS(rv, rv); + return catman->AddCategoryEntry("agent-style-sheets", "xforms stylesheet", "chrome://xforms/content/xforms.css", @@ -95,6 +102,9 @@ UnregisterXFormsModule(nsIComponentManager *aCompMgr, catman->DeleteCategoryEntry(NS_DOMNS_FEATURE_PREFIX "org.w3c.xforms.dom", "1.0", PR_TRUE); + catman->DeleteCategoryEntry(NS_DOMNS_FEATURE_PREFIX NS_XFORMS_INSTANCE_OWNER, + "1.0", PR_TRUE); + return catman->DeleteCategoryEntry("agent-style-sheets", "xforms stylesheet", PR_TRUE); }