Fixing bug 209884. Writing an inline helper to safely get an nsIScriptContext from a JSContext and making direct callers of JS_GetContextPrivate() use the helper. r=caillon@aillon.org, sr=peterv@netscape.com

git-svn-id: svn://10.0.0.236/trunk@144108 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
jst%netscape.com
2003-06-24 21:43:01 +00:00
parent 056169e55b
commit ecae24eff4
30 changed files with 124 additions and 100 deletions

View File

@@ -93,13 +93,23 @@ static NS_DEFINE_IID(kObserverServiceIID, NS_IOBSERVERSERVICE_IID);
///////////////////////////
// Result of this function should not be freed.
static inline const PRUnichar *
JSValIDToString(JSContext *cx, const jsval idval) {
JSValIDToString(JSContext *cx, const jsval idval)
{
JSString *str = JS_ValueToString(cx, idval);
if(!str)
return nsnull;
return NS_REINTERPRET_CAST(PRUnichar*, JS_GetStringChars(str));
}
already_AddRefed<nsIScriptContext>
GetScriptContext(JSContext *cx)
{
nsIScriptContext *scriptContext;
GetScriptContextFromJSContext(cx, &scriptContext);
return scriptContext;
}
// Helper class to get stuff from the ClassInfo and not waste extra time with
// virtual method calls for things it has already gotten
class ClassInfoData
@@ -1497,7 +1507,7 @@ nsScriptSecurityManager::GetRootDocShell(JSContext *cx, nsIDocShell **result)
nsresult rv;
*result = nsnull;
nsCOMPtr<nsIDocShell> docshell;
nsCOMPtr<nsIScriptContext> scriptContext = (nsIScriptContext*)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptContext> scriptContext = GetScriptContext(cx);
if (!scriptContext) return NS_ERROR_FAILURE;
nsCOMPtr<nsIScriptGlobalObject> globalObject;
scriptContext->GetGlobalObject(getter_AddRefs(globalObject));
@@ -1549,7 +1559,7 @@ nsScriptSecurityManager::CanExecuteScripts(JSContext* cx,
}
//-- See if the current window allows JS execution
nsCOMPtr<nsIScriptContext> scriptContext = (nsIScriptContext*)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptContext> scriptContext = GetScriptContext(cx);
if (!scriptContext) return NS_ERROR_FAILURE;
nsCOMPtr<nsIScriptGlobalObject> globalObject;
scriptContext->GetGlobalObject(getter_AddRefs(globalObject));
@@ -1808,20 +1818,20 @@ nsScriptSecurityManager::GetPrincipalFromContext(JSContext *cx,
nsIPrincipal **result)
{
*result = nsnull;
NS_ENSURE_TRUE(::JS_GetOptions(cx) & JSOPTION_PRIVATE_IS_NSISUPPORTS,
NS_ERROR_FAILURE);
nsISupports* scriptContextSupports =
NS_STATIC_CAST(nsISupports*, JS_GetContextPrivate(cx));
nsCOMPtr<nsIScriptContext> scriptContext(do_QueryInterface(scriptContextSupports));
if (scriptContext)
nsCOMPtr<nsIScriptContext> scriptContext = GetScriptContext(cx);
if (!scriptContext)
{
nsCOMPtr<nsIScriptGlobalObject> global;
scriptContext->GetGlobalObject(getter_AddRefs(global));
nsCOMPtr<nsIScriptObjectPrincipal> globalData(do_QueryInterface(global));
if (globalData)
globalData->GetPrincipal(result);
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsIScriptGlobalObject> global;
scriptContext->GetGlobalObject(getter_AddRefs(global));
nsCOMPtr<nsIScriptObjectPrincipal> globalData(do_QueryInterface(global));
if (globalData)
globalData->GetPrincipal(result);
return NS_OK;
}
@@ -1930,8 +1940,7 @@ nsScriptSecurityManager::GetPrincipalAndFrame(JSContext *cx,
// and return the innermost frame for annotations.
if (cx)
{
nsCOMPtr<nsIScriptContext> scriptContext =
NS_REINTERPRET_CAST(nsIScriptContext*,JS_GetContextPrivate(cx));
nsCOMPtr<nsIScriptContext> scriptContext = GetScriptContext(cx);
if (scriptContext)
{
nsCOMPtr<nsIScriptGlobalObject> global;
@@ -2153,7 +2162,7 @@ nsScriptSecurityManager::CheckConfirmDialog(JSContext* cx, nsIPrincipal* aPrinci
nsCOMPtr<nsIPrompt> prompter;
if (cx)
{
nsCOMPtr<nsIScriptContext> scriptContext = (nsIScriptContext*)JS_GetContextPrivate(cx);
nsCOMPtr<nsIScriptContext> scriptContext = GetScriptContext(cx);
if (scriptContext)
{
nsCOMPtr<nsIScriptGlobalObject> globalObject;