From 338feb13848afafd3e5480907a53542256b26695 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 4 Jun 2011 08:57:23 +0200 Subject: [PATCH] Bug 660669 - Remove nsHTMLDocument::OpenCommon; r=bz --- content/html/document/src/nsHTMLDocument.cpp | 121 ++++++++----------- content/html/document/src/nsHTMLDocument.h | 2 - 2 files changed, 50 insertions(+), 73 deletions(-) diff --git a/content/html/document/src/nsHTMLDocument.cpp b/content/html/document/src/nsHTMLDocument.cpp index 0922b6545542..4999e9292af6 100644 --- a/content/html/document/src/nsHTMLDocument.cpp +++ b/content/html/document/src/nsHTMLDocument.cpp @@ -991,7 +991,7 @@ nsHTMLDocument::StopDocumentLoad() mWriteState = eDocumentClosed; // Remove the wyciwyg channel request from the document load group - // that we added in OpenCommon(). + // that we added in Open(). NS_ASSERTION(mWyciwygChannel, "nsHTMLDocument::StopDocumentLoad(): " "Trying to remove nonexistent wyciwyg channel!"); RemoveWyciwygChannel(); @@ -1516,33 +1516,50 @@ nsHTMLDocument::SetCookie(const nsAString& aCookie) return NS_OK; } -nsresult -nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, - PRBool aReplace) +NS_IMETHODIMP +nsHTMLDocument::Open(const nsAString& aContentTypeOrUrl, + const nsAString& aReplaceOrName, + const nsAString& aFeatures, + JSContext* cx, PRUint8 aOptionalArgCount, + nsISupports** aReturn) { - if (!IsHTML() || mDisableDocWrite) { - // No calling document.open() on XHTML - - return NS_ERROR_DOM_INVALID_STATE_ERR; - } - - PRBool loadAsHtml5 = nsHtml5Module::sEnabled; - - nsresult rv = NS_OK; - - // If we already have a parser we ignore the document.open call. - if (mParser) { - - return NS_OK; - } - NS_ASSERTION(nsContentUtils::CanCallerAccess(static_cast(this)), "XOW should have caught this!"); - if (!aContentType.EqualsLiteral("text/html") && - !aContentType.EqualsLiteral("text/plain")) { - NS_WARNING("Unsupported type; fix the caller"); - return NS_ERROR_DOM_NOT_SUPPORTED_ERR; + // When called with 3 or more arguments, document.open() calls window.open(). + if (aOptionalArgCount > 2) { + nsCOMPtr window = GetWindowInternal(); + if (!window) { + return NS_OK; + } + nsCOMPtr newWindow; + nsresult rv = window->Open(aContentTypeOrUrl, aReplaceOrName, aFeatures, + getter_AddRefs(newWindow)); + *aReturn = newWindow.forget().get(); + return rv; + } + + if (!IsHTML() || mDisableDocWrite) { + // No calling document.open() on XHTML + return NS_ERROR_DOM_INVALID_STATE_ERR; + } + + nsCAutoString contentType; + contentType.AssignLiteral("text/html"); + if (aOptionalArgCount > 0) { + nsAutoString type; + ToLowerCase(aContentTypeOrUrl, type); + nsCAutoString actualType, dummy; + NS_ParseContentType(NS_ConvertUTF16toUTF8(type), actualType, dummy); + if (!actualType.EqualsLiteral("text/html") && + !type.EqualsLiteral("replace")) { + contentType.AssignLiteral("text/plain"); + } + } + + // If we already have a parser we ignore the document.open call. + if (mParser) { + return NS_OK; } // check whether we're in the middle of unload. If so, ignore this call. @@ -1602,7 +1619,7 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, if (thisURI) { thisURI->GetSpec(thisSpec); } - printf("nsHTMLDocument::OpenCommon callerDoc %s this %s\n", callerSpec.get(), thisSpec.get()); + printf("nsHTMLDocument::Open callerDoc %s this %s\n", callerSpec.get(), thisSpec.get()); #endif return NS_ERROR_DOM_SECURITY_ERR; @@ -1615,9 +1632,7 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, if (cv) { PRBool okToUnload; - rv = cv->PermitUnload(PR_FALSE, &okToUnload); - - if (NS_SUCCEEDED(rv) && !okToUnload) { + if (NS_SUCCEEDED(cv->PermitUnload(PR_FALSE, &okToUnload)) && !okToUnload) { // We don't want to unload, so stop here, but don't throw an // exception. return NS_OK; @@ -1639,7 +1654,7 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, nsCOMPtr channel; nsCOMPtr group = do_QueryReferent(mDocumentLoadGroup); - rv = NS_NewChannel(getter_AddRefs(channel), uri, nsnull, group); + nsresult rv = NS_NewChannel(getter_AddRefs(channel), uri, nsnull, group); if (NS_FAILED(rv)) { return rv; @@ -1700,6 +1715,7 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, // resetting the document. mSecurityInfo = securityInfo; + PRBool loadAsHtml5 = nsHtml5Module::sEnabled; if (loadAsHtml5) { mParser = nsHtml5Module::NewHtml5Parser(); rv = NS_OK; @@ -1708,7 +1724,7 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, } // This will be propagated to the parser when someone actually calls write() - SetContentTypeInternal(NS_ConvertUTF16toUTF8(aContentType)); + SetContentTypeInternal(contentType); mWriteState = eDocumentOpened; @@ -1739,7 +1755,9 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, // so, we need to tell the docshell to not create a new history // entry for this load. Otherwise, make sure that we're doing a normal load, // not whatever type of load was previously done on this docshell. - shell->SetLoadType(aReplace ? LOAD_NORMAL_REPLACE : LOAD_NORMAL); + shell->SetLoadType( + (aOptionalArgCount > 1 && aReplaceOrName.EqualsLiteral("replace")) + ? LOAD_NORMAL_REPLACE : LOAD_NORMAL); nsCOMPtr cv; shell->GetContentViewer(getter_AddRefs(cv)); @@ -1749,7 +1767,7 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, } // Add a wyciwyg channel request into the document load group - NS_ASSERTION(!mWyciwygChannel, "nsHTMLDocument::OpenCommon(): wyciwyg " + NS_ASSERTION(!mWyciwygChannel, "nsHTMLDocument::Open(): wyciwyg " "channel already exists!"); // In case the editor is listening and will see the new channel @@ -1762,46 +1780,7 @@ nsHTMLDocument::OpenCommon(JSContext* cx, const nsAString& aContentType, --mWriteLevel; - return rv; -} - -NS_IMETHODIMP -nsHTMLDocument::Open(const nsAString& aContentTypeOrUrl, - const nsAString& aReplaceOrName, - const nsAString& aFeatures, - JSContext* cx, PRUint8 aOptionalArgCount, - nsISupports** aReturn) -{ - // When called with 3 or more arguments, document.open() calls window.open(). - if (aOptionalArgCount > 2) { - nsCOMPtr window = GetWindowInternal(); - if (!window) { - return NS_OK; - } - nsCOMPtr newWindow; - nsresult rv = window->Open(aContentTypeOrUrl, aReplaceOrName, aFeatures, - getter_AddRefs(newWindow)); - *aReturn = newWindow.forget().get(); - return rv; - } - - nsAutoString contentType; - contentType.AssignLiteral("text/html"); - if (aOptionalArgCount > 0) { - nsAutoString type; - ToLowerCase(aContentTypeOrUrl, type); - nsCAutoString actualType, dummy; - NS_ParseContentType(NS_ConvertUTF16toUTF8(type), actualType, dummy); - if (!actualType.EqualsLiteral("text/html") && - !type.EqualsLiteral("replace")) { - contentType.AssignLiteral("text/plain"); - } - } - - nsresult rv = OpenCommon(cx, contentType, - aOptionalArgCount > 1 && aReplaceOrName.EqualsLiteral("replace")); NS_ENSURE_SUCCESS(rv, rv); - return CallQueryInterface(this, aReturn); } diff --git a/content/html/document/src/nsHTMLDocument.h b/content/html/document/src/nsHTMLDocument.h index 336f2c6569b1..b00c216c21e3 100644 --- a/content/html/document/src/nsHTMLDocument.h +++ b/content/html/document/src/nsHTMLDocument.h @@ -233,8 +233,6 @@ protected: nsresult WriteCommon(JSContext *cx, const nsAString& aText, PRBool aNewlineTerminate); - nsresult OpenCommon(JSContext *cx, const nsAString& aContentType, - PRBool aReplace); nsresult CreateAndAddWyciwygChannel(void); nsresult RemoveWyciwygChannel(void);