The churn continues. After this checkin, BrowserControlFactoryTest
runs, but nothing else does. As you all probably already know, all mozilla API calls have to happen on the same thread. For webclient, this will be the NativeEventThread. This change-bundle does many many things, here are the main ones. These changes are in concert with the checkin I just did to the diagram at <http://www.mozilla.org/projects/blackwood/webclient/design/20040306-webclient-2_0.zargo>. M classes_spec/org/mozilla/webclient/impl/WrapperFactory.java M classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java * <p>This class is the hub of the startup and shutdown sequence for * Webclient. It is a singleton and owns references to other app * singletons:</p> * * <ul> * <li><p>{@link NativeEventThread}</p></li> * * <li><p>{@link Bookmarks}</p></li> * * <li><p>{@link Preferences}</p></li> * * <li><p>{@link ProfileManager}</p></li> * <li><p>the native object singleton corresponding to this java * object (if necessary)</p></li> * * </ul> * * <p>It maintains a set of {@link BrowserControlImpl} instances so that * we may return the native pointer for each one.</p> * * <p>This class is responsible for creating and initializing and * deleting {@link BrowserControlImpl} instances, as well as ensuring * that the native counterpart is proprely maintained in kind.</p> * * <p>This class has a tight contract with {@link * NativeEventThread}.</p> - make BrowserControl creation and deletion part of this classes responsibilities. - introduce NativeWrapperFactory concept. - own the one and only NativeEventThread. M classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java - make this a singleton. - remove dependencies on BrowserControl and nativeBrowserControl * <p>This is a singleton class. All native events pass thru this class * by virtue of the {@link #pushRunnable} or {@link pushNotifyRunnable} * methods.</p> - remove listener logic. This'll go into EventRegistration, where it belongs. A src_moz/NativeWrapperFactory.cpp A src_moz/NativeWrapperFactory.h - takes the place of the old WebclientContext - is now a class M classes_spec/org/mozilla/webclient/impl/BrowserControlImpl.java - this no longer destroys the nativeBrowserControl. That is now done by WrapperFactoryImpl. M classes_spec/org/mozilla/webclient/impl/WebclientFactoryImpl.java - no longer maintain browserControlCount. M classes_spec/org/mozilla/webclient/impl/wrapper_native/BookmarksImpl.java M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java M classes_spec/org/mozilla/webclient/impl/wrapper_native/PreferencesImpl.java M classes_spec/org/mozilla/webclient/impl/wrapper_native/ProfileManagerImpl.java - rename NativeContext to NativeWrapperFactory, to illustrate its singletonness. M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java - comment out a bunch of stuff in anticipation of the new threading model, currently being fleshed out. M classes_spec/org/mozilla/webclient/impl/wrapper_native/ImplObjectNative.java - NativeEventThread is singleton M src_moz/BookmarksImpl.cpp M src_moz/PreferencesImpl.cpp M src_moz/ProfileManagerImpl.cpp M src_moz/RDFEnumeration.cpp M src_moz/RDFTreeNode.cpp - rename WebclientContext to NativeWrapperFactory. M src_moz/EmbedWindow.cpp - mBaseWindow->Destroy(); + if (mBaseWindow) { + mBaseWindow->Destroy(); + } M src_moz/Makefile.in - Bring back NavigationImpl - add NativeWrapperFactory. M src_moz/NativeBrowserControl.cpp M src_moz/NativeBrowserControl.h - move event queue and java related stuff to NativeWrapperFactory. This class is now essentially a copy of EmbedPrivate in GtkEmbed. M src_moz/NativeEventThread.cpp - remove methods, most of it has moved to WrapperFactoryImpl/NativeWrapperFactory. M src_moz/NavigationImpl.cpp - comment out all methods but LoadURI. M src_moz/WrapperFactoryImpl.cpp - take functionality over from NativeEventThread. M src_moz/ns_util.cpp M src_moz/ns_util.h - the eventQueue is owned by NativeWrapperFactory now. M src_moz/rdf_util.cpp M src_share/jni_util.cpp - make all exceptions RuntimeExceptions, so they can be thrown from a Runnable. M test/automated/src/classes/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImplTest.java - comment out the meat of this test until I figure out how to test it. M test/automated/src/test/BrowserControlFactoryTest_correct - new content. git-svn-id: svn://10.0.0.236/trunk@154953 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -71,6 +71,15 @@ const char *gImplementedInterfaces[] = {
|
||||
nsnull
|
||||
};
|
||||
|
||||
char * errorMessages[] = {
|
||||
"No Error",
|
||||
"Could not obtain the event queue service.",
|
||||
"Unable to create the WebShell instance.",
|
||||
"Unable to initialize the WebShell instance.",
|
||||
"Unable to show the WebShell."
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Local Functions
|
||||
//
|
||||
@@ -80,15 +89,25 @@ const char *gImplementedInterfaces[] = {
|
||||
//
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeAppInitialize(
|
||||
JNIEnv *env, jobject obj, jstring verifiedBinDirAbsolutePath)
|
||||
Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeCreateNativeWrapperFactory(
|
||||
JNIEnv *env, jobject obj)
|
||||
{
|
||||
prLogModuleInfo = PR_NewLogModule("webclient");
|
||||
NativeWrapperFactory *result = new NativeWrapperFactory();
|
||||
return (jint) result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeAppInitialize(
|
||||
JNIEnv *env, jobject obj, jstring verifiedBinDirAbsolutePath, jint nativeWF, jobject nativeEventThread)
|
||||
{
|
||||
const char *nativePath = nsnull;
|
||||
WebclientContext *result = new WebclientContext();
|
||||
NativeWrapperFactory *nativeWrapperFactory = (NativeWrapperFactory *) nativeWF;
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsILocalFile> binDir;
|
||||
|
||||
|
||||
// PENDING(edburns): We need this for rdf_getChildCount
|
||||
PR_SetEnv("XPCOM_CHECK_THREADSAFE=0");
|
||||
|
||||
@@ -115,7 +134,6 @@ Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeAppInit
|
||||
if (NS_FAILED(rv)) {
|
||||
::util_ThrowExceptionToJava(env,
|
||||
"Can't get nsILocalFile from bin directory");
|
||||
return (jint) rv;
|
||||
}
|
||||
}
|
||||
::util_ReleaseStringUTFChars(env, verifiedBinDirAbsolutePath, nativePath);
|
||||
@@ -131,7 +149,6 @@ Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeAppInit
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
::util_ThrowExceptionToJava(env, "NS_InitEmbedding() failed.");
|
||||
return (jint) rv;
|
||||
}
|
||||
|
||||
// the rest of the startup tasks are coordinated from the java side.
|
||||
@@ -158,9 +175,12 @@ Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeAppInit
|
||||
::util_GetJavaVM(env, &gVm); // save this vm reference
|
||||
}
|
||||
|
||||
util_InitializeShareInitContext(env, &(result->shareContext));
|
||||
|
||||
return (jint) result;
|
||||
util_InitializeShareInitContext(env, &(nativeWrapperFactory->shareContext));
|
||||
rv = nativeWrapperFactory->Init(env, nativeEventThread);
|
||||
if (NS_FAILED(rv)) {
|
||||
::util_ThrowExceptionToJava(env,
|
||||
"Failed to init NativeWrapperFactory");
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
@@ -170,7 +190,7 @@ Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeAppSetu
|
||||
PR_LOG(prLogModuleInfo, PR_LOG_DEBUG,
|
||||
("WrapperFactoryImpl_nativeAppSetup: entering\n"));
|
||||
nsresult rv;
|
||||
WebclientContext *wcContext = (WebclientContext *) nativeContext;
|
||||
NativeWrapperFactory *wcContext = (NativeWrapperFactory *) nativeContext;
|
||||
|
||||
PR_ASSERT(wcContext);
|
||||
|
||||
@@ -230,7 +250,7 @@ Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeTermina
|
||||
PR_LOG(prLogModuleInfo, PR_LOG_DEBUG,
|
||||
("WrapperFactoryImpl_nativeTerminate: entering\n"));
|
||||
nsresult rv;
|
||||
WebclientContext *wcContext = (WebclientContext *) nativeContext;
|
||||
NativeWrapperFactory *wcContext = (NativeWrapperFactory *) nativeContext;
|
||||
|
||||
PR_ASSERT(wcContext);
|
||||
|
||||
@@ -247,6 +267,8 @@ Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeTermina
|
||||
PR_ASSERT(nsnull == wcContext->sProfileInternal);
|
||||
|
||||
util_DeallocateShareInitContext(env, &(wcContext->shareContext));
|
||||
|
||||
wcContext->Destroy();
|
||||
|
||||
delete wcContext;
|
||||
|
||||
@@ -294,17 +316,54 @@ Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeDoesImp
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeCreateBrowserControl
|
||||
(JNIEnv *env, jobject obj, jint nativeContext) {
|
||||
(JNIEnv *env, jobject obj) {
|
||||
NativeBrowserControl* initContext = new NativeBrowserControl();
|
||||
|
||||
return (jint) initContext;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeInitBrowserControl
|
||||
(JNIEnv *env, jobject obj, jint nativeWFPtr, jint nativeBCPtr) {
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
NativeWrapperFactory * nativeWrapperFactory = (NativeWrapperFactory *) nativeWFPtr;
|
||||
NativeBrowserControl * nativeBrowserControl = (NativeBrowserControl *) nativeBCPtr;
|
||||
|
||||
if (!nativeBrowserControl || !nativeWFPtr) {
|
||||
::util_ThrowExceptionToJava(env,
|
||||
"NULL nativeBCPtr passed to nativeInitBrowserControl.");
|
||||
return;
|
||||
}
|
||||
rv = nativeBrowserControl->Init();
|
||||
if (NS_FAILED(rv)) {
|
||||
::util_ThrowExceptionToJava(env,
|
||||
errorMessages[3]);
|
||||
return;
|
||||
}
|
||||
nativeWrapperFactory->ProcessEventLoop();
|
||||
|
||||
while (!nativeWrapperFactory->IsInitialized()) {
|
||||
|
||||
::PR_Sleep(PR_INTERVAL_NO_WAIT);
|
||||
|
||||
if (NS_FAILED(nativeWrapperFactory->GetFailureCode())) {
|
||||
::util_ThrowExceptionToJava(env, errorMessages[3]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_WrapperFactoryImpl_nativeDestroyBrowserControl
|
||||
(JNIEnv *env, jobject obj, jint nativeContext, jint nativeBrowserControl) {
|
||||
NativeBrowserControl* initContext =
|
||||
(NativeBrowserControl *)nativeBrowserControl;
|
||||
delete initContext;
|
||||
(JNIEnv *env, jobject obj, jint nativeBC) {
|
||||
NativeBrowserControl* nativeBrowserControl = (NativeBrowserControl *)nativeBC;
|
||||
if (!nativeBrowserControl) {
|
||||
::util_ThrowExceptionToJava(env,
|
||||
"NULL nativeBCPtr passed to nativeDestroyBrowserControl.");
|
||||
return -1;
|
||||
}
|
||||
nativeBrowserControl->Destroy();
|
||||
|
||||
delete nativeBrowserControl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user