notifier->BeforeJavascriptEvaluation();
notifier->BeforeJavascriptEvaluation( url.GetUnicode() );
extern "C" void RunInstallOnThread(void *data){    nsInstallInfo *installInfo = (nsInstallInfo*)data;        char        *scriptBuffer;    PRUint32    scriptLength;    JSRuntime   *rt;	JSContext   *cx;    JSObject    *glob;    nsIXPINotifier *notifier;    nsresult    rv;    NS_WITH_SERVICE(nsISoftwareUpdate, softwareUpdate, kSoftwareUpdateCID, &rv );    if (!NS_SUCCEEDED(rv))    {        NS_WARNING("shouldn't have RunInstall() if we can't get SoftwareUpdate");        return;    }    softwareUpdate->SetActiveNotifier( installInfo->GetNotifier() );    softwareUpdate->GetMasterNotifier(&notifier);        if(notifier)        notifier->BeforeJavascriptEvaluation();        nsString args;    installInfo->GetArguments(args);    char *jarpath;    installInfo->GetLocalFile(&jarpath);    if (!jarpath)        goto bail;    rv = GetInstallScriptFromJarfile( jarpath,                                       &scriptBuffer,                                       &scriptLength);    // XXX memory leaks!    if (NS_FAILED(rv) || scriptBuffer == nsnull)        goto bail;    rv = SetupInstallContext(   jarpath,                                 nsAutoCString( args ),                                 &rt, &cx, &glob);    if (NS_FAILED(rv))        goto bail;        // Go ahead and run!!    jsval rval;    JS_EvaluateScript(cx,                       glob,                      scriptBuffer,                       scriptLength,                      nsnull,                      0,                      &rval);    JS_DestroyContext(cx);    JS_DestroyRuntime(rt);bail:    if(notifier)         notifier->AfterJavascriptEvaluation();    if (scriptBuffer) delete [] scriptBuffer;    if (jarpath) nsCRT::free(jarpath);    softwareUpdate->SetActiveNotifier(0);    softwareUpdate->InstallJarCallBack();}