From d4d055841ae512164e4ef7788f458da746bf9eb7 Mon Sep 17 00:00:00 2001 From: "dougt%meer.net" Date: Mon, 24 Apr 2006 18:56:43 +0000 Subject: [PATCH] Adding cmd line support. minimo-only --- minimo/base/Minimo.cpp | 499 +++++++++++++++++++------------- minimo/base/MinimoPrivate.h | 7 +- minimo/base/wince/runner.cpp | 54 ++-- minimo/chrome/content/minimo.js | 12 +- 4 files changed, 335 insertions(+), 237 deletions(-) diff --git a/minimo/base/Minimo.cpp b/minimo/base/Minimo.cpp index ab1641eac8b..db5457be874 100755 --- a/minimo/base/Minimo.cpp +++ b/minimo/base/Minimo.cpp @@ -59,6 +59,45 @@ const static char* start_url = "chrome://minimo/content/minimo.xul"; static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID); +void OpenNewTab(char* url) +{ + nsCOMPtr wwatch = do_GetService(NS_WINDOWWATCHER_CONTRACTID); + if (!wwatch) + return; + + nsCOMPtr fosterParent; + wwatch->GetActiveWindow(getter_AddRefs(fosterParent)); + + nsCOMPtr navNav = do_GetInterface(fosterParent); + nsCOMPtr rootItem = do_QueryInterface(navNav); + nsCOMPtr rootWin(do_GetInterface(rootItem)); + nsCOMPtr chromeWin(do_QueryInterface(rootWin)); + + if (!chromeWin) + { + // We are currently starting up. Save this url request as a startup page. + nsCOMPtr prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID); + if (!prefBranch) + return; + + prefBranch->SetCharPref("browser.startup.homepage.override", url); + return; + } + + nsCOMPtr bwin; + chromeWin->GetBrowserDOMWindow(getter_AddRefs(bwin)); + + nsCOMPtr uri; + nsDependentCString urlStr(url); + NS_NewURI(getter_AddRefs(uri), urlStr, 0, 0); + + nsCOMPtr newBrowserWindow; + bwin->OpenURI(uri, 0, + nsIBrowserDOMWindow::OPEN_CURRENTWINDOW, + nsIBrowserDOMWindow::OPEN_EXTERNAL, + getter_AddRefs(newBrowserWindow)); +} + class ApplicationObserver: public nsIObserver { public: @@ -67,7 +106,7 @@ public: NS_DECL_ISUPPORTS NS_DECL_NSIOBSERVER - + nsCOMPtr mAppShell; int mWindowCount; int mSeenLoadLibraryFailure; @@ -76,21 +115,21 @@ public: ApplicationObserver::ApplicationObserver(nsIAppShell* aAppShell) { - mAppShell = aAppShell; - mWindowCount = 0; - mSeenLoadLibraryFailure = 0; + mAppShell = aAppShell; + mWindowCount = 0; + mSeenLoadLibraryFailure = 0; + + nsCOMPtr os = do_GetService("@mozilla.org/observer-service;1"); + + + os->AddObserver(this, "nsIEventQueueActivated", PR_FALSE); + os->AddObserver(this, "nsIEventQueueDestroyed", PR_FALSE); + + os->AddObserver(this, "xul-window-registered", PR_FALSE); + os->AddObserver(this, "xul-window-destroyed", PR_FALSE); + os->AddObserver(this, "xul-window-visible", PR_FALSE); - nsCOMPtr os = do_GetService("@mozilla.org/observer-service;1"); - - - os->AddObserver(this, "nsIEventQueueActivated", PR_FALSE); - os->AddObserver(this, "nsIEventQueueDestroyed", PR_FALSE); - - os->AddObserver(this, "xul-window-registered", PR_FALSE); - os->AddObserver(this, "xul-window-destroyed", PR_FALSE); - os->AddObserver(this, "xul-window-visible", PR_FALSE); - - os->AddObserver(this, "xpcom-loader", PR_FALSE); + os->AddObserver(this, "xpcom-loader", PR_FALSE); } ApplicationObserver::~ApplicationObserver() @@ -102,80 +141,80 @@ NS_IMPL_ISUPPORTS1(ApplicationObserver, nsIObserver) NS_IMETHODIMP ApplicationObserver::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData) { - if (!strcmp(aTopic, "nsIEventQueueActivated")) + if (!strcmp(aTopic, "nsIEventQueueActivated")) + { + nsCOMPtr eq(do_QueryInterface(aSubject)); + if (eq) { - nsCOMPtr eq(do_QueryInterface(aSubject)); - if (eq) - { - PRBool isNative = PR_TRUE; - // we only add native event queues to the appshell - eq->IsQueueNative(&isNative); - if (isNative) - mAppShell->ListenToEventQueue(eq, PR_TRUE); - } - } - else if (!strcmp(aTopic, "nsIEventQueueDestroyed")) - { - nsCOMPtr eq(do_QueryInterface(aSubject)); - if (eq) - { - PRBool isNative = PR_TRUE; - // we only remove native event queues from the appshell - eq->IsQueueNative(&isNative); - if (isNative) - mAppShell->ListenToEventQueue(eq, PR_FALSE); - } - } - else if (!strcmp(aTopic, "xul-window-visible")) - { - KillSplashScreen(); + PRBool isNative = PR_TRUE; + // we only add native event queues to the appshell + eq->IsQueueNative(&isNative); + if (isNative) + mAppShell->ListenToEventQueue(eq, PR_TRUE); } - - else if (!strcmp(aTopic, "xul-window-registered")) + } + else if (!strcmp(aTopic, "nsIEventQueueDestroyed")) + { + nsCOMPtr eq(do_QueryInterface(aSubject)); + if (eq) { - mWindowCount++; + PRBool isNative = PR_TRUE; + // we only remove native event queues from the appshell + eq->IsQueueNative(&isNative); + if (isNative) + mAppShell->ListenToEventQueue(eq, PR_FALSE); } - else if (!strcmp(aTopic, "xul-window-destroyed")) - { - mWindowCount--; - if (mWindowCount == 0) - mAppShell->Exit(); - } - else if (!strcmp(aTopic, "xpcom-loader")) - { - if (mWindowCount == 0 || mSeenLoadLibraryFailure != 0) - return NS_OK; - - mSeenLoadLibraryFailure++; - - nsIFile* file = (nsIFile*) aSubject; - nsAutoString filePath; - file->GetPath(filePath); - - nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); - if (!bundleService) - return NS_ERROR_FAILURE; - - nsCOMPtr bundle; - bundleService->CreateBundle(MINIMO_PROPERTIES_URL, getter_AddRefs(bundle)); - - if (!bundle) - return NS_ERROR_FAILURE; - - const PRUnichar *formatStrings[] = { filePath.get() }; - nsXPIDLString message; - bundle->FormatStringFromName(NS_LITERAL_STRING("loadFailed").get(), - formatStrings, - NS_ARRAY_LENGTH(formatStrings), - getter_Copies(message)); - - nsXPIDLString title; - bundle->GetStringFromName(NS_LITERAL_STRING("loadFailedTitle").get(), getter_Copies(title)); - - nsCOMPtr promptService = do_GetService("@mozilla.org/embedcomp/prompt-service;1"); - promptService->Alert(nsnull, title.get(), message.get()); - } - return NS_OK; + } + else if (!strcmp(aTopic, "xul-window-visible")) + { + KillSplashScreen(); + } + + else if (!strcmp(aTopic, "xul-window-registered")) + { + mWindowCount++; + } + else if (!strcmp(aTopic, "xul-window-destroyed")) + { + mWindowCount--; + if (mWindowCount == 0) + mAppShell->Exit(); + } + else if (!strcmp(aTopic, "xpcom-loader")) + { + if (mWindowCount == 0 || mSeenLoadLibraryFailure != 0) + return NS_OK; + + mSeenLoadLibraryFailure++; + + nsIFile* file = (nsIFile*) aSubject; + nsAutoString filePath; + file->GetPath(filePath); + + nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); + if (!bundleService) + return NS_ERROR_FAILURE; + + nsCOMPtr bundle; + bundleService->CreateBundle(MINIMO_PROPERTIES_URL, getter_AddRefs(bundle)); + + if (!bundle) + return NS_ERROR_FAILURE; + + const PRUnichar *formatStrings[] = { filePath.get() }; + nsXPIDLString message; + bundle->FormatStringFromName(NS_LITERAL_STRING("loadFailed").get(), + formatStrings, + NS_ARRAY_LENGTH(formatStrings), + getter_Copies(message)); + + nsXPIDLString title; + bundle->GetStringFromName(NS_LITERAL_STRING("loadFailedTitle").get(), getter_Copies(title)); + + nsCOMPtr promptService = do_GetService("@mozilla.org/embedcomp/prompt-service;1"); + promptService->Alert(nsnull, title.get(), message.get()); + } + return NS_OK; } @@ -187,7 +226,7 @@ public: nsFullScreen(); ~nsFullScreen(); - + #ifdef WINCE HWND hTaskBarWnd; #endif @@ -214,14 +253,14 @@ nsFullScreen::HideAllOSChrome() #else if (!hTaskBarWnd) return NS_ERROR_NOT_INITIALIZED; - + SetWindowPos(hTaskBarWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); - + ShowWindow(hTaskBarWnd, SW_HIDE); - + return NS_OK; #endif } @@ -234,14 +273,14 @@ nsFullScreen::ShowAllOSChrome() #else if (!hTaskBarWnd) return NS_ERROR_NOT_INITIALIZED; - + SetWindowPos(hTaskBarWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); - + ShowWindow(hTaskBarWnd, SW_SHOW); - + return NS_OK; #endif } @@ -249,7 +288,7 @@ nsFullScreen::ShowAllOSChrome() NS_IMETHODIMP nsFullScreen::GetChromeItems(nsISimpleEnumerator **_retval) { - return NS_ERROR_NOT_IMPLEMENTED; + return NS_ERROR_NOT_IMPLEMENTED; } #ifndef WINCE @@ -259,7 +298,7 @@ class nsBadCertListener : public nsIBadCertListener public: NS_DECL_ISUPPORTS NS_DECL_NSIBADCERTLISTENER - + nsBadCertListener(); ~nsBadCertListener(); }; @@ -283,18 +322,18 @@ nsBadCertListener::ConfirmUnknownIssuer(nsIInterfaceRequestor *socketInfo, nsIX5 nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); if (!bundleService) return NS_ERROR_FAILURE; - + nsCOMPtr bundle; bundleService->CreateBundle(MINIMO_PROPERTIES_URL, getter_AddRefs(bundle)); - + if (!bundle) return NS_ERROR_FAILURE; - + nsXPIDLString message; nsXPIDLString title; bundle->GetStringFromName(NS_LITERAL_STRING("confirmUnknownIssuer").get(), getter_Copies(message)); bundle->GetStringFromName(NS_LITERAL_STRING("securityWarningTitle").get(), getter_Copies(title)); - + nsCOMPtr wwatcher = do_GetService(NS_WINDOWWATCHER_CONTRACTID); if (!wwatcher) return NS_ERROR_FAILURE; @@ -302,16 +341,16 @@ nsBadCertListener::ConfirmUnknownIssuer(nsIInterfaceRequestor *socketInfo, nsIX5 nsCOMPtr parent; if (!parent) wwatcher->GetActiveWindow(getter_AddRefs(parent)); - + PRBool result; nsCOMPtr dlgService(do_GetService(NS_PROMPTSERVICE_CONTRACTID)); dlgService->Confirm(parent, title, message, &result); - + *_retval = result; - + if (result) *certAddType = ADD_TRUSTED_FOR_SESSION; - + return NS_OK; } @@ -321,18 +360,18 @@ nsBadCertListener::ConfirmMismatchDomain(nsIInterfaceRequestor *socketInfo, cons nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); if (!bundleService) return NS_ERROR_FAILURE; - + nsCOMPtr bundle; bundleService->CreateBundle(MINIMO_PROPERTIES_URL, getter_AddRefs(bundle)); - + if (!bundle) return NS_ERROR_FAILURE; - + nsXPIDLString message; nsXPIDLString title; bundle->GetStringFromName(NS_LITERAL_STRING("confirmMismatch").get(), getter_Copies(message)); bundle->GetStringFromName(NS_LITERAL_STRING("securityWarningTitle").get(), getter_Copies(title)); - + nsCOMPtr wwatcher = do_GetService(NS_WINDOWWATCHER_CONTRACTID); if (!wwatcher) return NS_ERROR_FAILURE; @@ -340,13 +379,13 @@ nsBadCertListener::ConfirmMismatchDomain(nsIInterfaceRequestor *socketInfo, cons nsCOMPtr parent; if (!parent) wwatcher->GetActiveWindow(getter_AddRefs(parent)); - + PRBool result; nsCOMPtr dlgService(do_GetService(NS_PROMPTSERVICE_CONTRACTID)); dlgService->Confirm(parent, title, message, &result); - + *_retval = result; - + return NS_OK; } @@ -356,18 +395,18 @@ nsBadCertListener::ConfirmCertExpired(nsIInterfaceRequestor *socketInfo, nsIX509 nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); if (!bundleService) return NS_ERROR_FAILURE; - + nsCOMPtr bundle; bundleService->CreateBundle(MINIMO_PROPERTIES_URL, getter_AddRefs(bundle)); - + if (!bundle) return NS_ERROR_FAILURE; - + nsXPIDLString message; nsXPIDLString title; bundle->GetStringFromName(NS_LITERAL_STRING("confirmCertExpired").get(), getter_Copies(message)); bundle->GetStringFromName(NS_LITERAL_STRING("securityWarningTitle").get(), getter_Copies(title)); - + nsCOMPtr wwatcher = do_GetService(NS_WINDOWWATCHER_CONTRACTID); if (!wwatcher) return NS_ERROR_FAILURE; @@ -375,13 +414,13 @@ nsBadCertListener::ConfirmCertExpired(nsIInterfaceRequestor *socketInfo, nsIX509 nsCOMPtr parent; if (!parent) wwatcher->GetActiveWindow(getter_AddRefs(parent)); - + PRBool result; nsCOMPtr dlgService(do_GetService(NS_PROMPTSERVICE_CONTRACTID)); dlgService->Confirm(parent, title, message, &result); - + *_retval = result; - + return NS_OK; } @@ -400,9 +439,9 @@ class nsSecurityWarningDialogs : public nsISecurityWarningDialogs public: NS_DECL_ISUPPORTS NS_DECL_NSISECURITYWARNINGDIALOGS - + nsSecurityWarningDialogs(); - + private: ~nsSecurityWarningDialogs(); }; @@ -460,72 +499,118 @@ nsSecurityWarningDialogs::ConfirmPostToInsecureFromSecure(nsIInterfaceRequestor } #endif +#ifdef WINCE +static const TCHAR *szWindowClass = _T("MINIMO_LISTENER"); + +LRESULT CALLBACK BrowserWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + if (message == WM_COPYDATA) + { + COPYDATASTRUCT *cds = (COPYDATASTRUCT*)lParam; + OpenNewTab((char*)cds->lpData); + return 0; + } + + return DefWindowProc(hWnd, message, wParam, lParam); +} + +void RegisterClass() +{ + WNDCLASS wcex; + + HANDLE module = GetModuleHandle(NULL); + + memset(&wcex, 0, sizeof(wcex)); + wcex.lpfnWndProc = (WNDPROC) BrowserWndProc; + wcex.lpszClassName = szWindowClass; + + RegisterClass(&wcex); +} + +void CreateListenerWindow() +{ + RegisterClass(); + + HWND hwnd = CreateWindow(szWindowClass, + szWindowClass, + 0, + 0, + 0, + 0, + 0, + NULL, + NULL, + NULL, + NULL); +} + +#endif nsresult StartupProfile() { - NS_TIMELINE_MARK_FUNCTION("Profile Startup"); - - nsCOMPtr appDataDir; - nsresult rv = NS_GetSpecialDirectory(NS_APP_APPLICATION_REGISTRY_DIR, getter_AddRefs(appDataDir)); - if (NS_FAILED(rv)) - return rv; - - appDataDir->Create(nsIFile::DIRECTORY_TYPE, 0700); - - rv = appDataDir->Append(NS_LITERAL_STRING("minimo")); - if (NS_FAILED(rv)) - return rv; - - appDataDir->Create(nsIFile::DIRECTORY_TYPE, 0700); - - nsCOMPtr localAppDataDir(do_QueryInterface(appDataDir)); - - nsCOMPtr locProvider; - NS_NewProfileDirServiceProvider(PR_TRUE, getter_AddRefs(locProvider)); - if (!locProvider) - return NS_ERROR_FAILURE; - - rv = locProvider->Register(); - if (NS_FAILED(rv)) - return rv; - - return locProvider->SetProfileDir(localAppDataDir); + NS_TIMELINE_MARK_FUNCTION("Profile Startup"); + + nsCOMPtr appDataDir; + nsresult rv = NS_GetSpecialDirectory(NS_APP_APPLICATION_REGISTRY_DIR, getter_AddRefs(appDataDir)); + if (NS_FAILED(rv)) + return rv; + + appDataDir->Create(nsIFile::DIRECTORY_TYPE, 0700); + + rv = appDataDir->Append(NS_LITERAL_STRING("minimo")); + if (NS_FAILED(rv)) + return rv; + + appDataDir->Create(nsIFile::DIRECTORY_TYPE, 0700); + + nsCOMPtr localAppDataDir(do_QueryInterface(appDataDir)); + + nsCOMPtr locProvider; + NS_NewProfileDirServiceProvider(PR_TRUE, getter_AddRefs(locProvider)); + if (!locProvider) + return NS_ERROR_FAILURE; + + rv = locProvider->Register(); + if (NS_FAILED(rv)) + return rv; + + return locProvider->SetProfileDir(localAppDataDir); } void DoPreferences() { - nsCOMPtr prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID); - if (!prefBranch) - return; - - prefBranch->SetIntPref("snav.keyCode.modifier", 0); - prefBranch->SetBoolPref("snav.enabled", true); + nsCOMPtr prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID); + if (!prefBranch) + return; + + prefBranch->SetIntPref("snav.keyCode.modifier", 0); + prefBranch->SetBoolPref("snav.enabled", true); } #define NS_FULLSCREEN_CID \ -{ /* aca93a4e-53f8-40e2-a59b-9363a0bf9a87 */ \ - 0xaca93a4e, \ - 0x53f8, \ - 0x40e2, \ - {0xa5, 0x9b, 0x93, 0x63, 0xa0, 0xbf, 0x9a, 0x87} \ -} + { /* aca93a4e-53f8-40e2-a59b-9363a0bf9a87 */ \ + 0xaca93a4e, \ + 0x53f8, \ + 0x40e2, \ + {0xa5, 0x9b, 0x93, 0x63, 0xa0, 0xbf, 0x9a, 0x87} \ + } #define NS_BADCERTLISTENER_CID \ -{ /* a4bdf79a-ed05-4256-bf12-4581a03f966e */ \ - 0xa4bdf79a, \ - 0xed05, \ - 0x4256, \ - {0xbf, 0x12, 0x45, 0x81, 0xa0, 0x3f, 0x96, 0x6e} \ -} + { /* a4bdf79a-ed05-4256-bf12-4581a03f966e */ \ + 0xa4bdf79a, \ + 0xed05, \ + 0x4256, \ + {0xbf, 0x12, 0x45, 0x81, 0xa0, 0x3f, 0x96, 0x6e} \ + } #define NS_SECURITYWARNINGDIALOGS_CID \ -{ /* 8d995d4f-adcc-4159-b7f1-e94af72eeb88 */ \ - 0x8d995d4f, \ - 0xadcc, \ - 0x4159, \ - {0xb7, 0xf1, 0xe9, 0x4a, 0xf7, 0x2e, 0xeb, 0x88} \ -} - + { /* 8d995d4f-adcc-4159-b7f1-e94af72eeb88 */ \ + 0x8d995d4f, \ + 0xadcc, \ + 0x4159, \ + {0xb7, 0xf1, 0xe9, 0x4a, 0xf7, 0x2e, 0xeb, 0x88} \ + } + NS_GENERIC_FACTORY_CONSTRUCTOR(nsBrowserInstance) NS_GENERIC_FACTORY_CONSTRUCTOR(nsBrowserStatusFilter) @@ -543,12 +628,12 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsSecurityWarningDialogs) static const nsModuleComponentInfo defaultAppComps[] = { { - NS_BROWSERSTATUSFILTER_CLASSNAME, - NS_BROWSERSTATUSFILTER_CID, - NS_BROWSERSTATUSFILTER_CONTRACTID, - nsBrowserStatusFilterConstructor + NS_BROWSERSTATUSFILTER_CLASSNAME, + NS_BROWSERSTATUSFILTER_CID, + NS_BROWSERSTATUSFILTER_CONTRACTID, + nsBrowserStatusFilterConstructor }, - + { "nsBrowserInstance", NS_BROWSERINSTANCE_CID, NS_BROWSERINSTANCE_CONTRACTID, @@ -556,35 +641,35 @@ static const nsModuleComponentInfo defaultAppComps[] = { }, { - "FullScreen", - NS_FULLSCREEN_CID, - "@mozilla.org/browser/fullscreen;1", - nsFullScreenConstructor + "FullScreen", + NS_FULLSCREEN_CID, + "@mozilla.org/browser/fullscreen;1", + nsFullScreenConstructor }, - + #ifndef WINCE { - "Bad Cert Dialogs", - NS_BADCERTLISTENER_CID, - NS_BADCERTLISTENER_CONTRACTID, - nsBadCertListenerConstructor + "Bad Cert Dialogs", + NS_BADCERTLISTENER_CID, + NS_BADCERTLISTENER_CONTRACTID, + nsBadCertListenerConstructor }, #endif - + #ifdef WINCE - { - "PSM Security Warnings", - NS_SECURITYWARNINGDIALOGS_CID, - NS_SECURITYWARNINGDIALOGS_CONTRACTID, - nsSecurityWarningDialogsConstructor - }, + { + "PSM Security Warnings", + NS_SECURITYWARNINGDIALOGS_CID, + NS_SECURITYWARNINGDIALOGS_CONTRACTID, + nsSecurityWarningDialogsConstructor + }, #endif }; void OverrideComponents() { int count = sizeof(defaultAppComps) / sizeof(nsModuleComponentInfo); - + nsCOMPtr cr; NS_GetComponentRegistrar(getter_AddRefs(cr)); @@ -621,7 +706,7 @@ void OverrideComponents() * * For more information: * 1) http://msdn.microsoft.com/library/default.asp?url=/ \ - library/en-us/dncenet/html/advmemmgmt.asp + library/en-us/dncenet/html/advmemmgmt.asp * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifdef WINCE @@ -631,15 +716,15 @@ void OverrideComponents() #ifdef HACKY_PRE_LOAD_LIBRARY typedef struct _library { - const unsigned short* name; - HMODULE module; + const unsigned short* name; + HMODULE module; } _library; _library Libraries[] = -{ - { L"schannel.dll", NULL }, - { NULL, NULL }, -}; + { + { L"schannel.dll", NULL }, + { NULL, NULL }, + }; void LoadKnownLibs() { @@ -666,6 +751,10 @@ void UnloadKnownLibs() int main(int argc, char *argv[]) { +#ifdef WINCE + CreateListenerWindow(); +#endif + #ifdef MOZ_WIDGET_GTK2 gtk_set_locale(); gtk_init(&argc, &argv); @@ -708,14 +797,6 @@ int main(int argc, char *argv[]) return 1; } - nsCOMPtr cmdLine = do_CreateInstance("@mozilla.org/toolkit/command-line;1"); - - nsCOMPtr workingDir; - NS_GetSpecialDirectory(NS_OS_CURRENT_WORKING_DIR, getter_AddRefs(workingDir)); - - if (cmdLine) - cmdLine->Init(argc, argv, workingDir, nsICommandLine::STATE_INITIAL_LAUNCH); - appShell->Create(nsnull, nsnull); ApplicationObserver *appObserver = new ApplicationObserver(appShell); @@ -750,10 +831,10 @@ int main(int argc, char *argv[]) prefBranch->GetBoolPref("config.wince.dumpJSConsole", &dumpJSConsole); prefBranch = 0; - + if (dumpJSConsole) WriteConsoleLog(); - + // Close down Embedding APIs NS_TermEmbedding(); diff --git a/minimo/base/MinimoPrivate.h b/minimo/base/MinimoPrivate.h index c79f06a0005..577f41dcb30 100755 --- a/minimo/base/MinimoPrivate.h +++ b/minimo/base/MinimoPrivate.h @@ -60,10 +60,12 @@ #include "nsIAppShellService.h" #include "nsIAppStartupNotifier.h" #include "nsIBadCertListener.h" +#include "nsIBrowserDOMWindow.h" #include "nsIClipboardCommands.h" -#include "nsICommandLineRunner.h" #include "nsIComponentRegistrar.h" +#include "nsIDocShellTreeItem.h" #include "nsIDOMWindow.h" +#include "nsIDOMChromeWindow.h" #include "nsIEventQueueService.h" #include "nsIInterfaceRequestor.h" #include "nsIInterfaceRequestorUtils.h" @@ -79,6 +81,7 @@ #include "nsIWebBrowserChrome.h" #include "nsIWebBrowserFocus.h" #include "nsIWebBrowserPersist.h" +#include "nsIWebNavigation.h" #include "nsIWidget.h" #include "nsIWindowCreator.h" #include "nsIWindowCreator2.h" @@ -89,6 +92,8 @@ #include "nsXPIDLString.h" #include "plstr.h" +#include "nsNetUtil.h" + // Local header files #include "WindowCreator.h" diff --git a/minimo/base/wince/runner.cpp b/minimo/base/wince/runner.cpp index a3bac125ef1..39c5816f655 100755 --- a/minimo/base/wince/runner.cpp +++ b/minimo/base/wince/runner.cpp @@ -1,6 +1,11 @@ #include - +void SentURLLoadRequest(const char* url) +{ + COPYDATASTRUCT cds = { 0, ::strlen( url ) + 1, (void*)url }; + HWND a = FindWindowW(L"MINIMO_LISTENER", NULL); + SendMessage(a, WM_COPYDATA, NULL, (LPARAM)&cds); +} int main(int argc, char *argv[]) @@ -8,39 +13,36 @@ int main(int argc, char *argv[]) SetCursor(LoadCursor(NULL,IDC_WAIT)); HWND h = FindWindowW(NULL, L"Minimo"); - if (h) + if (!h) + { + char *cp; + char exe[MAX_PATH]; + GetModuleFileName(GetModuleHandle(NULL), exe, sizeof(exe)); + cp = strrchr(exe,'\\'); + if (cp != NULL) + { + cp++; // pass the \ char. + *cp = 0; + } + strcat(exe, "minimo.exe"); + + PROCESS_INFORMATION pi; + CreateProcess(exe, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, &pi); + } + else { - ShowWindow(h, SW_SHOWNORMAL); SetForegroundWindow(h); - return 0; + ShowWindow(h, SW_SHOWNORMAL); } - char *cp; - char exe[MAX_PATH]; - GetModuleFileName(GetModuleHandle(NULL), exe, sizeof(exe)); - cp = strrchr(exe,'\\'); - if (cp != NULL) + if (argc == 3) { - cp++; // pass the \ char. - *cp = 0; + if (!strcmp("-url", argv[1])) + SentURLLoadRequest(argv[2]); } - - strcat(exe, "minimo.exe"); - - PROCESS_INFORMATION pi; - - BOOL b = CreateProcess(exe, - NULL, - NULL, - NULL, - NULL, - 0, - NULL, - NULL, - NULL, - &pi); SetCursor(NULL); return 0; } + diff --git a/minimo/chrome/content/minimo.js b/minimo/chrome/content/minimo.js index 7ba40dd35c0..3b3375626d6 100755 --- a/minimo/chrome/content/minimo.js +++ b/minimo/chrome/content/minimo.js @@ -365,8 +365,18 @@ function MiniNavStartup() try { gPref = Components.classes["@mozilla.org/preferences-service;1"] .getService(nsIPrefBranch); + + var page = null; + try { + page = gPref.getCharPref("browser.startup.homepage.override"); + } + catch(e) {page=null;} + + if (page == null) + page = gPref.getCharPref("browser.startup.homepage"); + + gPref.clearUserPref("browser.startup.homepage.override"); - var page = gPref.getCharPref("browser.startup.homepage"); var bookmarkstore = gPref.getCharPref("browser.bookmark.store"); if ( page.split("|").length > 1 ) {