fix for #110502. get "edit as new" and "fwd inline" to work again.
the problem is the standard url parser no longer allows us to use illegal uris. '_' is an illegal character in a URI (and URL) scheme. so this patch switches from "foo_message://" to "foo-message://" r=bbaetz,sr=bienvenu git-svn-id: svn://10.0.0.236/trunk@108459 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -242,7 +242,7 @@ function isNewsURI(uri)
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
return ((uri.substring(0,6) == "news:/") || (uri.substring(0,14) == "news_message:/"));
|
||||
return ((uri.substring(0,6) == "news:/") || (uri.substring(0,14) == "news-message:/"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -260,7 +260,7 @@ function InitMessageMenu()
|
||||
function IsNewsMessage(messageUri)
|
||||
{
|
||||
if (!messageUri) return false;
|
||||
return (messageUri.substring(0,14) == "news_message:/")
|
||||
return (messageUri.substring(0,14) == "news-message:/")
|
||||
}
|
||||
|
||||
function InitMessageMark()
|
||||
|
||||
@@ -109,42 +109,40 @@ nsresult GetMsgDBHdrFromURI(const char *uri, nsIMsgDBHdr **msgHdr)
|
||||
|
||||
nsresult CreateStartupUrl(char *uri, nsIURI** aUrl)
|
||||
{
|
||||
nsresult rv = NS_ERROR_NULL_POINTER;
|
||||
if (!uri || !*uri || !aUrl) return rv;
|
||||
*aUrl = nsnull;
|
||||
if (PL_strncasecmp(uri, "imap", 4) == 0)
|
||||
{
|
||||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
rv = nsComponentManager::CreateInstance(kImapUrlCID, nsnull,
|
||||
NS_GET_IID(nsIImapUrl),
|
||||
getter_AddRefs(imapUrl));
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
rv = imapUrl->QueryInterface(NS_GET_IID(nsIURI),
|
||||
(void**) aUrl);
|
||||
}
|
||||
else if (PL_strncasecmp(uri, "mailbox", 7) == 0)
|
||||
{
|
||||
nsCOMPtr<nsIMailboxUrl> mailboxUrl;
|
||||
rv = nsComponentManager::CreateInstance(kCMailboxUrl, nsnull,
|
||||
NS_GET_IID(nsIMailboxUrl),
|
||||
getter_AddRefs(mailboxUrl));
|
||||
if (NS_SUCCEEDED(rv) && mailboxUrl)
|
||||
rv = mailboxUrl->QueryInterface(NS_GET_IID(nsIURI),
|
||||
(void**) aUrl);
|
||||
}
|
||||
else if (PL_strncasecmp(uri, "news", 4) == 0)
|
||||
{
|
||||
nsCOMPtr<nsINntpUrl> nntpUrl;
|
||||
rv = nsComponentManager::CreateInstance(kCNntpUrlCID, nsnull,
|
||||
NS_GET_IID(nsINntpUrl),
|
||||
getter_AddRefs(nntpUrl));
|
||||
if (NS_SUCCEEDED(rv) && nntpUrl)
|
||||
rv = nntpUrl->QueryInterface(NS_GET_IID(nsIURI),
|
||||
(void**) aUrl);
|
||||
}
|
||||
if (*aUrl)
|
||||
(*aUrl)->SetSpec(uri);
|
||||
return rv;
|
||||
nsresult rv = NS_ERROR_NULL_POINTER;
|
||||
if (!uri || !*uri || !aUrl) return rv;
|
||||
*aUrl = nsnull;
|
||||
|
||||
// XXX fix this, so that base doesn't depend on imap, local or news.
|
||||
// we can't do NS_NewURI(uri, aUrl), because these are imap-message://, mailbox-message://, news-message:// uris.
|
||||
// I think we should do something like GetMessageServiceFromURI() to get the service, and then have the service create the
|
||||
// appropriate nsI*Url, and then QI to nsIURI, and return it.
|
||||
// see bug #110689
|
||||
if (PL_strncasecmp(uri, "imap", 4) == 0)
|
||||
{
|
||||
nsCOMPtr<nsIImapUrl> imapUrl = do_CreateInstance(kImapUrlCID, &rv);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
rv = imapUrl->QueryInterface(NS_GET_IID(nsIURI),
|
||||
(void**) aUrl);
|
||||
}
|
||||
else if (PL_strncasecmp(uri, "mailbox", 7) == 0)
|
||||
{
|
||||
nsCOMPtr<nsIMailboxUrl> mailboxUrl = do_CreateInstance(kCMailboxUrl, &rv);
|
||||
if (NS_SUCCEEDED(rv) && mailboxUrl)
|
||||
rv = mailboxUrl->QueryInterface(NS_GET_IID(nsIURI),
|
||||
(void**) aUrl);
|
||||
}
|
||||
else if (PL_strncasecmp(uri, "news", 4) == 0)
|
||||
{
|
||||
nsCOMPtr<nsINntpUrl> nntpUrl = do_CreateInstance(kCNntpUrlCID, &rv);
|
||||
if (NS_SUCCEEDED(rv) && nntpUrl)
|
||||
rv = nntpUrl->QueryInterface(NS_GET_IID(nsIURI),
|
||||
(void**) aUrl);
|
||||
}
|
||||
if (*aUrl)
|
||||
(*aUrl)->SetSpec(uri);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -478,7 +478,7 @@ nsMsgAttachmentHandler::SnarfMsgAttachment(nsMsgCompFields *compFields)
|
||||
nsresult rv = NS_ERROR_INVALID_ARG;
|
||||
nsCOMPtr <nsIMsgMessageService> messageService;
|
||||
|
||||
if (PL_strcasestr(m_uri, "_message:"))
|
||||
if (PL_strcasestr(m_uri, "-message:"))
|
||||
{
|
||||
mFileSpec = nsMsgCreateTempFileSpec("nsmail.tmp");
|
||||
mDeleteFile = PR_TRUE;
|
||||
|
||||
@@ -2262,13 +2262,13 @@ nsMsgComposeAndSend::AddCompFieldRemoteAttachments(PRUint32 aStartLocation,
|
||||
msg_pick_real_name(&m_attachments[newLoc], proposedName, mCompFields->GetCharacterSet());
|
||||
++newLoc;
|
||||
}
|
||||
else if (strUrl.Find("_message:") != -1)
|
||||
else if (strUrl.Find("-message:") != -1)
|
||||
{
|
||||
if (strUrl.Find("mailbox_message:") != -1 ||
|
||||
strUrl.Find("imap_message:") != -1)
|
||||
if (strUrl.Find("mailbox-message:") != -1 ||
|
||||
strUrl.Find("imap-message:") != -1)
|
||||
(*aMailboxCount)++;
|
||||
else if (strUrl.Find("news_message:") != -1 ||
|
||||
strUrl.Find("snews_message:") != -1)
|
||||
else if (strUrl.Find("news-message:") != -1 ||
|
||||
strUrl.Find("snews-message:") != -1)
|
||||
(*aNewsCount)++;
|
||||
|
||||
m_attachments[newLoc].m_uri = ToNewCString(strUrl);
|
||||
|
||||
@@ -80,7 +80,7 @@ static nsModuleComponentInfo gComponents[] = {
|
||||
nsImapMailFolderConstructor },
|
||||
|
||||
{ "IMAP Service", NS_IMAPSERVICE_CID,
|
||||
"@mozilla.org/messenger/messageservice;1?type=imap_message",
|
||||
"@mozilla.org/messenger/messageservice;1?type=imap-message",
|
||||
nsImapServiceConstructor },
|
||||
|
||||
{ "IMAP Service", NS_IMAPSERVICE_CID,
|
||||
|
||||
@@ -206,7 +206,7 @@ nsresult nsParseImapMessageURI(const char* uri, nsCString& folderURI, PRUint32 *
|
||||
keySeparator);
|
||||
nsAutoString folderPath;
|
||||
uriStr.Left(folderURI, keySeparator);
|
||||
folderURI.Cut(4, 8); // cut out the _message part of imap_message:
|
||||
folderURI.Cut(4, 8); // cut out the _message part of imap-message:
|
||||
nsCAutoString keyStr;
|
||||
if (keyEndSeparator != -1)
|
||||
uriStr.Mid(keyStr, keySeparator+1,
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
#include "nsIMsgIncomingServer.h"
|
||||
|
||||
static const char kImapRootURI[] = "imap:/";
|
||||
static const char kImapMessageRootURI[] = "imap_message:/";
|
||||
static const char kImapMessageRootURI[] = "imap-message:/";
|
||||
|
||||
extern nsresult
|
||||
nsImapURI2Path(const char* rootURI, const char* uriStr,
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
"@mozilla.org/messenger/messageservice;1?type=mailbox"
|
||||
|
||||
#define NS_MAILBOXSERVICE_CONTRACTID3 \
|
||||
"@mozilla.org/messenger/messageservice;1?type=mailbox_message"
|
||||
"@mozilla.org/messenger/messageservice;1?type=mailbox-message"
|
||||
|
||||
#define NS_MAILBOXSERVICE_CONTRACTID4 \
|
||||
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "mailbox"
|
||||
|
||||
@@ -197,7 +197,7 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr,
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
// verify that rootURI starts with "mailbox:/" or "mailbox_message:/"
|
||||
// verify that rootURI starts with "mailbox:/" or "mailbox-message:/"
|
||||
if ((PL_strcmp(rootURI, kMailboxRootURI) != 0) &&
|
||||
(PL_strcmp(rootURI, kMailboxMessageRootURI) != 0)) {
|
||||
pathResult = nsnull;
|
||||
@@ -253,8 +253,8 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr,
|
||||
}
|
||||
|
||||
/* parses LocalMessageURI
|
||||
* mailbox_message://folder1/folder2#123?header=none or
|
||||
* mailbox_message://folder1/folder2#1234&part=1.2
|
||||
* mailbox-message://folder1/folder2#123?header=none or
|
||||
* mailbox-message://folder1/folder2#1234&part=1.2
|
||||
*
|
||||
* puts folder URI in folderURI (mailbox://folder1/folder2)
|
||||
* message key number in key
|
||||
@@ -274,7 +274,7 @@ nsresult nsParseLocalMessageURI(const char* uri,
|
||||
keySeparator);
|
||||
nsAutoString folderPath;
|
||||
uriStr.Left(folderURI, keySeparator);
|
||||
folderURI.Cut(7, 8); // cut out the _message part of mailbox_message:
|
||||
folderURI.Cut(7, 8); // cut out the -message part of mailbox-message:
|
||||
|
||||
nsCAutoString keyStr;
|
||||
if (keyEndSeparator != -1)
|
||||
@@ -294,7 +294,7 @@ nsresult nsParseLocalMessageURI(const char* uri,
|
||||
nsresult nsBuildLocalMessageURI(const char *baseURI, PRUint32 key, nsCString& uri)
|
||||
{
|
||||
|
||||
// need to convert mailbox://hostname/.. to mailbox_message://hostname/..
|
||||
// need to convert mailbox://hostname/.. to mailbox-message://hostname/..
|
||||
|
||||
uri.Append(baseURI);
|
||||
uri.Append('#');
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
#include "nsIMsgIncomingServer.h"
|
||||
|
||||
static const char kMailboxRootURI[] = "mailbox:/";
|
||||
static const char kMailboxMessageRootURI[] = "mailbox_message:/";
|
||||
static const char kMailboxMessageRootURI[] = "mailbox-message:/";
|
||||
|
||||
nsresult
|
||||
nsLocalURI2Path(const char* rootURI, const char* uriStr, nsFileSpec& pathResult);
|
||||
|
||||
@@ -411,7 +411,7 @@ NS_IMETHODIMP nsPop3Service::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCAutoString messageUri (aSpec);
|
||||
messageUri.ReplaceSubstring("mailbox:", "mailbox_message:");
|
||||
messageUri.ReplaceSubstring("mailbox:", "mailbox-message:");
|
||||
messageUri.ReplaceSubstring("?number=", "#");
|
||||
offset = messageUri.Find("&");
|
||||
if (offset)
|
||||
|
||||
@@ -781,7 +781,7 @@ MimeMessage_partial_message_html(const char *data, void *closure,
|
||||
PR_FALSE);
|
||||
char *msgIdPtr = PL_strstr(msgId, "<");
|
||||
|
||||
orig_url.ReplaceSubstring("mailbox_message", "mailbox");
|
||||
orig_url.ReplaceSubstring("mailbox-message", "mailbox");
|
||||
orig_url.ReplaceSubstring("#", "?number=");
|
||||
|
||||
if (msgIdPtr)
|
||||
|
||||
@@ -79,9 +79,9 @@
|
||||
#define NS_NNTPPROTOCOLHANDLER_CONTRACTID \
|
||||
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "nntp"
|
||||
#define NS_NEWSMESSAGEPROTOCOLHANDLER_CONTRACTID \
|
||||
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "news_message"
|
||||
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "news-message"
|
||||
#define NS_NEWSMESSAGESERVICE_CONTRACTID \
|
||||
"@mozilla.org/messenger/messageservice;1?type=news_message"
|
||||
"@mozilla.org/messenger/messageservice;1?type=news-message"
|
||||
#define NS_NNTPMESSAGESERVICE_CONTRACTID \
|
||||
"@mozilla.org/messenger/messageservice;1?type=news"
|
||||
#define NS_NNTPSERVICE_CONTRACTID \
|
||||
|
||||
@@ -78,7 +78,7 @@ interface nsINntpService : nsISupports {
|
||||
|
||||
void downloadNewsgroupsForOffline(in nsIMsgWindow aMsgWindow, in nsIUrlListener aListener);
|
||||
/**
|
||||
* can handle news_message:// and news://
|
||||
* can handle news-message:// and news://
|
||||
*/
|
||||
void decomposeNewsURI(in string uri, out nsIMsgFolder folder, out nsMsgKey key);
|
||||
|
||||
|
||||
@@ -1003,7 +1003,7 @@ nsresult nsNNTPProtocol::LoadUrl(nsIURI * aURL, nsISupports * aConsumer)
|
||||
if (m_messageID || (m_key != nsMsgKey_None))
|
||||
{
|
||||
/*
|
||||
news_message://HOST/GROUP#key
|
||||
news-message://HOST/GROUP#key
|
||||
news://HOST/MESSAGE_ID
|
||||
|
||||
not sure about these:
|
||||
|
||||
@@ -57,7 +57,7 @@ nsParseNewsMessageURI(const char* uri, nsCString& folderURI, PRUint32 *key)
|
||||
keySeparator);
|
||||
|
||||
uriStr.Left(folderURI, keySeparator);
|
||||
folderURI.Cut(4, 8); // cut out the _message part of news_message:
|
||||
folderURI.Cut(4, 8); // cut out the -message part of news-message:
|
||||
|
||||
nsCAutoString keyStr;
|
||||
if (keyEndSeparator != -1)
|
||||
|
||||
@@ -44,7 +44,7 @@ class nsIMsgNewsFolder;
|
||||
|
||||
static const char kNntpRootURI[] = "nntp:/";
|
||||
static const char kNewsRootURI[] = "news:/";
|
||||
static const char kNewsMessageRootURI[] = "news_message:/";
|
||||
static const char kNewsMessageRootURI[] = "news-message:/";
|
||||
|
||||
#define kNewsRootURILen 6
|
||||
#define kNntpRootURILen 6
|
||||
|
||||
@@ -136,7 +136,7 @@ nsNntpService::SaveMessageToDisk(const char *aMessageURI,
|
||||
nsresult rv = NS_OK;
|
||||
NS_ENSURE_ARG_POINTER(aMessageURI);
|
||||
|
||||
// double check it is a news_message:/ uri
|
||||
// double check it is a news-message:/ uri
|
||||
if (PL_strncmp(aMessageURI, kNewsMessageRootURI, kNewsMessageRootURILen)) {
|
||||
rv = NS_ERROR_UNEXPECTED;
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
@@ -448,7 +448,7 @@ NS_IMETHODIMP nsNntpService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL
|
||||
|
||||
NS_ENSURE_ARG_POINTER(aMessageURI);
|
||||
|
||||
// double check that it is a news_message:/ uri
|
||||
// double check that it is a news-message:/ uri
|
||||
if (PL_strncmp(aMessageURI, kNewsMessageRootURI, kNewsMessageRootURILen)) {
|
||||
rv = NS_ERROR_UNEXPECTED;
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
Reference in New Issue
Block a user