? content/xml/document/resources/Makefile ? dom/src/build/dependentLibs.h Index: content/html/content/src/nsGenericHTMLElement.cpp =================================================================== RCS file: /cvsroot/mozilla/content/html/content/src/nsGenericHTMLElement.cpp,v retrieving revision 1.453 diff -u -r1.453 nsGenericHTMLElement.cpp --- content/html/content/src/nsGenericHTMLElement.cpp 21 Nov 2003 00:59:15 -0000 1.453 +++ content/html/content/src/nsGenericHTMLElement.cpp 29 Nov 2003 07:53:53 -0000 @@ -964,6 +964,109 @@ return rv; } +// Leon. For testing. +nsresult +nsGenericHTMLElement::GetOuterHTML(nsAString& aOuterHTML) +{ + aOuterHTML.Truncate(); + + nsCOMPtr doc; + //mNodeInfo->GetDocument(getter_AddRefs(doc)); + doc = mNodeInfo->GetDocument(); + if (!doc) { + return NS_OK; // We rely on the document for doing HTML conversion + } + + nsCOMPtr thisNode(do_QueryInterface(NS_STATIC_CAST(nsIContent *, + this))); + nsresult rv = NS_OK; + + nsCOMPtr docEncoder; + docEncoder = do_CreateInstance(NS_DOC_ENCODER_CONTRACTID_BASE "text/html"); + + NS_ENSURE_TRUE(docEncoder, NS_ERROR_FAILURE); + + docEncoder->Init(doc, NS_LITERAL_STRING("text/html"), 0); + + nsCOMPtr range(new nsRange); + NS_ENSURE_TRUE(range, NS_ERROR_OUT_OF_MEMORY); + + rv = range->SelectNode(thisNode); + NS_ENSURE_SUCCESS(rv, rv); + + docEncoder->SetRange(range); + + docEncoder->EncodeToString(aOuterHTML); + + return rv; +} + +nsresult +nsGenericHTMLElement::SetOuterHTML(const nsAString& aOuterHTML) +{ + nsresult rv = NS_OK; + + nsCOMPtr range = new nsRange; + NS_ENSURE_TRUE(range, NS_ERROR_OUT_OF_MEMORY); + + nsCOMPtr nsrange(do_QueryInterface(range, &rv)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr thisNode(do_QueryInterface(NS_STATIC_CAST(nsIContent *, + this))); + rv = range->SelectNode(thisNode); + NS_ENSURE_SUCCESS(rv, rv); + + rv = range->DeleteContents(); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr df; + + nsCOMPtr doc; + //mNodeInfo->GetDocument(getter_AddRefs(doc)); + doc = mNodeInfo->GetDocument(); + + nsCOMPtr scx; + PRBool scripts_enabled = PR_FALSE; + + if (doc) { + nsCOMPtr sgo; + + sgo = doc->GetScriptGlobalObject(); + + if (sgo) { + sgo->GetContext(getter_AddRefs(scx)); + + if (scx) { + scx->GetScriptsEnabled(&scripts_enabled); + } + } + } + + if (scripts_enabled) { + // Don't let scripts execute while setting .innerHTML. + + scx->SetScriptsEnabled(PR_FALSE, PR_FALSE); + } + + rv = nsrange->CreateContextualFragment(aOuterHTML, getter_AddRefs(df)); + + if (NS_SUCCEEDED(rv)) { + range->InsertNode(df); + } + + if (scripts_enabled) { + // If we disabled scripts, re-enable them now that we're + // done. Don't fire JS timeouts when enabling the context here. + + scx->SetScriptsEnabled(PR_TRUE, PR_FALSE); + } + + return rv; + +} +// Leon. For testing. + nsresult nsGenericHTMLElement::GetScrollInfo(nsIScrollableView **aScrollableView, float *aP2T, float *aT2P, Index: content/html/content/src/nsGenericHTMLElement.h =================================================================== RCS file: /cvsroot/mozilla/content/html/content/src/nsGenericHTMLElement.h,v retrieving revision 1.160 diff -u -r1.160 nsGenericHTMLElement.h --- content/html/content/src/nsGenericHTMLElement.h 7 Nov 2003 09:47:17 -0000 1.160 +++ content/html/content/src/nsGenericHTMLElement.h 29 Nov 2003 07:53:53 -0000 @@ -141,6 +141,8 @@ nsresult GetOffsetParent(nsIDOMElement** aOffsetParent); virtual nsresult GetInnerHTML(nsAString& aInnerHTML); virtual nsresult SetInnerHTML(const nsAString& aInnerHTML); + nsresult GetOuterHTML(nsAString& aOuterHTML); + nsresult SetOuterHTML(const nsAString& aOuterHTML); nsresult GetScrollTop(PRInt32* aScrollTop); nsresult SetScrollTop(PRInt32 aScrollTop); nsresult GetScrollLeft(PRInt32* aScrollLeft); Index: content/html/document/src/nsHTMLDocument.cpp =================================================================== RCS file: /cvsroot/mozilla/content/html/document/src/nsHTMLDocument.cpp,v retrieving revision 3.521 diff -u -r3.521 nsHTMLDocument.cpp --- content/html/document/src/nsHTMLDocument.cpp 19 Nov 2003 01:20:40 -0000 3.521 +++ content/html/document/src/nsHTMLDocument.cpp 29 Nov 2003 07:53:54 -0000 @@ -413,6 +413,7 @@ mImageMaps.Clear(); mForms = nsnull; + mAll = nsnull; if (aURL) { if (!mAttrStyleSheet) { @@ -3796,6 +3797,21 @@ return NS_OK; } +NS_IMETHODIMP +nsHTMLDocument::GetAll(nsIDOMHTMLCollection** aAll) +{ + if (!mAll) { + mAll = new nsContentList(this, nsLayoutAtoms::wildcard, + kNameSpaceID_Unknown); + NS_ENSURE_TRUE(mAll, NS_ERROR_OUT_OF_MEMORY); + } + + *aAll = mAll; + NS_ADDREF(*aAll); + + return NS_OK; + +} nsresult nsHTMLDocument::CreateAndAddWyciwygChannel(void) Index: content/html/document/src/nsHTMLDocument.h =================================================================== RCS file: /cvsroot/mozilla/content/html/document/src/nsHTMLDocument.h,v retrieving revision 3.148 diff -u -r3.148 nsHTMLDocument.h --- content/html/document/src/nsHTMLDocument.h 14 Nov 2003 11:10:11 -0000 3.148 +++ content/html/document/src/nsHTMLDocument.h 29 Nov 2003 07:53:54 -0000 @@ -286,6 +286,7 @@ nsCOMPtr mLinks; nsCOMPtr mAnchors; nsCOMPtr mForms; + nsCOMPtr mAll; nsCOMPtr mParser; Index: dom/public/idl/html/nsIDOMNSHTMLDocument.idl =================================================================== RCS file: /cvsroot/mozilla/dom/public/idl/html/nsIDOMNSHTMLDocument.idl,v retrieving revision 1.13 diff -u -r1.13 nsIDOMNSHTMLDocument.idl --- dom/public/idl/html/nsIDOMNSHTMLDocument.idl 19 Apr 2003 16:53:44 -0000 1.13 +++ dom/public/idl/html/nsIDOMNSHTMLDocument.idl 29 Nov 2003 07:53:55 -0000 @@ -72,6 +72,7 @@ // mapped to attribute embeds for NS4 compat readonly attribute nsIDOMHTMLCollection plugins; + readonly attribute nsIDOMHTMLCollection all; /** Index: dom/public/idl/html/nsIDOMNSHTMLElement.idl =================================================================== RCS file: /cvsroot/mozilla/dom/public/idl/html/nsIDOMNSHTMLElement.idl,v retrieving revision 1.4 diff -u -r1.4 nsIDOMNSHTMLElement.idl --- dom/public/idl/html/nsIDOMNSHTMLElement.idl 17 Oct 2001 01:17:44 -0000 1.4 +++ dom/public/idl/html/nsIDOMNSHTMLElement.idl 29 Nov 2003 07:53:55 -0000 @@ -48,6 +48,7 @@ readonly attribute long offsetHeight; readonly attribute nsIDOMElement offsetParent; attribute DOMString innerHTML; + attribute DOMString outerHTML; attribute long scrollTop; attribute long scrollLeft; Index: dom/src/base/nsDOMClassInfo.cpp =================================================================== RCS file: /cvsroot/mozilla/dom/src/base/nsDOMClassInfo.cpp,v retrieving revision 1.188 diff -u -r1.188 nsDOMClassInfo.cpp --- dom/src/base/nsDOMClassInfo.cpp 18 Nov 2003 01:59:51 -0000 1.188 +++ dom/src/base/nsDOMClassInfo.cpp 29 Nov 2003 07:53:56 -0000 @@ -3089,6 +3089,20 @@ } } } + // Added by leon. For testing. + if (JSVAL_IS_VOID(*vp)) { + nsCOMPtr result; + + ResolveImpl(cx, wrapper, id, getter_AddRefs(result)); + + if (result) { + int rv = WrapNative(cx, ::JS_GetGlobalObject(cx), result, + NS_GET_IID(nsIDOMElement), vp); + NS_ENSURE_SUCCESS(rv, rv); + } + } + // Added by leon. For testing. + if (needsSecurityCheck(cx, wrapper)) { // Even if we'd need to do a security check for access to "normal" @@ -3139,6 +3153,73 @@ return NS_OK; } +// Added by leon. For testing. +nsresult +nsWindowSH::ResolveImpl(JSContext *cx, + nsIXPConnectWrappedNative *wrapper, jsval id, + nsIDOMElement **result) +{ + // see comment in nsDocumentSH::ResolveImpl about + // usage of JS_ValueToString instead of JSVAL_TO_STRING + + JSString *str = JS_ValueToString(cx, id); + + const nsDependentString name(NS_REINTERPRET_CAST(const PRUnichar *, + ::JS_GetStringChars(str)), + ::JS_GetStringLength(str)); + if (name.Equals(NS_LITERAL_STRING("_content")) || name.Equals(NS_LITERAL_STRING("content"))) { + return NS_OK; + } + nsCOMPtr native; + + wrapper->GetNative(getter_AddRefs(native)); + NS_ABORT_IF_FALSE(native, "No native!"); + + nsCOMPtr window(do_QueryInterface(native)); + NS_ENSURE_TRUE(window, NS_ERROR_UNEXPECTED); + + nsCOMPtr doc; + + window->GetDocument(getter_AddRefs(doc)); + if (!doc) { + return NS_OK; + } + + nsCOMPtr html_doc(do_QueryInterface(doc)); + + if (!html_doc) { + return NS_OK; + } + + + // fprintf(stderr, "nsWindowSH::GetProperty querying property %s\n", NS_ConvertUCS2toUTF8(name).get()); + int rv = doc->GetElementById(name, result); +// if (!(*result)) { +// fprintf(stderr, "Could not resolve window property through document.getElementById()\n"); +// } else { +// fprintf(stderr, "Window property resolved through document.getElementById()\n"); +// } + + if (NS_FAILED(rv)) { + fprintf(stderr, "document.getElementById() produced an exception\n"); + return NS_ERROR_FAILURE; + } + if (!(*result)) { + nsCOMPtr oresult; + rv = html_doc->ResolveName(name, nsnull, getter_AddRefs(oresult)); + if (NS_FAILED(rv)) { + // fprintf(stderr, "document.ResolveName() produced an exception\n"); + return NS_ERROR_FAILURE; + } + if (oresult) { + // fprintf(stderr, "Window property resolved through document.ResolveName()\n"); + CallQueryInterface(oresult, result); + } + } + return rv; +} +// Added by leon. For testing. + NS_IMETHODIMP nsWindowSH::SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx, JSObject *obj, jsval id, jsval *vp, PRBool *_retval) @@ -4333,6 +4414,30 @@ return NS_OK; } } + + // Added by leon. For testing. + // Now try window.the_id where "the_id" is defined as + + nsCOMPtr result; + + rv = ResolveImpl(cx, wrapper, id, getter_AddRefs(result)); + if (rv == NS_OK) { + if (result) { + jsval v; + rv = WrapNative(cx, ::JS_GetGlobalObject(cx), result, + NS_GET_IID(nsIDOMElement), &v); + NS_ENSURE_SUCCESS(rv, rv); + PRBool ok = ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str), + ::JS_GetStringLength(str), v, nsnull, + nsnull, 0); + if (!ok) { + return NS_ERROR_FAILURE; + } + *objp = obj; + return NS_OK; + } + } + // Added by leon. For testing. return nsEventReceiverSH::NewResolve(wrapper, cx, obj, id, flags, objp, _retval); Index: dom/src/base/nsDOMClassInfo.h =================================================================== RCS file: /cvsroot/mozilla/dom/src/base/nsDOMClassInfo.h,v retrieving revision 1.63 diff -u -r1.63 nsDOMClassInfo.h --- dom/src/base/nsDOMClassInfo.h 18 Nov 2003 01:59:51 -0000 1.63 +++ dom/src/base/nsDOMClassInfo.h 29 Nov 2003 07:53:57 -0000 @@ -44,6 +44,7 @@ #include "nsIXPCScriptable.h" #include "jsapi.h" #include "nsIScriptSecurityManager.h" +#include "nsIDOMElement.h" class nsIDOMWindow; class nsIDOMNSHTMLOptionCollection; @@ -328,6 +329,9 @@ { } + static nsresult ResolveImpl(JSContext *cx, + nsIXPConnectWrappedNative *wrapper, jsval id, + nsIDOMElement **result); static nsresult GlobalResolve(nsISupports *aNative, JSContext *cx, JSObject *obj, JSString *str, PRUint32 flags, PRBool *did_resolve);