From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- comm/mailnews/base/src/nsMessengerBootstrap.cpp | 84 +++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 comm/mailnews/base/src/nsMessengerBootstrap.cpp (limited to 'comm/mailnews/base/src/nsMessengerBootstrap.cpp') diff --git a/comm/mailnews/base/src/nsMessengerBootstrap.cpp b/comm/mailnews/base/src/nsMessengerBootstrap.cpp new file mode 100644 index 0000000000..9d01b5380d --- /dev/null +++ b/comm/mailnews/base/src/nsMessengerBootstrap.cpp @@ -0,0 +1,84 @@ +/* -*- Mode: C++; tab-width: 2; 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 nsACString& aFolderURI, + nsMsgKey aMessageKey) { + bool standAloneMsgWindow = false; + nsAutoCString chromeUrl("chrome://messenger/content/"); + if (windowType && !strcmp(windowType, "mail:messageWindow")) { + chromeUrl.AppendLiteral("messageWindow.xhtml"); + standAloneMsgWindow = true; + } else { + chromeUrl.AppendLiteral("messenger.xhtml"); + } + 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.IsEmpty()) { + if (standAloneMsgWindow) { + nsCOMPtr folder; + rv = GetExistingFolder(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); + } + nsCOMPtr scriptableFolderURI( + do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID)); + NS_ENSURE_TRUE(scriptableFolderURI, NS_ERROR_FAILURE); + + scriptableFolderURI->SetData(aFolderURI); + argsArray->AppendElement(scriptableFolderURI); + + if (!standAloneMsgWindow) { + nsCOMPtr scriptableMessageKey( + do_CreateInstance(NS_SUPPORTS_PRUINT32_CONTRACTID)); + NS_ENSURE_TRUE(scriptableMessageKey, NS_ERROR_FAILURE); + scriptableMessageKey->SetData(aMessageKey); + argsArray->AppendElement(scriptableMessageKey); + } + } + + 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, "_blank"_ns, + "chrome,all,dialog=no"_ns, argsArray, + getter_AddRefs(newWindow)); +} -- cgit v1.2.3