$OpenBSD: patch-plugins_org_eclipse_swt_Eclipse_SWT_Mozilla_gtk_org_eclipse_swt_browser_Browser_java,v 1.2 2007/04/06 02:16:21 kurt Exp $
--- plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/Browser.java.orig	Thu Sep 21 10:57:19 2006
+++ plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/Browser.java	Thu Apr  5 08:12:50 2007
@@ -10,16 +10,76 @@
  *******************************************************************************/
 package org.eclipse.swt.browser;
 
-import java.io.*;
-import java.util.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.internal.*;
-import org.eclipse.swt.internal.gtk.*;
-import org.eclipse.swt.internal.mozilla.*;
-import org.eclipse.swt.layout.*;
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+import java.util.Locale;
+import java.util.StringTokenizer;
 
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.Callback;
+import org.eclipse.swt.internal.Converter;
+import org.eclipse.swt.internal.Library;
+import org.eclipse.swt.internal.gtk.GdkEvent;
+import org.eclipse.swt.internal.gtk.LONG;
+import org.eclipse.swt.internal.gtk.OS;
+import org.eclipse.swt.internal.mozilla.XPCOM;
+import org.eclipse.swt.internal.mozilla.XPCOMObject;
+import org.eclipse.swt.internal.mozilla.nsEmbedString;
+import org.eclipse.swt.internal.mozilla.nsIAppShell;
+import org.eclipse.swt.internal.mozilla.nsIBaseWindow;
+import org.eclipse.swt.internal.mozilla.nsICategoryManager;
+import org.eclipse.swt.internal.mozilla.nsIComponentManager;
+import org.eclipse.swt.internal.mozilla.nsIComponentRegistrar;
+import org.eclipse.swt.internal.mozilla.nsIContextMenuListener;
+import org.eclipse.swt.internal.mozilla.nsICookie;
+import org.eclipse.swt.internal.mozilla.nsICookieManager;
+import org.eclipse.swt.internal.mozilla.nsID;
+import org.eclipse.swt.internal.mozilla.nsIDOMEvent;
+import org.eclipse.swt.internal.mozilla.nsIDOMMouseEvent;
+import org.eclipse.swt.internal.mozilla.nsIDOMWindow;
+import org.eclipse.swt.internal.mozilla.nsIDirectoryService;
+import org.eclipse.swt.internal.mozilla.nsIDocShell;
+import org.eclipse.swt.internal.mozilla.nsIEmbeddingSiteWindow;
+import org.eclipse.swt.internal.mozilla.nsIFile;
+import org.eclipse.swt.internal.mozilla.nsIIOService;
+import org.eclipse.swt.internal.mozilla.nsIInterfaceRequestor;
+import org.eclipse.swt.internal.mozilla.nsILocalFile;
+import org.eclipse.swt.internal.mozilla.nsIPrefBranch;
+import org.eclipse.swt.internal.mozilla.nsIPrefLocalizedString;
+import org.eclipse.swt.internal.mozilla.nsIPrefService;
+import org.eclipse.swt.internal.mozilla.nsIProperties;
+import org.eclipse.swt.internal.mozilla.nsIRequest;
+import org.eclipse.swt.internal.mozilla.nsIServiceManager;
+import org.eclipse.swt.internal.mozilla.nsISimpleEnumerator;
+import org.eclipse.swt.internal.mozilla.nsISupports;
+import org.eclipse.swt.internal.mozilla.nsISupportsWeakReference;
+import org.eclipse.swt.internal.mozilla.nsITooltipListener;
+import org.eclipse.swt.internal.mozilla.nsIURI;
+import org.eclipse.swt.internal.mozilla.nsIURIContentListener;
+import org.eclipse.swt.internal.mozilla.nsIWeakReference;
+import org.eclipse.swt.internal.mozilla.nsIWebBrowser;
+import org.eclipse.swt.internal.mozilla.nsIWebBrowserChrome;
+import org.eclipse.swt.internal.mozilla.nsIWebBrowserChromeFocus;
+import org.eclipse.swt.internal.mozilla.nsIWebBrowserFocus;
+import org.eclipse.swt.internal.mozilla.nsIWebBrowserStream;
+import org.eclipse.swt.internal.mozilla.nsIWebNavigation;
+import org.eclipse.swt.internal.mozilla.nsIWebProgress;
+import org.eclipse.swt.internal.mozilla.nsIWebProgressListener;
+import org.eclipse.swt.internal.mozilla.nsIWindowWatcher;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Widget;
+
 /**
  * Instances of this class implement the browser user interface
  * metaphor.  It allows the user to visualize and navigate through
@@ -169,46 +229,7 @@ public Browser(Composite parent, int style) {
 			}
 		}
 
-		/*
-		 * Try to load the various profile libraries until one is found that loads successfully:
-		 * - mozilla14profile/mozilla14profile-gcc should succeed for mozilla 1.4 - 1.6
-		 * - mozilla17profile/mozilla17profile-gcc should succeed for mozilla 1.7.x and firefox
-		 * - mozilla18profile/mozilla18profile-gcc should succeed for mozilla 1.8.x (seamonkey)
-		 */
-		try {
-			Library.loadLibrary ("swt-mozilla14-profile"); //$NON-NLS-1$
-			usingProfile = true;
-		} catch (UnsatisfiedLinkError e1) {
-			try {
-				Library.loadLibrary ("swt-mozilla17-profile"); //$NON-NLS-1$
-				usingProfile = true;
-			} catch (UnsatisfiedLinkError e2) {
-				try {
-					Library.loadLibrary ("swt-mozilla14-profile-gcc3"); //$NON-NLS-1$
-					usingProfile = true;
-				} catch (UnsatisfiedLinkError e3) {
-					try {
-						Library.loadLibrary ("swt-mozilla17-profile-gcc3"); //$NON-NLS-1$
-						usingProfile = true;
-					} catch (UnsatisfiedLinkError e4) {
-						try {
-							Library.loadLibrary ("swt-mozilla18-profile"); //$NON-NLS-1$
-							usingProfile = true;
-						} catch (UnsatisfiedLinkError e5) {
-							try {
-								Library.loadLibrary ("swt-mozilla18-profile-gcc3"); //$NON-NLS-1$
-								usingProfile = true;
-							} catch (UnsatisfiedLinkError e6) {
-								/* 
-								* fail silently, the Browser will still work without profile support
-								* but will abort any attempts to navigate to HTTPS pages
-								*/
-							}
-						}
-					}
-				}
-			}
-		}
+		usingProfile = true;
 
 		int /*long*/[] retVal = new int /*long*/[1];
 		nsEmbedString pathString = new nsEmbedString(mozillaPath);
@@ -218,11 +239,11 @@ public Browser(Composite parent, int style) {
 		if (retVal[0] == 0) error(XPCOM.NS_ERROR_NULL_POINTER);
 		
 		nsILocalFile localFile = new nsILocalFile(retVal[0]);
-		rc = XPCOM.NS_InitEmbedding(localFile.getAddress(), 0);
+		rc = XPCOM.NS_InitXPCOM2(0, localFile.getAddress(), 0);
 		localFile.Release();
 		if (rc != XPCOM.NS_OK) {
 			dispose();
-			SWT.error(SWT.ERROR_NO_HANDLES, null, " [NS_InitEmbedding "+mozillaPath+" error "+rc+"]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			SWT.error(SWT.ERROR_NO_HANDLES, null, " [NS_InitXPCOM2 "+mozillaPath+" error "+rc+"]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
 		rc = XPCOM.NS_GetComponentManager(result);
@@ -283,7 +304,6 @@ public Browser(Composite parent, int style) {
 			rc = properties.Get(buffer, nsIFile.NS_IFILE_IID, result);
 			if (rc != XPCOM.NS_OK) error(rc);
 			if (result[0] == 0) error(XPCOM.NS_NOINTERFACE);
-			properties.Release();
 
 			nsIFile profileDir = new nsIFile(result[0]);
 			result[0] = 0;
@@ -305,24 +325,15 @@ public Browser(Composite parent, int style) {
 			pathString.dispose(); //
 
 			profileDir = new nsIFile(result[0]);
-			result[0] = 0;
 
-			rc = XPCOM_PROFILE.NS_NewProfileDirServiceProvider(true, result);
+			// Set the profile dir property so that it's initialized for
+			// things like password manager and https
+			buffer = Converter.wcsToMbcs(null, XPCOM.NS_APP_USER_PROFILE_50_DIR, true);
+			rc = properties.Set(buffer, profileDir.getAddress());
 			if (rc != XPCOM.NS_OK) error(rc);
-			if (result[0] == 0) error(XPCOM.NS_NOINTERFACE);
+			properties.Release();
 
-			final int /*long*/ dirServiceProvider = result[0];
 			result[0] = 0;
-			rc = XPCOM_PROFILE.ProfileDirServiceProvider_Register(dirServiceProvider);
-			if (rc != XPCOM.NS_OK) error(rc);
-			rc = XPCOM_PROFILE.ProfileDirServiceProvider_SetProfileDir(dirServiceProvider, profileDir.getAddress());
-			if (rc != XPCOM.NS_OK) error(rc);
-
-			getDisplay().addListener(SWT.Dispose, new Listener() {
-				public void handleEvent(Event e) {
-					XPCOM_PROFILE.ProfileDirServiceProvider_Shutdown(dirServiceProvider);
-				}
-			});
 		}
 
 		/*
@@ -1354,27 +1365,6 @@ void onDispose(Display display) {
 	tip = null;
 
 	BrowserCount--;
-	/*
-	* This code is intentionally commented.  It is not possible to reinitialize
-	* Mozilla once it has been terminated.  NS_InitEmbedding always fails after
-	* NS_TermEmbedding has been called.  The workaround is to call NS_InitEmbedding
-	* once and never call NS_TermEmbedding.
-	*/
-//	if (BrowserCount == 0) {
-//		if (AppShell != null) {
-//			// Shutdown the appshell service.
-//			rc = AppShell.Spindown();
-//			if (rc != XPCOM.NS_OK) error(rc);
-//			AppShell.Release();
-//			AppShell = null;
-//		}
-//		WindowCreator.Release();
-//		WindowCreator = null;
-//		PromptService.Release();
-//		PromptService = null;
-//		XPCOM.NS_TermEmbedding();
-//		mozilla = false;
-//	}
 }
 
 void Activate() {
