Fix crash when calling initEmbedding with an appFileLocProvider. Don't delete the locProvider proxy after having called NS_InitEmbedding. Not part of default build. a=mkaply

git-svn-id: svn://10.0.0.236/trunk@176061 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
pedemont%us.ibm.com
2005-07-13 22:15:09 +00:00
parent de3f97461e
commit 45e5c5eaa3
3 changed files with 26 additions and 7 deletions

View File

@@ -234,3 +234,20 @@ nsAppFileLocProviderProxy::GetFiles(const char* aProp,
return rv;
}
////////////////////////////////////////////////////////////////////////////////
nsresult
NS_NewAppFileLocProviderProxy(jobject aJavaLocProvider,
nsIDirectoryServiceProvider** aResult)
{
nsAppFileLocProviderProxy* provider =
new nsAppFileLocProviderProxy(aJavaLocProvider);
if (provider == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(provider);
*aResult = provider;
return NS_OK;
}

View File

@@ -56,5 +56,10 @@ private:
jobject mJavaLocProvider;
};
extern "C" nsresult
NS_NewAppFileLocProviderProxy(jobject aJavaLocProvider,
nsIDirectoryServiceProvider** aResult);
#endif //_nsAppFileLocProviderProxy_h_

View File

@@ -69,18 +69,15 @@ InitEmbedding_Impl(JNIEnv* env, jobject aMozBinDirectory,
}
// create nsAppFileLocProviderProxy from given Java object
nsAppFileLocProviderProxy* provider = nsnull;
nsCOMPtr<nsIDirectoryServiceProvider> provider;
if (aAppFileLocProvider) {
provider = new nsAppFileLocProviderProxy(aAppFileLocProvider);
if (!provider)
return NS_ERROR_OUT_OF_MEMORY;
rv = NS_NewAppFileLocProviderProxy(aAppFileLocProvider,
getter_AddRefs(provider));
NS_ENSURE_SUCCESS(rv, rv);
}
// init Gecko
rv = NS_InitEmbedding(directory, provider);
if (provider) {
delete provider;
}
NS_ENSURE_SUCCESS(rv, rv);
// init Event Queue