~XPCOMCleanupHack() { if (mCleanOnExit) { if (sInitCounter > 0) { sInitCounter = 1; NS_TermEmbedding(); } // XXX Global destructors and NS_ShutdownXPCOM don't seem to mix // NS_ShutdownXPCOM(sServiceManager); } }
JNIEXPORT void JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeTerminate (JNIEnv *env, jobject obj, jint nativeContext) { PR_LOG(prLogModuleInfo, PR_LOG_DEBUG, ("WrapperFactoryImpl_nativeTerminate: entering\n")); nsresult rv; NativeWrapperFactory *wcContext = (NativeWrapperFactory *) nativeContext; PR_ASSERT(wcContext); if (wcContext->sAppShell) { rv = wcContext->sAppShell->Spindown(); PR_LOG(prLogModuleInfo, PR_LOG_DEBUG, ("WrapperFactoryImpl_nativeTerminate: Spindown rv: %d\n", rv)); NS_RELEASE(wcContext->sAppShell); wcContext->sAppShell = nsnull; } // PENDING(edburns): 20060304 Fix this when ProfileManager is fixed // PR_ASSERT(nsnull == wcContext->sProfile); // PR_ASSERT(nsnull == wcContext->sProfileInternal); util_DeallocateShareInitContext(env, &(wcContext->shareContext)); wcContext->Destroy(); delete wcContext; // PENDING(edburns): do the rest of the stuff from // mozilla/embedding/browser/gtk/src/EmbedPrivate.cpp::PopStartup(void), // and NativeEventThread.cpp // shut down XPCOM/Embedding rv = NS_TermEmbedding(); PR_LOG(prLogModuleInfo, PR_LOG_DEBUG, ("WrapperFactoryImpl_nativeTerminate: NS_TermEmbedding rv: %d\n", rv)); if (NS_FAILED(rv)) { ::util_ThrowExceptionToJava(env, "NS_TermEmbedding() failed."); } PR_LOG(prLogModuleInfo, PR_LOG_DEBUG, ("WrapperFactoryImpl_nativeTerminate: exiting\n")); }
int main(int argc, char *argv[]) { printf("You are embedded, man!\n\n"); printf("******************************************************************\n"); printf("* *\n"); printf("* IMPORTANT NOTE: *\n"); printf("* *\n"); printf("* WinEmbed is not supported!!! Do not raise bugs on it unless *\n"); printf("* it is badly broken (e.g. crash on start/exit, build errors) *\n"); printf("* or you have the patch to make it better! MFCEmbed is now our *\n"); printf("* embedding test application on Win32 and all testing should *\n"); printf("* be done on that. *\n"); printf("* *\n"); printf("******************************************************************\n"); printf("\n\n"); // Sophisticated command-line parsing in action #ifdef MINIMO char *szFirstURL = "http://www.mozilla.org/projects/embedding"; #else char *szFirstURL = "http://www.mozilla.org/projects/minimo"; #endif int argn; for (argn = 1; argn < argc; argn++) { szFirstURL = argv[argn]; } strncpy(gFirstURL, szFirstURL, sizeof(gFirstURL) - 1); ghInstanceApp = GetModuleHandle(NULL); ghInstanceResources = GetModuleHandle(NULL); // Initialize global strings TCHAR szTitle[MAX_LOADSTRING]; LoadString(ghInstanceResources, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); MyRegisterClass(ghInstanceApp); // Init Embedding APIs NS_InitEmbedding(nsnull, nsnull, kPStaticModules, kStaticModuleCount); // Choose the new profile if (NS_FAILED(StartupProfile())) { NS_TermEmbedding(); return 1; } WPARAM rv; { InitializeWindowCreator(); // Open the initial browser window OpenWebPage(gFirstURL); // Main message loop. // NOTE: We use a fake event and a timeout in order to process idle stuff for // Mozilla every 1/10th of a second. PRBool runCondition = PR_TRUE; rv = AppCallbacks::RunEventLoop(runCondition); } // Close down Embedding APIs NS_TermEmbedding(); return rv; }