From f614c92aba5be823d7de24385ad766a43862f487 Mon Sep 17 00:00:00 2001 From: "vidur%netscape.com" Date: Wed, 6 Oct 1999 20:33:58 +0000 Subject: [PATCH] Added document.width/document.height to nsIDOMNSDocument. Bug 961. R: troy git-svn-id: svn://10.0.0.236/trunk@50007 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xul/document/src/nsXULDocument.cpp | 15 +++++ mozilla/dom/public/coreDom/nsIDOMNSDocument.h | 8 +++ mozilla/dom/public/idl/coreDom/Document.idl | 2 + mozilla/dom/src/base/nsJSEnvironment.cpp | 2 +- mozilla/dom/src/coreDOM/nsJSDocument.cpp | 58 ++++++++++++++++++- mozilla/rdf/content/src/nsXULDocument.cpp | 15 +++++ 6 files changed, 98 insertions(+), 2 deletions(-) diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index 62cf5340803..036909400ea 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -424,6 +424,8 @@ public: NS_IMETHOD GetStyleSheets(nsIDOMStyleSheetCollection** aStyleSheets); NS_IMETHOD CreateElementWithNameSpace(const nsString& aTagName, const nsString& aNameSpace, nsIDOMElement** aResult); NS_IMETHOD CreateRange(nsIDOMRange** aRange); + NS_IMETHOD GetWidth(PRInt32* aWidth); + NS_IMETHOD GetHeight(PRInt32* aHeight); // nsIDOMXULDocument interface NS_DECL_IDOMXULDOCUMENT @@ -2937,6 +2939,19 @@ XULDocumentImpl::CreateRange(nsIDOMRange** aRange) return NS_ERROR_NOT_IMPLEMENTED; } +NS_IMETHODIMP +XULDocumentImpl::GetWidth(PRInt32* aWidth) +{ + NS_NOTYETIMPLEMENTED("write me!"); + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +XULDocumentImpl::GetHeight(PRInt32* aHeight) +{ + NS_NOTYETIMPLEMENTED("write me!"); + return NS_ERROR_NOT_IMPLEMENTED; +} //////////////////////////////////////////////////////////////////////// // nsIDOMXULDocument interface diff --git a/mozilla/dom/public/coreDom/nsIDOMNSDocument.h b/mozilla/dom/public/coreDom/nsIDOMNSDocument.h index e3c693d8e35..96d8d7f3897 100644 --- a/mozilla/dom/public/coreDom/nsIDOMNSDocument.h +++ b/mozilla/dom/public/coreDom/nsIDOMNSDocument.h @@ -36,6 +36,10 @@ class nsIDOMNSDocument : public nsISupports { public: static const nsIID& GetIID() { static nsIID iid = NS_IDOMNSDOCUMENT_IID; return iid; } + NS_IMETHOD GetWidth(PRInt32* aWidth)=0; + + NS_IMETHOD GetHeight(PRInt32* aHeight)=0; + NS_IMETHOD GetStyleSheets(nsIDOMStyleSheetCollection** aStyleSheets)=0; NS_IMETHOD CreateElementWithNameSpace(const nsString& aTagName, const nsString& aNameSpace, nsIDOMElement** aReturn)=0; @@ -45,6 +49,8 @@ public: #define NS_DECL_IDOMNSDOCUMENT \ + NS_IMETHOD GetWidth(PRInt32* aWidth); \ + NS_IMETHOD GetHeight(PRInt32* aHeight); \ NS_IMETHOD GetStyleSheets(nsIDOMStyleSheetCollection** aStyleSheets); \ NS_IMETHOD CreateElementWithNameSpace(const nsString& aTagName, const nsString& aNameSpace, nsIDOMElement** aReturn); \ NS_IMETHOD CreateRange(nsIDOMRange** aReturn); \ @@ -52,6 +58,8 @@ public: #define NS_FORWARD_IDOMNSDOCUMENT(_to) \ + NS_IMETHOD GetWidth(PRInt32* aWidth) { return _to GetWidth(aWidth); } \ + NS_IMETHOD GetHeight(PRInt32* aHeight) { return _to GetHeight(aHeight); } \ NS_IMETHOD GetStyleSheets(nsIDOMStyleSheetCollection** aStyleSheets) { return _to GetStyleSheets(aStyleSheets); } \ NS_IMETHOD CreateElementWithNameSpace(const nsString& aTagName, const nsString& aNameSpace, nsIDOMElement** aReturn) { return _to CreateElementWithNameSpace(aTagName, aNameSpace, aReturn); } \ NS_IMETHOD CreateRange(nsIDOMRange** aReturn) { return _to CreateRange(aReturn); } \ diff --git a/mozilla/dom/public/idl/coreDom/Document.idl b/mozilla/dom/public/idl/coreDom/Document.idl index 8a2837d5d0e..fe9eb4d60dd 100644 --- a/mozilla/dom/public/idl/coreDom/Document.idl +++ b/mozilla/dom/public/idl/coreDom/Document.idl @@ -26,6 +26,8 @@ /* IID: { 0xa6cf90cd, 0x15b3, 0x11d2, \ { 0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32} } */ + readonly attribute long width; + readonly attribute long height; readonly attribute StyleSheetCollection styleSheets; Element createElementWithNameSpace(in DOMString tagName, in DOMString nameSpace) diff --git a/mozilla/dom/src/base/nsJSEnvironment.cpp b/mozilla/dom/src/base/nsJSEnvironment.cpp index a201130e1aa..cfaffada7a2 100644 --- a/mozilla/dom/src/base/nsJSEnvironment.cpp +++ b/mozilla/dom/src/base/nsJSEnvironment.cpp @@ -66,7 +66,7 @@ NS_ScriptErrorReporter(JSContext *cx, if (context) { nsresult result = context->GetOwner(&owner); - if (NS_SUCCEEDED(result)) { + if (NS_SUCCEEDED(result) && owner) { const char* error; if (message) { error = message; diff --git a/mozilla/dom/src/coreDOM/nsJSDocument.cpp b/mozilla/dom/src/coreDOM/nsJSDocument.cpp index 0029f77773b..b458eea3f5a 100644 --- a/mozilla/dom/src/coreDOM/nsJSDocument.cpp +++ b/mozilla/dom/src/coreDOM/nsJSDocument.cpp @@ -88,7 +88,9 @@ enum Document_slots { DOCUMENT_DOCTYPE = -1, DOCUMENT_IMPLEMENTATION = -2, DOCUMENT_DOCUMENTELEMENT = -3, - NSDOCUMENT_STYLESHEETS = -4 + NSDOCUMENT_WIDTH = -4, + NSDOCUMENT_HEIGHT = -5, + NSDOCUMENT_STYLESHEETS = -6 }; /***********************************************************************/ @@ -169,6 +171,58 @@ GetDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) } break; } + case NSDOCUMENT_WIDTH: + { + PRBool ok = PR_FALSE; + secMan->CheckScriptAccess(scriptCX, obj, "nsdocument.width", PR_FALSE, &ok); + if (!ok) { + return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR); + } + PRInt32 prop; + nsIDOMNSDocument* b; + if (NS_OK == a->QueryInterface(kINSDocumentIID, (void **)&b)) { + nsresult result = NS_OK; + result = b->GetWidth(&prop); + if(NS_SUCCEEDED(result)) { + *vp = INT_TO_JSVAL(prop); + NS_RELEASE(b); + } + else { + NS_RELEASE(b); + return nsJSUtils::nsReportError(cx, result); + } + } + else { + return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_WRONG_TYPE_ERR); + } + break; + } + case NSDOCUMENT_HEIGHT: + { + PRBool ok = PR_FALSE; + secMan->CheckScriptAccess(scriptCX, obj, "nsdocument.height", PR_FALSE, &ok); + if (!ok) { + return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_SECURITY_ERR); + } + PRInt32 prop; + nsIDOMNSDocument* b; + if (NS_OK == a->QueryInterface(kINSDocumentIID, (void **)&b)) { + nsresult result = NS_OK; + result = b->GetHeight(&prop); + if(NS_SUCCEEDED(result)) { + *vp = INT_TO_JSVAL(prop); + NS_RELEASE(b); + } + else { + NS_RELEASE(b); + return nsJSUtils::nsReportError(cx, result); + } + } + else { + return nsJSUtils::nsReportError(cx, NS_ERROR_DOM_WRONG_TYPE_ERR); + } + break; + } case NSDOCUMENT_STYLESHEETS: { PRBool ok = PR_FALSE; @@ -849,6 +903,8 @@ static JSPropertySpec DocumentProperties[] = {"doctype", DOCUMENT_DOCTYPE, JSPROP_ENUMERATE | JSPROP_READONLY}, {"implementation", DOCUMENT_IMPLEMENTATION, JSPROP_ENUMERATE | JSPROP_READONLY}, {"documentElement", DOCUMENT_DOCUMENTELEMENT, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"width", NSDOCUMENT_WIDTH, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"height", NSDOCUMENT_HEIGHT, JSPROP_ENUMERATE | JSPROP_READONLY}, {"styleSheets", NSDOCUMENT_STYLESHEETS, JSPROP_ENUMERATE | JSPROP_READONLY}, {0} }; diff --git a/mozilla/rdf/content/src/nsXULDocument.cpp b/mozilla/rdf/content/src/nsXULDocument.cpp index 62cf5340803..036909400ea 100644 --- a/mozilla/rdf/content/src/nsXULDocument.cpp +++ b/mozilla/rdf/content/src/nsXULDocument.cpp @@ -424,6 +424,8 @@ public: NS_IMETHOD GetStyleSheets(nsIDOMStyleSheetCollection** aStyleSheets); NS_IMETHOD CreateElementWithNameSpace(const nsString& aTagName, const nsString& aNameSpace, nsIDOMElement** aResult); NS_IMETHOD CreateRange(nsIDOMRange** aRange); + NS_IMETHOD GetWidth(PRInt32* aWidth); + NS_IMETHOD GetHeight(PRInt32* aHeight); // nsIDOMXULDocument interface NS_DECL_IDOMXULDOCUMENT @@ -2937,6 +2939,19 @@ XULDocumentImpl::CreateRange(nsIDOMRange** aRange) return NS_ERROR_NOT_IMPLEMENTED; } +NS_IMETHODIMP +XULDocumentImpl::GetWidth(PRInt32* aWidth) +{ + NS_NOTYETIMPLEMENTED("write me!"); + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +XULDocumentImpl::GetHeight(PRInt32* aHeight) +{ + NS_NOTYETIMPLEMENTED("write me!"); + return NS_ERROR_NOT_IMPLEMENTED; +} //////////////////////////////////////////////////////////////////////// // nsIDOMXULDocument interface