diff --git a/mozilla/content/events/src/nsDOMEvent.h b/mozilla/content/events/src/nsDOMEvent.h index ddd4a0b1f10..8d9f00c5137 100644 --- a/mozilla/content/events/src/nsDOMEvent.h +++ b/mozilla/content/events/src/nsDOMEvent.h @@ -45,9 +45,7 @@ public: nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent); virtual ~nsDOMEvent(); - NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr); - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); + NS_DECL_ISUPPORTS // nsIDOMEventInterface NS_IMETHOD GetType(nsString& aType); @@ -101,7 +99,6 @@ public: protected: - PRUint32 mRefCnt : 31; nsEvent *mEvent; nsIPresContext *mPresContext; diff --git a/mozilla/content/events/src/nsEventListenerManager.h b/mozilla/content/events/src/nsEventListenerManager.h index 8ec35a326ae..3a8614950f3 100644 --- a/mozilla/content/events/src/nsEventListenerManager.h +++ b/mozilla/content/events/src/nsEventListenerManager.h @@ -34,9 +34,7 @@ public: nsEventListenerManager(); virtual ~nsEventListenerManager(); - NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr); - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); + NS_DECL_ISUPPORTS nsVoidArray** GetListenersByIID(const nsIID& aIID); @@ -77,8 +75,6 @@ public: protected: nsresult SetJSEventListener(nsIScriptContext *aContext, JSObject *aObject, REFNSIID aIID); - PRUint32 mRefCnt : 31; - nsVoidArray* mEventListeners; nsVoidArray* mMouseListeners; nsVoidArray* mMouseMotionListeners; diff --git a/mozilla/content/events/src/nsEventStateManager.h b/mozilla/content/events/src/nsEventStateManager.h index f98ad844970..7271fbf41dc 100644 --- a/mozilla/content/events/src/nsEventStateManager.h +++ b/mozilla/content/events/src/nsEventStateManager.h @@ -32,9 +32,7 @@ public: nsEventStateManager(); virtual ~nsEventStateManager(); - NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr); - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); + NS_DECL_ISUPPORTS NS_IMETHOD GetEventTarget(nsISupports **aResult); NS_IMETHOD SetEventTarget(nsISupports *aSupports); @@ -46,8 +44,6 @@ public: NS_IMETHOD SetActiveLink(nsIContent *aLink); protected: - PRUint32 mRefCnt : 31; - nsISupports* mEventTarget; nsIContent* mLastMouseOverContent; nsIContent *mActiveLink; diff --git a/mozilla/dom/public/idl/Window.idl b/mozilla/dom/public/idl/Window.idl index b41f4fe5e29..549072fdd0b 100644 --- a/mozilla/dom/public/idl/Window.idl +++ b/mozilla/dom/public/idl/Window.idl @@ -4,6 +4,12 @@ readonly attribute Document document; readonly attribute Navigator navigator; readonly attribute Window opener; + readonly attribute Window parent; + readonly attribute Window top; + readonly attribute boolean closed; + attribute wstring status; + attribute wstring defaultStatus; + attribute wstring name; void dump(in wstring str); void alert(in wstring str); diff --git a/mozilla/dom/public/nsIDOMWindow.h b/mozilla/dom/public/nsIDOMWindow.h index 848f8c702d3..11eeb34d46e 100644 --- a/mozilla/dom/public/nsIDOMWindow.h +++ b/mozilla/dom/public/nsIDOMWindow.h @@ -46,6 +46,21 @@ public: NS_IMETHOD GetOpener(nsIDOMWindow** aOpener)=0; + NS_IMETHOD GetParent(nsIDOMWindow** aParent)=0; + + NS_IMETHOD GetTop(nsIDOMWindow** aTop)=0; + + NS_IMETHOD GetClosed(PRBool* aClosed)=0; + + NS_IMETHOD GetStatus(nsString& aStatus)=0; + NS_IMETHOD SetStatus(const nsString& aStatus)=0; + + NS_IMETHOD GetDefaultStatus(nsString& aDefaultStatus)=0; + NS_IMETHOD SetDefaultStatus(const nsString& aDefaultStatus)=0; + + NS_IMETHOD GetName(nsString& aName)=0; + NS_IMETHOD SetName(const nsString& aName)=0; + NS_IMETHOD Dump(const nsString& aStr)=0; NS_IMETHOD Alert(const nsString& aStr)=0; @@ -68,6 +83,15 @@ public: NS_IMETHOD GetDocument(nsIDOMDocument** aDocument); \ NS_IMETHOD GetNavigator(nsIDOMNavigator** aNavigator); \ NS_IMETHOD GetOpener(nsIDOMWindow** aOpener); \ + NS_IMETHOD GetParent(nsIDOMWindow** aParent); \ + NS_IMETHOD GetTop(nsIDOMWindow** aTop); \ + NS_IMETHOD GetClosed(PRBool* aClosed); \ + NS_IMETHOD GetStatus(nsString& aStatus); \ + NS_IMETHOD SetStatus(const nsString& aStatus); \ + NS_IMETHOD GetDefaultStatus(nsString& aDefaultStatus); \ + NS_IMETHOD SetDefaultStatus(const nsString& aDefaultStatus); \ + NS_IMETHOD GetName(nsString& aName); \ + NS_IMETHOD SetName(const nsString& aName); \ NS_IMETHOD Dump(const nsString& aStr); \ NS_IMETHOD Alert(const nsString& aStr); \ NS_IMETHOD ClearTimeout(PRInt32 aTimerID); \ @@ -84,6 +108,15 @@ public: NS_IMETHOD GetDocument(nsIDOMDocument** aDocument) { return _to##GetDocument(aDocument); } \ NS_IMETHOD GetNavigator(nsIDOMNavigator** aNavigator) { return _to##GetNavigator(aNavigator); } \ NS_IMETHOD GetOpener(nsIDOMWindow** aOpener) { return _to##GetOpener(aOpener); } \ + NS_IMETHOD GetParent(nsIDOMWindow** aParent) { return _to##GetParent(aParent); } \ + NS_IMETHOD GetTop(nsIDOMWindow** aTop) { return _to##GetTop(aTop); } \ + NS_IMETHOD GetClosed(PRBool* aClosed) { return _to##GetClosed(aClosed); } \ + NS_IMETHOD GetStatus(nsString& aStatus) { return _to##GetStatus(aStatus); } \ + NS_IMETHOD SetStatus(const nsString& aStatus) { return _to##SetStatus(aStatus); } \ + NS_IMETHOD GetDefaultStatus(nsString& aDefaultStatus) { return _to##GetDefaultStatus(aDefaultStatus); } \ + NS_IMETHOD SetDefaultStatus(const nsString& aDefaultStatus) { return _to##SetDefaultStatus(aDefaultStatus); } \ + NS_IMETHOD GetName(nsString& aName) { return _to##GetName(aName); } \ + NS_IMETHOD SetName(const nsString& aName) { return _to##SetName(aName); } \ NS_IMETHOD Dump(const nsString& aStr) { return _to##Dump(aStr); } \ NS_IMETHOD Alert(const nsString& aStr) { return _to##Alert(aStr); } \ NS_IMETHOD ClearTimeout(PRInt32 aTimerID) { return _to##ClearTimeout(aTimerID); } \ diff --git a/mozilla/dom/src/base/nsGlobalWindow.cpp b/mozilla/dom/src/base/nsGlobalWindow.cpp index 498bc6f032e..d7b4e239046 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.cpp +++ b/mozilla/dom/src/base/nsGlobalWindow.cpp @@ -35,6 +35,10 @@ #include "nsIDOMMouseListener.h" #include "nsIDOMKeyListener.h" #include "nsIDOMMouseMotionListener.h" +#include "nsIDOMFocusListener.h" +#include "nsIDOMFormListener.h" +#include "nsIDOMLoadListener.h" +#include "nsIDOMDragListener.h" #include "nsIScriptEventListener.h" #include "nsIPrivateDOMEvent.h" #include "nsIBrowserWindow.h" @@ -54,10 +58,10 @@ static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID); static NS_DEFINE_IID(kIDOMMouseListenerIID, NS_IDOMMOUSELISTENER_IID); static NS_DEFINE_IID(kIDOMKeyListenerIID, NS_IDOMKEYLISTENER_IID); static NS_DEFINE_IID(kIDOMMouseMotionListenerIID, NS_IDOMMOUSEMOTIONLISTENER_IID); -static NS_DEFINE_IID(kIDOMFocusListenerIID, NS_IDOMMOUSELISTENER_IID); -static NS_DEFINE_IID(kIDOMFormListenerIID, NS_IDOMKEYLISTENER_IID); -static NS_DEFINE_IID(kIDOMLoadListenerIID, NS_IDOMMOUSEMOTIONLISTENER_IID); -static NS_DEFINE_IID(kIDOMDragListenerIID, NS_IDOMMOUSEMOTIONLISTENER_IID); +static NS_DEFINE_IID(kIDOMFocusListenerIID, NS_IDOMFOCUSLISTENER_IID); +static NS_DEFINE_IID(kIDOMFormListenerIID, NS_IDOMFORMLISTENER_IID); +static NS_DEFINE_IID(kIDOMLoadListenerIID, NS_IDOMLOADLISTENER_IID); +static NS_DEFINE_IID(kIDOMDragListenerIID, NS_IDOMDRAGLISTENER_IID); static NS_DEFINE_IID(kIEventListenerManagerIID, NS_IEVENTLISTENERMANAGER_IID); static NS_DEFINE_IID(kIPrivateDOMEventIID, NS_IPRIVATEDOMEVENT_IID); static NS_DEFINE_IID(kIDOMEventCapturerIID, NS_IDOMEVENTCAPTURER_IID); @@ -263,6 +267,37 @@ GlobalWindowImpl::GetNavigator(nsIDOMNavigator** aNavigator) return NS_OK; } +NS_IMETHODIMP +GlobalWindowImpl::GetOpener(nsIDOMWindow** aOpener) +{ + *aOpener = nsnull; + NS_IF_ADDREF(*aOpener); + + return NS_OK; +} + +NS_IMETHODIMP +GlobalWindowImpl::GetParent(nsIDOMWindow** aParent) +{ + nsresult ret = NS_OK; + nsIWebShell *mParentWebShell; + mWebShell->GetParent(mParentWebShell); + + if (nsnull != mParentWebShell) { + nsIScriptContextOwner *mParentContextOwner; + if (NS_OK == mParentWebShell->QueryInterface(kIScriptContextOwnerIID, (void**)mParentContextOwner)) { + nsIScriptGlobalObject *mParentGlobalObject; + if (NS_OK == mParentContextOwner->GetScriptGlobalObject(&mParentGlobalObject)) { + ret = mParentGlobalObject->QueryInterface(kIDOMWindowIID, (void**)aParent); + NS_RELEASE(mParentGlobalObject); + } + NS_RELEASE(mParentContextOwner); + } + NS_RELEASE(mParentWebShell); + } + return ret; +} + NS_IMETHODIMP GlobalWindowImpl::GetLocation(nsIDOMLocation** aLocation) { @@ -278,11 +313,84 @@ GlobalWindowImpl::GetLocation(nsIDOMLocation** aLocation) } NS_IMETHODIMP -GlobalWindowImpl::GetOpener(nsIDOMWindow** aOpener) +GlobalWindowImpl::GetTop(nsIDOMWindow** aTop) { - *aOpener = nsnull; - NS_IF_ADDREF(*aOpener); + nsresult ret = NS_OK; + nsIWebShell *mRootWebShell; + mWebShell->GetRootWebShell(mRootWebShell); + if (nsnull != mRootWebShell) { + nsIScriptContextOwner *mRootContextOwner; + if (NS_OK == mRootWebShell->QueryInterface(kIScriptContextOwnerIID, (void**)mRootContextOwner)) { + nsIScriptGlobalObject *mRootGlobalObject; + if (NS_OK == mRootContextOwner->GetScriptGlobalObject(&mRootGlobalObject)) { + ret = mRootGlobalObject->QueryInterface(kIDOMWindowIID, (void**)aTop); + NS_RELEASE(mRootGlobalObject); + } + NS_RELEASE(mRootContextOwner); + } + NS_RELEASE(mRootWebShell); + } + return ret; +} + +NS_IMETHODIMP +GlobalWindowImpl::GetClosed(PRBool* aClosed) +{ + if (nsnull == mDocument) { + *aClosed = PR_TRUE; + } + else { + *aClosed = PR_FALSE; + } + return NS_OK; +} + +NS_IMETHODIMP +GlobalWindowImpl::GetStatus(nsString& aStatus) +{ + nsIBrowserWindow *mBrowser; + if (NS_OK == GetBrowserWindowInterface(mBrowser)) { + mBrowser->GetStatus(aStatus); + NS_RELEASE(mBrowser); + } + return NS_OK; +} + +NS_IMETHODIMP +GlobalWindowImpl::SetStatus(const nsString& aStatus) +{ + nsIBrowserWindow *mBrowser; + if (NS_OK == GetBrowserWindowInterface(mBrowser)) { + mBrowser->SetStatus(aStatus); + NS_RELEASE(mBrowser); + } + return NS_OK; +} + +NS_IMETHODIMP +GlobalWindowImpl::GetDefaultStatus(nsString& aDefaultStatus) +{ + return NS_OK; +} + +NS_IMETHODIMP +GlobalWindowImpl::SetDefaultStatus(const nsString& aDefaultStatus) +{ + return NS_OK; +} + +NS_IMETHODIMP +GlobalWindowImpl::GetName(nsString& aName) +{ + mWebShell->GetName(aName); + return NS_OK; +} + +NS_IMETHODIMP +GlobalWindowImpl::SetName(const nsString& aName) +{ + mWebShell->SetName(aName); return NS_OK; } @@ -950,9 +1058,84 @@ GlobalWindowImpl::GetBrowserWindowInterface(nsIBrowserWindow*& aBrowser) return ret; } -PRBool +PRBool +GlobalWindowImpl::CheckForEventListener(JSContext *aContext, nsString& aPropName) +{ + nsIEventListenerManager *mManager = nsnull; + + if (aPropName == "onmousedown" || aPropName == "onmouseup" || aPropName == "onclick" || + aPropName == "onmouseover" || aPropName == "onmouseout") { + if (NS_OK == GetListenerManager(&mManager)) { + nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); + if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMMouseListenerIID)) { + NS_RELEASE(mManager); + return PR_FALSE; + } + } + } + else if (aPropName == "onkeydown" || aPropName == "onkeyup" || aPropName == "onkeypress") { + if (NS_OK == GetListenerManager(&mManager)) { + nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); + if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMKeyListenerIID)) { + NS_RELEASE(mManager); + return PR_FALSE; + } + } + } + else if (aPropName == "onmousemove") { + if (NS_OK == GetListenerManager(&mManager)) { + nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); + if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMMouseMotionListenerIID)) { + NS_RELEASE(mManager); + return PR_FALSE; + } + } + } + else if (aPropName == "onfocus" || aPropName == "onblur") { + if (NS_OK == GetListenerManager(&mManager)) { + nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); + if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFocusListenerIID)) { + NS_RELEASE(mManager); + return PR_FALSE; + } + } + } + else if (aPropName == "onsubmit" || aPropName == "onreset") { + if (NS_OK == GetListenerManager(&mManager)) { + nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); + if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) { + NS_RELEASE(mManager); + return PR_FALSE; + } + } + } + else if (aPropName == "onload" || aPropName == "onunload" || aPropName == "onabort" || + aPropName == "onerror") { + if (NS_OK == GetListenerManager(&mManager)) { + nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); + if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMLoadListenerIID)) { + NS_RELEASE(mManager); + return PR_FALSE; + } + } + } + NS_IF_RELEASE(mManager); + + return PR_TRUE; +} + +PRBool GlobalWindowImpl::AddProperty(JSContext *aContext, jsval aID, jsval *aVp) { + if (JS_TypeOfValue(aContext, *aVp) == JSTYPE_FUNCTION && JSVAL_IS_STRING(aID)) { + nsString mPropName; + nsAutoString mPrefix; + mPropName.SetString(JS_GetStringChars(JS_ValueToString(aContext, aID))); + mPrefix.SetString(mPropName, 2); + if (mPrefix == "on") { + return CheckForEventListener(aContext, mPropName); + } + } return PR_TRUE; } @@ -997,73 +1180,16 @@ GlobalWindowImpl::GetProperty(JSContext *aContext, jsval aID, jsval *aVp) return PR_TRUE; } -PRBool +PRBool GlobalWindowImpl::SetProperty(JSContext *aContext, jsval aID, jsval *aVp) { if (JS_TypeOfValue(aContext, *aVp) == JSTYPE_FUNCTION && JSVAL_IS_STRING(aID)) { - nsAutoString mPropName, mPrefix; - mPropName.SetString(JS_GetStringBytes(JS_ValueToString(aContext, aID))); + nsString mPropName; + nsAutoString mPrefix; + mPropName.SetString(JS_GetStringChars(JS_ValueToString(aContext, aID))); mPrefix.SetString(mPropName, 2); if (mPrefix == "on") { - nsIEventListenerManager *mManager = nsnull; - - if (mPropName == "onmousedown" || mPropName == "onmouseup" || mPropName == "onclick" || - mPropName == "onmouseover" || mPropName == "onmouseout") { - if (NS_OK == GetListenerManager(&mManager)) { - nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); - if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMMouseListenerIID)) { - NS_RELEASE(mManager); - return PR_FALSE; - } - } - } - else if (mPropName == "onkeydown" || mPropName == "onkeyup" || mPropName == "onkeypress") { - if (NS_OK == GetListenerManager(&mManager)) { - nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); - if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMKeyListenerIID)) { - NS_RELEASE(mManager); - return PR_FALSE; - } - } - } - else if (mPropName == "onmousemove") { - if (NS_OK == GetListenerManager(&mManager)) { - nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); - if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMMouseMotionListenerIID)) { - NS_RELEASE(mManager); - return PR_FALSE; - } - } - } - else if (mPropName == "onfocus" || mPropName == "onblur") { - if (NS_OK == GetListenerManager(&mManager)) { - nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); - if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFocusListenerIID)) { - NS_RELEASE(mManager); - return PR_FALSE; - } - } - } - else if (mPropName == "onsubmit" || mPropName == "onreset") { - if (NS_OK == GetListenerManager(&mManager)) { - nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); - if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) { - NS_RELEASE(mManager); - return PR_FALSE; - } - } - } - else if (mPropName == "onload" || mPropName == "onunload" || mPropName == "onabort" || - mPropName == "onerror") { - if (NS_OK == GetListenerManager(&mManager)) { - nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext); - if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMLoadListenerIID)) { - NS_RELEASE(mManager); - return PR_FALSE; - } - } - } - NS_IF_RELEASE(mManager); + return CheckForEventListener(aContext, mPropName); } } else if (JSVAL_IS_STRING(aID) && diff --git a/mozilla/dom/src/base/nsGlobalWindow.h b/mozilla/dom/src/base/nsGlobalWindow.h index de227418d40..e7a6909a4ea 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.h +++ b/mozilla/dom/src/base/nsGlobalWindow.h @@ -68,6 +68,19 @@ public: NS_IMETHOD GetNavigator(nsIDOMNavigator** aNavigator); NS_IMETHOD GetOpener(nsIDOMWindow** aOpener); NS_IMETHOD GetLocation(nsIDOMLocation** aLocation); + NS_IMETHOD GetParent(nsIDOMWindow** aOpener); + NS_IMETHOD GetTop(nsIDOMWindow** aTop); + NS_IMETHOD GetClosed(PRBool* aClosed); + + NS_IMETHOD GetStatus(nsString& aStatus); + NS_IMETHOD SetStatus(const nsString& aStatus); + + NS_IMETHOD GetDefaultStatus(nsString& aDefaultStatus); + NS_IMETHOD SetDefaultStatus(const nsString& aDefaultStatus); + + NS_IMETHOD GetName(nsString& aName); + NS_IMETHOD SetName(const nsString& aName); + NS_IMETHOD Dump(const nsString& aStr); NS_IMETHOD Alert(const nsString& aStr); NS_IMETHOD ClearTimeout(PRInt32 aTimerID); @@ -119,6 +132,7 @@ protected: nsresult GetBrowserWindowInterface(nsIBrowserWindow*& aBrowser); nsresult CheckWindowName(JSContext *cx, nsString& aName); int32 WinHasOption(char *options, char *name); + PRBool CheckForEventListener(JSContext *aContext, nsString& aPropName); nsIScriptContext *mContext; void *mScriptObject; diff --git a/mozilla/dom/src/base/nsJSWindow.cpp b/mozilla/dom/src/base/nsJSWindow.cpp index f47c6b6dc14..7e5f5105f74 100644 --- a/mozilla/dom/src/base/nsJSWindow.cpp +++ b/mozilla/dom/src/base/nsJSWindow.cpp @@ -49,7 +49,13 @@ enum Window_slots { WINDOW_SELF = -12, WINDOW_DOCUMENT = -13, WINDOW_NAVIGATOR = -14, - WINDOW_OPENER = -15 + WINDOW_OPENER = -15, + WINDOW_PARENT = -16, + WINDOW_TOP = -17, + WINDOW_CLOSED = -18, + WINDOW_STATUS = -19, + WINDOW_DEFAULTSTATUS = -110, + WINDOW_NAME = -111 }; /***********************************************************************/ @@ -203,6 +209,110 @@ GetWindowProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) } break; } + case WINDOW_PARENT: + { + nsIDOMWindow* prop; + if (NS_OK == a->GetParent(&prop)) { + // get the js object + if (prop != nsnull) { + nsIScriptObjectOwner *owner = nsnull; + if (NS_OK == prop->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) { + JSObject *object = nsnull; + nsIScriptContext *script_cx = (nsIScriptContext *)JS_GetContextPrivate(cx); + if (NS_OK == owner->GetScriptObject(script_cx, (void**)&object)) { + // set the return value + *vp = OBJECT_TO_JSVAL(object); + } + NS_RELEASE(owner); + } + NS_RELEASE(prop); + } + else { + *vp = JSVAL_NULL; + } + } + else { + return JS_FALSE; + } + break; + } + case WINDOW_TOP: + { + nsIDOMWindow* prop; + if (NS_OK == a->GetTop(&prop)) { + // get the js object + if (prop != nsnull) { + nsIScriptObjectOwner *owner = nsnull; + if (NS_OK == prop->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) { + JSObject *object = nsnull; + nsIScriptContext *script_cx = (nsIScriptContext *)JS_GetContextPrivate(cx); + if (NS_OK == owner->GetScriptObject(script_cx, (void**)&object)) { + // set the return value + *vp = OBJECT_TO_JSVAL(object); + } + NS_RELEASE(owner); + } + NS_RELEASE(prop); + } + else { + *vp = JSVAL_NULL; + } + } + else { + return JS_FALSE; + } + break; + } + case WINDOW_CLOSED: + { + PRBool prop; + if (NS_OK == a->GetClosed(&prop)) { + *vp = BOOLEAN_TO_JSVAL(prop); + } + else { + return JS_FALSE; + } + break; + } + case WINDOW_STATUS: + { + nsAutoString prop; + if (NS_OK == a->GetStatus(prop)) { + JSString *jsstring = JS_NewUCStringCopyN(cx, prop, prop.Length()); + // set the return value + *vp = STRING_TO_JSVAL(jsstring); + } + else { + return JS_FALSE; + } + break; + } + case WINDOW_DEFAULTSTATUS: + { + nsAutoString prop; + if (NS_OK == a->GetDefaultStatus(prop)) { + JSString *jsstring = JS_NewUCStringCopyN(cx, prop, prop.Length()); + // set the return value + *vp = STRING_TO_JSVAL(jsstring); + } + else { + return JS_FALSE; + } + break; + } + case WINDOW_NAME: + { + nsAutoString prop; + if (NS_OK == a->GetName(prop)) { + JSString *jsstring = JS_NewUCStringCopyN(cx, prop, prop.Length()); + // set the return value + *vp = STRING_TO_JSVAL(jsstring); + } + else { + return JS_FALSE; + } + break; + } default: { nsIJSScriptObject *object; @@ -244,7 +354,51 @@ SetWindowProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) if (JSVAL_IS_INT(id)) { switch(JSVAL_TO_INT(id)) { - case 0: + case WINDOW_STATUS: + { + nsAutoString prop; + JSString *jsstring; + if ((jsstring = JS_ValueToString(cx, *vp)) != nsnull) { + prop.SetString(JS_GetStringChars(jsstring)); + } + else { + prop.SetString((const char *)nsnull); + } + + a->SetStatus(prop); + + break; + } + case WINDOW_DEFAULTSTATUS: + { + nsAutoString prop; + JSString *jsstring; + if ((jsstring = JS_ValueToString(cx, *vp)) != nsnull) { + prop.SetString(JS_GetStringChars(jsstring)); + } + else { + prop.SetString((const char *)nsnull); + } + + a->SetDefaultStatus(prop); + + break; + } + case WINDOW_NAME: + { + nsAutoString prop; + JSString *jsstring; + if ((jsstring = JS_ValueToString(cx, *vp)) != nsnull) { + prop.SetString(JS_GetStringChars(jsstring)); + } + else { + prop.SetString((const char *)nsnull); + } + + a->SetName(prop); + + break; + } default: { nsIJSScriptObject *object; @@ -612,6 +766,12 @@ static JSPropertySpec WindowProperties[] = {"document", WINDOW_DOCUMENT, JSPROP_ENUMERATE | JSPROP_READONLY}, {"navigator", WINDOW_NAVIGATOR, JSPROP_ENUMERATE | JSPROP_READONLY}, {"opener", WINDOW_OPENER, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"parent", WINDOW_PARENT, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"top", WINDOW_TOP, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"closed", WINDOW_CLOSED, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"status", WINDOW_STATUS, JSPROP_ENUMERATE}, + {"defaultStatus", WINDOW_DEFAULTSTATUS, JSPROP_ENUMERATE}, + {"name", WINDOW_NAME, JSPROP_ENUMERATE}, {0} }; diff --git a/mozilla/layout/events/src/nsDOMEvent.h b/mozilla/layout/events/src/nsDOMEvent.h index ddd4a0b1f10..8d9f00c5137 100644 --- a/mozilla/layout/events/src/nsDOMEvent.h +++ b/mozilla/layout/events/src/nsDOMEvent.h @@ -45,9 +45,7 @@ public: nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent); virtual ~nsDOMEvent(); - NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr); - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); + NS_DECL_ISUPPORTS // nsIDOMEventInterface NS_IMETHOD GetType(nsString& aType); @@ -101,7 +99,6 @@ public: protected: - PRUint32 mRefCnt : 31; nsEvent *mEvent; nsIPresContext *mPresContext; diff --git a/mozilla/layout/events/src/nsEventListenerManager.h b/mozilla/layout/events/src/nsEventListenerManager.h index 8ec35a326ae..3a8614950f3 100644 --- a/mozilla/layout/events/src/nsEventListenerManager.h +++ b/mozilla/layout/events/src/nsEventListenerManager.h @@ -34,9 +34,7 @@ public: nsEventListenerManager(); virtual ~nsEventListenerManager(); - NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr); - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); + NS_DECL_ISUPPORTS nsVoidArray** GetListenersByIID(const nsIID& aIID); @@ -77,8 +75,6 @@ public: protected: nsresult SetJSEventListener(nsIScriptContext *aContext, JSObject *aObject, REFNSIID aIID); - PRUint32 mRefCnt : 31; - nsVoidArray* mEventListeners; nsVoidArray* mMouseListeners; nsVoidArray* mMouseMotionListeners; diff --git a/mozilla/layout/events/src/nsEventStateManager.h b/mozilla/layout/events/src/nsEventStateManager.h index f98ad844970..7271fbf41dc 100644 --- a/mozilla/layout/events/src/nsEventStateManager.h +++ b/mozilla/layout/events/src/nsEventStateManager.h @@ -32,9 +32,7 @@ public: nsEventStateManager(); virtual ~nsEventStateManager(); - NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr); - NS_IMETHOD_(nsrefcnt) AddRef(); - NS_IMETHOD_(nsrefcnt) Release(); + NS_DECL_ISUPPORTS NS_IMETHOD GetEventTarget(nsISupports **aResult); NS_IMETHOD SetEventTarget(nsISupports *aSupports); @@ -46,8 +44,6 @@ public: NS_IMETHOD SetActiveLink(nsIContent *aLink); protected: - PRUint32 mRefCnt : 31; - nsISupports* mEventTarget; nsIContent* mLastMouseOverContent; nsIContent *mActiveLink;