diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp index eab9d8e577a..17928fba118 100644 --- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp @@ -99,6 +99,7 @@ #include "nsHTMLIIDs.h" #include "nsTextFragment.h" #include "nsIScriptGlobalObject.h" +#include "nsIScriptGlobalObjectOwner.h" #include "nsIParserService.h" #include "nsParserCIID.h" @@ -136,7 +137,6 @@ const PRBool kBlockByDefault=PR_TRUE; #endif -static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID); static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID); //---------------------------------------------------------------------- @@ -786,7 +786,7 @@ nsHTMLElementFactory::nsHTMLElementFactory() { NS_INIT_REFCNT(); - nsCOMPtr prefService(do_GetService(kPrefServiceCID)); + nsCOMPtr prefService(do_GetService(NS_PREF_CONTRACTID)); if (prefService) prefService->GetBoolPref("nglayout.debug.enable_xbl_forms", &mUseXBLForms); } @@ -2219,6 +2219,47 @@ NS_IMPL_ISUPPORTS7(HTMLContentSink, nsIDocumentObserver, nsIDebugDumpContent) +static PRBool +IsScriptEnabled(nsIDocument *aDoc, nsIWebShell *aContainer) +{ + NS_ENSURE_TRUE(aDoc && aContainer, PR_TRUE); + + nsCOMPtr securityManager(do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID)); + NS_ENSURE_TRUE(securityManager, PR_TRUE); + + nsCOMPtr principal; + aDoc->GetPrincipal(getter_AddRefs(principal)); + NS_ENSURE_TRUE(principal, PR_TRUE); + + nsCOMPtr globalObject; + aDoc->GetScriptGlobalObject(getter_AddRefs(globalObject)); + + // Getting context is tricky if the document hasn't had it's GlobalObject set yet + if (!globalObject) { + nsCOMPtr requestor(do_QueryInterface(aContainer)); + NS_ENSURE_TRUE(requestor, PR_TRUE); + + nsCOMPtr owner; + requestor->GetInterface(NS_GET_IID(nsIScriptGlobalObjectOwner), + getter_AddRefs(owner)); + NS_ENSURE_TRUE(owner, PR_TRUE); + + owner->GetScriptGlobalObject(getter_AddRefs(globalObject)); + NS_ENSURE_TRUE(globalObject, PR_TRUE); + } + + nsCOMPtr scriptContext; + globalObject->GetContext(getter_AddRefs(scriptContext)); + NS_ENSURE_TRUE(scriptContext, PR_TRUE); + + JSContext* cx = (JSContext *) scriptContext->GetNativeContext(); + NS_ENSURE_TRUE(cx, PR_TRUE); + + PRBool enabled = PR_TRUE; + securityManager->CanExecuteScripts(cx, principal, &enabled); + return enabled; +} + nsresult HTMLContentSink::Init(nsIDocument* aDoc, nsIURI* aURL, @@ -2259,15 +2300,6 @@ HTMLContentSink::Init(nsIDocument* aDoc, loader->AddObserver(this); PRBool enabled = PR_TRUE; - nsCOMPtr prefs(do_GetService(NS_PREF_CONTRACTID)); - NS_ASSERTION(prefs, "oops no prefs!"); - if (prefs) { - prefs->GetBoolPref("javascript.enabled", &enabled); - if (enabled) { - mFlags |= NS_SINK_FLAG_SCRIPT_ENABLED; - } - } - nsCOMPtr docShell(do_QueryInterface(mWebShell)); NS_ASSERTION(docShell,"oops no docshell!"); if (docShell) { @@ -2277,6 +2309,14 @@ HTMLContentSink::Init(nsIDocument* aDoc, } } + + // Find out if scripts are enabled, if not, show