Adding more window properties and slightly refCnt declaration.
git-svn-id: svn://10.0.0.236/trunk@7990 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
aa3ae981e5
commit
dc5a875ea9
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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); } \
|
||||
|
||||
@ -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) &&
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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}
|
||||
};
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user