From 302bf1b523012e11b60425d6eee1221ebc2724eb Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Sun, 3 Nov 2019 00:17:46 -0400 Subject: Issue #1258 - Part 1: Import mailnews, ldap, and mork from comm-esr52.9.1 --- mailnews/base/src/nsMessengerBootstrap.cpp | 83 ++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 mailnews/base/src/nsMessengerBootstrap.cpp (limited to 'mailnews/base/src/nsMessengerBootstrap.cpp') diff --git a/mailnews/base/src/nsMessengerBootstrap.cpp b/mailnews/base/src/nsMessengerBootstrap.cpp new file mode 100644 index 000000000..a78ba3b7c --- /dev/null +++ b/mailnews/base/src/nsMessengerBootstrap.cpp @@ -0,0 +1,83 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsMessengerBootstrap.h" +#include "nsCOMPtr.h" + +#include "nsIMutableArray.h" +#include "nsIMsgFolder.h" +#include "nsIWindowWatcher.h" +#include "nsMsgUtils.h" +#include "nsISupportsPrimitives.h" +#include "mozIDOMWindow.h" +#include "nsComponentManagerUtils.h" +#include "nsServiceManagerUtils.h" + +NS_IMPL_ISUPPORTS(nsMessengerBootstrap, nsIMessengerWindowService) + +nsMessengerBootstrap::nsMessengerBootstrap() +{ +} + +nsMessengerBootstrap::~nsMessengerBootstrap() +{ +} + +NS_IMETHODIMP nsMessengerBootstrap::OpenMessengerWindowWithUri(const char *windowType, const char * aFolderURI, nsMsgKey aMessageKey) +{ + bool standAloneMsgWindow = false; + nsAutoCString chromeUrl("chrome://messenger/content/"); + if (windowType && !strcmp(windowType, "mail:messageWindow")) + { + chromeUrl.Append("messageWindow.xul"); + standAloneMsgWindow = true; + } + nsresult rv; + nsCOMPtr argsArray(do_CreateInstance(NS_ARRAY_CONTRACTID, &rv)); + NS_ENSURE_SUCCESS(rv, rv); + + // create scriptable versions of our strings that we can store in our nsIMutableArray.... + if (aFolderURI) + { + if (standAloneMsgWindow) + { + nsCOMPtr folder; + rv = GetExistingFolder(nsDependentCString(aFolderURI), getter_AddRefs(folder)); + NS_ENSURE_SUCCESS(rv, rv); + nsAutoCString msgUri; + folder->GetBaseMessageURI(msgUri); + + nsCOMPtr scriptableMsgURI (do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID)); + NS_ENSURE_TRUE(scriptableMsgURI, NS_ERROR_FAILURE); + msgUri.Append('#'); + msgUri.AppendInt(aMessageKey, 10); + scriptableMsgURI->SetData(msgUri); + argsArray->AppendElement(scriptableMsgURI, false); + } + nsCOMPtr scriptableFolderURI (do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID)); + NS_ENSURE_TRUE(scriptableFolderURI, NS_ERROR_FAILURE); + + scriptableFolderURI->SetData(nsDependentCString(aFolderURI)); + argsArray->AppendElement(scriptableFolderURI, false); + + if (!standAloneMsgWindow) + { + nsCOMPtr scriptableMessageKey (do_CreateInstance(NS_SUPPORTS_PRUINT32_CONTRACTID)); + NS_ENSURE_TRUE(scriptableMessageKey, NS_ERROR_FAILURE); + scriptableMessageKey->SetData(aMessageKey); + argsArray->AppendElement(scriptableMessageKey, false); + } + } + + nsCOMPtr wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv)); + NS_ENSURE_SUCCESS(rv, rv); + + // we need to use the "mailnews.reuse_thread_window2" pref + // to determine if we should open a new window, or use an existing one. + nsCOMPtr newWindow; + return wwatch->OpenWindow(0, chromeUrl.get(), "_blank", + "chrome,all,dialog=no", argsArray, + getter_AddRefs(newWindow)); +} -- cgit v1.2.3