changeset 350:373b48b9eaf0

Conclusion of long painful debugging: working Browser package :) (aplha)
author John Reimer <terminal.node@gmail.com>
date Sun, 02 Nov 2008 01:30:09 -0800
parents 676785ef6d24
children f1bb3949939b
files dsss.conf dwt/browser/Browser.d dwt/browser/Mozilla.d dwt/browser/MozillaDelegate.d dwt/dwthelper/System.d dwt/internal/mozilla/nsIDocShell.d dwt/internal/mozilla/nsIProperties.d
diffstat 7 files changed, 287 insertions(+), 310 deletions(-) [+]
line wrap: on
line diff
--- a/dsss.conf	Fri Oct 31 23:35:10 2008 -0700
+++ b/dsss.conf	Sun Nov 02 01:30:09 2008 -0800
@@ -1,6 +1,4 @@
 
 [dwt]
-exclude=dwt/internal/mozilla/
-exclude+=dwt/browser
 type=library
 
--- a/dwt/browser/Browser.d	Fri Oct 31 23:35:10 2008 -0700
+++ b/dwt/browser/Browser.d	Sun Nov 02 01:30:09 2008 -0800
@@ -15,6 +15,7 @@
 import dwt.dwthelper.utils;
 
 import tango.core.Thread;
+import tango.io.Stdout;
 
 import dwt.DWT;
 import dwt.DWTError;
@@ -368,9 +369,10 @@
 
 protected void checkSubclass () {
     String name = this.classinfo.name;
-    
-    int index = tango.text.Util.locatePrior(name, '.');
-    if (!(name[0 .. index + 1] == PACKAGE_PREFIX)) {
+    name = name.substring(0, name.lastIndexOf('.'));
+    int index = name.lastIndexOf('.');
+    if (!name.substring (0, index + 1).equals (PACKAGE_PREFIX)) {
+        Stdout ("name: ")(name.substring(0, index + 1))(" == " )(PACKAGE_PREFIX).newline;
         DWT.error (DWT.ERROR_INVALID_SUBCLASS);
     }
 }
--- a/dwt/browser/Mozilla.d	Fri Oct 31 23:35:10 2008 -0700
+++ b/dwt/browser/Mozilla.d	Sun Nov 02 01:30:09 2008 -0800
@@ -15,6 +15,7 @@
 import dwt.dwthelper.utils;
 
 import tango.text.locale.Core;  // Necessary for Region/Culture/Locale code
+import tango.io.Stdout;
 import tango.text.convert.Format;
 import tango.io.Console;
 import tango.sys.Environment;
@@ -77,8 +78,6 @@
 import dwt.internal.mozilla.nsIDOMDocument;
 import dwt.internal.mozilla.nsIDirectoryService;
 import dwt.internal.mozilla.nsIDocShell;
-//import dwt.internal.mozilla.nsIDocShell_1_8;
-//import dwt.internal.mozilla.nsIDocShell_1_9;
 import dwt.internal.mozilla.nsIEmbeddingSiteWindow;
 import dwt.internal.mozilla.nsIFile;
 import dwt.internal.mozilla.nsIFactory;
@@ -96,7 +95,6 @@
 import dwt.internal.mozilla.nsISimpleEnumerator;
 import dwt.internal.mozilla.nsIStreamListener;
 import dwt.internal.mozilla.nsISupports;
-//import dwt.internal.mozilla.nsISupportsWeakReference;
 import dwt.internal.mozilla.nsITooltipListener;
 import dwt.internal.mozilla.nsIURI;
 import dwt.internal.mozilla.nsIURIContentListener;
@@ -195,40 +193,40 @@
     // TEMPORARY CODE
     static final String GRE_INITIALIZED = "dwt.browser.XULRunnerInitialized"; //$NON-NLS-1$
 
-    static this () {
+    this () {
         PROFILE_DIR = SEPARATOR_OS ~ "eclipse" ~ SEPARATOR_OS;
         MozillaClearSessions = new class() Runnable {
             public void run () {
                 if (!Initialized) return;
                 nsIServiceManager serviceManager;
                 int rc = XPCOM.NS_GetServiceManager (&serviceManager);
-                if (rc !is XPCOM.NS_OK) error (rc);
-                if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+                if (serviceManager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
                 //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
                 //result[0] = 0;
                 //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_COOKIEMANAGER_CONTRACTID, true);
                 nsICookieManager 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);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+                if (manager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
                 serviceManager.Release ();
 
                 //nsICookieManager manager = new nsICookieManager (result[0]);
                 //result[0] = 0;
                 nsISimpleEnumerator enumerator;
                 rc = manager.GetEnumerator (&enumerator);
-                if (rc !is XPCOM.NS_OK) error (rc);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                 manager.Release ();
 
                 //nsISimpleEnumerator enumerator = new nsISimpleEnumerator (result[0]);
                 PRBool moreElements; /* PRBool */
                 rc = enumerator.HasMoreElements (&moreElements);
-                if (rc !is XPCOM.NS_OK) error (rc);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                 while (moreElements !is 0) {
                     //result[0] = 0;
                     nsICookie cookie;
                     rc = enumerator.GetNext (cast(nsISupports*)&cookie);
-                    if (rc !is XPCOM.NS_OK) error (rc);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                     //nsICookie cookie = new nsICookie (result[0]);
                     PRUint64 expires;
                     rc = cookie.GetExpires (&expires);
@@ -244,11 +242,11 @@
                         //XPCOM.nsEmbedCString_delete (domain);
                         //XPCOM.nsEmbedCString_delete (name);
                         //XPCOM.nsEmbedCString_delete (path);
-                        if (rc !is XPCOM.NS_OK) error (rc);
+                        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                     }
                     cookie.Release ();
                     rc = enumerator.HasMoreElements (&moreElements);
-                    if (rc !is XPCOM.NS_OK) error (rc);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                 }
                 enumerator.Release ();
             }
@@ -380,7 +378,7 @@
 
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
 +/          // No need for double layer initialization in DWT; XPCOMInit was glued
             // At this stage we know that XULRunner is available, but we don't know
@@ -454,7 +452,7 @@
             //pathString.dispose ();
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             if (localFile is null) {
                 browser.dispose ();
@@ -516,11 +514,11 @@
         int rc = XPCOM.NS_GetComponentManager (&componentManager);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         if (componentManager is null) {
             browser.dispose ();
-            error (XPCOM.NS_NOINTERFACE);
+            error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         }
         
         //nsIComponentManager componentManager = new nsIComponentManager (result[0]);
@@ -531,23 +529,23 @@
             if (rc !is XPCOM.NS_ERROR_NO_INTERFACE) {
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
                 if (AppShell is null) {
                     browser.dispose ();
-                    error (XPCOM.NS_NOINTERFACE);
+                    error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
                 }
     
                 //AppShell = new nsIAppShell (result[0]);
                 rc = AppShell.Create (null, null);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
                 rc = AppShell.Spinup ();
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
             }
             //result[0] = 0;
@@ -560,11 +558,11 @@
         rc = XPCOM.NS_GetServiceManager (&serviceManager);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         if (serviceManager is null) {
             browser.dispose ();
-            error (XPCOM.NS_NOINTERFACE);
+            error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         }
         
         //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
@@ -574,11 +572,11 @@
         rc = serviceManager.GetServiceByContractID (XPCOM.NS_WINDOWWATCHER_CONTRACTID.ptr, &nsIWindowWatcher.IID, cast(void**)&windowWatcher);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         if (windowWatcher is null) {
             browser.dispose ();
-            error (XPCOM.NS_NOINTERFACE);       
+            error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);       
         }
 
         //nsIWindowWatcher windowWatcher = new nsIWindowWatcher (result[0]);
@@ -586,7 +584,7 @@
         rc = windowWatcher.SetWindowCreator (cast(nsIWindowCreator)WindowCreator);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         windowWatcher.Release ();
 
@@ -597,11 +595,11 @@
             rc = serviceManager.GetServiceByContractID (XPCOM.NS_DIRECTORYSERVICE_CONTRACTID.ptr, &nsIDirectoryService.IID, cast(void**)&directoryService);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             if (directoryService is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
 
             //nsIDirectoryService directoryService = new nsIDirectoryService (result[0]);
@@ -610,11 +608,11 @@
             rc = directoryService.QueryInterface (&nsIProperties.IID, cast(void**)&properties);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             if (properties is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
             directoryService.Release ();
 
@@ -625,11 +623,11 @@
             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);
+                error (rc, __FILE__, __LINE__);
             }
             if (profileDir is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
             properties.Release ();
 
@@ -639,7 +637,7 @@
             rc = profileDir.GetNativePath (cast(nsACString*)path);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             //int length = XPCOM.nsEmbedCString_Length (path);
             //int /*long*/ ptr = XPCOM.nsEmbedCString_get (path);
@@ -657,11 +655,11 @@
             rc = serviceManager.GetServiceByContractID (XPCOM.NS_OBSERVER_CONTRACTID.ptr, &nsIObserverService.IID, cast(void**)&observerService);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             if (observerService is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
 
             //nsIObserverService observerService = new nsIObserverService (result[0]);
@@ -674,13 +672,13 @@
             rc = observerService.NotifyObservers (null, PROFILE_DO_CHANGE.ptr, chars);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             //buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_AFTER_CHANGE, true);
             rc = observerService.NotifyObservers (null, PROFILE_AFTER_CHANGE.ptr, chars);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             observerService.Release ();
         }
@@ -696,11 +694,11 @@
         serviceManager.Release ();
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         if (serviceManager is null) {
             browser.dispose ();
-            error (XPCOM.NS_NOINTERFACE);
+            error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         }
 
         //nsIPrefService prefService = new nsIPrefService (result[0]);
@@ -711,11 +709,11 @@
         prefService.Release ();
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         if (prefBranch is null) {
             browser.dispose ();
-            error (XPCOM.NS_NOINTERFACE);
+            error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         }
 
         //nsIPrefBranch prefBranch = new nsIPrefBranch (result[0]);
@@ -737,7 +735,7 @@
         } else {
             if (localizedString is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
             //localizedString = new nsIPrefLocalizedString (result[0]);
             //result[0] = 0;
@@ -745,11 +743,11 @@
             rc = localizedString.ToString (&tmpChars);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             if (tmpChars is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
             int span = XPCOM.strlen_PRUnichar (tmpChars);
             //char[] dest = new char[length];
@@ -805,11 +803,11 @@
                 rc = componentManager.CreateInstanceByContractID (XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID.ptr, null, &nsIPrefLocalizedString.IID, cast(void**)&localizedString);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
                 if (localizedString is null) {
                     browser.dispose ();
-                    error (XPCOM.NS_NOINTERFACE);
+                    error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
                 }
                 //localizedString = new nsIPrefLocalizedString (result[0]);
                 //result[0] = 0;
@@ -837,7 +835,7 @@
         } else {
             if (localizedString is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
             //localizedString = new nsIPrefLocalizedString (result[0]);
             //result[0] = 0;
@@ -845,11 +843,11 @@
             rc = localizedString.ToString (&tmpChar);
             if (rc !is XPCOM.NS_OK) {
                 browser.dispose ();
-                error (rc);
+                error (rc, __FILE__, __LINE__);
             }
             if (tmpChar is null) {
                 browser.dispose ();
-                error (XPCOM.NS_NOINTERFACE);
+                error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             }
             int span = XPCOM.strlen_PRUnichar (tmpChar);
             //char[] dest = new char[length];
@@ -869,11 +867,11 @@
                 rc = componentManager.CreateInstanceByContractID (XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID.ptr, null, &nsIPrefLocalizedString.IID, cast(void**)&localizedString);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
                 if (localizedString is null) {
                     browser.dispose ();
-                    error (XPCOM.NS_NOINTERFACE);
+                    error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
                 }
                 //localizedString = new nsIPrefLocalizedString (result[0]);
                 //result[0] = 0;
@@ -887,6 +885,8 @@
         * Check for proxy values set as documented java properties and update mozilla's
         * preferences with these values if needed.
         */
+
+        // NOTE: in dwt, these properties don't exist so both keys will return null
         String proxyHost = System.getProperty (PROPERTY_PROXYHOST);
         String proxyPortString = System.getProperty (PROPERTY_PROXYPORT);
 
@@ -903,8 +903,8 @@
         if (proxyHost !is null) {
             //byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
             rc = componentManager.CreateInstanceByContractID (XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID.ptr, null, &nsIPrefLocalizedString.IID, cast(void**)&localizedString);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (localizedString is null) error (XPCOM.NS_NOINTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (localizedString is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
             //localizedString = new nsIPrefLocalizedString (result[0]);
             //result[0] = 0;
@@ -912,35 +912,35 @@
             //char[] charBuffer = new char[length + 1];
             //proxyHost.getChars (0, length, charBuffer, 0);
             rc = localizedString.SetDataWithLength (proxyHost.length, proxyHost.toString16().toString16z());
-            if (rc !is XPCOM.NS_OK) error (rc);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
             //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);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
             //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);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
             //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);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
             localizedString.Release ();
         }
 
         if (port !is -1) {
             //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_FTP, true);
             rc = prefBranch.SetIntPref (PREFERENCE_PROXYPORT_FTP.ptr, port);
-            if (rc !is XPCOM.NS_OK) error (rc);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
             //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_HTTP, true);
             rc = prefBranch.SetIntPref (PREFERENCE_PROXYPORT_HTTP.ptr, port);
-            if (rc !is XPCOM.NS_OK) error (rc);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
             //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 (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         }
 
         if (proxyHost !is null || port !is -1) {
             //buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYTYPE, true);
             rc = prefBranch.SetIntPref (PREFERENCE_PROXYTYPE.ptr, 1);
-            if (rc !is XPCOM.NS_OK) error (rc);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         }
 
         /*
@@ -954,7 +954,7 @@
         rc = prefBranch.SetBoolPref (PREFERENCE_DISABLEOPENDURINGLOAD.ptr, 0);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
 
         /* Ensure that the status text can be set through means like javascript */ 
@@ -962,7 +962,7 @@
         rc = prefBranch.SetBoolPref (PREFERENCE_DISABLEWINDOWSTATUSCHANGE.ptr, 0);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
 
         prefBranch.Release ();
@@ -974,11 +974,11 @@
         rc = componentManager.QueryInterface (&nsIComponentRegistrar.IID, cast(void**)&componentRegistrar);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         if (componentRegistrar is null) {
             browser.dispose ();
-            error (XPCOM.NS_NOINTERFACE);
+            error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         }
         
         //nsIComponentRegistrar componentRegistrar = new nsIComponentRegistrar (result[0]);
@@ -991,7 +991,7 @@
 
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         factory.Release ();
         
@@ -1003,7 +1003,7 @@
         rc = componentRegistrar.RegisterFactory (&XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CID, aClassName.ptr, XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CONTRACTID.ptr, cast(nsIFactory)dialogFactory);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         dialogFactory.Release ();
 
@@ -1022,7 +1022,7 @@
         rc = componentRegistrar.RegisterFactory (&XPCOM.NS_DOWNLOAD_CID, aClassName.ptr, XPCOM.NS_DOWNLOAD_CONTRACTID.ptr, cast(nsIFactory)downloadFactory);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         downloadFactory.Release ();
 
@@ -1034,7 +1034,7 @@
         rc = componentRegistrar.RegisterFactory (&XPCOM.NS_FILEPICKER_CID, aClassName.ptr, XPCOM.NS_FILEPICKER_CONTRACTID.ptr, cast(nsIFactory)pickerFactory);
         if (rc !is XPCOM.NS_OK) {
             browser.dispose ();
-            error (rc);
+            error (rc, __FILE__, __LINE__);
         }
         pickerFactory.Release ();
 
@@ -1053,16 +1053,16 @@
                 nsIServiceManager serviceManager;
                 //int /*long*/[] result = new int /*long*/[1];
                 int rc = XPCOM.NS_GetServiceManager (&serviceManager);
-                if (rc !is XPCOM.NS_OK) error (rc);
-                if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+                if (serviceManager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
                 //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.ptr, &nsIObserverService.IID, cast(void**)&observerService);
-                if (rc !is XPCOM.NS_OK) error (rc);
-                if (observerService is null) error (XPCOM.NS_NOINTERFACE);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+                if (observerService is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
                 //nsIObserverService observerService = new nsIObserverService (result[0]);
                 //result[0] = 0;
@@ -1071,7 +1071,7 @@
                 //char[] chars = new char [length + 1];
                 //SHUTDOWN_PERSIST.getChars (0, length, chars, 0);
                 rc = observerService.NotifyObservers (null, PROFILE_BEFORE_CHANGE.ptr, SHUTDOWN_PERSIST.toString16().toString16z());
-                if (rc !is XPCOM.NS_OK) error (rc);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                 observerService.Release ();
 
                 if (LocationProvider !is null) {
@@ -1079,7 +1079,7 @@
                     scope auto pathString = new nsEmbedString (prefsLocation.toString16());
                     nsILocalFile localFile;
                     rc = XPCOM.NS_NewLocalFile (cast(nsAString*)pathString, 1, &localFile);
-                    if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
+                    if (rc !is XPCOM.NS_OK) Mozilla.error (rc, __FILE__, __LINE__);
                     if (localFile is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
                     //pathString.dispose ();
 
@@ -1087,8 +1087,8 @@
                     //result[0] = 0;
                     nsIFile prefFile;
                     rc = localFile.QueryInterface (&nsIFile.IID, cast(void**)&prefFile); 
-                    if (rc !is XPCOM.NS_OK) Mozilla.error (rc);
-                    if (prefFile is null) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+                    if (rc !is XPCOM.NS_OK) Mozilla.error (rc, __FILE__, __LINE__);
+                    if (prefFile is null) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
                     localFile.Release ();
 
                     //nsIFile prefFile = new nsIFile (result[0]);
@@ -1096,8 +1096,8 @@
                     nsIPrefService prefService;
                     //buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFSERVICE_CONTRACTID, true);
                     rc = serviceManager.GetServiceByContractID (XPCOM.NS_PREFSERVICE_CONTRACTID.ptr, &nsIPrefService.IID, cast(void**)&prefService);
-                    if (rc !is XPCOM.NS_OK) error (rc);
-                    if (prefService is null) error (XPCOM.NS_NOINTERFACE);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+                    if (prefService is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
                     //nsIPrefService prefService = new nsIPrefService (result[0]);
                     //result[0] = 0;
@@ -1126,59 +1126,44 @@
     int rc = XPCOM.NS_GetComponentManager (&componentManager);
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
-        error (rc);
+        error (rc, __FILE__, __LINE__);
     }
     if (componentManager is null) {
         browser.dispose ();
-        error (XPCOM.NS_NOINTERFACE);
+        error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
     }
     
     //nsIComponentManager componentManager = new nsIComponentManager (result[0]);
     //result[0] = 0;
-    nsIWebBrowser webBrowser;
+    //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);
+        error (rc, __FILE__, __LINE__);
     }
     if (webBrowser is null) {
         browser.dispose ();
-        error (XPCOM.NS_NOINTERFACE);   
+        error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);   
     }
     
-    //webBrowser = new nsIWebBrowser (result[0]);
-    //result[0] = 0;
-
-    //createCOMInterfaces ();
     this.AddRef ();
 
-    /***** 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
+    rc = webBrowser.SetContainerWindow ( cast(nsIWebBrowserChrome)this );
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
-        error (rc);
+        error (rc, __FILE__, __LINE__);
     }
             
     nsIBaseWindow baseWindow;
     rc = webBrowser.QueryInterface (&nsIBaseWindow.IID, cast(void**)&baseWindow);
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
-        error (rc);
+        error (rc, __FILE__, __LINE__);
     }
     if (baseWindow is null) {
         browser.dispose ();
-        error (XPCOM.NS_ERROR_NO_INTERFACE);
+        error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     }
     
     //nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
@@ -1223,7 +1208,7 @@
         }
         if (interfaceRequestor is null) {
             browser.dispose ();
-            error (XPCOM.NS_ERROR_NO_INTERFACE);
+            error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
         }
         //nsIInterfaceRequestor interfaceRequestor = new nsIInterfaceRequestor (result[0]);
         //result[0] = 0;
@@ -1255,11 +1240,11 @@
                 rc = componentManager.QueryInterface (&nsIComponentRegistrar.IID, cast(void**)&componentRegistrar);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
                 if (componentRegistrar is null) {
                     browser.dispose ();
-                    error (XPCOM.NS_NOINTERFACE);
+                    error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
                 }
 
                 // nsIComponentRegistrar componentRegistrar = new nsIComponentRegistrar (result[0]);
@@ -1271,7 +1256,7 @@
                 rc = componentRegistrar.RegisterFactory (&XPCOM.NS_DOWNLOAD_CID, aClassName.ptr, XPCOM.NS_TRANSFER_CONTRACTID.ptr, cast(nsIFactory)downloadFactory_1_8);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
                 downloadFactory_1_8.Release ();
                 componentRegistrar.Release ();
@@ -1289,11 +1274,11 @@
                 rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
                 if (rc !is XPCOM.NS_OK) {
                     browser.dispose ();
-                    error (rc);
+                    error (rc, __FILE__, __LINE__);
                 }
                 if (webNavigation is null) {
                     browser.dispose ();
-                    error (XPCOM.NS_ERROR_NO_INTERFACE);
+                    error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
                 }
                 //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
                 //char[] uri = new char[ABOUT_BLANK.length () + 1];
@@ -1306,24 +1291,11 @@
         interfaceRequestor.Release ();
     }
     componentManager.Release ();
-/*
-    // REMOVE: not necessary
-    nsIWeakReference weakReference;
 
-    rc = this.QueryInterface(&nsIWeakReference.IID, cast(void**)&weakReference);
-    if (rc !is XPCOM.NS_OK) {
-        browser.dispose();
-        error(rc);
-    }
-    if (weakReference is null) {
-        browser.dispose();
-        error(XPCOM.NS_ERROR_NO_INTERFACE);
-    }
-*/
     rc = webBrowser.AddWebBrowserListener (cast(nsIWeakReference)this, &nsIWebProgressListener.IID);
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
-        error (rc);
+        error (rc, __FILE__, __LINE__);
     }
 
     // TODO: Find appropriate place to "Release" uriContentListener -JJR
@@ -1341,7 +1313,7 @@
     rc = webBrowser.SetParentURIContentListener (uriContentListener);
     if (rc !is XPCOM.NS_OK) {
         browser.dispose ();
-        error (rc);
+        error (rc, __FILE__, __LINE__);
     }
 
     mozDelegate.init ();
@@ -1411,8 +1383,8 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);          
     rc = webNavigation.GoBack ();   
@@ -1428,8 +1400,8 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
     //char[] arg = url.toCharArray (); 
@@ -1452,8 +1424,8 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
     rc = webNavigation.GoForward ();
@@ -1469,23 +1441,23 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIDOMWindow window;
     int rc = webBrowser.GetContentDOMWindow (&window);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (window is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (window is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
     //nsIDOMWindow window = new nsIDOMWindow (result[0]);
     //result[0] = 0;
     nsIDOMDocument document;
     rc = window.GetDocument (&document);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (document is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (document is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
     window.Release ();
 
     //int /*long*/ document = result[0];
     //result[0] = 0;
     nsIComponentManager componentManager;
     rc = XPCOM.NS_GetComponentManager (&componentManager);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (componentManager is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (componentManager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
     //nsIComponentManager componentManager = new nsIComponentManager (result[0]);
     //result[0] = 0;
@@ -1494,7 +1466,7 @@
     nsIDOMSerializer_1_7 serializer_1_7;
     rc = componentManager.CreateInstanceByContractID (XPCOM.NS_DOMSERIALIZER_CONTRACTID.ptr, null, &nsIDOMSerializer_1_7.IID, cast(void**)&serializer_1_7);
     if (rc is XPCOM.NS_OK) {    /* mozilla >= 1.7 */
-        if (serializer_1_7 is null) error (XPCOM.NS_NOINTERFACE);
+        if (serializer_1_7 is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
         //nsIDOMSerializer_1_7 serializer = new nsIDOMSerializer_1_7 (result[0]);
         //result[0] = 0;
@@ -1511,8 +1483,8 @@
     } else {    /* mozilla < 1.7 */
         nsIDOMSerializer serializer;
         rc = componentManager.CreateInstanceByContractID (XPCOM.NS_DOMSERIALIZER_CONTRACTID.ptr, null, &nsIDOMSerializer.IID, cast(void**)&serializer);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (serializer is null) error (XPCOM.NS_NOINTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (serializer is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         // TODO: Lookup SerializeToString contract. Find out if the string must provide it's own memory to the method. -JJR
         PRUnichar* string;
         //nsIDOMSerializer serializer = new nsIDOMSerializer (result[0]);
@@ -1538,13 +1510,13 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
     nsIURI aCurrentURI;
     rc = webNavigation.GetCurrentURI (&aCurrentURI);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     webNavigation.Release ();
 
     String location = null;
@@ -1552,7 +1524,7 @@
         //nsIURI uri = new nsIURI (aCurrentURI[0]);
         scope auto aSpec = new nsEmbedCString;
         rc = aCurrentURI.GetSpec (cast(nsACString*)aSpec);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         //int length = XPCOM.nsEmbedCString_Length (aSpec);
         //int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
         location = aSpec.toString;
@@ -1607,8 +1579,8 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
     PRBool aCanGoBack; /* PRBool */
@@ -1624,8 +1596,8 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
     PRBool aCanGoForward; /* PRBool */
@@ -1635,17 +1607,23 @@
 }
 
 extern(D)
-static String error (int code) {
+static void error (int code ) {
+    error ( code, "NOT GIVEN", 0 );
+}
+
+extern(D)
+static String error (int code, char[] file, int line) {
+    Stdout ("File: ")(file)("  Line: ")(line).newline;
     throw new DWTError ("XPCOM error " ~ Integer.toString(code)); //$NON-NLS-1$
 }
 
 extern(D)
 void onDispose (Display display) {
     int rc = webBrowser.RemoveWebBrowserListener (cast(nsIWeakReference)this, &nsIWebProgressListener.IID);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
 
     rc = webBrowser.SetParentURIContentListener (null);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     
     unhookDOMListeners ();
     if (listener !is null) {
@@ -1667,12 +1645,12 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIBaseWindow baseWindow;
     rc = webBrowser.QueryInterface (&nsIBaseWindow.IID, cast(void**)&baseWindow);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
     //nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
     rc = baseWindow.Destroy ();
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     baseWindow.Release ();
 
     Release ();
@@ -1703,12 +1681,12 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebBrowserFocus webBrowserFocus;
     int rc = webBrowser.QueryInterface (&nsIWebBrowserFocus.IID, cast(void**)&webBrowserFocus);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webBrowserFocus is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webBrowserFocus is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebBrowserFocus webBrowserFocus = new nsIWebBrowserFocus (result[0]);
     rc = webBrowserFocus.Activate ();
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     webBrowserFocus.Release ();
 }
 
@@ -1717,12 +1695,12 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebBrowserFocus webBrowserFocus;
     int rc = webBrowser.QueryInterface (&nsIWebBrowserFocus.IID, cast(void**)&webBrowserFocus);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webBrowserFocus is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webBrowserFocus is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebBrowserFocus webBrowserFocus = new nsIWebBrowserFocus (result[0]);
     rc = webBrowserFocus.Deactivate ();
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     webBrowserFocus.Release ();
 }
 
@@ -1735,13 +1713,13 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIBaseWindow baseWindow;
     int rc = webBrowser.QueryInterface (&nsIBaseWindow.IID, cast(void**)&baseWindow);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
     mozDelegate.setSize (embedHandle, width, height);
     //nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
     rc = baseWindow.SetPositionAndSize (0, 0, width, height, 1);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     baseWindow.Release ();
 }
 
@@ -1753,7 +1731,7 @@
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
     if (rc !is XPCOM.NS_OK) error(rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);          
     rc = webNavigation.Reload (nsIWebNavigation.LOAD_FLAGS_NONE);
@@ -1769,7 +1747,7 @@
     * attempting to load a non-existent local url, which is not a Browser error,
     * so this error code should be ignored. 
     */
-    if (rc !is XPCOM.NS_ERROR_INVALID_POINTER && rc !is XPCOM.NS_ERROR_FILE_NOT_FOUND) error (rc);
+    if (rc !is XPCOM.NS_ERROR_INVALID_POINTER && rc !is XPCOM.NS_ERROR_FILE_NOT_FOUND) error (rc, __FILE__, __LINE__);
 }
 
 extern(D)
@@ -1791,8 +1769,9 @@
     *  would be to have a way to call deactivate when the Browser
     *  or one of its children loses focus.
     */
-    if (browser !is browser.getDisplay ().getFocusControl ()) Deactivate ();
-    
+    if (browser !is browser.getDisplay().getFocusControl ()) {
+        Deactivate ();
+    }
     /* convert the String containing HTML to an array of bytes with UTF-8 data */
     /+
     byte[] data = null;
@@ -1812,15 +1791,15 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIServiceManager serviceManager;
     int rc = XPCOM.NS_GetServiceManager (&serviceManager);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (serviceManager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
     //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
     //result[0] = 0;
     nsIIOService ioService;
     rc = serviceManager.GetService (&XPCOM.NS_IOSERVICE_CID, &nsIIOService.IID, cast(void**)&ioService);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (ioService is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (ioService is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
     serviceManager.Release ();
 
     //nsIIOService ioService = new nsIIOService (result[0]);
@@ -1834,8 +1813,8 @@
     scope auto aSpec = new nsEmbedCString(URI_FROMMEMORY);
     nsIURI uri;
     rc = ioService.NewURI (cast(nsACString*)aSpec, null, null, &uri);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (uri is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (uri is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
     //XPCOM.nsEmbedCString_delete (aSpec);
     ioService.Release ();
 
@@ -1843,8 +1822,8 @@
     //result[0] = 0;
     nsIInterfaceRequestor interfaceRequestor;
     rc = webBrowser.QueryInterface (&nsIInterfaceRequestor.IID, cast(void**)&interfaceRequestor);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (interfaceRequestor is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (interfaceRequestor is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     //nsIInterfaceRequestor interfaceRequestor = new nsIInterfaceRequestor (result[0]);
     //result[0] = 0;
 
@@ -1862,7 +1841,7 @@
     nsIDocShell_1_9 docShell_1_9;
     rc = interfaceRequestor.GetInterface (&nsIDocShell_1_9.IID, cast(void**)&docShell_1_9);
     if (rc is XPCOM.NS_OK) {
-        if (docShell_1_9 is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+        if (docShell_1_9 is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
         //nsIDocShell_1_9 docShell = new nsIDocShell_1_9 (result[0]);
         rc = docShell_1_9.LoadStream (inputStream, uri, cast(nsACString*)aContentType,  cast(nsACString*)aContentCharset, null);
         docShell_1_9.Release ();
@@ -1871,7 +1850,7 @@
         nsIDocShell_1_8 docShell_1_8;
         rc = interfaceRequestor.GetInterface (&nsIDocShell_1_8.IID, cast(void**)&docShell_1_8);
         if (rc is XPCOM.NS_OK) {    
-            if (docShell_1_8 is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (docShell_1_8 is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
             //nsIDocShell_1_8 docShell = new nsIDocShell_1_8 (result[0]);
             rc = docShell_1_8.LoadStream (inputStream, uri, cast(nsACString*)aContentType,  cast(nsACString*)aContentCharset, null);
             docShell_1_8.Release ();
@@ -1879,14 +1858,14 @@
             //result[0] = 0;
             nsIDocShell docShell;
             rc = interfaceRequestor.GetInterface (&nsIDocShell.IID, cast(void**)&docShell);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (docShell is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (docShell is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
             //nsIDocShell docShell = new nsIDocShell (result[0]);
             rc = docShell.LoadStream (inputStream, uri, cast(nsACString*) aContentType,  cast(nsACString*)aContentCharset, null);
             docShell.Release ();
         }
     }
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     //result[0] = 0;
 
     inputStream.Release ();
@@ -1904,8 +1883,8 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIWebNavigation webNavigation;
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
     //char[] uri = new char[url.length () + 1];
@@ -1922,12 +1901,12 @@
     nsIWebNavigation webNavigation;
     //int /*long*/[] result = new int /*long*/[1];
     int rc = webBrowser.QueryInterface (&nsIWebNavigation.IID, cast(void**)&webNavigation);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (webNavigation is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);      
     rc = webNavigation.Stop (nsIWebNavigation.STOP_ALL);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     webNavigation.Release ();
 }
 
@@ -1984,15 +1963,15 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIDOMWindow window;
     int rc = webBrowser.GetContentDOMWindow (&window);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (window is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (window is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
     //nsIDOMWindow window = new nsIDOMWindow (result[0]);
     //result[0] = 0;
     nsIDOMEventTarget target;
     rc = window.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
     //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
     //result[0] = 0;
@@ -2002,27 +1981,27 @@
     /* Listeners must be unhooked in pages contained in frames */
     nsIDOMWindowCollection frames;
     rc = window.GetFrames (&frames);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (frames is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (frames is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     //nsIDOMWindowCollection frames = new nsIDOMWindowCollection (result[0]);
     //result[0] = 0;
     PRUint32 count;
     rc = frames.GetLength (&count); /* PRUint32 */
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     //int count = frameCount[0];
 
     if (count > 0) {
         nsIDOMWindow frame;
         for (int i = 0; i < count; i++) {
             rc = frames.Item (i, &frame);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (frame is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (frame is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
             //nsIDOMWindow frame = new nsIDOMWindow (result[0]);
             //result[0] = 0;
             rc = frame.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
             //target = new nsIDOMEventTarget (result[0]);
             //result[0] = 0;
@@ -2171,8 +2150,8 @@
         nsIDOMWindow aContentDOMWindow;
         //int /*long*/[] aContentDOMWindow = new int /*long*/[1];
         int rc = webBrowser.GetContentDOMWindow (&aContentDOMWindow);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (aContentDOMWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (aContentDOMWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
         *ppvObject = cast(void*)aContentDOMWindow;
         //XPCOM.memmove (ppvObject, aContentDOMWindow, C.PTR_SIZEOF);
         return rc;
@@ -2207,8 +2186,8 @@
             nsIDOMWindow window;
             //nsIWebProgress progress = new nsIWebProgress (aWebProgress);
             int rc = aWebProgress.GetDOMWindow (&window);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (window is null) error (XPCOM.NS_NOINTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (window is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             unhookedDOMWindows ~= window;
         }
     } else if ((aStateFlags & nsIWebProgressListener.STATE_REDIRECTING) !is 0) {
@@ -2225,8 +2204,8 @@
         //nsIWebProgress progress = new nsIWebProgress (aWebProgress);
         nsIDOMWindow domWindow;
         int rc = aWebProgress.GetDOMWindow (&domWindow);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (domWindow is null) error (XPCOM.NS_NOINTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (domWindow is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         //nsIDOMWindow domWindow = new nsIDOMWindow (result[0]);
 
         //LONG ptrObject = new LONG (result[0]);
@@ -2235,15 +2214,15 @@
         if (index !is -1) {
             nsIDOMWindow contentWindow;
             rc = webBrowser.GetContentDOMWindow (&contentWindow);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
             bool isTop = contentWindow is domWindow;
             contentWindow.Release ();
             //result[0] = 0;
             nsIDOMEventTarget target;
             rc = domWindow.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
             //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
             //result[0] = 0;
@@ -2295,8 +2274,8 @@
        // nsIWebProgress progress = new nsIWebProgress (aWebProgress);
         nsIDOMWindow domWindow;
         int rc = aWebProgress.GetDOMWindow (&domWindow);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (domWindow is null) error (XPCOM.NS_NOINTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (domWindow is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         //nsIDOMWindow domWindow = new nsIDOMWindow (result[0]);
 
         //LONG ptrObject = new LONG (result[0]);
@@ -2305,15 +2284,15 @@
         if (index !is -1) {
             nsIDOMWindow contentWindow;
             rc = webBrowser.GetContentDOMWindow (&contentWindow);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (contentWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
             bool isTop = contentWindow is domWindow;
             contentWindow.Release ();
             //result[0] = 0;
             nsIDOMEventTarget target;
             rc = domWindow.QueryInterface (&nsIDOMEventTarget.IID, cast(void**)&target);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (target is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
 
             //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
             //result[0] = 0;
@@ -2366,15 +2345,15 @@
     nsIDOMWindow domWindow;
     //int /*long*/[] aDOMWindow = new int /*long*/[1];
     int rc = aWebProgress.GetDOMWindow (&domWindow);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (domWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (domWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIDOMWindow domWindow = new nsIDOMWindow (aDOMWindow[0]);
     //int /*long*/[] aTop = new int /*long*/[1];
     nsIDOMWindow topWindow;
     rc = domWindow.GetTop (&topWindow);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (topWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (topWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     domWindow.Release ();
     
     //nsIDOMWindow topWindow = new nsIDOMWindow (aTop[0]);
@@ -2520,22 +2499,22 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIServiceManager serviceManager;
     int rc = XPCOM.NS_GetServiceManager (&serviceManager);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (serviceManager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
     //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
     //result[0] = 0;
     //byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_CONTEXTSTACK_CONTRACTID, true);
     nsIJSContextStack stack;
     rc = serviceManager.GetServiceByContractID (XPCOM.NS_CONTEXTSTACK_CONTRACTID.ptr, &nsIJSContextStack.IID, cast(void**)&stack);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (stack is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (stack is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
     serviceManager.Release ();
 
     //nsIJSContextStack stack = new nsIJSContextStack (result[0]);
     //result[0] = 0;
     rc = stack.Push (null);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
 
     Shell shell = browser.getShell ();
     Display display = browser.getDisplay ();
@@ -2544,7 +2523,7 @@
     }
     JSContext* result;
     rc = stack.Pop (&result);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     stack.Release ();
     return XPCOM.NS_OK;
 }
@@ -2603,12 +2582,12 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIBaseWindow baseWindow;
     int rc = webBrowser.QueryInterface (&nsIBaseWindow.IID, cast(void**)&baseWindow);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (baseWindow is null) error (XPCOM.NS_ERROR_NO_INTERFACE, __FILE__, __LINE__);
     
     //nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
     rc = baseWindow.SetFocus ();
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     baseWindow.Release ();
 
     /*
@@ -2754,15 +2733,15 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIDOMMouseEvent domMouseEvent;
     int rc = aEvent.QueryInterface (&nsIDOMMouseEvent.IID, cast(void**)&domMouseEvent);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
     //nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]);
     PRInt32 aScreenX, aScreenY;
     rc = domMouseEvent.GetScreenX (&aScreenX);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     rc = domMouseEvent.GetScreenY (&aScreenY);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     domMouseEvent.Release ();
     
     Event event;
@@ -2847,8 +2826,8 @@
             // int /*long*/[] result = new int /*long*/[1];
             nsIServiceManager serviceManager;
             int rc = XPCOM.NS_GetServiceManager (&serviceManager);
-            if (rc !is XPCOM.NS_OK) error (rc);
-            if (serviceManager is null) error (XPCOM.NS_NOINTERFACE);
+            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+            if (serviceManager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
             //nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
             //result[0] = 0;
 
@@ -2863,7 +2842,7 @@
                 //result[0] = 0;
                 PRUint32 isSupportedResult; /* PRUint32 */
                 rc = info.IsTypeSupported (cast(nsACString*)typePtr, null, &isSupportedResult);
-                if (rc !is XPCOM.NS_OK) error (rc);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                 info.Release ();
                 //XPCOM.nsEmbedCString_delete (typePtr);
                 preferred = isSupportedResult !is 0;
@@ -2872,8 +2851,8 @@
                 //result[0] = 0;
                 nsICategoryManager categoryManager;
                 rc = serviceManager.GetService (&XPCOM.NS_CATEGORYMANAGER_CID, &nsICategoryManager.IID, cast(void**)&categoryManager);
-                if (rc !is XPCOM.NS_OK) error (rc);
-                if (categoryManager is null) error (XPCOM.NS_NOINTERFACE);
+                if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+                if (categoryManager is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
                 //nsICategoryManager categoryManager = new nsICategoryManager (result[0]);
                 //result[0] = 0;
@@ -2970,7 +2949,7 @@
 
     scope auto type = new nsEmbedString;
     int rc = event.GetType (cast(nsAString*)type);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     //int length = XPCOM.nsEmbedString_Length (type);
     //int /*long*/ buffer = XPCOM.nsEmbedString_get (type);
     //char[] chars = new char[length];
@@ -2982,8 +2961,8 @@
         //int /*long*/[] result = new int /*long*/[1];
         nsIDOMEventTarget target;
         rc = event.GetCurrentTarget (&target);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (target is null) error (XPCOM.NS_NOINTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (target is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
 
         //nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
         unhookDOMListeners (target);
@@ -3000,14 +2979,14 @@
         //int /*long*/[] result = new int /*long*/[1];
         nsIDOMKeyEvent domKeyEvent;
         rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
         //result[0] = 0;
 
         PRUint32 aKeyCode; /* PRUint32 */
         rc = domKeyEvent.GetKeyCode (&aKeyCode);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         int keyCode = super.translateKey (aKeyCode);
 
         /*
@@ -3028,13 +3007,13 @@
                     /* keypress events will not be received for these keys, so send KeyDowns for them now */
                     PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
                     rc = domKeyEvent.GetAltKey (&aAltKey);
-                    if (rc !is XPCOM.NS_OK) error (rc);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                     rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
-                    if (rc !is XPCOM.NS_OK) error (rc);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                     rc = domKeyEvent.GetShiftKey (&aShiftKey);
-                    if (rc !is XPCOM.NS_OK) error (rc);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                     rc = domKeyEvent.GetMetaKey (&aMetaKey);
-                    if (rc !is XPCOM.NS_OK) error (rc);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
 
                     Event keyEvent = new Event ();
                     keyEvent.widget = browser;
@@ -3057,17 +3036,17 @@
                     */
                     PRBool aMetaKey; /* PRBool */
                     rc = domKeyEvent.GetMetaKey (&aMetaKey);
-                    if (rc !is XPCOM.NS_OK) error (rc);
+                    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                     if (aMetaKey !is 0) {
                         PRBool aCtrlKey; /* PRBool */
                         rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
-                        if (rc !is XPCOM.NS_OK) error (rc);
+                        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                         if (aCtrlKey is 0) {
                             PRBool aAltKey, aShiftKey; /* PRBool */
                             rc = domKeyEvent.GetAltKey (&aAltKey);
-                            if (rc !is XPCOM.NS_OK) error (rc);
+                            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
                             rc = domKeyEvent.GetShiftKey (&aShiftKey);
-                            if (rc !is XPCOM.NS_OK) error (rc);
+                            if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
 
                             Event keyEvent = new Event ();
                             keyEvent.widget = browser;
@@ -3109,25 +3088,25 @@
         //int /*long*/[] result = new int /*long*/[1];
         nsIDOMKeyEvent domKeyEvent;
         rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
         //result[0] = 0;
 
         PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
         rc = domKeyEvent.GetAltKey (&aAltKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         rc = domKeyEvent.GetShiftKey (&aShiftKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         rc = domKeyEvent.GetMetaKey (&aMetaKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         domKeyEvent.Release ();
 
         PRUint32 aCharCode; /* PRUint32 */
         rc = domKeyEvent.GetCharCode (&aCharCode);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         lastCharCode = aCharCode;
         if (lastCharCode is 0) {
             switch (lastKeyCode) {
@@ -3160,14 +3139,14 @@
         //int /*long*/[] result = new int /*long*/[1];
         nsIDOMKeyEvent domKeyEvent;
         rc = event.QueryInterface (&nsIDOMKeyEvent.IID, cast(void**)&domKeyEvent);
-        if (rc !is XPCOM.NS_OK) error (rc);
-        if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+        if (domKeyEvent is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
         //nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
         //result[0] = 0;
 
         PRUint32 aKeyCode; /* PRUint32 */
         rc = domKeyEvent.GetKeyCode (&aKeyCode);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         int keyCode = super.translateKey (aKeyCode);
         if (keyCode is 0) {
             /* indicates a key for which key events are not sent */
@@ -3182,13 +3161,13 @@
 
         PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
         rc = domKeyEvent.GetAltKey (&aAltKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         rc = domKeyEvent.GetCtrlKey (&aCtrlKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         rc = domKeyEvent.GetShiftKey (&aShiftKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         rc = domKeyEvent.GetMetaKey (&aMetaKey);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         domKeyEvent.Release ();
 
         Event keyEvent = new Event ();
@@ -3218,8 +3197,8 @@
     //int /*long*/[] result = new int /*long*/[1];
     nsIDOMMouseEvent domMouseEvent;
     rc = event.QueryInterface (&nsIDOMMouseEvent.IID, cast(void**)&domMouseEvent);
-    if (rc !is XPCOM.NS_OK) error (rc);
-    if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
+    if (domMouseEvent is null) error (XPCOM.NS_NOINTERFACE, __FILE__, __LINE__);
     //nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]);
     //result[0] = 0;
 
@@ -3233,7 +3212,7 @@
     if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString) || XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) {
         nsIDOMEventTarget eventTarget;
         rc = domMouseEvent.GetRelatedTarget (&eventTarget);
-        if (rc !is XPCOM.NS_OK) error (rc);
+        if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
         if (eventTarget !is null) {
             domMouseEvent.Release ();
             return XPCOM.NS_OK;
@@ -3242,23 +3221,23 @@
 
     PRInt32 aClientX, aClientY, aDetail; /* PRInt32 */
     rc = domMouseEvent.GetClientX (&aClientX);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     rc = domMouseEvent.GetClientY (&aClientY);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     rc = domMouseEvent.GetDetail (&aDetail);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     PRUint16 aButton; /* PRUint16 */
     rc = domMouseEvent.GetButton (&aButton);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     PRBool aAltKey, aCtrlKey, aShiftKey, aMetaKey; /* PRBool */
     rc = domMouseEvent.GetAltKey (&aAltKey);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     rc = domMouseEvent.GetCtrlKey (&aCtrlKey);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     rc = domMouseEvent.GetShiftKey (&aShiftKey);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     rc = domMouseEvent.GetMetaKey (&aMetaKey);
-    if (rc !is XPCOM.NS_OK) error (rc);
+    if (rc !is XPCOM.NS_OK) error (rc, __FILE__, __LINE__);
     domMouseEvent.Release ();
 
     Event mouseEvent = new Event ();
--- a/dwt/browser/MozillaDelegate.d	Fri Oct 31 23:35:10 2008 -0700
+++ b/dwt/browser/MozillaDelegate.d	Sun Nov 02 01:30:09 2008 -0800
@@ -40,10 +40,11 @@
     static const gpointer STOP_PROPOGATE = cast(gpointer)1;
 
     static bool IsLinux;
-    static this () {
-        String osName = System.getProperty ("os.name"); //$NON-NLS-1$
-        IsLinux = tango.text.Util.containsPattern(osName, "linux"); //$NON-NLS-1$
-    }
+
+static this () {
+    String osName = System.getProperty ("os.name"); //$NON-NLS-1$
+    IsLinux = tango.text.Util.containsPattern(osName, "linux"); //$NON-NLS-1$
+}
 
 this (Browser browser) {
     //super ();
@@ -54,7 +55,7 @@
     this.browser = browser;
 }
 
-static extern(C) int eventProc (GtkWidget* handle, GdkEvent* gdkEvent, gpointer pointer) {
+static extern(System) int eventProc (GtkWidget* handle, GdkEvent* gdkEvent, gpointer pointer) {
     GtkWidget* parent = OS.gtk_widget_get_parent (handle);
     parent = OS.gtk_widget_get_parent (parent);
     if (parent is null) return 0;
--- a/dwt/dwthelper/System.d	Fri Oct 31 23:35:10 2008 -0700
+++ b/dwt/dwthelper/System.d	Sun Nov 02 01:30:09 2008 -0800
@@ -10,6 +10,8 @@
 import tango.io.model.IFile : FileConst;
 import tango.time.Clock;
 import tango.stdc.stdlib : exit;
+import tango.stdc.locale;
+import tango.stdc.string;
 
 template SimpleType(T) {
     debug{
@@ -154,37 +156,32 @@
         return defval;
     }
     public static String getProperty( String key ){
+        /* get values for global system keys (environment) */
+        switch( key ) {
+            case "os.name": return Environment.get("OSTYPE");
+            case "user.name": return Environment.get("USER");
+            case "user.home": return Environment.get("HOME");
+            case "user.dir" : return Environment.get("PWD");
+            case "file.separator" : return FileConst.PathSeparatorString ;
+            case "file.encoding" :
+                char* encoding;
+                encoding = setlocale(LC_CTYPE, null);
+                if (encoding is null) 
+                    return "CP1252"; //default
+                else 
+                    return encoding[0..strlen(encoding)].dup;
+            default: return null;
+        }
+
         /* Get values for local dwt specific keys */
         String* p;
-        if (key[0..3] == "dwt") {
-            return ((p = key in localProperties) != null) ? *p : null;
-        /* else get values for global system keys (environment) */
-        } else {
-            switch( key ){
-                case "os.name": return Environment.get("OSTYPE");
-                case "user.name": return Environment.get("USER");
-                case "user.home": return Environment.get("HOME");
-                case "user.dir" : return Environment.get("PWD");
-                case "file.separator" : return FileConst.PathSeparatorString ;
-                case "file.encoding" : implMissing( __FILE__, __LINE__);
-                case "network.proxy_host" : implMissing( __FILE__, __LINE__);
-                case "network.proxy_port" : implMissing( __FILE__, __LINE__);
-                
-                default: return null;
-            }
-        }
+        return ((p = key in localProperties) != null) ? *p : null;
     }
 
     public static void setProperty ( String key, String value ) {
-        /* set property for local dwt keys */
-        if (key[0..3] == "dwt") {
-            if (key !is null && value !is null)
-                localProperties[ key ] = value;
-        /* else set properties for global system keys (environment) */
-        } else {
-
-        }
-
+        /* set property for LOCAL dwt keys */
+        if (key !is null && value !is null)
+            localProperties[ key ] = value;
     }
 
     static class Output {
--- a/dwt/internal/mozilla/nsIDocShell.d	Fri Oct 31 23:35:10 2008 -0700
+++ b/dwt/internal/mozilla/nsIDocShell.d	Sun Nov 02 01:30:09 2008 -0800
@@ -133,7 +133,7 @@
 
 const nsIID NS_IDOCSHELL_1_8_IID= 
     { 0x9f0c7461, 0xb9a4, 0x47f6, 
-       [ 0xb8,0xbc,0x42,0x1d,0xce,0x1b,0xce,0x66 ] }; 
+       [ 0xb8,0x8c,0x42,0x1d,0xce,0x1b,0xce,0x66 ] }; 
 
 interface nsIDocShell_1_8 : nsIDocShell {
 
--- a/dwt/internal/mozilla/nsIProperties.d	Fri Oct 31 23:35:10 2008 -0700
+++ b/dwt/internal/mozilla/nsIProperties.d	Sun Nov 02 01:30:09 2008 -0800
@@ -1,4 +1,4 @@
-module mozilla.xpcom.nsIProperties;
+module dwt.internal.mozilla.nsIProperties;
 
 import dwt.internal.mozilla.Common;
 import dwt.internal.mozilla.nsID;