changeset 333:8235a17d9255

Continued progress on Mozilla.d
author John Reimer <terminal.node@gmail.com>
date Sun, 19 Oct 2008 21:18:43 -0700
parents 9e715c0a8376
children a4b331f75790
files dwt/browser/AppFileLocProvider.d dwt/browser/Mozilla.d dwt/dwthelper/System.d dwt/internal/mozilla/nsID.d
diffstat 4 files changed, 252 insertions(+), 223 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/browser/AppFileLocProvider.d	Sun Oct 19 01:20:57 2008 +0200
+++ b/dwt/browser/AppFileLocProvider.d	Sun Oct 19 21:18:43 2008 -0700
@@ -45,15 +45,15 @@
     static final String PREFERENCES_FILE = "prefs.js"; //$NON-NLS-1$
     
 this (String path) {
-    mozillaPath = path ~ SEPARATOR_OS;f
+    mozillaPath = path ~ SEPARATOR_OS;
 }
 
-int AddRef () {
+nsrefcnt AddRef () {
     refCount++;
     return refCount;
 }
 
-int QueryInterface (nsID* riid, int void** ppvObject) {
+nsresult QueryInterface (nsID* riid, int void** ppvObject) {
     if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE;
 
     if (*riid == nsISupports.IID)) {
@@ -76,7 +76,7 @@
     return XPCOM.NS_ERROR_NO_INTERFACE;
 }
 
-int Release () {
+nsrefcnt Release () {
     refCount--;
     if (refCount is 0) return 0;
     return refCount;
@@ -143,7 +143,7 @@
                 if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
                 if (localFile is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
 
-                rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, &(cast(void*)file)); 
+                rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, cast(void**)&file); 
                 if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
                 if (file is null) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
                 localFile.Release ();
@@ -230,7 +230,7 @@
         if (localFile is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
         
         nsIFile file;
-        rc = localFile.QueryInterface (nsIFile.IID, &(cast(void*)file)); 
+        rc = localFile.QueryInterface (&nsIFile.IID, cast(void**)&file)); 
         if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
         if (file is null) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
 
--- a/dwt/browser/Mozilla.d	Sun Oct 19 01:20:57 2008 +0200
+++ b/dwt/browser/Mozilla.d	Sun Oct 19 21:18:43 2008 -0700
@@ -22,6 +22,8 @@
 //import java.util.Locale;
 //import java.util.Vector;
 
+import tango.text.locale.Core;  // Necessary for Region/Culture/Locale code
+
 import dwt.DWT;
 import dwt.DWTError;
 import dwt.graphics.Device;
@@ -192,7 +194,7 @@
                 //result[0] = 0;
                 //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_COOKIEMANAGER_CONTRACTID, true);
                 nsICookieManager manager;
-                rc = serviceManager.GetServiceByContractID (XPCOM.NS_COOKIEMANAGER_CONTRACTID, nsICookieManager.IID, cast(void**)&manager);
+                rc = serviceManager.GetServiceByContractID (XPCOM.NS_COOKIEMANAGER_CONTRACTID.ptr, &nsICookieManager.IID, cast(void**)&manager);
                 if (rc !is XPCOM.NS_OK) error (rc);
                 if (manager is null) error (XPCOM.NS_NOINTERFACE);
                 serviceManager.Release ();
@@ -211,7 +213,7 @@
                 while (moreElements !is 0) {
                     //result[0] = 0;
                     nsICookie cookie;
-                    rc = enumerator.GetNext (cast(nsISupports*)&cookie);
+                    rc = enumerator.GetNext (cast(nsISupports)cookie);
                     if (rc !is XPCOM.NS_OK) error (rc);
                     //nsICookie cookie = new nsICookie (result[0]);
                     PRUint64 expires;
@@ -448,25 +450,14 @@
 
             //nsIFile localFile = new nsILocalFile (retVal[0]);
             nsIDirectoryServiceProvider directoryServiceProvider;
-            nsIServiceManager serviceManager;
             rc = LocationProvider.QueryInterface( &nsIDirectoryServiceProvider.IID, cast(void**)&directoryServiceProvider);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose();
                 error(rc);
             }
-            rc = XPCOM.NS_GetServiceManager(&serviceManager);
-            if (rc !is XPCOM.NS_OK) {
-                browser.dispose();
-                error(rc);
-            }
-            if (serviceManager is null || directoryServiceProvider is null) {
-                browser.dispose;
-                error (XPCOM.NS_ERROR_NULL_POINTER);
-            }
-            rc = XPCOM.NS_InitXPCOM2 (&serviceManager, 0, cast(IFile*)&localFile, &directoryServiceProvider);
+            rc = XPCOM.NS_InitXPCOM2 (null, cast(IFile*)&localFile, &directoryServiceProvider);
             localFile.Release ();
-            serviceManager.Release();
-            //LocationProvider.Release();
+            LocationProvider.Release();
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 DWT.error (DWT.ERROR_NO_HANDLES, null, Format(" [MOZILLA_FIVE_HOME may not point at an embeddable GRE] [NS_InitEmbedding {0} error {1} ] ", mozillaPath, rc ) ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -520,7 +511,7 @@
         //result[0] = 0;
         if (mozDelegate.needsSpinup ()) {
             /* nsIAppShell is discontinued as of xulrunner 1.9, so do not fail if it is not found */
-            rc = componentManager.CreateInstance (XPCOM.NS_APPSHELL_CID, 0, nsIAppShell.IID, cast(void**)&AppShell);
+            rc = componentManager.CreateInstance (XPCOM.NS_APPSHELL_CID.ptr, 0, &nsIAppShell.IID, cast(void**)&AppShell);
             if (rc !is XPCOM.NS_ERROR_NO_INTERFACE) {
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
@@ -564,7 +555,7 @@
         //result[0] = 0;      
         //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WINDOWWATCHER_CONTRACTID, true);
         nsIWindowWatcher windowWatcher;
-        rc = serviceManager.GetServiceByContractID (XPCOM.NS_WINDOWWATCHER_CONTRACTID, nsIWindowWatcher.IID, cast(void**)&windowWatcher);
+        rc = serviceManager.GetServiceByContractID (XPCOM.NS_WINDOWWATCHER_CONTRACTID.ptr, &nsIWindowWatcher.IID, cast(void**)&windowWatcher);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
@@ -585,87 +576,92 @@
 
         /* compute the profile directory and set it on the AppFileLocProvider */
         if (LocationProvider !is null) {
-            byte[] buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DIRECTORYSERVICE_CONTRACTID, true);
-            rc = serviceManager.GetServiceByContractID (buffer, nsIDirectoryService.NS_IDIRECTORYSERVICE_IID, result);
+            nsIDirectoryService directoryService;
+            //byte[] buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DIRECTORYSERVICE_CONTRACTID, true);
+            rc = serviceManager.GetServiceByContractID (XPCOM.NS_DIRECTORYSERVICE_CONTRACTID.ptr, &nsIDirectoryService.IID, cast(void**)&directoryService);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            if (result[0] is 0) {
+            if (directoryService is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
 
-            nsIDirectoryService directoryService = new nsIDirectoryService (result[0]);
-            result[0] = 0;
-            rc = directoryService.QueryInterface (nsIProperties.NS_IPROPERTIES_IID, result);
+            //nsIDirectoryService directoryService = new nsIDirectoryService (result[0]);
+            //result[0] = 0;
+            nsIProperties properties;
+            rc = directoryService.QueryInterface (&nsIProperties.IID, cast(void**)&properties);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            if (result[0] is 0) {
+            if (properties is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
             directoryService.Release ();
 
-            nsIProperties properties = new nsIProperties (result[0]);
-            result[0] = 0;
-            buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_APP_APPLICATION_REGISTRY_DIR, true);
-            rc = properties.Get (buffer, nsIFile.NS_IFILE_IID, result);
+            //nsIProperties properties = new nsIProperties (result[0]);
+            //result[0] = 0;
+            //buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_APP_APPLICATION_REGISTRY_DIR, true);
+            nsIFile profileDir;
+            rc = properties.Get (XPCOM.NS_APP_APPLICATION_REGISTRY_DIR.ptr, &nsIFile.IID, cast(void**)&profileDir);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            if (result[0] is 0) {
+            if (profileDir is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
             properties.Release ();
 
-            nsIFile profileDir = new nsIFile (result[0]);
-            result[0] = 0;
-            int /*long*/ path = XPCOM.nsEmbedCString_new ();
-            rc = profileDir.GetNativePath (path);
+            //nsIFile profileDir = new nsIFile (result[0]);
+            //result[0] = 0;
+            scope auto path = new nsEmbedCString;
+            rc = profileDir.GetNativePath (cast(nsACString*)path);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            int length = XPCOM.nsEmbedCString_Length (path);
-            int /*long*/ ptr = XPCOM.nsEmbedCString_get (path);
-            buffer = new byte [length];
-            XPCOM.memmove (buffer, ptr, length);
-            String profilePath = new String (MozillaDelegate.mbcsToWcs (null, buffer)) + PROFILE_DIR;
+            //int length = XPCOM.nsEmbedCString_Length (path);
+            //int /*long*/ ptr = XPCOM.nsEmbedCString_get (path);
+            //buffer = new byte [length];
+            //XPCOM.memmove (buffer, ptr, length);
+            String profilePath = path.toString() ~ PROFILE_DIR;
             LocationProvider.setProfilePath (profilePath);
             LocationProvider.isXULRunner = IsXULRunner;
-            XPCOM.nsEmbedCString_delete (path);
+            //XPCOM.nsEmbedCString_delete (path);
             profileDir.Release ();
 
             /* notify observers of a new profile directory being used */
-            buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_OBSERVER_CONTRACTID, true);
-            rc = serviceManager.GetServiceByContractID (buffer, nsIObserverService.NS_IOBSERVERSERVICE_IID, result);
+            //buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_OBSERVER_CONTRACTID, true);
+            nsIObserverService observerService;
+            rc = serviceManager.GetServiceByContractID (XPCOM.NS_OBSERVER_CONTRACTID.ptr, &nsIObserverService.IID, cast(void**)&observerService);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            if (result[0] is 0) {
+            if (observerService is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
 
-            nsIObserverService observerService = new nsIObserverService (result[0]);
-            result[0] = 0;
-            buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_DO_CHANGE, true);
-            length = STARTUP.length ();
-            char[] chars = new char [length + 1];
-            STARTUP.getChars (0, length, chars, 0);
-            rc = observerService.NotifyObservers (0, buffer, chars);
+            //nsIObserverService observerService = new nsIObserverService (result[0]);
+            //result[0] = 0;
+            //buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_DO_CHANGE, true);
+            //length = STARTUP.length ();
+            //char[] chars = new char [length + 1];
+            //STARTUP.getChars (0, length, chars, 0);
+            wchar[] chars = Utf.toString16(STARTUP) ~ "\0";
+            rc = observerService.NotifyObservers (null, PROFILE_DO_CHANGE.ptr, chars.ptr);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_AFTER_CHANGE, true);
-            rc = observerService.NotifyObservers (0, buffer, chars);
+            //buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_AFTER_CHANGE, true);
+            rc = observerService.NotifyObservers (null, PROFILE_AFTER_CHANGE.ptr, chars.ptr);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
@@ -678,40 +674,42 @@
          * and charset.  The fix for this is to set mozilla's locale and charset
          * preference values according to the user's current locale and charset.
          */
-        aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFSERVICE_CONTRACTID, true);
-        rc = serviceManager.GetServiceByContractID (aContractID, nsIPrefService.NS_IPREFSERVICE_IID, result);
+        //aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFSERVICE_CONTRACTID, true);
+        nsIPrefService prefService;
+        rc = serviceManager.GetServiceByContractID (XPCOM.NS_PREFSERVICE_CONTRACTID, &nsIPrefService.IID, cast(void**)&prefService);
         serviceManager.Release ();
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
         }
-        if (result[0] is 0) {
+        if (serviceManager is null) {
             browser.dispose ();
             error (XPCOM.NS_NOINTERFACE);
         }
 
-        nsIPrefService prefService = new nsIPrefService (result[0]);
-        result[0] = 0;
-        byte[] buffer = new byte[1];
-        rc = prefService.GetBranch (buffer, result);    /* empty buffer denotes root preference level */
+        //nsIPrefService prefService = new nsIPrefService (result[0]);
+        //result[0] = 0;
+        char[1] buffer = new char[1];
+        nsIPrefBranch prefBranch;
+        rc = prefService.GetBranch (buffer.ptr, &prefBranch);    /* empty buffer denotes root preference level */
         prefService.Release ();
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
         }
-        if (result[0] is 0) {
+        if (prefBranch is null) {
             browser.dispose ();
             error (XPCOM.NS_NOINTERFACE);
         }
 
-        nsIPrefBranch prefBranch = new nsIPrefBranch (result[0]);
-        result[0] = 0;
+        //nsIPrefBranch prefBranch = new nsIPrefBranch (result[0]);
+        //result[0] = 0;
 
         /* get Mozilla's current locale preference value */
         String prefLocales = null;
         nsIPrefLocalizedString localizedString = null;
-        buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_LANGUAGES, true);
-        rc = prefBranch.GetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+        //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_LANGUAGES, true);
+        rc = prefBranch.GetComplexValue (PREFERENCE_LANGUAGES.ptr, &nsIPrefLocalizedString.IID, cast(void**)&localizedString);
         /* 
          * Feature of Debian.  For some reason attempting to query for the current locale
          * preference fails on Debian.  The workaround for this is to assume a value of
@@ -719,44 +717,47 @@
          * a profile.
          */
         if (rc !is XPCOM.NS_OK) {
-            prefLocales = "en-us,en" + TOKENIZER_LOCALE;    //$NON-NLS-1$
+            prefLocales = "en-us,en" ~ TOKENIZER_LOCALE;    //$NON-NLS-1$
         } else {
-            if (result[0] is 0) {
+            if (localizedString is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
-            localizedString = new nsIPrefLocalizedString (result[0]);
-            result[0] = 0;
-            rc = localizedString.ToString (result);
+            //localizedString = new nsIPrefLocalizedString (result[0]);
+            //result[0] = 0;
+            PRUnichar* tmpChars;
+            rc = localizedString.ToString (&tmpChars);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            if (result[0] is 0) {
+            if (tmpChars is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
-            int length = XPCOM.strlen_PRUnichar (result[0]);
-            char[] dest = new char[length];
-            XPCOM.memmove (dest, result[0], length * 2);
-            prefLocales = new String (dest) + TOKENIZER_LOCALE;
+            int span = XPCOM.strlen_PRUnichar (tmpChars);
+            //char[] dest = new char[length];
+            //XPCOM.memmove (dest, result[0], length * 2);
+            prefLocales = Utf.toString(tmpChars[0 .. span]) ~ TOKENIZER_LOCALE;
         }
-        result[0] = 0;
+        //result[0] = 0;
 
         /*
          * construct the new locale preference value by prepending the
          * user's current locale and language to the original value 
          */
-        Locale locale = Locale.getDefault ();
-        String language = locale.getLanguage ();
-        String country = locale.getCountry ();
-        StringBuffer stringBuffer = new StringBuffer (language);
-        stringBuffer.append (SEPARATOR_LOCALE);
-        stringBuffer.append (country.toLowerCase ());
-        stringBuffer.append (TOKENIZER_LOCALE);
-        stringBuffer.append (language);
-        stringBuffer.append (TOKENIZER_LOCALE);
-        String newLocales = stringBuffer.toString ();
+        //Culture locale = Culture.current;
+        //Region region = Region.current;
+        //Locale locale = Locale.getDefault ();
+        String language = Culture.current.twoLetterLanguageName ();
+        String country = Region.current.twoLetterRegionName ();
+        String stringBuffer = language.dup;
+        stringBuffer ~= SEPARATOR_LOCALE;
+        stringBuffer ~= country.toLowerCase ();
+        stringBuffer ~= TOKENIZER_LOCALE;
+        stringBuffer ~= language;
+        stringBuffer ~= TOKENIZER_LOCALE;
+        String newLocales = stringBuffer.dup;
 
         int start, end = -1;
         do {
@@ -769,36 +770,36 @@
                 token = prefLocales.substring (start, end);
             }
             if (token.length () > 0) {
-                token = (token + TOKENIZER_LOCALE).trim ();
+                token = (token ~ TOKENIZER_LOCALE).trim ();
                 /* ensure that duplicate locale values are not added */
                 if (newLocales.indexOf (token) is -1) {
-                    stringBuffer.append (token);
+                    stringBuffer ~= token;
                 }
             }
         } while (end !is -1);
-        newLocales = stringBuffer.toString ();
+        newLocales[] = stringBuffer[];
         if (!newLocales.equals (prefLocales)) {
             /* write the new locale value */
             newLocales = newLocales.substring (0, newLocales.length () - TOKENIZER_LOCALE.length ()); /* remove trailing tokenizer */
-            int length = newLocales.length ();
-            char[] charBuffer = new char[length + 1];
-            newLocales.getChars (0, length, charBuffer, 0);
+            //int span = newLocales.length ();
+            //char[] charBuffer = new char[span + 1];
+            //newLocales.getChars (0, span, charBuffer, 0);
             if (localizedString is null) {
-                byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
-                rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+                //byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
+                rc = componentManager.CreateInstanceByContractID (XPCOM.NS_PREFLOCALIZEDSTRING, null, &nsIPrefLocalizedString.IID, cast(void**)&localizedString);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
                     error (rc);
                 }
-                if (result[0] is 0) {
+                if (localizedString is null) {
                     browser.dispose ();
                     error (XPCOM.NS_NOINTERFACE);
                 }
-                localizedString = new nsIPrefLocalizedString (result[0]);
-                result[0] = 0;
+                //localizedString = new nsIPrefLocalizedString (result[0]);
+                //result[0] = 0;
             }
-            localizedString.SetDataWithLength (length, charBuffer);
-            rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress());
+            localizedString.SetDataWithLength (newLocales.length, newLocales.toString16);
+            rc = prefBranch.SetComplexValue (PREFERENCES_LANGUAGES.ptr, nsIPrefLocalizedString.IID, cast(nsISupports)localizedString);
         }
         if (localizedString !is null) {
             localizedString.Release ();
@@ -807,8 +808,8 @@
 
         /* get Mozilla's current charset preference value */
         String prefCharset = null;
-        buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_CHARSET, true);
-        rc = prefBranch.GetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+        //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_CHARSET, true);
+        rc = prefBranch.GetComplexValue (PREFERENCE_CHARSET.ptr, nsIPrefLocalizedString.IID, cast(void**)&localizedString);
         /* 
          * Feature of Debian.  For some reason attempting to query for the current charset
          * preference fails on Debian.  The workaround for this is to assume a value of
@@ -818,50 +819,51 @@
         if (rc !is XPCOM.NS_OK) {
             prefCharset = "ISO-8859-1"; //$NON_NLS-1$
         } else {
-            if (result[0] is 0) {
+            if (localizedString is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
-            localizedString = new nsIPrefLocalizedString (result[0]);
-            result[0] = 0;
-            rc = localizedString.ToString (result);
+            //localizedString = new nsIPrefLocalizedString (result[0]);
+            //result[0] = 0;
+            PRUnichar* tmpChar;
+            rc = localizedString.ToString (&tmpChar);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
                 error (rc);
             }
-            if (result[0] is 0) {
+            if (tmpChar is null) {
                 browser.dispose ();
                 error (XPCOM.NS_NOINTERFACE);
             }
-            int length = XPCOM.strlen_PRUnichar (result[0]);
-            char[] dest = new char[length];
-            XPCOM.memmove (dest, result[0], length * 2);
-            prefCharset = new String (dest);
+            int span = XPCOM.strlen_PRUnichar (tmpChar);
+            //char[] dest = new char[length];
+            //XPCOM.memmove (dest, result[0], length * 2);
+            prefCharset = Utf.toString(tmpChar[0 .. span]);
         }
-        result[0] = 0;
+        //result[0] = 0;
 
         String newCharset = System.getProperty ("file.encoding");   // $NON-NLS-1$
         if (!newCharset.equals (prefCharset)) {
             /* write the new charset value */
-            int length = newCharset.length ();
-            char[] charBuffer = new char[length + 1];
-            newCharset.getChars (0, length, charBuffer, 0);
+            //int length = newCharset.length ();
+            //char[] charBuffer = new char[length + 1];
+            //newCharset.getChars (0, length, charBuffer, 0);
             if (localizedString is null) {
-                byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
-                rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+                //byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
+                rc = componentManager.CreateInstanceByContractID (XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, null, &nsIPrefLocalizedString.IID, cast(void**)&localizedString);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
                     error (rc);
                 }
-                if (result[0] is 0) {
+                if (localizedString is null) {
                     browser.dispose ();
                     error (XPCOM.NS_NOINTERFACE);
                 }
-                localizedString = new nsIPrefLocalizedString (result[0]);
-                result[0] = 0;
+                //localizedString = new nsIPrefLocalizedString (result[0]);
+                //result[0] = 0;
             }
-            localizedString.SetDataWithLength (length, charBuffer);
-            rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+            localizedString.SetDataWithLength (newCharset.length, newCharset.toString16);
+            rc = prefBranch.SetComplexValue (PREFERENCE_CHARSET.ptr, &nsIPrefLocalizedString.IID, cast(nsISupports)localizedString);
         }
         if (localizedString !is null) localizedString.Release ();
 
@@ -883,45 +885,45 @@
         }
 
         if (proxyHost !is null) {
-            byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
-            rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+            //byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
+            rc = componentManager.CreateInstanceByContractID (XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, null, &nsIPrefLocalizedString.IID, cast(void**)&localizedString);
             if (rc !is XPCOM.NS_OK) error (rc);
-            if (result[0] is 0) error (XPCOM.NS_NOINTERFACE);
+            if (localizedString] is null) error (XPCOM.NS_NOINTERFACE);
 
-            localizedString = new nsIPrefLocalizedString (result[0]);
-            result[0] = 0;
-            int length = proxyHost.length ();
-            char[] charBuffer = new char[length + 1];
-            proxyHost.getChars (0, length, charBuffer, 0);
-            rc = localizedString.SetDataWithLength (length, charBuffer);
+            //localizedString = new nsIPrefLocalizedString (result[0]);
+            //result[0] = 0;
+            //int length = proxyHost.length ();
+            //char[] charBuffer = new char[length + 1];
+            //proxyHost.getChars (0, length, charBuffer, 0);
+            rc = localizedString.SetDataWithLength (proxyHost.length, proxyHost.toString16);
             if (rc !is XPCOM.NS_OK) error (rc);
-            buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_FTP, true);
-            rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+            //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_FTP, true);
+            rc = prefBranch.SetComplexValue (PREFERENCE_PROXYHOST_FTP.ptr, &nsIPrefLocalizedString.IID, cast(nsISupports)localizedString);
             if (rc !is XPCOM.NS_OK) error (rc);
-            buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_HTTP, true);
-            rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+            //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_HTTP, true);
+            rc = prefBranch.SetComplexValue (PREFERENCE_PROXYHOST_HTTP.ptr, &nsIPrefLocalizedString.IID, cast(nsISupports)localizedString);
             if (rc !is XPCOM.NS_OK) error (rc);
-            buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_SSL, true);
-            rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+            //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_SSL, true);
+            rc = prefBranch.SetComplexValue (PREFERENCE_PROXYHOST_SSL.ptr, &nsIPrefLocalizedString.IID, cast(nsISupports)localizedString);
             if (rc !is XPCOM.NS_OK) error (rc);
             localizedString.Release ();
         }
 
         if (port !is -1) {
-            buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_FTP, true);
-            rc = prefBranch.SetIntPref (buffer, port);
+            //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_FTP, true);
+            rc = prefBranch.SetIntPref (PREFERENCE_PROXYPORT_FTP.ptr, port);
             if (rc !is XPCOM.NS_OK) error (rc);
-            buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_HTTP, true);
-            rc = prefBranch.SetIntPref (buffer, port);
+            //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_HTTP, true);
+            rc = prefBranch.SetIntPref (PREFERENCE_PROXYPORT_HTTP.ptr, port);
             if (rc !is XPCOM.NS_OK) error (rc);
-            buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_SSL, true);
-            rc = prefBranch.SetIntPref (buffer, port);
+            //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_SSL, true);
+            rc = prefBranch.SetIntPref (PREFERENCE_PROXYPORT_SSL.ptr, port);
             if (rc !is XPCOM.NS_OK) error (rc);
         }
 
         if (proxyHost !is null || port !is -1) {
-            buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYTYPE, true);
-            rc = prefBranch.SetIntPref (buffer, 1);
+            //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYTYPE, true);
+            rc = prefBranch.SetIntPref (PREFERENCE_PROXYTYPE.ptr, 1);
             if (rc !is XPCOM.NS_OK) error (rc);
         }
 
@@ -932,16 +934,16 @@
         * is responsible for creating the new Browser and Shell in an OpenWindowListener,
         * they should decide whether the new window is unwelcome or not and act accordingly. 
         */
-        buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_DISABLEOPENDURINGLOAD, true);
-        rc = prefBranch.SetBoolPref (buffer, 0);
+        //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_DISABLEOPENDURINGLOAD, true);
+        rc = prefBranch.SetBoolPref (PREFERENCE_DISABLEOPENDURINGLOAD.ptr, 0);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
         }
 
         /* Ensure that the status text can be set through means like javascript */ 
-        buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_DISABLEWINDOWSTATUSCHANGE, true);
-        rc = prefBranch.SetBoolPref (buffer, 0);
+        //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_DISABLEWINDOWSTATUSCHANGE, true);
+        rc = prefBranch.SetBoolPref (PREFERENCE_DISABLEWINDOWSTATUSCHANGE.ptr, 0);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
@@ -952,21 +954,25 @@
         PromptService2Factory factory = new PromptService2Factory ();
         factory.AddRef ();
 
-        rc = componentManager.QueryInterface (nsIComponentRegistrar.NS_ICOMPONENTREGISTRAR_IID, result);
+	nsIComponentRegistrar componentRegistrar;
+        rc = componentManager.QueryInterface (&nsIComponentRegistrar.IID, cast(void**)&componentRegistrar);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
         }
-        if (result[0] is 0) {
+        if (componentRegistrar is null) {
             browser.dispose ();
             error (XPCOM.NS_NOINTERFACE);
         }
         
-        nsIComponentRegistrar componentRegistrar = new nsIComponentRegistrar (result[0]);
-        result[0] = 0;
-        aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PROMPTSERVICE_CONTRACTID, true); 
-        byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "Prompt Service", true); //$NON-NLS-1$
-        rc = componentRegistrar.RegisterFactory (XPCOM.NS_PROMPTSERVICE_CID, aClassName, aContractID, factory.getAddress ());
+        //nsIComponentRegistrar componentRegistrar = new nsIComponentRegistrar (result[0]);
+        //result[0] = 0;
+        //aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PROMPTSERVICE_CONTRACTID, true);
+	String aClassName = "Prompt Service"; 
+        //byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "Prompt Service", true); //$NON-NLS-1$
+	
+        rc = componentRegistrar.RegisterFactory (XPCOM.NS_PROMPTSERVICE_CID, aClassName, XPCOM.NS_PROMPTSERVICE_CONTRACTID, cast(nsIFactory)factory);
+
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
@@ -975,9 +981,10 @@
         
         HelperAppLauncherDialogFactory dialogFactory = new HelperAppLauncherDialogFactory ();
         dialogFactory.AddRef ();
-        aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CONTRACTID, true);
-        aClassName = MozillaDelegate.wcsToMbcs (null, "Helper App Launcher Dialog", true); //$NON-NLS-1$
-        rc = componentRegistrar.RegisterFactory (XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CID, aClassName, aContractID, dialogFactory.getAddress ());
+        //aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CONTRACTID, true);
+	aClassName = "Helper App Launcher Dialog";
+        //aClassName = MozillaDelegate.wcsToMbcs (null, "Helper App Launcher Dialog", true); //$NON-NLS-1$
+        rc = componentRegistrar.RegisterFactory (XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CID, aClassName, XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CONTRACTID, cast(nsIFactory)dialogFactory);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
@@ -993,9 +1000,10 @@
         */
         DownloadFactory downloadFactory = new DownloadFactory ();
         downloadFactory.AddRef ();
-        aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DOWNLOAD_CONTRACTID, true);
-        aClassName = MozillaDelegate.wcsToMbcs (null, "Download", true); //$NON-NLS-1$
-        rc = componentRegistrar.RegisterFactory (XPCOM.NS_DOWNLOAD_CID, aClassName, aContractID, downloadFactory.getAddress ());
+        //aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DOWNLOAD_CONTRACTID, true);
+	aClassName = "Download";
+        //aClassName = MozillaDelegate.wcsToMbcs (null, "Download", true); //$NON-NLS-1$
+        rc = componentRegistrar.RegisterFactory (XPCOM.NS_DOWNLOAD_CID, aClassName, XPCOM.NS_DOWNLOAD_CONTRACTID, cast(nsIFactory)downloadFactory);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
@@ -1004,9 +1012,10 @@
 
         FilePickerFactory pickerFactory = IsXULRunner ? new FilePickerFactory_1_8 () : new FilePickerFactory ();
         pickerFactory.AddRef ();
-        aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_FILEPICKER_CONTRACTID, true);
-        aClassName = MozillaDelegate.wcsToMbcs (null, "FilePicker", true); //$NON-NLS-1$
-        rc = componentRegistrar.RegisterFactory (XPCOM.NS_FILEPICKER_CID, aClassName, aContractID, pickerFactory.getAddress ());
+        //aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_FILEPICKER_CONTRACTID, true);
+	aClassName = "FilePicker";
+        //aClassName = MozillaDelegate.wcsToMbcs (null, "FilePicker", true); //$NON-NLS-1$
+        rc = componentRegistrar.RegisterFactory (XPCOM.NS_FILEPICKER_CID, aClassName, XPCOM.NS_FILEPICKER_CONTRACTID, cast(nsIFactory)pickerFactory);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
             error (rc);
@@ -1025,54 +1034,58 @@
             public void handleEvent (Event event) {
                 if (BrowserCount > 0) return; /* another display is still active */
 
-                int /*long*/[] result = new int /*long*/[1];
-                int rc = XPCOM.NS_GetServiceManager (result);
-                if (rc !is XPCOM.NS_OK) error (rc);
-                if (result[0] is 0) error (XPCOM.NS_NOINTERFACE);
-
-                nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
-                result[0] = 0;      
-                byte[] buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_OBSERVER_CONTRACTID, true);
-                rc = serviceManager.GetServiceByContractID (buffer, nsIObserverService.NS_IOBSERVERSERVICE_IID, result);
+		nsIServiceManager serviceManager;
+                //int /*long*/[] result = new int /*long*/[1];
+                int rc = XPCOM.NS_GetServiceManager (&serviceManager);
                 if (rc !is XPCOM.NS_OK) error (rc);
-                if (result[0] is 0) error (XPCOM.NS_NOINTERFACE);
+                if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
 
-                nsIObserverService observerService = new nsIObserverService (result[0]);
-                result[0] = 0;
-                buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_BEFORE_CHANGE, true);
-                int length = SHUTDOWN_PERSIST.length ();
-                char[] chars = new char [length + 1];
-                SHUTDOWN_PERSIST.getChars (0, length, chars, 0);
-                rc = observerService.NotifyObservers (0, buffer, chars);
+                //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+                //result[0] = 0;      
+                //byte[] buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_OBSERVER_CONTRACTID, true);
+		nsIObserverService observerService;
+                rc = serviceManager.GetServiceByContractID (XPCOM.NS_OBSERVER_CONTRACTID, &nsIObserverService.IID, cast(void**)&observerService);
+                if (rc !is XPCOM.NS_OK) error (rc);
+                if (observerService is null) error (XPCOM.NS_NOINTERFACE);
+
+                //nsIObserverService observerService = new nsIObserverService (result[0]);
+                //result[0] = 0;
+                //buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_BEFORE_CHANGE, true);
+                //int length = SHUTDOWN_PERSIST.length ();
+                //char[] chars = new char [length + 1];
+                //SHUTDOWN_PERSIST.getChars (0, length, chars, 0);
+                rc = observerService.NotifyObservers (null, PROFILE_BEFORE_CHANGE.ptr, SHUTDOWN_PERSIST.toString16);
                 if (rc !is XPCOM.NS_OK) error (rc);
                 observerService.Release ();
 
                 if (LocationProvider !is null) {
-                    String prefsLocation = LocationProvider.profilePath + AppFileLocProvider.PREFERENCES_FILE;
-                    nsEmbedString pathString = new nsEmbedString (prefsLocation);
-                    rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result);
+                    String prefsLocation = LocationProvider.profilePath ~ AppFileLocProvider.PREFERENCES_FILE;
+                    scope auto pathString = new nsEmbedString (prefsLocation);
+		    nsILocalFile localFile;
+                    rc = XPCOM.NS_NewLocalFile (cast(nsAString*)pathString, 1, &localFile);
                     if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
-                    if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
-                    pathString.dispose ();
+                    if (localFile is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+                    //pathString.dispose ();
 
-                    nsILocalFile localFile = new nsILocalFile (result [0]);
-                    result[0] = 0;
-                    rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, result); 
+                    //nsILocalFile localFile = new nsILocalFile (result [0]);
+                    //result[0] = 0;
+		    nsIFile prefFile;
+                    rc = localFile.QueryInterface (&nsIFile.IID, &prefFile); 
                     if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
-                    if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+                    if (prefFile is null) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
                     localFile.Release ();
 
-                    nsIFile prefFile = new nsIFile (result[0]);
-                    result[0] = 0;
-
-                    buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFSERVICE_CONTRACTID, true);
-                    rc = serviceManager.GetServiceByContractID (buffer, nsIPrefService.NS_IPREFSERVICE_IID, result);
+                    //nsIFile prefFile = new nsIFile (result[0]);
+                    //result[0] = 0;
+		    nsIPrefService prefService;
+                    //buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFSERVICE_CONTRACTID, true);
+                    rc = serviceManager.GetServiceByContractID (XPCOM.NS_PREFSERVICE_CONTRACTID, &nsIPrefService.IID, &prefService);
                     if (rc !is XPCOM.NS_OK) error (rc);
-                    if (result[0] is 0) error (XPCOM.NS_NOINTERFACE);
+                    if (prefService is null) error (XPCOM.NS_NOINTERFACE);
 
-                    nsIPrefService prefService = new nsIPrefService (result[0]);
-                    result[0] = 0;
-                    rc = prefService.SavePrefFile(prefFile.getAddress ());
+                    //nsIPrefService prefService = new nsIPrefService (result[0]);
+                    //result[0] = 0;
+                    rc = prefService.SavePrefFile(prefFile);
                     prefService.Release ();
                     prefFile.Release ();
                 }
@@ -1092,53 +1105,67 @@
     }
 
     BrowserCount++;
-    int rc = XPCOM.NS_GetComponentManager (result);
+    nsIComponentManager componentManager;
+    int rc = XPCOM.NS_GetComponentManager (&componentManager);
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
         error (rc);
     }
-    if (result[0] is 0) {
+    if (componentManager is null) {
         browser.dispose ();
         error (XPCOM.NS_NOINTERFACE);
     }
     
-    nsIComponentManager componentManager = new nsIComponentManager (result[0]);
-    result[0] = 0;
-    nsID NS_IWEBBROWSER_CID = new nsID ("F1EAC761-87E9-11d3-AF80-00A024FFC08C"); //$NON-NLS-1$
-    rc = componentManager.CreateInstance (NS_IWEBBROWSER_CID, 0, nsIWebBrowser.NS_IWEBBROWSER_IID, result);
+    //nsIComponentManager componentManager = new nsIComponentManager (result[0]);
+    //result[0] = 0;
+    nsIWebBrowser webBrowser;
+    nsID NS_IWEBBROWSER_CID = { 0xF1EAC761, 0x87E9, 0x11d3, [0xAF, 0x80, 0x00, 0xA0, 0x24, 0xFF, 0xC0, 0x8C] }; //$NON-NLS-1$
+    rc = componentManager.CreateInstance (&NS_IWEBBROWSER_CID, null, &nsIWebBrowser.IID, cast(void**)&webBrowser);
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
         error (rc);
     }
-    if (result[0] is 0) {
+    if (webBrowser is null) {
         browser.dispose ();
         error (XPCOM.NS_NOINTERFACE);   
     }
     
-    webBrowser = new nsIWebBrowser (result[0]);
-    result[0] = 0;
+    //webBrowser = new nsIWebBrowser (result[0]);
+    //result[0] = 0;
 
-    createCOMInterfaces ();
+    //createCOMInterfaces ();
     AddRef ();
 
-    rc = webBrowser.SetContainerWindow (webBrowserChrome.getAddress());
+    /***** CAREFUL HERE: check to make sure this is correct XPCOM 
+     *****               connection for webBrowserChrome. -JJR 
+     *****/
+    nsIWebBrowserChrome webBrowserChrome;  //represents the this Mozilla internal interface
+    
+    rc = this.QueryInterface(&nsIWebBrowserChrome.IID, cast(void**)&webBrowserChrome );
+    if (rc !is XPCOM.NS_OK) 
+        Mozilla.error (rc);
+    if (webBrowserChrome is null) 
+        Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+    
+    rc = webBrowser.SetContainerWindow ( webBrowserChrome ); // set chrome to self
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
         error (rc);
     }
             
-    rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result);
+    nsIBaseWindow baseWindow;
+    rc = webBrowser.QueryInterface (nsIBaseWindow.IID, cast(void**)&baseWindow);
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
         error (rc);
     }
-    if (result[0] is 0) {
+    if (baseWindow] is null) {
         browser.dispose ();
         error (XPCOM.NS_ERROR_NO_INTERFACE);
     }
     
-    nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
-    result[0] = 0;
+    //nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
+    //result[0] = 0;
     Rectangle rect = browser.getClientArea ();
     if (rect.isEmpty ()) {
         rect.width = 1;
--- a/dwt/dwthelper/System.d	Sun Oct 19 01:20:57 2008 +0200
+++ b/dwt/dwthelper/System.d	Sun Oct 19 21:18:43 2008 -0700
@@ -161,11 +161,12 @@
         /* else get values for global system keys (environment) */
         } else {
             switch( key ){
-                case "os.name": return "linux";
-                case "user.name": return "";
-                case "user.home": return "";
-                case "user.dir" : return "";
+                case "os.name": return tango.sys.Environment.get("OSTYPE");
+                case "user.name": return tango.sys.Environment.get("USER");
+                case "user.home": return tango.sys.Environment.get("HOME");
+                case "user.dir" : return tango.sys.Environment.get("PWD");
                 case "file.separator" : return FileConst.PathSeparatorString ;
+                case "file.encoding" : return 
                 default: return null;
             }
         }
--- a/dwt/internal/mozilla/nsID.d	Sun Oct 19 01:20:57 2008 +0200
+++ b/dwt/internal/mozilla/nsID.d	Sun Oct 19 21:18:43 2008 -0700
@@ -9,7 +9,7 @@
     PRUint16 m1;
     PRUint16 m2;
     PRUint8[8] m3;
-
+/+
 	static nsID opCall(PRUint32 v0, PRUint16 v1, PRUint16 v2, PRUint8[8] v3)
 	{
 		nsID result;
@@ -20,6 +20,7 @@
 			result.m3[i] = v3[i];
 		return result;
 	}
++/
 }
 
 alias nsID nsCID;