diff --git a/dom/src/jsurl/nsJSProtocolHandler.cpp b/dom/src/jsurl/nsJSProtocolHandler.cpp index 805edf5e2e36..0ce5193cb4d1 100644 --- a/dom/src/jsurl/nsJSProtocolHandler.cpp +++ b/dom/src/jsurl/nsJSProtocolHandler.cpp @@ -48,6 +48,7 @@ #include "nsIContentSecurityPolicy.h" #include "nsSandboxFlags.h" #include "mozilla/dom/ScriptSettings.h" +#include "nsILoadInfo.h" using mozilla::dom::AutoEntryScript; @@ -153,10 +154,16 @@ nsresult nsJSThunk::EvaluateScript(nsIChannel *aChannel, aChannel->GetOwner(getter_AddRefs(owner)); nsCOMPtr principal = do_QueryInterface(owner); if (!principal) { - // No execution without a principal! - NS_ASSERTION(!owner, "Non-principal owner?"); - NS_WARNING("No principal to execute JS with"); - return NS_ERROR_DOM_RETVAL_UNDEFINED; + nsCOMPtr loadInfo; + aChannel->GetLoadInfo(getter_AddRefs(loadInfo)); + if (loadInfo && loadInfo->GetForceInheritPrincipal()) { + principal = loadInfo->LoadingPrincipal(); + } else { + // No execution without a principal! + NS_ASSERTION(!owner, "Non-principal owner?"); + NS_WARNING("No principal to execute JS with"); + return NS_ERROR_DOM_RETVAL_UNDEFINED; + } } nsresult rv;