Bug 13970. Implement 'commandupdater=' attribute to hook up command udpater nodes to the XUL document's command dispatcher. Make API modifications to support command filtering. Some improvements to XUL document to factor out iteration code.

This commit is contained in:
waterson%netscape.com 1999-09-17 04:01:46 +00:00
parent e9bd7f6f1c
commit bd4a3e6792
19 changed files with 1407 additions and 1025 deletions

View File

@ -419,27 +419,23 @@ private:
static nsIXULContentUtils* gXULUtils;
static PRInt32 kNameSpaceID_RDF;
static PRInt32 kNameSpaceID_XUL;
static nsIAtom* kIdAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kClassAtom;
static nsIAtom* kContextAtom;
static nsIAtom* kIdAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kPopupAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kSelectedAtom;
static nsIAtom* kStyleAtom;
static nsIAtom* kTitledButtonAtom;
static nsIAtom* kTooltipAtom;
static nsIAtom* kTreeAtom;
static nsIAtom* kTreeItemAtom;
static nsIAtom* kTreeRowAtom;
static nsIAtom* kTreeCellAtom;
static nsIAtom* kTreeChildrenAtom;
static nsIAtom* kTreeColAtom;
static nsIAtom* kTitledButtonAtom;
static nsIAtom* kSelectedAtom;
static nsIAtom* kPopupAtom;
static nsIAtom* kTooltipAtom;
static nsIAtom* kContextAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kXULContentsGeneratedAtom;
static nsIAtom* kTreeItemAtom;
static nsIAtom* kTreeRowAtom;
@ -471,25 +467,25 @@ nsrefcnt RDFElementImpl::gRefCnt;
nsIRDFService* RDFElementImpl::gRDFService;
nsINameSpaceManager* RDFElementImpl::gNameSpaceManager;
nsIXULContentUtils* RDFElementImpl::gXULUtils;
nsIAtom* RDFElementImpl::kIdAtom;
nsIAtom* RDFElementImpl::kRefAtom;
PRInt32 RDFElementImpl::kNameSpaceID_RDF;
PRInt32 RDFElementImpl::kNameSpaceID_XUL;
nsIAtom* RDFElementImpl::kClassAtom;
nsIAtom* RDFElementImpl::kContextAtom;
nsIAtom* RDFElementImpl::kIdAtom;
nsIAtom* RDFElementImpl::kObservesAtom;
nsIAtom* RDFElementImpl::kPopupAtom;
nsIAtom* RDFElementImpl::kRefAtom;
nsIAtom* RDFElementImpl::kSelectedAtom;
nsIAtom* RDFElementImpl::kStyleAtom;
nsIAtom* RDFElementImpl::kTitledButtonAtom;
nsIAtom* RDFElementImpl::kTooltipAtom;
nsIAtom* RDFElementImpl::kTreeAtom;
nsIAtom* RDFElementImpl::kTreeItemAtom;
nsIAtom* RDFElementImpl::kTreeRowAtom;
nsIAtom* RDFElementImpl::kTreeCellAtom;
nsIAtom* RDFElementImpl::kTreeChildrenAtom;
nsIAtom* RDFElementImpl::kTreeColAtom;
nsIAtom* RDFElementImpl::kSelectedAtom;
nsIAtom* RDFElementImpl::kTitledButtonAtom;
nsIAtom* RDFElementImpl::kPopupAtom;
nsIAtom* RDFElementImpl::kTooltipAtom;
nsIAtom* RDFElementImpl::kContextAtom;
nsIAtom* RDFElementImpl::kObservesAtom;
nsIAtom* RDFElementImpl::kXULContentsGeneratedAtom;
PRInt32 RDFElementImpl::kNameSpaceID_RDF;
PRInt32 RDFElementImpl::kNameSpaceID_XUL;
nsIAtom* RDFElementImpl::kTreeItemAtom;
nsIAtom* RDFElementImpl::kTreeRowAtom;
// This is a simple datastructure that maps an event handler attribute
// name to an appropriate IID. Atoms are computed to improve
@ -571,23 +567,22 @@ RDFElementImpl::RDFElementImpl(PRInt32 aNameSpaceID, nsIAtom* aTag)
NS_VERIFY(NS_SUCCEEDED(rv), "unable to get RDF service");
kIdAtom = NS_NewAtom("id");
kRefAtom = NS_NewAtom("ref");
kClassAtom = NS_NewAtom("class");
kStyleAtom = NS_NewAtom("style");
kTreeAtom = NS_NewAtom("tree");
kTreeItemAtom = NS_NewAtom("treeitem");
kTreeRowAtom = NS_NewAtom("treerow");
kTreeCellAtom = NS_NewAtom("treecell");
kTreeChildrenAtom = NS_NewAtom("treechildren");
kTreeColAtom = NS_NewAtom("treecol");
kSelectedAtom = NS_NewAtom("selected");
kTitledButtonAtom = NS_NewAtom("titledbutton");
kPopupAtom = NS_NewAtom("popup");
kTooltipAtom = NS_NewAtom("tooltip");
kContextAtom = NS_NewAtom("context");
kObservesAtom = NS_NewAtom("observes");
kXULContentsGeneratedAtom = NS_NewAtom("xulcontentsgenerated");
kClassAtom = NS_NewAtom("class");
kContextAtom = NS_NewAtom("context");
kIdAtom = NS_NewAtom("id");
kObservesAtom = NS_NewAtom("observes");
kPopupAtom = NS_NewAtom("popup");
kRefAtom = NS_NewAtom("ref");
kSelectedAtom = NS_NewAtom("selected");
kStyleAtom = NS_NewAtom("style");
kTitledButtonAtom = NS_NewAtom("titledbutton");
kTooltipAtom = NS_NewAtom("tooltip");
kTreeAtom = NS_NewAtom("tree");
kTreeCellAtom = NS_NewAtom("treecell");
kTreeChildrenAtom = NS_NewAtom("treechildren");
kTreeColAtom = NS_NewAtom("treecol");
kTreeItemAtom = NS_NewAtom("treeitem");
kTreeRowAtom = NS_NewAtom("treerow");
EventHandlerMapEntry* entry = kEventHandlerMap;
while (entry->mAttributeName) {
@ -658,23 +653,22 @@ RDFElementImpl::~RDFElementImpl()
gRDFService = nsnull;
}
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kClassAtom);
NS_IF_RELEASE(kContextAtom);
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kPopupAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kSelectedAtom);
NS_IF_RELEASE(kStyleAtom);
NS_IF_RELEASE(kTitledButtonAtom);
NS_IF_RELEASE(kTooltipAtom);
NS_IF_RELEASE(kTreeAtom);
NS_IF_RELEASE(kTreeItemAtom);
NS_IF_RELEASE(kTreeRowAtom);
NS_IF_RELEASE(kTreeCellAtom);
NS_IF_RELEASE(kTreeChildrenAtom);
NS_IF_RELEASE(kTreeColAtom);
NS_IF_RELEASE(kSelectedAtom);
NS_IF_RELEASE(kTitledButtonAtom);
NS_IF_RELEASE(kPopupAtom);
NS_IF_RELEASE(kContextAtom);
NS_IF_RELEASE(kTooltipAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kXULContentsGeneratedAtom);
NS_IF_RELEASE(kTreeItemAtom);
NS_IF_RELEASE(kTreeRowAtom);
NS_IF_RELEASE(gNameSpaceManager);
@ -2417,7 +2411,7 @@ RDFElementImpl::SetAttribute(PRInt32 aNameSpaceID,
for (i = 0; i < count; i++) {
XULBroadcastListener* xulListener = (XULBroadcastListener*)mBroadcastListeners->ElementAt(i);
if (xulListener->ObservingAttribute(attribute) &&
(aName != kXULContentsGeneratedAtom && aName != kIdAtom)) {
(aName != kIdAtom)) {
// XXX Should have a function that knows which attributes are special.
// First we set the attribute in the observer.
xulListener->mListener->SetAttribute(attribute, aValue);
@ -2647,7 +2641,7 @@ RDFElementImpl::UnsetAttribute(PRInt32 aNameSpaceID, nsIAtom* aName, PRBool aNot
nsAutoString str;
aName->ToString(str);
if (xulListener->ObservingAttribute(str) &&
(aName != kXULContentsGeneratedAtom && aName != kIdAtom)) {
(aName != kIdAtom)) {
// XXX Should have a function that knows which attributes are special.
// Unset the attribute in the broadcast listener.
nsCOMPtr<nsIDOMElement> element;
@ -2968,7 +2962,7 @@ RDFElementImpl::AddBroadcastListener(const nsString& attr, nsIDOMElement* anElem
for (PRInt32 i = mAttributes->Count() - 1; i >= 0; --i) {
const nsXULAttribute* attr = (const nsXULAttribute*) mAttributes->ElementAt(i);
if ((attr->mNameSpaceID == kNameSpaceID_None) &&
(attr->mName == kIdAtom || attr->mName == kXULContentsGeneratedAtom))
(attr->mName == kIdAtom))
continue;
// We aren't the id atom, so it's ok to set us in the listener.

View File

@ -87,26 +87,51 @@ public:
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
private:
protected:
void* mScriptObject; // ????
nsIDOMElement* mCurrentElement; // Weak. The focus must obviously be lost if the node goes away.
nsVoidArray* mFocusListeners; // Holds weak references to listener elements.
// XXX THis was supposed to be WEAK, but c'mon, that's an accident
// waiting to happen! If somebody deletes the node, then asks us
// for the focus, we'll get killed!
nsCOMPtr<nsIDOMElement> mCurrentElement; // [OWNER]
class Updater {
public:
Updater(nsIDOMElement* aElement,
const nsString& aEvents,
const nsString& aTargets)
: mElement(aElement),
mEvents(aEvents),
mTargets(aTargets),
mNext(nsnull)
{}
nsIDOMElement* mElement; // [WEAK]
nsString mEvents;
nsString mTargets;
Updater* mNext;
};
Updater* mUpdaters;
PRBool Matches(const nsString& aList, const nsString& aElement);
};
////////////////////////////////////////////////////////////////////////
XULCommandDispatcherImpl::XULCommandDispatcherImpl(void)
:mScriptObject(nsnull)
: mScriptObject(nsnull), mCurrentElement(nsnull), mUpdaters(nsnull)
{
NS_INIT_REFCNT();
mCurrentElement = nsnull;
mFocusListeners = nsnull;
}
XULCommandDispatcherImpl::~XULCommandDispatcherImpl(void)
{
delete mFocusListeners;
while (mUpdaters) {
Updater* doomed = mUpdaters;
mUpdaters = mUpdaters->mNext;
delete doomed;
}
}
NS_IMPL_ADDREF(XULCommandDispatcherImpl)
@ -160,8 +185,8 @@ XULCommandDispatcherImpl::QueryInterface(REFNSIID iid, void** result)
NS_IMETHODIMP
XULCommandDispatcherImpl::GetFocusedElement(nsIDOMElement** aElement)
{
NS_IF_ADDREF(mCurrentElement);
*aElement = mCurrentElement;
NS_IF_ADDREF(*aElement);
return NS_OK;
}
@ -169,7 +194,7 @@ NS_IMETHODIMP
XULCommandDispatcherImpl::SetFocusedElement(nsIDOMElement* aElement)
{
mCurrentElement = aElement;
UpdateCommands();
UpdateCommands(nsAutoString(aElement ? "focus" : "blur"));
return NS_OK;
}
@ -188,67 +213,120 @@ XULCommandDispatcherImpl::SetFocusedWindow(nsIDOMWindow* aElement)
}
NS_IMETHODIMP
XULCommandDispatcherImpl::AddCommand(nsIDOMElement* aElement)
XULCommandDispatcherImpl::AddCommandUpdater(nsIDOMElement* aElement,
const nsString& aEvents,
const nsString& aTargets)
{
NS_PRECONDITION(aElement != nsnull, "null ptr");
if (! aElement)
return NS_ERROR_NULL_POINTER;
NS_PRECONDITION(aElement != nsnull, "null ptr");
if (! aElement)
return NS_ERROR_NULL_POINTER;
if (!mFocusListeners) {
mFocusListeners = new nsVoidArray();
}
Updater* updater = mUpdaters;
Updater** link = &mUpdaters;
mFocusListeners->AppendElement((void*)aElement); // Weak ref to element.
while (updater) {
if (updater->mElement == aElement) {
// If the updater was already in the list, then replace
// (?) the 'events' and 'targets' filters with the new
// specification.
updater->mEvents = aEvents;
updater->mTargets = aTargets;
return NS_OK;
}
return NS_OK;
link = &(updater->mNext);
updater = updater->mNext;
}
// If we get here, this is a new updater. Append it to the list.
updater = new Updater(aElement, aEvents, aTargets);
if (! updater)
return NS_ERROR_OUT_OF_MEMORY;
*link = updater;
return NS_OK;
}
NS_IMETHODIMP
XULCommandDispatcherImpl::RemoveCommand(nsIDOMElement* aElement)
XULCommandDispatcherImpl::RemoveCommandUpdater(nsIDOMElement* aElement)
{
if (mFocusListeners) {
mFocusListeners->RemoveElement((void*)aElement); // Weak ref to element
}
return NS_OK;
NS_PRECONDITION(aElement != nsnull, "null ptr");
if (! aElement)
return NS_ERROR_NULL_POINTER;
Updater* updater = mUpdaters;
Updater** link = &mUpdaters;
while (updater) {
if (updater->mElement == aElement) {
*link = updater->mNext;
delete updater;
return NS_OK;
}
link = &(updater->mNext);
updater = updater->mNext;
}
// Hmm. Not found. Oh well.
return NS_OK;
}
NS_IMETHODIMP
XULCommandDispatcherImpl::UpdateCommands()
XULCommandDispatcherImpl::UpdateCommands(const nsString& aEventName)
{
if (mFocusListeners) {
PRInt32 count = mFocusListeners->Count();
for (PRInt32 i = 0; i < count; i++) {
nsIDOMElement* domElement = (nsIDOMElement*)mFocusListeners->ElementAt(i);
nsresult rv;
nsCOMPtr<nsIContent> content;
content = do_QueryInterface(domElement);
nsCOMPtr<nsIDocument> document;
content->GetDocument(*getter_AddRefs(document));
nsAutoString id;
if (mCurrentElement) {
rv = mCurrentElement->GetAttribute(nsAutoString("id"), id);
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get element's id");
if (NS_FAILED(rv)) return rv;
}
PRInt32 count = document->GetNumberOfShells();
for (PRInt32 i = 0; i < count; i++) {
nsIPresShell* shell = document->GetShellAt(i);
if (nsnull == shell)
for (Updater* updater = mUpdaters; updater != nsnull; updater = updater->mNext) {
// Skip any nodes that don't match our 'events' or 'targets'
// filters.
if (! Matches(updater->mEvents, aEventName))
continue;
// Retrieve the context in which our DOM event will fire.
nsCOMPtr<nsIPresContext> aPresContext;
shell->GetPresContext(getter_AddRefs(aPresContext));
NS_RELEASE(shell);
if (! Matches(updater->mTargets, id))
continue;
// Handle the DOM event
nsEventStatus status = nsEventStatus_eIgnore;
nsEvent event;
event.eventStructType = NS_EVENT;
event.message = NS_FORM_CHANGE; // XXX: I feel dirty and evil for subverting this.
content->HandleDOMEvent(*aPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
nsCOMPtr<nsIContent> content = do_QueryInterface(updater->mElement);
NS_ASSERTION(content != nsnull, "not an nsIContent");
if (! content)
return NS_ERROR_UNEXPECTED;
nsCOMPtr<nsIDocument> document;
rv = content->GetDocument(*getter_AddRefs(document));
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get document");
if (NS_FAILED(rv)) return rv;
NS_ASSERTION(document != nsnull, "element has no document");
if (! document)
continue;
PRInt32 count = document->GetNumberOfShells();
for (PRInt32 i = 0; i < count; i++) {
nsCOMPtr<nsIPresShell> shell = dont_AddRef(document->GetShellAt(i));
if (! shell)
continue;
// Retrieve the context in which our DOM event will fire.
nsCOMPtr<nsIPresContext> context;
rv = shell->GetPresContext(getter_AddRefs(context));
if (NS_FAILED(rv)) return rv;
// Handle the DOM event
nsEventStatus status = nsEventStatus_eIgnore;
nsEvent event;
event.eventStructType = NS_EVENT;
event.message = NS_FORM_CHANGE; // XXX: I feel dirty and evil for subverting this.
content->HandleDOMEvent(*context, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
}
}
return NS_OK;
return NS_OK;
}
NS_IMETHODIMP
@ -289,7 +367,7 @@ XULCommandDispatcherImpl::Focus(nsIDOMEvent* aEvent)
if (target) {
SetFocusedElement(target);
UpdateCommands();
UpdateCommands("focus");
}
return NS_OK;
@ -304,7 +382,7 @@ XULCommandDispatcherImpl::Blur(nsIDOMEvent* aEvent)
if (target.get() == mCurrentElement) {
SetFocusedElement(nsnull);
UpdateCommands();
UpdateCommands("blur");
}
return NS_OK;
@ -336,6 +414,34 @@ XULCommandDispatcherImpl::SetScriptObject(void *aScriptObject)
}
PRBool
XULCommandDispatcherImpl::Matches(const nsString& aList, const nsString& aElement)
{
if (aList == "*")
return PR_TRUE; // match _everything_!
PRInt32 indx = aList.Find(aElement);
if (indx == -1)
return PR_FALSE; // not in the list at all
// okay, now make sure it's not a substring snafu; e.g., 'ur'
// found inside of 'blur'.
if (indx > 0) {
PRUnichar ch = aList[indx - 1];
if (! nsString::IsSpace(ch) && ch != PRUnichar(','))
return PR_FALSE;
}
if (indx + aElement.Length() < aList.Length()) {
PRUnichar ch = aList[indx + aElement.Length()];
if (! nsString::IsSpace(ch) && ch != PRUnichar(','))
return PR_FALSE;
}
return PR_TRUE;
}
////////////////////////////////////////////////////////////////
nsresult
NS_NewXULCommandDispatcher(nsIXULCommandDispatcher** CommandDispatcher)

View File

@ -206,12 +206,7 @@ static NS_DEFINE_IID(kIWordBreakerFactoryIID, NS_IWORDBREAKERFACTORY_IID);
////////////////////////////////////////////////////////////////////////
// Standard vocabulary items
DEFINE_RDF_VOCAB(RDF_NAMESPACE_URI, RDF, instanceOf);
DEFINE_RDF_VOCAB(RDF_NAMESPACE_URI, RDF, type);
#define XUL_NAMESPACE_URI "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
#define XUL_NAMESPACE_URI_PREFIX XUL_NAMESPACE_URI "#"
DEFINE_RDF_VOCAB(XUL_NAMESPACE_URI_PREFIX, XUL, element);
static PRLogModuleInfo* gMapLog;
static PRLogModuleInfo* gXULLog;
@ -806,11 +801,26 @@ public:
nsresult CloseWidgetItem(nsIContent* aElement);
nsresult RebuildWidgetItem(nsIContent* aElement);
nsresult
AddElementToMap(nsIContent* aElement, PRBool aDeep);
// The whole point of this little mess (yeah, that's right, who's
// your daddy?) is that everytime a new content subtree gets added
// or removed from the document, we'll need to iterate over it and
// do a bit o' work. This is the helper routine that does it.
typedef nsresult (XULDocumentImpl::*nsContentIteratorCallback)(nsIContent* aElement, void* aClosure);
nsresult
RemoveElementFromMap(nsIContent* aElement, PRBool aDeep);
DoForSubtree(nsIContent* aElement, nsContentIteratorCallback aCallback, void* aClosure);
nsresult
AddElementToDocument(nsIContent* aElement, void* aClosure);
nsresult
RemoveElementFromDocument(nsIContent* aElement, void* aClosure);
nsresult
AddElementToMap(nsIContent* aElement);
nsresult
RemoveElementFromMap(nsIContent* aElement);
static PRIntn
RemoveElementsFromMapByContent(nsIRDFResource* aResource,
@ -850,23 +860,21 @@ protected:
protected:
// pseudo constants
static PRInt32 gRefCnt;
static nsIAtom* kContainerContentsGeneratedAtom;
static nsIAtom* kCommandUpdaterAtom;
static nsIAtom* kEventsAtom;
static nsIAtom* kIdAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kOpenAtom;
static nsIAtom* kPersistAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kRuleAtom;
static nsIAtom* kTargetsAtom;
static nsIAtom* kTemplateAtom;
static nsIAtom* kTemplateContentsGeneratedAtom;
static nsIAtom* kXULContentsGeneratedAtom;
static nsIAtom** kIdentityAttrs[];
static nsIRDFService* gRDFService;
static nsIRDFResource* kRDF_instanceOf;
static nsIRDFResource* kRDF_type;
static nsIRDFResource* kXUL_element;
static nsINameSpaceManager* gNameSpaceManager;
static PRInt32 kNameSpaceID_XUL;
@ -939,21 +947,19 @@ protected:
};
PRInt32 XULDocumentImpl::gRefCnt = 0;
nsIAtom* XULDocumentImpl::kContainerContentsGeneratedAtom;
nsIAtom* XULDocumentImpl::kCommandUpdaterAtom;
nsIAtom* XULDocumentImpl::kEventsAtom;
nsIAtom* XULDocumentImpl::kIdAtom;
nsIAtom* XULDocumentImpl::kObservesAtom;
nsIAtom* XULDocumentImpl::kOpenAtom;
nsIAtom* XULDocumentImpl::kPersistAtom;
nsIAtom* XULDocumentImpl::kRefAtom;
nsIAtom* XULDocumentImpl::kRuleAtom;
nsIAtom* XULDocumentImpl::kTargetsAtom;
nsIAtom* XULDocumentImpl::kTemplateAtom;
nsIAtom* XULDocumentImpl::kTemplateContentsGeneratedAtom;
nsIAtom* XULDocumentImpl::kXULContentsGeneratedAtom;
nsIRDFService* XULDocumentImpl::gRDFService;
nsIRDFResource* XULDocumentImpl::kRDF_instanceOf;
nsIRDFResource* XULDocumentImpl::kRDF_type;
nsIRDFResource* XULDocumentImpl::kXUL_element;
nsINameSpaceManager* XULDocumentImpl::gNameSpaceManager;
PRInt32 XULDocumentImpl::kNameSpaceID_XUL;
@ -986,16 +992,16 @@ XULDocumentImpl::XULDocumentImpl(void)
}*/
if (gRefCnt++ == 0) {
kContainerContentsGeneratedAtom = NS_NewAtom("containercontentsgenerated");
kCommandUpdaterAtom = NS_NewAtom("commandupdater");
kEventsAtom = NS_NewAtom("events");
kIdAtom = NS_NewAtom("id");
kObservesAtom = NS_NewAtom("observes");
kOpenAtom = NS_NewAtom("open");
kPersistAtom = NS_NewAtom("persist");
kRefAtom = NS_NewAtom("ref");
kRuleAtom = NS_NewAtom("rule");
kTargetsAtom = NS_NewAtom("targets");
kTemplateAtom = NS_NewAtom("template");
kTemplateContentsGeneratedAtom = NS_NewAtom("templatecontentsgenerated");
kXULContentsGeneratedAtom = NS_NewAtom("xulcontentsgenerated");
// Keep the RDF service cached in a member variable to make using
// it a bit less painful
@ -1005,12 +1011,6 @@ XULDocumentImpl::XULDocumentImpl(void)
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get RDF Service");
if (gRDFService) {
gRDFService->GetResource(kURIRDF_instanceOf, &kRDF_instanceOf);
gRDFService->GetResource(kURIRDF_type, &kRDF_type);
gRDFService->GetResource(kURIXUL_element, &kXUL_element);
}
rv = nsServiceManager::GetService(kNameSpaceManagerCID,
nsCOMTypeInfo<nsINameSpaceManager>::GetIID(),
(nsISupports**) &gNameSpaceManager);
@ -1098,26 +1098,22 @@ XULDocumentImpl::~XULDocumentImpl()
}
if (--gRefCnt == 0) {
NS_IF_RELEASE(kContainerContentsGeneratedAtom);
NS_IF_RELEASE(kCommandUpdaterAtom);
NS_IF_RELEASE(kEventsAtom);
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kOpenAtom);
NS_IF_RELEASE(kPersistAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kRuleAtom);
NS_IF_RELEASE(kTargetsAtom);
NS_IF_RELEASE(kTemplateAtom);
NS_IF_RELEASE(kTemplateContentsGeneratedAtom);
NS_IF_RELEASE(kXULContentsGeneratedAtom);
if (gRDFService) {
nsServiceManager::ReleaseService(kRDFServiceCID, gRDFService);
gRDFService = nsnull;
}
NS_IF_RELEASE(kRDF_instanceOf);
NS_IF_RELEASE(kRDF_type);
NS_IF_RELEASE(kXUL_element);
if (gXULUtils) {
nsServiceManager::ReleaseService(kXULContentUtilsCID, gXULUtils);
gXULUtils = nsnull;
@ -2080,6 +2076,14 @@ XULDocumentImpl::EndLoad()
NS_POSTCONDITION(mRootContent != nsnull, "unable to create root content");
if (! mRootContent)
return NS_ERROR_UNEXPECTED;
// Do any initial hookup that needs to happen.
//
// XXX Because we are now doing this, maybe we can remove all
// the code from the RDFXULBuilderImpl that adds and removes
// elements from the element map?
rv = DoForSubtree(mRootContent, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
StartLayout();
@ -2143,7 +2147,7 @@ XULDocumentImpl::AttributeChanged(nsIContent* aElement,
// That'll have removed _both_ the 'ref' and 'id' entries from
// the map. So add 'em back now.
rv = AddElementToMap(aElement, PR_FALSE);
rv = AddElementToMap(aElement);
if (NS_FAILED(rv)) return rv;
}
}
@ -2218,7 +2222,7 @@ XULDocumentImpl::ContentAppended(nsIContent* aContainer,
rv = aContainer->ChildAt(i, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = AddElementToMap(child, PR_TRUE);
rv = DoForSubtree(child, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
}
@ -2239,10 +2243,9 @@ XULDocumentImpl::ContentInserted(nsIContent* aContainer,
nsIContent* aChild,
PRInt32 aIndexInContainer)
{
// First update our element map
{
nsresult rv;
rv = AddElementToMap(aChild, PR_TRUE);
rv = DoForSubtree(aChild, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
@ -2263,13 +2266,12 @@ XULDocumentImpl::ContentReplaced(nsIContent* aContainer,
nsIContent* aNewChild,
PRInt32 aIndexInContainer)
{
// First update our element map
{
nsresult rv;
rv = RemoveElementFromMap(aOldChild, PR_TRUE);
rv = DoForSubtree(aOldChild, RemoveElementFromDocument, nsnull);
if (NS_FAILED(rv)) return rv;
rv = AddElementToMap(aNewChild, PR_TRUE);
rv = DoForSubtree(aNewChild, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
@ -2290,10 +2292,9 @@ XULDocumentImpl::ContentRemoved(nsIContent* aContainer,
nsIContent* aChild,
PRInt32 aIndexInContainer)
{
// First update our element map
{
nsresult rv;
rv = RemoveElementFromMap(aChild, PR_TRUE);
rv = DoForSubtree(aChild, RemoveElementFromDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
@ -3358,11 +3359,111 @@ XULDocumentImpl::GetElementById(const nsString& aId, nsIDOMElement** aReturn)
return NS_OK;
}
nsresult
XULDocumentImpl::DoForSubtree(nsIContent* aElement, nsContentIteratorCallback aCallback, void* aClosure)
{
// Recursively apply aCallback to aElement and its children.
nsresult rv;
rv = (this->*aCallback)(aElement, aClosure);
if (NS_FAILED(rv)) return rv;
PRInt32 count;
nsCOMPtr<nsIXULContent> xulcontent = do_QueryInterface(aElement);
rv = xulcontent ? xulcontent->PeekChildCount(count) : aElement->ChildCount(count);
if (NS_FAILED(rv)) return rv;
while (--count >= 0) {
nsCOMPtr<nsIContent> child;
rv = aElement->ChildAt(count, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = DoForSubtree(child, aCallback, aClosure);
if (NS_FAILED(rv)) return rv;
}
return NS_OK;
}
nsresult
XULDocumentImpl::AddElementToDocument(nsIContent* aElement, void* aClosure)
{
// Do a bunch of work that's necessary when an element gets added
// to the XUL Document.
nsresult rv;
// 1. Add the element to the resource-to-element map
rv = AddElementToMap(aElement);
if (NS_FAILED(rv)) return rv;
// 2. If the element is a 'command updater' (i.e., has a
// "commandupdater='true'" attribute), then add the element to the
// document's command dispatcher
nsAutoString value;
rv = aElement->GetAttribute(kNameSpaceID_None, kCommandUpdaterAtom, value);
if ((rv == NS_CONTENT_ATTR_HAS_VALUE) && value.Equals("true")) {
nsAutoString events;
rv = aElement->GetAttribute(kNameSpaceID_None, kEventsAtom, events);
if (rv != NS_CONTENT_ATTR_HAS_VALUE)
events = "*";
nsAutoString targets;
rv = aElement->GetAttribute(kNameSpaceID_None, kTargetsAtom, targets);
if (rv != NS_CONTENT_ATTR_HAS_VALUE)
targets = "*";
nsCOMPtr<nsIDOMElement> domelement = do_QueryInterface(aElement);
NS_ASSERTION(domelement != nsnull, "not a DOM element");
if (! domelement)
return NS_ERROR_UNEXPECTED;
rv = mCommandDispatcher->AddCommandUpdater(domelement, events, targets);
if (NS_FAILED(rv)) return rv;
}
return NS_OK;
}
nsresult
XULDocumentImpl::RemoveElementFromDocument(nsIContent* aElement, void* aClosure)
{
// Do a bunch of cleanup to remove an element from the XUL
// document.
nsresult rv;
// 1. Remove the element from the resource-to-element map
rv = RemoveElementFromMap(aElement);
if (NS_FAILED(rv)) return rv;
// 2. If the element is a 'command updater', then remove the
// element from the document's command dispatcher.
nsAutoString value;
rv = aElement->GetAttribute(kNameSpaceID_None, kCommandUpdaterAtom, value);
if ((rv == NS_CONTENT_ATTR_HAS_VALUE) && value.Equals("true")) {
nsCOMPtr<nsIDOMElement> domelement = do_QueryInterface(aElement);
NS_ASSERTION(domelement != nsnull, "not a DOM element");
if (! domelement)
return NS_ERROR_UNEXPECTED;
rv = mCommandDispatcher->RemoveCommandUpdater(domelement);
if (NS_FAILED(rv)) return rv;
}
return NS_OK;
}
// Attributes that are used with getElementById() and the
// resource-to-element map.
nsIAtom** XULDocumentImpl::kIdentityAttrs[] = { &kIdAtom, &kRefAtom, nsnull };
nsresult
XULDocumentImpl::AddElementToMap(nsIContent* aElement, PRBool aDeep)
XULDocumentImpl::AddElementToMap(nsIContent* aElement)
{
// Look at the element's 'id' and 'ref' attributes, and if set,
// add pointers in the resource-to-element map to the element.
nsresult rv;
PRInt32 nameSpaceID;
@ -3386,29 +3487,14 @@ XULDocumentImpl::AddElementToMap(nsIContent* aElement, PRBool aDeep)
}
}
if (aDeep) {
PRInt32 count;
nsCOMPtr<nsIXULContent> xulcontent = do_QueryInterface(aElement);
rv = xulcontent ? xulcontent->PeekChildCount(count) : aElement->ChildCount(count);
if (NS_FAILED(rv)) return rv;
while (--count > 0) {
nsCOMPtr<nsIContent> child;
rv = aElement->ChildAt(count, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = AddElementToMap(child, PR_TRUE);
if (NS_FAILED(rv)) return rv;
}
}
return NS_OK;
}
nsresult
XULDocumentImpl::RemoveElementFromMap(nsIContent* aElement, PRBool aDeep)
XULDocumentImpl::RemoveElementFromMap(nsIContent* aElement)
{
// Remove the element from the resource-to-element map.
nsresult rv;
PRInt32 nameSpaceID;
@ -3432,22 +3518,6 @@ XULDocumentImpl::RemoveElementFromMap(nsIContent* aElement, PRBool aDeep)
}
}
if (aDeep) {
PRInt32 count;
nsCOMPtr<nsIXULContent> xulcontent = do_QueryInterface(aElement);
rv = xulcontent ? xulcontent->PeekChildCount(count) : aElement->ChildCount(count);
if (NS_FAILED(rv)) return rv;
while (--count > 0) {
nsCOMPtr<nsIContent> child;
rv = aElement->ChildAt(count, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = RemoveElementFromMap(child, PR_TRUE);
if (NS_FAILED(rv)) return rv;
}
}
return NS_OK;
}
@ -4694,5 +4764,3 @@ XULDocumentImpl::RebuildWidgetItem(nsIContent* aElement)
}

View File

@ -6,10 +6,10 @@ interface XULCommandDispatcher {
attribute Element focusedElement;
attribute Window focusedWindow;
void addCommand(in Element listener);
void removeCommand(in Element listener);
void addCommandUpdater(in Element updater, in DOMString events, in DOMString targets);
void removeCommandUpdater(in Element updater);
void updateCommands();
void updateCommands(in DOMString eventName);
xpidl nsIController getController();
void setController(in xpidl nsIController controller);

View File

@ -42,11 +42,11 @@ public:
NS_IMETHOD GetFocusedWindow(nsIDOMWindow** aFocusedWindow)=0;
NS_IMETHOD SetFocusedWindow(nsIDOMWindow* aFocusedWindow)=0;
NS_IMETHOD AddCommand(nsIDOMElement* aListener)=0;
NS_IMETHOD AddCommandUpdater(nsIDOMElement* aUpdater, const nsString& aEvents, const nsString& aTargets)=0;
NS_IMETHOD RemoveCommand(nsIDOMElement* aListener)=0;
NS_IMETHOD RemoveCommandUpdater(nsIDOMElement* aUpdater)=0;
NS_IMETHOD UpdateCommands()=0;
NS_IMETHOD UpdateCommands(const nsString& aEventName)=0;
NS_IMETHOD GetController(nsIController** aReturn)=0;
@ -59,9 +59,9 @@ public:
NS_IMETHOD SetFocusedElement(nsIDOMElement* aFocusedElement); \
NS_IMETHOD GetFocusedWindow(nsIDOMWindow** aFocusedWindow); \
NS_IMETHOD SetFocusedWindow(nsIDOMWindow* aFocusedWindow); \
NS_IMETHOD AddCommand(nsIDOMElement* aListener); \
NS_IMETHOD RemoveCommand(nsIDOMElement* aListener); \
NS_IMETHOD UpdateCommands(); \
NS_IMETHOD AddCommandUpdater(nsIDOMElement* aUpdater, const nsString& aEvents, const nsString& aTargets); \
NS_IMETHOD RemoveCommandUpdater(nsIDOMElement* aUpdater); \
NS_IMETHOD UpdateCommands(const nsString& aEventName); \
NS_IMETHOD GetController(nsIController** aReturn); \
NS_IMETHOD SetController(nsIController* aController); \
@ -72,9 +72,9 @@ public:
NS_IMETHOD SetFocusedElement(nsIDOMElement* aFocusedElement) { return _to SetFocusedElement(aFocusedElement); } \
NS_IMETHOD GetFocusedWindow(nsIDOMWindow** aFocusedWindow) { return _to GetFocusedWindow(aFocusedWindow); } \
NS_IMETHOD SetFocusedWindow(nsIDOMWindow* aFocusedWindow) { return _to SetFocusedWindow(aFocusedWindow); } \
NS_IMETHOD AddCommand(nsIDOMElement* aListener) { return _to AddCommand(aListener); } \
NS_IMETHOD RemoveCommand(nsIDOMElement* aListener) { return _to RemoveCommand(aListener); } \
NS_IMETHOD UpdateCommands() { return _to UpdateCommands(); } \
NS_IMETHOD AddCommandUpdater(nsIDOMElement* aUpdater, const nsString& aEvents, const nsString& aTargets) { return _to AddCommandUpdater(aUpdater, aEvents, aTargets); } \
NS_IMETHOD RemoveCommandUpdater(nsIDOMElement* aUpdater) { return _to RemoveCommandUpdater(aUpdater); } \
NS_IMETHOD UpdateCommands(const nsString& aEventName) { return _to UpdateCommands(aEventName); } \
NS_IMETHOD GetController(nsIController** aReturn) { return _to GetController(aReturn); } \
NS_IMETHOD SetController(nsIController* aController) { return _to SetController(aController); } \

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -73,7 +74,7 @@ GetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULCOMMANDDISPATCHER_FOCUSEDELEMENT:
@ -81,16 +82,17 @@ GetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedelement", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (NS_SUCCEEDED(a->GetFocusedElement(&prop))) {
nsresult result = NS_OK;
result = a->GetFocusedElement(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -99,16 +101,17 @@ GetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedwindow", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMWindow* prop;
if (NS_SUCCEEDED(a->GetFocusedWindow(&prop))) {
nsresult result = NS_OK;
result = a->GetFocusedWindow(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -141,7 +144,7 @@ SetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULCOMMANDDISPATCHER_FOCUSEDELEMENT:
@ -149,14 +152,13 @@ SetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedelement", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIElementIID, "Element",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetFocusedElement(prop);
@ -168,14 +170,13 @@ SetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedwindow", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMWindow* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIWindowIID, "Window",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetFocusedWindow(prop);
@ -225,27 +226,29 @@ ResolveXULCommandDispatcher(JSContext *cx, JSObject *obj, jsval id)
//
// Native method AddCommand
// Native method AddCommandUpdater
//
PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
XULCommandDispatcherAddCommandUpdater(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMElementPtr b0;
nsAutoString b1;
nsAutoString b2;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.addcommand",PR_FALSE , &ok);
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.addcommandupdater",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -255,9 +258,8 @@ XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *
}
{
if (argc < 1) {
JS_ReportError(cx, "Function addCommand requires 1 parameter");
return JS_FALSE;
if (argc < 3) {
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -265,11 +267,14 @@ XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *
"Element",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
nsJSUtils::nsConvertJSValToString(b2, cx, argv[2]);
if (NS_OK != nativeThis->AddCommand(b0)) {
return JS_FALSE;
result = nativeThis->AddCommandUpdater(b0, b1, b2);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -280,12 +285,13 @@ XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *
//
// Native method RemoveCommand
// Native method RemoveCommandUpdater
//
PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
XULCommandDispatcherRemoveCommandUpdater(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMElementPtr b0;
*rval = JSVAL_NULL;
@ -293,14 +299,13 @@ XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.removecommand",PR_FALSE , &ok);
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.removecommandupdater",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -311,8 +316,7 @@ XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function removeCommand requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -320,11 +324,12 @@ XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsva
"Element",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveCommand(b0)) {
return JS_FALSE;
result = nativeThis->RemoveCommandUpdater(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -341,20 +346,21 @@ PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherUpdateCommands(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.updatecommands",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -364,9 +370,15 @@ XULCommandDispatcherUpdateCommands(JSContext *cx, JSObject *obj, uintN argc, jsv
}
{
if (argc < 1) {
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (NS_OK != nativeThis->UpdateCommands()) {
return JS_FALSE;
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
result = nativeThis->UpdateCommands(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -383,6 +395,7 @@ PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherGetController(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIController* nativeRet;
*rval = JSVAL_NULL;
@ -390,14 +403,13 @@ XULCommandDispatcherGetController(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.getcontroller",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -408,8 +420,9 @@ XULCommandDispatcherGetController(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (NS_OK != nativeThis->GetController(&nativeRet)) {
return JS_FALSE;
result = nativeThis->GetController(&nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
// n.b., this will release nativeRet
@ -427,6 +440,7 @@ PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherSetController(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIControllerPtr b0;
*rval = JSVAL_NULL;
@ -434,14 +448,13 @@ XULCommandDispatcherSetController(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.setcontroller",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -452,17 +465,17 @@ XULCommandDispatcherSetController(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function setController requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToXPCObject((nsISupports**) &b0,
kIControllerIID, cx, argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_XPC_OBJECT_ERR);
}
if (NS_OK != nativeThis->SetController(b0)) {
return JS_FALSE;
result = nativeThis->SetController(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -506,9 +519,9 @@ static JSPropertySpec XULCommandDispatcherProperties[] =
//
static JSFunctionSpec XULCommandDispatcherMethods[] =
{
{"addCommand", XULCommandDispatcherAddCommand, 1},
{"removeCommand", XULCommandDispatcherRemoveCommand, 1},
{"updateCommands", XULCommandDispatcherUpdateCommands, 0},
{"addCommandUpdater", XULCommandDispatcherAddCommandUpdater, 3},
{"removeCommandUpdater", XULCommandDispatcherRemoveCommandUpdater, 1},
{"updateCommands", XULCommandDispatcherUpdateCommands, 1},
{"getController", XULCommandDispatcherGetController, 0},
{"setController", XULCommandDispatcherSetController, 1},
{0}

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -74,7 +75,7 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULDOCUMENT_POPUPELEMENT:
@ -82,16 +83,17 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.popupelement", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (NS_SUCCEEDED(a->GetPopupElement(&prop))) {
nsresult result = NS_OK;
result = a->GetPopupElement(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -100,16 +102,17 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.tooltipelement", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (NS_SUCCEEDED(a->GetTooltipElement(&prop))) {
nsresult result = NS_OK;
result = a->GetTooltipElement(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -118,16 +121,17 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.commanddispatcher", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMXULCommandDispatcher* prop;
if (NS_SUCCEEDED(a->GetCommandDispatcher(&prop))) {
nsresult result = NS_OK;
result = a->GetCommandDispatcher(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -160,7 +164,7 @@ SetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULDOCUMENT_POPUPELEMENT:
@ -168,14 +172,13 @@ SetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.popupelement", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIElementIID, "Element",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetPopupElement(prop);
@ -187,14 +190,13 @@ SetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.tooltipelement", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIElementIID, "Element",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetTooltipElement(prop);
@ -250,6 +252,7 @@ PR_STATIC_CALLBACK(JSBool)
XULDocumentGetElementById(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULDocument *nativeThis = (nsIDOMXULDocument*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMElement* nativeRet;
nsAutoString b0;
@ -258,14 +261,13 @@ XULDocumentGetElementById(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.getelementbyid",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -276,14 +278,14 @@ XULDocumentGetElementById(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
{
if (argc < 1) {
JS_ReportError(cx, "Function getElementById requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
if (NS_OK != nativeThis->GetElementById(b0, &nativeRet)) {
return JS_FALSE;
result = nativeThis->GetElementById(b0, &nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval);
@ -300,6 +302,7 @@ PR_STATIC_CALLBACK(JSBool)
XULDocumentGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULDocument *nativeThis = (nsIDOMXULDocument*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMNodeList* nativeRet;
nsAutoString b0;
nsAutoString b1;
@ -309,14 +312,13 @@ XULDocumentGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.getelementsbyattribute",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -327,15 +329,15 @@ XULDocumentGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 2) {
JS_ReportError(cx, "Function getElementsByAttribute requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
if (NS_OK != nativeThis->GetElementsByAttribute(b0, b1, &nativeRet)) {
return JS_FALSE;
result = nativeThis->GetElementsByAttribute(b0, b1, &nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval);
@ -352,6 +354,7 @@ PR_STATIC_CALLBACK(JSBool)
XULDocumentPersist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULDocument *nativeThis = (nsIDOMXULDocument*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
nsAutoString b1;
@ -360,14 +363,13 @@ XULDocumentPersist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.persist",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -378,15 +380,15 @@ XULDocumentPersist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
{
if (argc < 2) {
JS_ReportError(cx, "Function persist requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
if (NS_OK != nativeThis->Persist(b0, b1)) {
return JS_FALSE;
result = nativeThis->Persist(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -86,7 +87,7 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULELEMENT_ID:
@ -94,15 +95,16 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.id", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
if (NS_SUCCEEDED(a->GetId(prop))) {
nsresult result = NS_OK;
result = a->GetId(prop);
if (NS_SUCCEEDED(result)) {
nsJSUtils::nsConvertStringToJSVal(prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -111,15 +113,16 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.classname", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
if (NS_SUCCEEDED(a->GetClassName(prop))) {
nsresult result = NS_OK;
result = a->GetClassName(prop);
if (NS_SUCCEEDED(result)) {
nsJSUtils::nsConvertStringToJSVal(prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -128,16 +131,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.style", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMCSSStyleDeclaration* prop;
if (NS_SUCCEEDED(a->GetStyle(&prop))) {
nsresult result = NS_OK;
result = a->GetStyle(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -146,16 +150,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.database", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIRDFCompositeDataSource* prop;
if (NS_SUCCEEDED(a->GetDatabase(&prop))) {
nsresult result = NS_OK;
result = a->GetDatabase(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object; n.b., this will do a release on 'prop'
nsJSUtils::nsConvertXPCObjectToJSVal(prop, nsIRDFCompositeDataSource::GetIID(), cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -164,16 +169,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.resource", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIRDFResource* prop;
if (NS_SUCCEEDED(a->GetResource(&prop))) {
nsresult result = NS_OK;
result = a->GetResource(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object; n.b., this will do a release on 'prop'
nsJSUtils::nsConvertXPCObjectToJSVal(prop, nsIRDFResource::GetIID(), cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -182,16 +188,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.controller", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIController* prop;
if (NS_SUCCEEDED(a->GetController(&prop))) {
nsresult result = NS_OK;
result = a->GetController(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object; n.b., this will do a release on 'prop'
nsJSUtils::nsConvertXPCObjectToJSVal(prop, nsIController::GetIID(), cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -224,7 +231,7 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULELEMENT_ID:
@ -232,8 +239,7 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.id", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
nsJSUtils::nsConvertJSValToString(prop, cx, *vp);
@ -247,8 +253,7 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.classname", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
nsJSUtils::nsConvertJSValToString(prop, cx, *vp);
@ -262,13 +267,12 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.database", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIRDFCompositeDataSource* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToXPCObject((nsISupports **) &prop,
kIRDFCompositeDataSourceIID, cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_XPC_OBJECT_ERR);
}
a->SetDatabase(prop);
@ -280,13 +284,12 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.controller", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIController* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToXPCObject((nsISupports **) &prop,
kIControllerIID, cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_XPC_OBJECT_ERR);
}
a->SetController(prop);
@ -342,6 +345,7 @@ PR_STATIC_CALLBACK(JSBool)
XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
nsIDOMElementPtr b1;
@ -350,14 +354,13 @@ XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.addbroadcastlistener",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -368,8 +371,7 @@ XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *
{
if (argc < 2) {
JS_ReportError(cx, "Function addBroadcastListener requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
@ -378,11 +380,12 @@ XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *
"Element",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->AddBroadcastListener(b0, b1)) {
return JS_FALSE;
result = nativeThis->AddBroadcastListener(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -399,6 +402,7 @@ PR_STATIC_CALLBACK(JSBool)
XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
nsIDOMElementPtr b1;
@ -407,14 +411,13 @@ XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.removebroadcastlistener",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -425,8 +428,7 @@ XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 2) {
JS_ReportError(cx, "Function removeBroadcastListener requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
@ -435,11 +437,12 @@ XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsva
"Element",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveBroadcastListener(b0, b1)) {
return JS_FALSE;
result = nativeThis->RemoveBroadcastListener(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -456,20 +459,20 @@ PR_STATIC_CALLBACK(JSBool)
XULElementDoCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.docommand",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -480,8 +483,9 @@ XULElementDoCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
{
if (NS_OK != nativeThis->DoCommand()) {
return JS_FALSE;
result = nativeThis->DoCommand();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -498,6 +502,7 @@ PR_STATIC_CALLBACK(JSBool)
XULElementGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMNodeList* nativeRet;
nsAutoString b0;
nsAutoString b1;
@ -507,14 +512,13 @@ XULElementGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.getelementsbyattribute",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -525,15 +529,15 @@ XULElementGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (argc < 2) {
JS_ReportError(cx, "Function getElementsByAttribute requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
if (NS_OK != nativeThis->GetElementsByAttribute(b0, b1, &nativeRet)) {
return JS_FALSE;
result = nativeThis->GetElementsByAttribute(b0, b1, &nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval);

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -70,7 +71,7 @@ GetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULTREEELEMENT_SELECTEDITEMS:
@ -78,16 +79,17 @@ GetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selecteditems", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMNodeList* prop;
if (NS_SUCCEEDED(a->GetSelectedItems(&prop))) {
nsresult result = NS_OK;
result = a->GetSelectedItems(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -96,16 +98,17 @@ GetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectedcells", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMNodeList* prop;
if (NS_SUCCEEDED(a->GetSelectedCells(&prop))) {
nsresult result = NS_OK;
result = a->GetSelectedCells(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -138,7 +141,7 @@ SetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case 0:
@ -191,6 +194,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -198,14 +202,13 @@ XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectitem",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -216,8 +219,7 @@ XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
{
if (argc < 1) {
JS_ReportError(cx, "Function selectItem requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -225,11 +227,12 @@ XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectItem(b0)) {
return JS_FALSE;
result = nativeThis->SelectItem(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -246,6 +249,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -253,14 +257,13 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectcell",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -271,8 +274,7 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
{
if (argc < 1) {
JS_ReportError(cx, "Function selectCell requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -280,11 +282,12 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectCell(b0)) {
return JS_FALSE;
result = nativeThis->SelectCell(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -301,20 +304,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementClearItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearitemselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -325,8 +328,9 @@ XULTreeElementClearItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (NS_OK != nativeThis->ClearItemSelection()) {
return JS_FALSE;
result = nativeThis->ClearItemSelection();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -343,20 +347,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementClearCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearcellselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -367,8 +371,9 @@ XULTreeElementClearCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (NS_OK != nativeThis->ClearCellSelection()) {
return JS_FALSE;
result = nativeThis->ClearCellSelection();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -385,6 +390,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -392,14 +398,13 @@ XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.additemtoselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -410,8 +415,7 @@ XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (argc < 1) {
JS_ReportError(cx, "Function addItemToSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -419,11 +423,12 @@ XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->AddItemToSelection(b0)) {
return JS_FALSE;
result = nativeThis->AddItemToSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -440,6 +445,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -447,14 +453,13 @@ XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.removeitemfromselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -465,8 +470,7 @@ XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc,
{
if (argc < 1) {
JS_ReportError(cx, "Function removeItemFromSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -474,11 +478,12 @@ XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveItemFromSelection(b0)) {
return JS_FALSE;
result = nativeThis->RemoveItemFromSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -495,6 +500,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -502,14 +508,13 @@ XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.addcelltoselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -520,8 +525,7 @@ XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (argc < 1) {
JS_ReportError(cx, "Function addCellToSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -529,11 +533,12 @@ XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->AddCellToSelection(b0)) {
return JS_FALSE;
result = nativeThis->AddCellToSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -550,6 +555,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -557,14 +563,13 @@ XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.removecellfromselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -575,8 +580,7 @@ XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc,
{
if (argc < 1) {
JS_ReportError(cx, "Function removeCellFromSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -584,11 +588,12 @@ XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveCellFromSelection(b0)) {
return JS_FALSE;
result = nativeThis->RemoveCellFromSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -605,6 +610,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -612,14 +618,13 @@ XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.toggleitemselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -630,8 +635,7 @@ XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function toggleItemSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -639,11 +643,12 @@ XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->ToggleItemSelection(b0)) {
return JS_FALSE;
result = nativeThis->ToggleItemSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -660,6 +665,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -667,14 +673,13 @@ XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.togglecellselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -685,8 +690,7 @@ XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function toggleCellSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -694,11 +698,12 @@ XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->ToggleCellSelection(b0)) {
return JS_FALSE;
result = nativeThis->ToggleCellSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -715,6 +720,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
nsIDOMXULElementPtr b1;
@ -723,14 +729,13 @@ XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectitemrange",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -741,8 +746,7 @@ XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
{
if (argc < 2) {
JS_ReportError(cx, "Function selectItemRange requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -750,18 +754,19 @@ XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b1,
kIXULElementIID,
"XULElement",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectItemRange(b0, b1)) {
return JS_FALSE;
result = nativeThis->SelectItemRange(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -778,6 +783,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
nsIDOMXULElementPtr b1;
@ -786,14 +792,13 @@ XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectcellrange",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -804,8 +809,7 @@ XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
{
if (argc < 2) {
JS_ReportError(cx, "Function selectCellRange requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -813,18 +817,19 @@ XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b1,
kIXULElementIID,
"XULElement",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectCellRange(b0, b1)) {
return JS_FALSE;
result = nativeThis->SelectCellRange(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -841,20 +846,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectAll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectall",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -865,8 +870,9 @@ XULTreeElementSelectAll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, j
{
if (NS_OK != nativeThis->SelectAll()) {
return JS_FALSE;
result = nativeThis->SelectAll();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -883,20 +889,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementInvertSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.invertselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -907,8 +913,9 @@ XULTreeElementInvertSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *a
{
if (NS_OK != nativeThis->InvertSelection()) {
return JS_FALSE;
result = nativeThis->InvertSelection();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;

View File

@ -6,10 +6,10 @@ interface XULCommandDispatcher {
attribute Element focusedElement;
attribute Window focusedWindow;
void addCommand(in Element listener);
void removeCommand(in Element listener);
void addCommandUpdater(in Element updater, in DOMString events, in DOMString targets);
void removeCommandUpdater(in Element updater);
void updateCommands();
void updateCommands(in DOMString eventName);
xpidl nsIController getController();
void setController(in xpidl nsIController controller);

View File

@ -42,11 +42,11 @@ public:
NS_IMETHOD GetFocusedWindow(nsIDOMWindow** aFocusedWindow)=0;
NS_IMETHOD SetFocusedWindow(nsIDOMWindow* aFocusedWindow)=0;
NS_IMETHOD AddCommand(nsIDOMElement* aListener)=0;
NS_IMETHOD AddCommandUpdater(nsIDOMElement* aUpdater, const nsString& aEvents, const nsString& aTargets)=0;
NS_IMETHOD RemoveCommand(nsIDOMElement* aListener)=0;
NS_IMETHOD RemoveCommandUpdater(nsIDOMElement* aUpdater)=0;
NS_IMETHOD UpdateCommands()=0;
NS_IMETHOD UpdateCommands(const nsString& aEventName)=0;
NS_IMETHOD GetController(nsIController** aReturn)=0;
@ -59,9 +59,9 @@ public:
NS_IMETHOD SetFocusedElement(nsIDOMElement* aFocusedElement); \
NS_IMETHOD GetFocusedWindow(nsIDOMWindow** aFocusedWindow); \
NS_IMETHOD SetFocusedWindow(nsIDOMWindow* aFocusedWindow); \
NS_IMETHOD AddCommand(nsIDOMElement* aListener); \
NS_IMETHOD RemoveCommand(nsIDOMElement* aListener); \
NS_IMETHOD UpdateCommands(); \
NS_IMETHOD AddCommandUpdater(nsIDOMElement* aUpdater, const nsString& aEvents, const nsString& aTargets); \
NS_IMETHOD RemoveCommandUpdater(nsIDOMElement* aUpdater); \
NS_IMETHOD UpdateCommands(const nsString& aEventName); \
NS_IMETHOD GetController(nsIController** aReturn); \
NS_IMETHOD SetController(nsIController* aController); \
@ -72,9 +72,9 @@ public:
NS_IMETHOD SetFocusedElement(nsIDOMElement* aFocusedElement) { return _to SetFocusedElement(aFocusedElement); } \
NS_IMETHOD GetFocusedWindow(nsIDOMWindow** aFocusedWindow) { return _to GetFocusedWindow(aFocusedWindow); } \
NS_IMETHOD SetFocusedWindow(nsIDOMWindow* aFocusedWindow) { return _to SetFocusedWindow(aFocusedWindow); } \
NS_IMETHOD AddCommand(nsIDOMElement* aListener) { return _to AddCommand(aListener); } \
NS_IMETHOD RemoveCommand(nsIDOMElement* aListener) { return _to RemoveCommand(aListener); } \
NS_IMETHOD UpdateCommands() { return _to UpdateCommands(); } \
NS_IMETHOD AddCommandUpdater(nsIDOMElement* aUpdater, const nsString& aEvents, const nsString& aTargets) { return _to AddCommandUpdater(aUpdater, aEvents, aTargets); } \
NS_IMETHOD RemoveCommandUpdater(nsIDOMElement* aUpdater) { return _to RemoveCommandUpdater(aUpdater); } \
NS_IMETHOD UpdateCommands(const nsString& aEventName) { return _to UpdateCommands(aEventName); } \
NS_IMETHOD GetController(nsIController** aReturn) { return _to GetController(aReturn); } \
NS_IMETHOD SetController(nsIController* aController) { return _to SetController(aController); } \

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -73,7 +74,7 @@ GetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULCOMMANDDISPATCHER_FOCUSEDELEMENT:
@ -81,16 +82,17 @@ GetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedelement", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (NS_SUCCEEDED(a->GetFocusedElement(&prop))) {
nsresult result = NS_OK;
result = a->GetFocusedElement(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -99,16 +101,17 @@ GetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedwindow", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMWindow* prop;
if (NS_SUCCEEDED(a->GetFocusedWindow(&prop))) {
nsresult result = NS_OK;
result = a->GetFocusedWindow(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -141,7 +144,7 @@ SetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULCOMMANDDISPATCHER_FOCUSEDELEMENT:
@ -149,14 +152,13 @@ SetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedelement", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIElementIID, "Element",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetFocusedElement(prop);
@ -168,14 +170,13 @@ SetXULCommandDispatcherProperty(JSContext *cx, JSObject *obj, jsval id, jsval *v
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.focusedwindow", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMWindow* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIWindowIID, "Window",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetFocusedWindow(prop);
@ -225,27 +226,29 @@ ResolveXULCommandDispatcher(JSContext *cx, JSObject *obj, jsval id)
//
// Native method AddCommand
// Native method AddCommandUpdater
//
PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
XULCommandDispatcherAddCommandUpdater(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMElementPtr b0;
nsAutoString b1;
nsAutoString b2;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.addcommand",PR_FALSE , &ok);
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.addcommandupdater",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -255,9 +258,8 @@ XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *
}
{
if (argc < 1) {
JS_ReportError(cx, "Function addCommand requires 1 parameter");
return JS_FALSE;
if (argc < 3) {
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -265,11 +267,14 @@ XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *
"Element",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
nsJSUtils::nsConvertJSValToString(b2, cx, argv[2]);
if (NS_OK != nativeThis->AddCommand(b0)) {
return JS_FALSE;
result = nativeThis->AddCommandUpdater(b0, b1, b2);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -280,12 +285,13 @@ XULCommandDispatcherAddCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *
//
// Native method RemoveCommand
// Native method RemoveCommandUpdater
//
PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
XULCommandDispatcherRemoveCommandUpdater(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMElementPtr b0;
*rval = JSVAL_NULL;
@ -293,14 +299,13 @@ XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.removecommand",PR_FALSE , &ok);
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.removecommandupdater",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -311,8 +316,7 @@ XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function removeCommand requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -320,11 +324,12 @@ XULCommandDispatcherRemoveCommand(JSContext *cx, JSObject *obj, uintN argc, jsva
"Element",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveCommand(b0)) {
return JS_FALSE;
result = nativeThis->RemoveCommandUpdater(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -341,20 +346,21 @@ PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherUpdateCommands(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.updatecommands",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -364,9 +370,15 @@ XULCommandDispatcherUpdateCommands(JSContext *cx, JSObject *obj, uintN argc, jsv
}
{
if (argc < 1) {
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (NS_OK != nativeThis->UpdateCommands()) {
return JS_FALSE;
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
result = nativeThis->UpdateCommands(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -383,6 +395,7 @@ PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherGetController(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIController* nativeRet;
*rval = JSVAL_NULL;
@ -390,14 +403,13 @@ XULCommandDispatcherGetController(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.getcontroller",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -408,8 +420,9 @@ XULCommandDispatcherGetController(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (NS_OK != nativeThis->GetController(&nativeRet)) {
return JS_FALSE;
result = nativeThis->GetController(&nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
// n.b., this will release nativeRet
@ -427,6 +440,7 @@ PR_STATIC_CALLBACK(JSBool)
XULCommandDispatcherSetController(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULCommandDispatcher *nativeThis = (nsIDOMXULCommandDispatcher*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIControllerPtr b0;
*rval = JSVAL_NULL;
@ -434,14 +448,13 @@ XULCommandDispatcherSetController(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulcommanddispatcher.setcontroller",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -452,17 +465,17 @@ XULCommandDispatcherSetController(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function setController requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToXPCObject((nsISupports**) &b0,
kIControllerIID, cx, argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_XPC_OBJECT_ERR);
}
if (NS_OK != nativeThis->SetController(b0)) {
return JS_FALSE;
result = nativeThis->SetController(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -506,9 +519,9 @@ static JSPropertySpec XULCommandDispatcherProperties[] =
//
static JSFunctionSpec XULCommandDispatcherMethods[] =
{
{"addCommand", XULCommandDispatcherAddCommand, 1},
{"removeCommand", XULCommandDispatcherRemoveCommand, 1},
{"updateCommands", XULCommandDispatcherUpdateCommands, 0},
{"addCommandUpdater", XULCommandDispatcherAddCommandUpdater, 3},
{"removeCommandUpdater", XULCommandDispatcherRemoveCommandUpdater, 1},
{"updateCommands", XULCommandDispatcherUpdateCommands, 1},
{"getController", XULCommandDispatcherGetController, 0},
{"setController", XULCommandDispatcherSetController, 1},
{0}

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -74,7 +75,7 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULDOCUMENT_POPUPELEMENT:
@ -82,16 +83,17 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.popupelement", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (NS_SUCCEEDED(a->GetPopupElement(&prop))) {
nsresult result = NS_OK;
result = a->GetPopupElement(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -100,16 +102,17 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.tooltipelement", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (NS_SUCCEEDED(a->GetTooltipElement(&prop))) {
nsresult result = NS_OK;
result = a->GetTooltipElement(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -118,16 +121,17 @@ GetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.commanddispatcher", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMXULCommandDispatcher* prop;
if (NS_SUCCEEDED(a->GetCommandDispatcher(&prop))) {
nsresult result = NS_OK;
result = a->GetCommandDispatcher(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -160,7 +164,7 @@ SetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULDOCUMENT_POPUPELEMENT:
@ -168,14 +172,13 @@ SetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.popupelement", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIElementIID, "Element",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetPopupElement(prop);
@ -187,14 +190,13 @@ SetXULDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.tooltipelement", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMElement* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&prop,
kIElementIID, "Element",
cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
a->SetTooltipElement(prop);
@ -250,6 +252,7 @@ PR_STATIC_CALLBACK(JSBool)
XULDocumentGetElementById(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULDocument *nativeThis = (nsIDOMXULDocument*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMElement* nativeRet;
nsAutoString b0;
@ -258,14 +261,13 @@ XULDocumentGetElementById(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.getelementbyid",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -276,14 +278,14 @@ XULDocumentGetElementById(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
{
if (argc < 1) {
JS_ReportError(cx, "Function getElementById requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
if (NS_OK != nativeThis->GetElementById(b0, &nativeRet)) {
return JS_FALSE;
result = nativeThis->GetElementById(b0, &nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval);
@ -300,6 +302,7 @@ PR_STATIC_CALLBACK(JSBool)
XULDocumentGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULDocument *nativeThis = (nsIDOMXULDocument*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMNodeList* nativeRet;
nsAutoString b0;
nsAutoString b1;
@ -309,14 +312,13 @@ XULDocumentGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.getelementsbyattribute",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -327,15 +329,15 @@ XULDocumentGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 2) {
JS_ReportError(cx, "Function getElementsByAttribute requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
if (NS_OK != nativeThis->GetElementsByAttribute(b0, b1, &nativeRet)) {
return JS_FALSE;
result = nativeThis->GetElementsByAttribute(b0, b1, &nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval);
@ -352,6 +354,7 @@ PR_STATIC_CALLBACK(JSBool)
XULDocumentPersist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULDocument *nativeThis = (nsIDOMXULDocument*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
nsAutoString b1;
@ -360,14 +363,13 @@ XULDocumentPersist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xuldocument.persist",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -378,15 +380,15 @@ XULDocumentPersist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
{
if (argc < 2) {
JS_ReportError(cx, "Function persist requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
if (NS_OK != nativeThis->Persist(b0, b1)) {
return JS_FALSE;
result = nativeThis->Persist(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -86,7 +87,7 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULELEMENT_ID:
@ -94,15 +95,16 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.id", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
if (NS_SUCCEEDED(a->GetId(prop))) {
nsresult result = NS_OK;
result = a->GetId(prop);
if (NS_SUCCEEDED(result)) {
nsJSUtils::nsConvertStringToJSVal(prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -111,15 +113,16 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.classname", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
if (NS_SUCCEEDED(a->GetClassName(prop))) {
nsresult result = NS_OK;
result = a->GetClassName(prop);
if (NS_SUCCEEDED(result)) {
nsJSUtils::nsConvertStringToJSVal(prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -128,16 +131,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.style", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMCSSStyleDeclaration* prop;
if (NS_SUCCEEDED(a->GetStyle(&prop))) {
nsresult result = NS_OK;
result = a->GetStyle(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -146,16 +150,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.database", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIRDFCompositeDataSource* prop;
if (NS_SUCCEEDED(a->GetDatabase(&prop))) {
nsresult result = NS_OK;
result = a->GetDatabase(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object; n.b., this will do a release on 'prop'
nsJSUtils::nsConvertXPCObjectToJSVal(prop, nsIRDFCompositeDataSource::GetIID(), cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -164,16 +169,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.resource", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIRDFResource* prop;
if (NS_SUCCEEDED(a->GetResource(&prop))) {
nsresult result = NS_OK;
result = a->GetResource(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object; n.b., this will do a release on 'prop'
nsJSUtils::nsConvertXPCObjectToJSVal(prop, nsIRDFResource::GetIID(), cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -182,16 +188,17 @@ GetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.controller", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIController* prop;
if (NS_SUCCEEDED(a->GetController(&prop))) {
nsresult result = NS_OK;
result = a->GetController(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object; n.b., this will do a release on 'prop'
nsJSUtils::nsConvertXPCObjectToJSVal(prop, nsIController::GetIID(), cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -224,7 +231,7 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULELEMENT_ID:
@ -232,8 +239,7 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.id", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
nsJSUtils::nsConvertJSValToString(prop, cx, *vp);
@ -247,8 +253,7 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.classname", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsAutoString prop;
nsJSUtils::nsConvertJSValToString(prop, cx, *vp);
@ -262,13 +267,12 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.database", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIRDFCompositeDataSource* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToXPCObject((nsISupports **) &prop,
kIRDFCompositeDataSourceIID, cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_XPC_OBJECT_ERR);
}
a->SetDatabase(prop);
@ -280,13 +284,12 @@ SetXULElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.controller", PR_TRUE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIController* prop;
if (PR_FALSE == nsJSUtils::nsConvertJSValToXPCObject((nsISupports **) &prop,
kIControllerIID, cx, *vp)) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_XPC_OBJECT_ERR);
}
a->SetController(prop);
@ -342,6 +345,7 @@ PR_STATIC_CALLBACK(JSBool)
XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
nsIDOMElementPtr b1;
@ -350,14 +354,13 @@ XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.addbroadcastlistener",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -368,8 +371,7 @@ XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *
{
if (argc < 2) {
JS_ReportError(cx, "Function addBroadcastListener requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
@ -378,11 +380,12 @@ XULElementAddBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *
"Element",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->AddBroadcastListener(b0, b1)) {
return JS_FALSE;
result = nativeThis->AddBroadcastListener(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -399,6 +402,7 @@ PR_STATIC_CALLBACK(JSBool)
XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsAutoString b0;
nsIDOMElementPtr b1;
@ -407,14 +411,13 @@ XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.removebroadcastlistener",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -425,8 +428,7 @@ XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 2) {
JS_ReportError(cx, "Function removeBroadcastListener requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
@ -435,11 +437,12 @@ XULElementRemoveBroadcastListener(JSContext *cx, JSObject *obj, uintN argc, jsva
"Element",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveBroadcastListener(b0, b1)) {
return JS_FALSE;
result = nativeThis->RemoveBroadcastListener(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -456,20 +459,20 @@ PR_STATIC_CALLBACK(JSBool)
XULElementDoCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.docommand",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -480,8 +483,9 @@ XULElementDoCommand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
{
if (NS_OK != nativeThis->DoCommand()) {
return JS_FALSE;
result = nativeThis->DoCommand();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -498,6 +502,7 @@ PR_STATIC_CALLBACK(JSBool)
XULElementGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULElement *nativeThis = (nsIDOMXULElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMNodeList* nativeRet;
nsAutoString b0;
nsAutoString b1;
@ -507,14 +512,13 @@ XULElementGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xulelement.getelementsbyattribute",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -525,15 +529,15 @@ XULElementGetElementsByAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (argc < 2) {
JS_ReportError(cx, "Function getElementsByAttribute requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
if (NS_OK != nativeThis->GetElementsByAttribute(b0, b1, &nativeRet)) {
return JS_FALSE;
result = nativeThis->GetElementsByAttribute(b0, b1, &nativeRet);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval);

View File

@ -19,6 +19,7 @@
#include "jsapi.h"
#include "nsJSUtils.h"
#include "nsDOMError.h"
#include "nscore.h"
#include "nsIScriptContext.h"
#include "nsIScriptSecurityManager.h"
@ -70,7 +71,7 @@ GetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case XULTREEELEMENT_SELECTEDITEMS:
@ -78,16 +79,17 @@ GetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selecteditems", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMNodeList* prop;
if (NS_SUCCEEDED(a->GetSelectedItems(&prop))) {
nsresult result = NS_OK;
result = a->GetSelectedItems(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -96,16 +98,17 @@ GetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
PRBool ok = PR_FALSE;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectedcells", PR_FALSE, &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
nsIDOMNodeList* prop;
if (NS_SUCCEEDED(a->GetSelectedCells(&prop))) {
nsresult result = NS_OK;
result = a->GetSelectedCells(&prop);
if (NS_SUCCEEDED(result)) {
// get the js object
nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp);
}
else {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, result);
}
break;
}
@ -138,7 +141,7 @@ SetXULTreeElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
switch(JSVAL_TO_INT(id)) {
case 0:
@ -191,6 +194,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -198,14 +202,13 @@ XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectitem",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -216,8 +219,7 @@ XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
{
if (argc < 1) {
JS_ReportError(cx, "Function selectItem requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -225,11 +227,12 @@ XULTreeElementSelectItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectItem(b0)) {
return JS_FALSE;
result = nativeThis->SelectItem(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -246,6 +249,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -253,14 +257,13 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectcell",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -271,8 +274,7 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
{
if (argc < 1) {
JS_ReportError(cx, "Function selectCell requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -280,11 +282,12 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectCell(b0)) {
return JS_FALSE;
result = nativeThis->SelectCell(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -301,20 +304,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementClearItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearitemselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -325,8 +328,9 @@ XULTreeElementClearItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (NS_OK != nativeThis->ClearItemSelection()) {
return JS_FALSE;
result = nativeThis->ClearItemSelection();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -343,20 +347,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementClearCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearcellselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -367,8 +371,9 @@ XULTreeElementClearCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (NS_OK != nativeThis->ClearCellSelection()) {
return JS_FALSE;
result = nativeThis->ClearCellSelection();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -385,6 +390,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -392,14 +398,13 @@ XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.additemtoselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -410,8 +415,7 @@ XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (argc < 1) {
JS_ReportError(cx, "Function addItemToSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -419,11 +423,12 @@ XULTreeElementAddItemToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->AddItemToSelection(b0)) {
return JS_FALSE;
result = nativeThis->AddItemToSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -440,6 +445,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -447,14 +453,13 @@ XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.removeitemfromselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -465,8 +470,7 @@ XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc,
{
if (argc < 1) {
JS_ReportError(cx, "Function removeItemFromSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -474,11 +478,12 @@ XULTreeElementRemoveItemFromSelection(JSContext *cx, JSObject *obj, uintN argc,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveItemFromSelection(b0)) {
return JS_FALSE;
result = nativeThis->RemoveItemFromSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -495,6 +500,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -502,14 +508,13 @@ XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.addcelltoselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -520,8 +525,7 @@ XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
{
if (argc < 1) {
JS_ReportError(cx, "Function addCellToSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -529,11 +533,12 @@ XULTreeElementAddCellToSelection(JSContext *cx, JSObject *obj, uintN argc, jsval
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->AddCellToSelection(b0)) {
return JS_FALSE;
result = nativeThis->AddCellToSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -550,6 +555,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -557,14 +563,13 @@ XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc,
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.removecellfromselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -575,8 +580,7 @@ XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc,
{
if (argc < 1) {
JS_ReportError(cx, "Function removeCellFromSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -584,11 +588,12 @@ XULTreeElementRemoveCellFromSelection(JSContext *cx, JSObject *obj, uintN argc,
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->RemoveCellFromSelection(b0)) {
return JS_FALSE;
result = nativeThis->RemoveCellFromSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -605,6 +610,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -612,14 +618,13 @@ XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.toggleitemselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -630,8 +635,7 @@ XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function toggleItemSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -639,11 +643,12 @@ XULTreeElementToggleItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->ToggleItemSelection(b0)) {
return JS_FALSE;
result = nativeThis->ToggleItemSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -660,6 +665,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
*rval = JSVAL_NULL;
@ -667,14 +673,13 @@ XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.togglecellselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -685,8 +690,7 @@ XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
{
if (argc < 1) {
JS_ReportError(cx, "Function toggleCellSelection requires 1 parameter");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -694,11 +698,12 @@ XULTreeElementToggleCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsva
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->ToggleCellSelection(b0)) {
return JS_FALSE;
result = nativeThis->ToggleCellSelection(b0);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -715,6 +720,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
nsIDOMXULElementPtr b1;
@ -723,14 +729,13 @@ XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectitemrange",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -741,8 +746,7 @@ XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
{
if (argc < 2) {
JS_ReportError(cx, "Function selectItemRange requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -750,18 +754,19 @@ XULTreeElementSelectItemRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b1,
kIXULElementIID,
"XULElement",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectItemRange(b0, b1)) {
return JS_FALSE;
result = nativeThis->SelectItemRange(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -778,6 +783,7 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
nsIDOMXULElementPtr b0;
nsIDOMXULElementPtr b1;
@ -786,14 +792,13 @@ XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectcellrange",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -804,8 +809,7 @@ XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
{
if (argc < 2) {
JS_ReportError(cx, "Function selectCellRange requires 2 parameters");
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_TOO_FEW_PARAMETERS_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
@ -813,18 +817,19 @@ XULTreeElementSelectCellRange(JSContext *cx, JSObject *obj, uintN argc, jsval *a
"XULElement",
cx,
argv[0])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b1,
kIXULElementIID,
"XULElement",
cx,
argv[1])) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_NOT_OBJECT_ERR);
}
if (NS_OK != nativeThis->SelectCellRange(b0, b1)) {
return JS_FALSE;
result = nativeThis->SelectCellRange(b0, b1);
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -841,20 +846,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementSelectAll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.selectall",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -865,8 +870,9 @@ XULTreeElementSelectAll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, j
{
if (NS_OK != nativeThis->SelectAll()) {
return JS_FALSE;
result = nativeThis->SelectAll();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;
@ -883,20 +889,20 @@ PR_STATIC_CALLBACK(JSBool)
XULTreeElementInvertSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
nsresult result = NS_OK;
*rval = JSVAL_NULL;
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptSecurityManager> secMan;
if (NS_OK != scriptCX->GetSecurityManager(getter_AddRefs(secMan))) {
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECMAN_ERR);
}
{
PRBool ok;
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.invertselection",PR_FALSE , &ok);
if (!ok) {
//Need to throw error here
return JS_FALSE;
return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR);
}
}
@ -907,8 +913,9 @@ XULTreeElementInvertSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *a
{
if (NS_OK != nativeThis->InvertSelection()) {
return JS_FALSE;
result = nativeThis->InvertSelection();
if (NS_FAILED(result)) {
return nsJSUtils::nsReportError(cx, result);
}
*rval = JSVAL_VOID;

View File

@ -419,27 +419,23 @@ private:
static nsIXULContentUtils* gXULUtils;
static PRInt32 kNameSpaceID_RDF;
static PRInt32 kNameSpaceID_XUL;
static nsIAtom* kIdAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kClassAtom;
static nsIAtom* kContextAtom;
static nsIAtom* kIdAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kPopupAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kSelectedAtom;
static nsIAtom* kStyleAtom;
static nsIAtom* kTitledButtonAtom;
static nsIAtom* kTooltipAtom;
static nsIAtom* kTreeAtom;
static nsIAtom* kTreeItemAtom;
static nsIAtom* kTreeRowAtom;
static nsIAtom* kTreeCellAtom;
static nsIAtom* kTreeChildrenAtom;
static nsIAtom* kTreeColAtom;
static nsIAtom* kTitledButtonAtom;
static nsIAtom* kSelectedAtom;
static nsIAtom* kPopupAtom;
static nsIAtom* kTooltipAtom;
static nsIAtom* kContextAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kXULContentsGeneratedAtom;
static nsIAtom* kTreeItemAtom;
static nsIAtom* kTreeRowAtom;
@ -471,25 +467,25 @@ nsrefcnt RDFElementImpl::gRefCnt;
nsIRDFService* RDFElementImpl::gRDFService;
nsINameSpaceManager* RDFElementImpl::gNameSpaceManager;
nsIXULContentUtils* RDFElementImpl::gXULUtils;
nsIAtom* RDFElementImpl::kIdAtom;
nsIAtom* RDFElementImpl::kRefAtom;
PRInt32 RDFElementImpl::kNameSpaceID_RDF;
PRInt32 RDFElementImpl::kNameSpaceID_XUL;
nsIAtom* RDFElementImpl::kClassAtom;
nsIAtom* RDFElementImpl::kContextAtom;
nsIAtom* RDFElementImpl::kIdAtom;
nsIAtom* RDFElementImpl::kObservesAtom;
nsIAtom* RDFElementImpl::kPopupAtom;
nsIAtom* RDFElementImpl::kRefAtom;
nsIAtom* RDFElementImpl::kSelectedAtom;
nsIAtom* RDFElementImpl::kStyleAtom;
nsIAtom* RDFElementImpl::kTitledButtonAtom;
nsIAtom* RDFElementImpl::kTooltipAtom;
nsIAtom* RDFElementImpl::kTreeAtom;
nsIAtom* RDFElementImpl::kTreeItemAtom;
nsIAtom* RDFElementImpl::kTreeRowAtom;
nsIAtom* RDFElementImpl::kTreeCellAtom;
nsIAtom* RDFElementImpl::kTreeChildrenAtom;
nsIAtom* RDFElementImpl::kTreeColAtom;
nsIAtom* RDFElementImpl::kSelectedAtom;
nsIAtom* RDFElementImpl::kTitledButtonAtom;
nsIAtom* RDFElementImpl::kPopupAtom;
nsIAtom* RDFElementImpl::kTooltipAtom;
nsIAtom* RDFElementImpl::kContextAtom;
nsIAtom* RDFElementImpl::kObservesAtom;
nsIAtom* RDFElementImpl::kXULContentsGeneratedAtom;
PRInt32 RDFElementImpl::kNameSpaceID_RDF;
PRInt32 RDFElementImpl::kNameSpaceID_XUL;
nsIAtom* RDFElementImpl::kTreeItemAtom;
nsIAtom* RDFElementImpl::kTreeRowAtom;
// This is a simple datastructure that maps an event handler attribute
// name to an appropriate IID. Atoms are computed to improve
@ -571,23 +567,22 @@ RDFElementImpl::RDFElementImpl(PRInt32 aNameSpaceID, nsIAtom* aTag)
NS_VERIFY(NS_SUCCEEDED(rv), "unable to get RDF service");
kIdAtom = NS_NewAtom("id");
kRefAtom = NS_NewAtom("ref");
kClassAtom = NS_NewAtom("class");
kStyleAtom = NS_NewAtom("style");
kTreeAtom = NS_NewAtom("tree");
kTreeItemAtom = NS_NewAtom("treeitem");
kTreeRowAtom = NS_NewAtom("treerow");
kTreeCellAtom = NS_NewAtom("treecell");
kTreeChildrenAtom = NS_NewAtom("treechildren");
kTreeColAtom = NS_NewAtom("treecol");
kSelectedAtom = NS_NewAtom("selected");
kTitledButtonAtom = NS_NewAtom("titledbutton");
kPopupAtom = NS_NewAtom("popup");
kTooltipAtom = NS_NewAtom("tooltip");
kContextAtom = NS_NewAtom("context");
kObservesAtom = NS_NewAtom("observes");
kXULContentsGeneratedAtom = NS_NewAtom("xulcontentsgenerated");
kClassAtom = NS_NewAtom("class");
kContextAtom = NS_NewAtom("context");
kIdAtom = NS_NewAtom("id");
kObservesAtom = NS_NewAtom("observes");
kPopupAtom = NS_NewAtom("popup");
kRefAtom = NS_NewAtom("ref");
kSelectedAtom = NS_NewAtom("selected");
kStyleAtom = NS_NewAtom("style");
kTitledButtonAtom = NS_NewAtom("titledbutton");
kTooltipAtom = NS_NewAtom("tooltip");
kTreeAtom = NS_NewAtom("tree");
kTreeCellAtom = NS_NewAtom("treecell");
kTreeChildrenAtom = NS_NewAtom("treechildren");
kTreeColAtom = NS_NewAtom("treecol");
kTreeItemAtom = NS_NewAtom("treeitem");
kTreeRowAtom = NS_NewAtom("treerow");
EventHandlerMapEntry* entry = kEventHandlerMap;
while (entry->mAttributeName) {
@ -658,23 +653,22 @@ RDFElementImpl::~RDFElementImpl()
gRDFService = nsnull;
}
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kClassAtom);
NS_IF_RELEASE(kContextAtom);
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kPopupAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kSelectedAtom);
NS_IF_RELEASE(kStyleAtom);
NS_IF_RELEASE(kTitledButtonAtom);
NS_IF_RELEASE(kTooltipAtom);
NS_IF_RELEASE(kTreeAtom);
NS_IF_RELEASE(kTreeItemAtom);
NS_IF_RELEASE(kTreeRowAtom);
NS_IF_RELEASE(kTreeCellAtom);
NS_IF_RELEASE(kTreeChildrenAtom);
NS_IF_RELEASE(kTreeColAtom);
NS_IF_RELEASE(kSelectedAtom);
NS_IF_RELEASE(kTitledButtonAtom);
NS_IF_RELEASE(kPopupAtom);
NS_IF_RELEASE(kContextAtom);
NS_IF_RELEASE(kTooltipAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kXULContentsGeneratedAtom);
NS_IF_RELEASE(kTreeItemAtom);
NS_IF_RELEASE(kTreeRowAtom);
NS_IF_RELEASE(gNameSpaceManager);
@ -2417,7 +2411,7 @@ RDFElementImpl::SetAttribute(PRInt32 aNameSpaceID,
for (i = 0; i < count; i++) {
XULBroadcastListener* xulListener = (XULBroadcastListener*)mBroadcastListeners->ElementAt(i);
if (xulListener->ObservingAttribute(attribute) &&
(aName != kXULContentsGeneratedAtom && aName != kIdAtom)) {
(aName != kIdAtom)) {
// XXX Should have a function that knows which attributes are special.
// First we set the attribute in the observer.
xulListener->mListener->SetAttribute(attribute, aValue);
@ -2647,7 +2641,7 @@ RDFElementImpl::UnsetAttribute(PRInt32 aNameSpaceID, nsIAtom* aName, PRBool aNot
nsAutoString str;
aName->ToString(str);
if (xulListener->ObservingAttribute(str) &&
(aName != kXULContentsGeneratedAtom && aName != kIdAtom)) {
(aName != kIdAtom)) {
// XXX Should have a function that knows which attributes are special.
// Unset the attribute in the broadcast listener.
nsCOMPtr<nsIDOMElement> element;
@ -2968,7 +2962,7 @@ RDFElementImpl::AddBroadcastListener(const nsString& attr, nsIDOMElement* anElem
for (PRInt32 i = mAttributes->Count() - 1; i >= 0; --i) {
const nsXULAttribute* attr = (const nsXULAttribute*) mAttributes->ElementAt(i);
if ((attr->mNameSpaceID == kNameSpaceID_None) &&
(attr->mName == kIdAtom || attr->mName == kXULContentsGeneratedAtom))
(attr->mName == kIdAtom))
continue;
// We aren't the id atom, so it's ok to set us in the listener.

View File

@ -87,26 +87,51 @@ public:
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD SetScriptObject(void *aScriptObject);
private:
protected:
void* mScriptObject; // ????
nsIDOMElement* mCurrentElement; // Weak. The focus must obviously be lost if the node goes away.
nsVoidArray* mFocusListeners; // Holds weak references to listener elements.
// XXX THis was supposed to be WEAK, but c'mon, that's an accident
// waiting to happen! If somebody deletes the node, then asks us
// for the focus, we'll get killed!
nsCOMPtr<nsIDOMElement> mCurrentElement; // [OWNER]
class Updater {
public:
Updater(nsIDOMElement* aElement,
const nsString& aEvents,
const nsString& aTargets)
: mElement(aElement),
mEvents(aEvents),
mTargets(aTargets),
mNext(nsnull)
{}
nsIDOMElement* mElement; // [WEAK]
nsString mEvents;
nsString mTargets;
Updater* mNext;
};
Updater* mUpdaters;
PRBool Matches(const nsString& aList, const nsString& aElement);
};
////////////////////////////////////////////////////////////////////////
XULCommandDispatcherImpl::XULCommandDispatcherImpl(void)
:mScriptObject(nsnull)
: mScriptObject(nsnull), mCurrentElement(nsnull), mUpdaters(nsnull)
{
NS_INIT_REFCNT();
mCurrentElement = nsnull;
mFocusListeners = nsnull;
}
XULCommandDispatcherImpl::~XULCommandDispatcherImpl(void)
{
delete mFocusListeners;
while (mUpdaters) {
Updater* doomed = mUpdaters;
mUpdaters = mUpdaters->mNext;
delete doomed;
}
}
NS_IMPL_ADDREF(XULCommandDispatcherImpl)
@ -160,8 +185,8 @@ XULCommandDispatcherImpl::QueryInterface(REFNSIID iid, void** result)
NS_IMETHODIMP
XULCommandDispatcherImpl::GetFocusedElement(nsIDOMElement** aElement)
{
NS_IF_ADDREF(mCurrentElement);
*aElement = mCurrentElement;
NS_IF_ADDREF(*aElement);
return NS_OK;
}
@ -169,7 +194,7 @@ NS_IMETHODIMP
XULCommandDispatcherImpl::SetFocusedElement(nsIDOMElement* aElement)
{
mCurrentElement = aElement;
UpdateCommands();
UpdateCommands(nsAutoString(aElement ? "focus" : "blur"));
return NS_OK;
}
@ -188,67 +213,120 @@ XULCommandDispatcherImpl::SetFocusedWindow(nsIDOMWindow* aElement)
}
NS_IMETHODIMP
XULCommandDispatcherImpl::AddCommand(nsIDOMElement* aElement)
XULCommandDispatcherImpl::AddCommandUpdater(nsIDOMElement* aElement,
const nsString& aEvents,
const nsString& aTargets)
{
NS_PRECONDITION(aElement != nsnull, "null ptr");
if (! aElement)
return NS_ERROR_NULL_POINTER;
NS_PRECONDITION(aElement != nsnull, "null ptr");
if (! aElement)
return NS_ERROR_NULL_POINTER;
if (!mFocusListeners) {
mFocusListeners = new nsVoidArray();
}
Updater* updater = mUpdaters;
Updater** link = &mUpdaters;
mFocusListeners->AppendElement((void*)aElement); // Weak ref to element.
while (updater) {
if (updater->mElement == aElement) {
// If the updater was already in the list, then replace
// (?) the 'events' and 'targets' filters with the new
// specification.
updater->mEvents = aEvents;
updater->mTargets = aTargets;
return NS_OK;
}
return NS_OK;
link = &(updater->mNext);
updater = updater->mNext;
}
// If we get here, this is a new updater. Append it to the list.
updater = new Updater(aElement, aEvents, aTargets);
if (! updater)
return NS_ERROR_OUT_OF_MEMORY;
*link = updater;
return NS_OK;
}
NS_IMETHODIMP
XULCommandDispatcherImpl::RemoveCommand(nsIDOMElement* aElement)
XULCommandDispatcherImpl::RemoveCommandUpdater(nsIDOMElement* aElement)
{
if (mFocusListeners) {
mFocusListeners->RemoveElement((void*)aElement); // Weak ref to element
}
return NS_OK;
NS_PRECONDITION(aElement != nsnull, "null ptr");
if (! aElement)
return NS_ERROR_NULL_POINTER;
Updater* updater = mUpdaters;
Updater** link = &mUpdaters;
while (updater) {
if (updater->mElement == aElement) {
*link = updater->mNext;
delete updater;
return NS_OK;
}
link = &(updater->mNext);
updater = updater->mNext;
}
// Hmm. Not found. Oh well.
return NS_OK;
}
NS_IMETHODIMP
XULCommandDispatcherImpl::UpdateCommands()
XULCommandDispatcherImpl::UpdateCommands(const nsString& aEventName)
{
if (mFocusListeners) {
PRInt32 count = mFocusListeners->Count();
for (PRInt32 i = 0; i < count; i++) {
nsIDOMElement* domElement = (nsIDOMElement*)mFocusListeners->ElementAt(i);
nsresult rv;
nsCOMPtr<nsIContent> content;
content = do_QueryInterface(domElement);
nsCOMPtr<nsIDocument> document;
content->GetDocument(*getter_AddRefs(document));
nsAutoString id;
if (mCurrentElement) {
rv = mCurrentElement->GetAttribute(nsAutoString("id"), id);
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get element's id");
if (NS_FAILED(rv)) return rv;
}
PRInt32 count = document->GetNumberOfShells();
for (PRInt32 i = 0; i < count; i++) {
nsIPresShell* shell = document->GetShellAt(i);
if (nsnull == shell)
for (Updater* updater = mUpdaters; updater != nsnull; updater = updater->mNext) {
// Skip any nodes that don't match our 'events' or 'targets'
// filters.
if (! Matches(updater->mEvents, aEventName))
continue;
// Retrieve the context in which our DOM event will fire.
nsCOMPtr<nsIPresContext> aPresContext;
shell->GetPresContext(getter_AddRefs(aPresContext));
NS_RELEASE(shell);
if (! Matches(updater->mTargets, id))
continue;
// Handle the DOM event
nsEventStatus status = nsEventStatus_eIgnore;
nsEvent event;
event.eventStructType = NS_EVENT;
event.message = NS_FORM_CHANGE; // XXX: I feel dirty and evil for subverting this.
content->HandleDOMEvent(*aPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
nsCOMPtr<nsIContent> content = do_QueryInterface(updater->mElement);
NS_ASSERTION(content != nsnull, "not an nsIContent");
if (! content)
return NS_ERROR_UNEXPECTED;
nsCOMPtr<nsIDocument> document;
rv = content->GetDocument(*getter_AddRefs(document));
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get document");
if (NS_FAILED(rv)) return rv;
NS_ASSERTION(document != nsnull, "element has no document");
if (! document)
continue;
PRInt32 count = document->GetNumberOfShells();
for (PRInt32 i = 0; i < count; i++) {
nsCOMPtr<nsIPresShell> shell = dont_AddRef(document->GetShellAt(i));
if (! shell)
continue;
// Retrieve the context in which our DOM event will fire.
nsCOMPtr<nsIPresContext> context;
rv = shell->GetPresContext(getter_AddRefs(context));
if (NS_FAILED(rv)) return rv;
// Handle the DOM event
nsEventStatus status = nsEventStatus_eIgnore;
nsEvent event;
event.eventStructType = NS_EVENT;
event.message = NS_FORM_CHANGE; // XXX: I feel dirty and evil for subverting this.
content->HandleDOMEvent(*context, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
}
}
return NS_OK;
return NS_OK;
}
NS_IMETHODIMP
@ -289,7 +367,7 @@ XULCommandDispatcherImpl::Focus(nsIDOMEvent* aEvent)
if (target) {
SetFocusedElement(target);
UpdateCommands();
UpdateCommands("focus");
}
return NS_OK;
@ -304,7 +382,7 @@ XULCommandDispatcherImpl::Blur(nsIDOMEvent* aEvent)
if (target.get() == mCurrentElement) {
SetFocusedElement(nsnull);
UpdateCommands();
UpdateCommands("blur");
}
return NS_OK;
@ -336,6 +414,34 @@ XULCommandDispatcherImpl::SetScriptObject(void *aScriptObject)
}
PRBool
XULCommandDispatcherImpl::Matches(const nsString& aList, const nsString& aElement)
{
if (aList == "*")
return PR_TRUE; // match _everything_!
PRInt32 indx = aList.Find(aElement);
if (indx == -1)
return PR_FALSE; // not in the list at all
// okay, now make sure it's not a substring snafu; e.g., 'ur'
// found inside of 'blur'.
if (indx > 0) {
PRUnichar ch = aList[indx - 1];
if (! nsString::IsSpace(ch) && ch != PRUnichar(','))
return PR_FALSE;
}
if (indx + aElement.Length() < aList.Length()) {
PRUnichar ch = aList[indx + aElement.Length()];
if (! nsString::IsSpace(ch) && ch != PRUnichar(','))
return PR_FALSE;
}
return PR_TRUE;
}
////////////////////////////////////////////////////////////////
nsresult
NS_NewXULCommandDispatcher(nsIXULCommandDispatcher** CommandDispatcher)

View File

@ -206,12 +206,7 @@ static NS_DEFINE_IID(kIWordBreakerFactoryIID, NS_IWORDBREAKERFACTORY_IID);
////////////////////////////////////////////////////////////////////////
// Standard vocabulary items
DEFINE_RDF_VOCAB(RDF_NAMESPACE_URI, RDF, instanceOf);
DEFINE_RDF_VOCAB(RDF_NAMESPACE_URI, RDF, type);
#define XUL_NAMESPACE_URI "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
#define XUL_NAMESPACE_URI_PREFIX XUL_NAMESPACE_URI "#"
DEFINE_RDF_VOCAB(XUL_NAMESPACE_URI_PREFIX, XUL, element);
static PRLogModuleInfo* gMapLog;
static PRLogModuleInfo* gXULLog;
@ -806,11 +801,26 @@ public:
nsresult CloseWidgetItem(nsIContent* aElement);
nsresult RebuildWidgetItem(nsIContent* aElement);
nsresult
AddElementToMap(nsIContent* aElement, PRBool aDeep);
// The whole point of this little mess (yeah, that's right, who's
// your daddy?) is that everytime a new content subtree gets added
// or removed from the document, we'll need to iterate over it and
// do a bit o' work. This is the helper routine that does it.
typedef nsresult (XULDocumentImpl::*nsContentIteratorCallback)(nsIContent* aElement, void* aClosure);
nsresult
RemoveElementFromMap(nsIContent* aElement, PRBool aDeep);
DoForSubtree(nsIContent* aElement, nsContentIteratorCallback aCallback, void* aClosure);
nsresult
AddElementToDocument(nsIContent* aElement, void* aClosure);
nsresult
RemoveElementFromDocument(nsIContent* aElement, void* aClosure);
nsresult
AddElementToMap(nsIContent* aElement);
nsresult
RemoveElementFromMap(nsIContent* aElement);
static PRIntn
RemoveElementsFromMapByContent(nsIRDFResource* aResource,
@ -850,23 +860,21 @@ protected:
protected:
// pseudo constants
static PRInt32 gRefCnt;
static nsIAtom* kContainerContentsGeneratedAtom;
static nsIAtom* kCommandUpdaterAtom;
static nsIAtom* kEventsAtom;
static nsIAtom* kIdAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kOpenAtom;
static nsIAtom* kPersistAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kRuleAtom;
static nsIAtom* kTargetsAtom;
static nsIAtom* kTemplateAtom;
static nsIAtom* kTemplateContentsGeneratedAtom;
static nsIAtom* kXULContentsGeneratedAtom;
static nsIAtom** kIdentityAttrs[];
static nsIRDFService* gRDFService;
static nsIRDFResource* kRDF_instanceOf;
static nsIRDFResource* kRDF_type;
static nsIRDFResource* kXUL_element;
static nsINameSpaceManager* gNameSpaceManager;
static PRInt32 kNameSpaceID_XUL;
@ -939,21 +947,19 @@ protected:
};
PRInt32 XULDocumentImpl::gRefCnt = 0;
nsIAtom* XULDocumentImpl::kContainerContentsGeneratedAtom;
nsIAtom* XULDocumentImpl::kCommandUpdaterAtom;
nsIAtom* XULDocumentImpl::kEventsAtom;
nsIAtom* XULDocumentImpl::kIdAtom;
nsIAtom* XULDocumentImpl::kObservesAtom;
nsIAtom* XULDocumentImpl::kOpenAtom;
nsIAtom* XULDocumentImpl::kPersistAtom;
nsIAtom* XULDocumentImpl::kRefAtom;
nsIAtom* XULDocumentImpl::kRuleAtom;
nsIAtom* XULDocumentImpl::kTargetsAtom;
nsIAtom* XULDocumentImpl::kTemplateAtom;
nsIAtom* XULDocumentImpl::kTemplateContentsGeneratedAtom;
nsIAtom* XULDocumentImpl::kXULContentsGeneratedAtom;
nsIRDFService* XULDocumentImpl::gRDFService;
nsIRDFResource* XULDocumentImpl::kRDF_instanceOf;
nsIRDFResource* XULDocumentImpl::kRDF_type;
nsIRDFResource* XULDocumentImpl::kXUL_element;
nsINameSpaceManager* XULDocumentImpl::gNameSpaceManager;
PRInt32 XULDocumentImpl::kNameSpaceID_XUL;
@ -986,16 +992,16 @@ XULDocumentImpl::XULDocumentImpl(void)
}*/
if (gRefCnt++ == 0) {
kContainerContentsGeneratedAtom = NS_NewAtom("containercontentsgenerated");
kCommandUpdaterAtom = NS_NewAtom("commandupdater");
kEventsAtom = NS_NewAtom("events");
kIdAtom = NS_NewAtom("id");
kObservesAtom = NS_NewAtom("observes");
kOpenAtom = NS_NewAtom("open");
kPersistAtom = NS_NewAtom("persist");
kRefAtom = NS_NewAtom("ref");
kRuleAtom = NS_NewAtom("rule");
kTargetsAtom = NS_NewAtom("targets");
kTemplateAtom = NS_NewAtom("template");
kTemplateContentsGeneratedAtom = NS_NewAtom("templatecontentsgenerated");
kXULContentsGeneratedAtom = NS_NewAtom("xulcontentsgenerated");
// Keep the RDF service cached in a member variable to make using
// it a bit less painful
@ -1005,12 +1011,6 @@ XULDocumentImpl::XULDocumentImpl(void)
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get RDF Service");
if (gRDFService) {
gRDFService->GetResource(kURIRDF_instanceOf, &kRDF_instanceOf);
gRDFService->GetResource(kURIRDF_type, &kRDF_type);
gRDFService->GetResource(kURIXUL_element, &kXUL_element);
}
rv = nsServiceManager::GetService(kNameSpaceManagerCID,
nsCOMTypeInfo<nsINameSpaceManager>::GetIID(),
(nsISupports**) &gNameSpaceManager);
@ -1098,26 +1098,22 @@ XULDocumentImpl::~XULDocumentImpl()
}
if (--gRefCnt == 0) {
NS_IF_RELEASE(kContainerContentsGeneratedAtom);
NS_IF_RELEASE(kCommandUpdaterAtom);
NS_IF_RELEASE(kEventsAtom);
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kOpenAtom);
NS_IF_RELEASE(kPersistAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kRuleAtom);
NS_IF_RELEASE(kTargetsAtom);
NS_IF_RELEASE(kTemplateAtom);
NS_IF_RELEASE(kTemplateContentsGeneratedAtom);
NS_IF_RELEASE(kXULContentsGeneratedAtom);
if (gRDFService) {
nsServiceManager::ReleaseService(kRDFServiceCID, gRDFService);
gRDFService = nsnull;
}
NS_IF_RELEASE(kRDF_instanceOf);
NS_IF_RELEASE(kRDF_type);
NS_IF_RELEASE(kXUL_element);
if (gXULUtils) {
nsServiceManager::ReleaseService(kXULContentUtilsCID, gXULUtils);
gXULUtils = nsnull;
@ -2080,6 +2076,14 @@ XULDocumentImpl::EndLoad()
NS_POSTCONDITION(mRootContent != nsnull, "unable to create root content");
if (! mRootContent)
return NS_ERROR_UNEXPECTED;
// Do any initial hookup that needs to happen.
//
// XXX Because we are now doing this, maybe we can remove all
// the code from the RDFXULBuilderImpl that adds and removes
// elements from the element map?
rv = DoForSubtree(mRootContent, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
StartLayout();
@ -2143,7 +2147,7 @@ XULDocumentImpl::AttributeChanged(nsIContent* aElement,
// That'll have removed _both_ the 'ref' and 'id' entries from
// the map. So add 'em back now.
rv = AddElementToMap(aElement, PR_FALSE);
rv = AddElementToMap(aElement);
if (NS_FAILED(rv)) return rv;
}
}
@ -2218,7 +2222,7 @@ XULDocumentImpl::ContentAppended(nsIContent* aContainer,
rv = aContainer->ChildAt(i, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = AddElementToMap(child, PR_TRUE);
rv = DoForSubtree(child, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
}
@ -2239,10 +2243,9 @@ XULDocumentImpl::ContentInserted(nsIContent* aContainer,
nsIContent* aChild,
PRInt32 aIndexInContainer)
{
// First update our element map
{
nsresult rv;
rv = AddElementToMap(aChild, PR_TRUE);
rv = DoForSubtree(aChild, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
@ -2263,13 +2266,12 @@ XULDocumentImpl::ContentReplaced(nsIContent* aContainer,
nsIContent* aNewChild,
PRInt32 aIndexInContainer)
{
// First update our element map
{
nsresult rv;
rv = RemoveElementFromMap(aOldChild, PR_TRUE);
rv = DoForSubtree(aOldChild, RemoveElementFromDocument, nsnull);
if (NS_FAILED(rv)) return rv;
rv = AddElementToMap(aNewChild, PR_TRUE);
rv = DoForSubtree(aNewChild, AddElementToDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
@ -2290,10 +2292,9 @@ XULDocumentImpl::ContentRemoved(nsIContent* aContainer,
nsIContent* aChild,
PRInt32 aIndexInContainer)
{
// First update our element map
{
nsresult rv;
rv = RemoveElementFromMap(aChild, PR_TRUE);
rv = DoForSubtree(aChild, RemoveElementFromDocument, nsnull);
if (NS_FAILED(rv)) return rv;
}
@ -3358,11 +3359,111 @@ XULDocumentImpl::GetElementById(const nsString& aId, nsIDOMElement** aReturn)
return NS_OK;
}
nsresult
XULDocumentImpl::DoForSubtree(nsIContent* aElement, nsContentIteratorCallback aCallback, void* aClosure)
{
// Recursively apply aCallback to aElement and its children.
nsresult rv;
rv = (this->*aCallback)(aElement, aClosure);
if (NS_FAILED(rv)) return rv;
PRInt32 count;
nsCOMPtr<nsIXULContent> xulcontent = do_QueryInterface(aElement);
rv = xulcontent ? xulcontent->PeekChildCount(count) : aElement->ChildCount(count);
if (NS_FAILED(rv)) return rv;
while (--count >= 0) {
nsCOMPtr<nsIContent> child;
rv = aElement->ChildAt(count, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = DoForSubtree(child, aCallback, aClosure);
if (NS_FAILED(rv)) return rv;
}
return NS_OK;
}
nsresult
XULDocumentImpl::AddElementToDocument(nsIContent* aElement, void* aClosure)
{
// Do a bunch of work that's necessary when an element gets added
// to the XUL Document.
nsresult rv;
// 1. Add the element to the resource-to-element map
rv = AddElementToMap(aElement);
if (NS_FAILED(rv)) return rv;
// 2. If the element is a 'command updater' (i.e., has a
// "commandupdater='true'" attribute), then add the element to the
// document's command dispatcher
nsAutoString value;
rv = aElement->GetAttribute(kNameSpaceID_None, kCommandUpdaterAtom, value);
if ((rv == NS_CONTENT_ATTR_HAS_VALUE) && value.Equals("true")) {
nsAutoString events;
rv = aElement->GetAttribute(kNameSpaceID_None, kEventsAtom, events);
if (rv != NS_CONTENT_ATTR_HAS_VALUE)
events = "*";
nsAutoString targets;
rv = aElement->GetAttribute(kNameSpaceID_None, kTargetsAtom, targets);
if (rv != NS_CONTENT_ATTR_HAS_VALUE)
targets = "*";
nsCOMPtr<nsIDOMElement> domelement = do_QueryInterface(aElement);
NS_ASSERTION(domelement != nsnull, "not a DOM element");
if (! domelement)
return NS_ERROR_UNEXPECTED;
rv = mCommandDispatcher->AddCommandUpdater(domelement, events, targets);
if (NS_FAILED(rv)) return rv;
}
return NS_OK;
}
nsresult
XULDocumentImpl::RemoveElementFromDocument(nsIContent* aElement, void* aClosure)
{
// Do a bunch of cleanup to remove an element from the XUL
// document.
nsresult rv;
// 1. Remove the element from the resource-to-element map
rv = RemoveElementFromMap(aElement);
if (NS_FAILED(rv)) return rv;
// 2. If the element is a 'command updater', then remove the
// element from the document's command dispatcher.
nsAutoString value;
rv = aElement->GetAttribute(kNameSpaceID_None, kCommandUpdaterAtom, value);
if ((rv == NS_CONTENT_ATTR_HAS_VALUE) && value.Equals("true")) {
nsCOMPtr<nsIDOMElement> domelement = do_QueryInterface(aElement);
NS_ASSERTION(domelement != nsnull, "not a DOM element");
if (! domelement)
return NS_ERROR_UNEXPECTED;
rv = mCommandDispatcher->RemoveCommandUpdater(domelement);
if (NS_FAILED(rv)) return rv;
}
return NS_OK;
}
// Attributes that are used with getElementById() and the
// resource-to-element map.
nsIAtom** XULDocumentImpl::kIdentityAttrs[] = { &kIdAtom, &kRefAtom, nsnull };
nsresult
XULDocumentImpl::AddElementToMap(nsIContent* aElement, PRBool aDeep)
XULDocumentImpl::AddElementToMap(nsIContent* aElement)
{
// Look at the element's 'id' and 'ref' attributes, and if set,
// add pointers in the resource-to-element map to the element.
nsresult rv;
PRInt32 nameSpaceID;
@ -3386,29 +3487,14 @@ XULDocumentImpl::AddElementToMap(nsIContent* aElement, PRBool aDeep)
}
}
if (aDeep) {
PRInt32 count;
nsCOMPtr<nsIXULContent> xulcontent = do_QueryInterface(aElement);
rv = xulcontent ? xulcontent->PeekChildCount(count) : aElement->ChildCount(count);
if (NS_FAILED(rv)) return rv;
while (--count > 0) {
nsCOMPtr<nsIContent> child;
rv = aElement->ChildAt(count, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = AddElementToMap(child, PR_TRUE);
if (NS_FAILED(rv)) return rv;
}
}
return NS_OK;
}
nsresult
XULDocumentImpl::RemoveElementFromMap(nsIContent* aElement, PRBool aDeep)
XULDocumentImpl::RemoveElementFromMap(nsIContent* aElement)
{
// Remove the element from the resource-to-element map.
nsresult rv;
PRInt32 nameSpaceID;
@ -3432,22 +3518,6 @@ XULDocumentImpl::RemoveElementFromMap(nsIContent* aElement, PRBool aDeep)
}
}
if (aDeep) {
PRInt32 count;
nsCOMPtr<nsIXULContent> xulcontent = do_QueryInterface(aElement);
rv = xulcontent ? xulcontent->PeekChildCount(count) : aElement->ChildCount(count);
if (NS_FAILED(rv)) return rv;
while (--count > 0) {
nsCOMPtr<nsIContent> child;
rv = aElement->ChildAt(count, *getter_AddRefs(child));
if (NS_FAILED(rv)) return rv;
rv = RemoveElementFromMap(child, PR_TRUE);
if (NS_FAILED(rv)) return rv;
}
}
return NS_OK;
}
@ -4694,5 +4764,3 @@ XULDocumentImpl::RebuildWidgetItem(nsIContent* aElement)
}

View File

@ -419,27 +419,23 @@ private:
static nsIXULContentUtils* gXULUtils;
static PRInt32 kNameSpaceID_RDF;
static PRInt32 kNameSpaceID_XUL;
static nsIAtom* kIdAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kClassAtom;
static nsIAtom* kContextAtom;
static nsIAtom* kIdAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kPopupAtom;
static nsIAtom* kRefAtom;
static nsIAtom* kSelectedAtom;
static nsIAtom* kStyleAtom;
static nsIAtom* kTitledButtonAtom;
static nsIAtom* kTooltipAtom;
static nsIAtom* kTreeAtom;
static nsIAtom* kTreeItemAtom;
static nsIAtom* kTreeRowAtom;
static nsIAtom* kTreeCellAtom;
static nsIAtom* kTreeChildrenAtom;
static nsIAtom* kTreeColAtom;
static nsIAtom* kTitledButtonAtom;
static nsIAtom* kSelectedAtom;
static nsIAtom* kPopupAtom;
static nsIAtom* kTooltipAtom;
static nsIAtom* kContextAtom;
static nsIAtom* kObservesAtom;
static nsIAtom* kXULContentsGeneratedAtom;
static nsIAtom* kTreeItemAtom;
static nsIAtom* kTreeRowAtom;
@ -471,25 +467,25 @@ nsrefcnt RDFElementImpl::gRefCnt;
nsIRDFService* RDFElementImpl::gRDFService;
nsINameSpaceManager* RDFElementImpl::gNameSpaceManager;
nsIXULContentUtils* RDFElementImpl::gXULUtils;
nsIAtom* RDFElementImpl::kIdAtom;
nsIAtom* RDFElementImpl::kRefAtom;
PRInt32 RDFElementImpl::kNameSpaceID_RDF;
PRInt32 RDFElementImpl::kNameSpaceID_XUL;
nsIAtom* RDFElementImpl::kClassAtom;
nsIAtom* RDFElementImpl::kContextAtom;
nsIAtom* RDFElementImpl::kIdAtom;
nsIAtom* RDFElementImpl::kObservesAtom;
nsIAtom* RDFElementImpl::kPopupAtom;
nsIAtom* RDFElementImpl::kRefAtom;
nsIAtom* RDFElementImpl::kSelectedAtom;
nsIAtom* RDFElementImpl::kStyleAtom;
nsIAtom* RDFElementImpl::kTitledButtonAtom;
nsIAtom* RDFElementImpl::kTooltipAtom;
nsIAtom* RDFElementImpl::kTreeAtom;
nsIAtom* RDFElementImpl::kTreeItemAtom;
nsIAtom* RDFElementImpl::kTreeRowAtom;
nsIAtom* RDFElementImpl::kTreeCellAtom;
nsIAtom* RDFElementImpl::kTreeChildrenAtom;
nsIAtom* RDFElementImpl::kTreeColAtom;
nsIAtom* RDFElementImpl::kSelectedAtom;
nsIAtom* RDFElementImpl::kTitledButtonAtom;
nsIAtom* RDFElementImpl::kPopupAtom;
nsIAtom* RDFElementImpl::kTooltipAtom;
nsIAtom* RDFElementImpl::kContextAtom;
nsIAtom* RDFElementImpl::kObservesAtom;
nsIAtom* RDFElementImpl::kXULContentsGeneratedAtom;
PRInt32 RDFElementImpl::kNameSpaceID_RDF;
PRInt32 RDFElementImpl::kNameSpaceID_XUL;
nsIAtom* RDFElementImpl::kTreeItemAtom;
nsIAtom* RDFElementImpl::kTreeRowAtom;
// This is a simple datastructure that maps an event handler attribute
// name to an appropriate IID. Atoms are computed to improve
@ -571,23 +567,22 @@ RDFElementImpl::RDFElementImpl(PRInt32 aNameSpaceID, nsIAtom* aTag)
NS_VERIFY(NS_SUCCEEDED(rv), "unable to get RDF service");
kIdAtom = NS_NewAtom("id");
kRefAtom = NS_NewAtom("ref");
kClassAtom = NS_NewAtom("class");
kStyleAtom = NS_NewAtom("style");
kTreeAtom = NS_NewAtom("tree");
kTreeItemAtom = NS_NewAtom("treeitem");
kTreeRowAtom = NS_NewAtom("treerow");
kTreeCellAtom = NS_NewAtom("treecell");
kTreeChildrenAtom = NS_NewAtom("treechildren");
kTreeColAtom = NS_NewAtom("treecol");
kSelectedAtom = NS_NewAtom("selected");
kTitledButtonAtom = NS_NewAtom("titledbutton");
kPopupAtom = NS_NewAtom("popup");
kTooltipAtom = NS_NewAtom("tooltip");
kContextAtom = NS_NewAtom("context");
kObservesAtom = NS_NewAtom("observes");
kXULContentsGeneratedAtom = NS_NewAtom("xulcontentsgenerated");
kClassAtom = NS_NewAtom("class");
kContextAtom = NS_NewAtom("context");
kIdAtom = NS_NewAtom("id");
kObservesAtom = NS_NewAtom("observes");
kPopupAtom = NS_NewAtom("popup");
kRefAtom = NS_NewAtom("ref");
kSelectedAtom = NS_NewAtom("selected");
kStyleAtom = NS_NewAtom("style");
kTitledButtonAtom = NS_NewAtom("titledbutton");
kTooltipAtom = NS_NewAtom("tooltip");
kTreeAtom = NS_NewAtom("tree");
kTreeCellAtom = NS_NewAtom("treecell");
kTreeChildrenAtom = NS_NewAtom("treechildren");
kTreeColAtom = NS_NewAtom("treecol");
kTreeItemAtom = NS_NewAtom("treeitem");
kTreeRowAtom = NS_NewAtom("treerow");
EventHandlerMapEntry* entry = kEventHandlerMap;
while (entry->mAttributeName) {
@ -658,23 +653,22 @@ RDFElementImpl::~RDFElementImpl()
gRDFService = nsnull;
}
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kClassAtom);
NS_IF_RELEASE(kContextAtom);
NS_IF_RELEASE(kIdAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kPopupAtom);
NS_IF_RELEASE(kRefAtom);
NS_IF_RELEASE(kSelectedAtom);
NS_IF_RELEASE(kStyleAtom);
NS_IF_RELEASE(kTitledButtonAtom);
NS_IF_RELEASE(kTooltipAtom);
NS_IF_RELEASE(kTreeAtom);
NS_IF_RELEASE(kTreeItemAtom);
NS_IF_RELEASE(kTreeRowAtom);
NS_IF_RELEASE(kTreeCellAtom);
NS_IF_RELEASE(kTreeChildrenAtom);
NS_IF_RELEASE(kTreeColAtom);
NS_IF_RELEASE(kSelectedAtom);
NS_IF_RELEASE(kTitledButtonAtom);
NS_IF_RELEASE(kPopupAtom);
NS_IF_RELEASE(kContextAtom);
NS_IF_RELEASE(kTooltipAtom);
NS_IF_RELEASE(kObservesAtom);
NS_IF_RELEASE(kXULContentsGeneratedAtom);
NS_IF_RELEASE(kTreeItemAtom);
NS_IF_RELEASE(kTreeRowAtom);
NS_IF_RELEASE(gNameSpaceManager);
@ -2417,7 +2411,7 @@ RDFElementImpl::SetAttribute(PRInt32 aNameSpaceID,
for (i = 0; i < count; i++) {
XULBroadcastListener* xulListener = (XULBroadcastListener*)mBroadcastListeners->ElementAt(i);
if (xulListener->ObservingAttribute(attribute) &&
(aName != kXULContentsGeneratedAtom && aName != kIdAtom)) {
(aName != kIdAtom)) {
// XXX Should have a function that knows which attributes are special.
// First we set the attribute in the observer.
xulListener->mListener->SetAttribute(attribute, aValue);
@ -2647,7 +2641,7 @@ RDFElementImpl::UnsetAttribute(PRInt32 aNameSpaceID, nsIAtom* aName, PRBool aNot
nsAutoString str;
aName->ToString(str);
if (xulListener->ObservingAttribute(str) &&
(aName != kXULContentsGeneratedAtom && aName != kIdAtom)) {
(aName != kIdAtom)) {
// XXX Should have a function that knows which attributes are special.
// Unset the attribute in the broadcast listener.
nsCOMPtr<nsIDOMElement> element;
@ -2968,7 +2962,7 @@ RDFElementImpl::AddBroadcastListener(const nsString& attr, nsIDOMElement* anElem
for (PRInt32 i = mAttributes->Count() - 1; i >= 0; --i) {
const nsXULAttribute* attr = (const nsXULAttribute*) mAttributes->ElementAt(i);
if ((attr->mNameSpaceID == kNameSpaceID_None) &&
(attr->mName == kIdAtom || attr->mName == kXULContentsGeneratedAtom))
(attr->mName == kIdAtom))
continue;
// We aren't the id atom, so it's ok to set us in the listener.