# HG changeset patch # User John Reimer # Date 1224476323 25200 # Node ID 8235a17d92552264e0e0dc3fc84fd04744191156 # Parent 9e715c0a8376a75175721cf773b0f1abb7ae25b5 Continued progress on Mozilla.d diff -r 9e715c0a8376 -r 8235a17d9255 dwt/browser/AppFileLocProvider.d --- 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); diff -r 9e715c0a8376 -r 8235a17d9255 dwt/browser/Mozilla.d --- 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; diff -r 9e715c0a8376 -r 8235a17d9255 dwt/dwthelper/System.d --- 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; } } diff -r 9e715c0a8376 -r 8235a17d9255 dwt/internal/mozilla/nsID.d --- 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;