mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
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:
parent
e9bd7f6f1c
commit
bd4a3e6792
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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); } \
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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); } \
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user