Bug 1414518 - introduce pref mailnews.headers.extraAddonHeaders to emit extra headers to currentHeaderData. r=jorgk

This commit is contained in:
Patrick Brunschwig 2017-12-14 09:26:00 +01:00
Родитель 7b0a8b589a
Коммит e9bd8b2c83
2 изменённых файлов: 58 добавлений и 27 удалений

Просмотреть файл

@ -50,6 +50,11 @@ pref("mailnews.filters.confirm_delete", true);
// space-delimited list of extra headers to show in msg header display area.
pref("mailnews.headers.extraExpandedHeaders", "");
// Space-delimited list of extra headers that will be pushed to
// currentHeaderData for processing in add-ons (without being displayed).
// Use a value of "*" to get all headers (other wildcards not supported).
pref("mailnews.headers.extraAddonHeaders", "");
// default sort order settings (when creating new folder views)
// sort_order is an int value reflecting nsMsgViewSortOrder values
// as defined in nsIMsgDBView.idl (ascending = 1, descending = 2)

Просмотреть файл

@ -168,18 +168,36 @@ nsresult nsMimeHtmlDisplayEmitter::BroadcastHeaders(nsIMsgHeaderSink * aHeaderSi
nsCString extraExpandedHeaders;
nsTArray<nsCString> extraExpandedHeadersArray;
nsCString extraAddonHeaders;
nsTArray<nsCString> extraAddonHeadersArray;
nsAutoCString convertedDateString;
bool pushAllHeaders = false;
bool checkExtraHeaders = false;
bool checkAddonHeaders = false;
nsresult rv;
nsCOMPtr<nsIPrefBranch> pPrefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (pPrefBranch)
{
pPrefBranch->GetCharPref("mailnews.headers.extraExpandedHeaders", extraExpandedHeaders);
// todo - should make this upper case
if (!extraExpandedHeaders.IsEmpty())
{
ToLowerCase(extraExpandedHeaders);
ParseString(extraExpandedHeaders, ' ', extraExpandedHeadersArray);
checkExtraHeaders = true;
}
pPrefBranch->GetCharPref("mailnews.headers.extraAddonHeaders", extraAddonHeaders);
if (!extraAddonHeaders.IsEmpty())
{
// Push all headers if extraAddonHeaders is "*".
if (extraAddonHeaders.EqualsLiteral("*")) {
pushAllHeaders = true;
} else {
ToLowerCase(extraAddonHeaders);
ParseString(extraAddonHeaders, ' ', extraAddonHeadersArray);
checkAddonHeaders = true;
}
}
}
@ -195,38 +213,46 @@ nsresult nsMimeHtmlDisplayEmitter::BroadcastHeaders(nsIMsgHeaderSink * aHeaderSi
{
bool skip = true;
const char * headerName = headerInfo->name;
// Accept the following:
if (!PL_strcasecmp("to", headerName) ||
!PL_strcasecmp("from", headerName) ||
!PL_strcasecmp("cc", headerName) ||
!PL_strcasecmp("newsgroups", headerName) ||
!PL_strcasecmp("bcc", headerName) ||
!PL_strcasecmp("followup-to", headerName) ||
!PL_strcasecmp("reply-to", headerName) ||
!PL_strcasecmp("subject", headerName) ||
!PL_strcasecmp("organization", headerName) ||
!PL_strcasecmp("user-agent", headerName) ||
!PL_strcasecmp("content-base", headerName) ||
!PL_strcasecmp("sender", headerName) ||
!PL_strcasecmp("date", headerName) ||
!PL_strcasecmp("x-mailer", headerName) ||
!PL_strcasecmp("content-type", headerName) ||
!PL_strcasecmp("message-id", headerName) ||
!PL_strcasecmp("x-newsreader", headerName) ||
!PL_strcasecmp("x-mimeole", headerName) ||
!PL_strcasecmp("references", headerName) ||
!PL_strcasecmp("in-reply-to", headerName) ||
!PL_strcasecmp("list-post", headerName) ||
!PL_strcasecmp("delivered-to", headerName)) {
if (pushAllHeaders) {
skip = false;
} else if (extraExpandedHeadersArray.Length() > 0) {
// Make headerStr lower case because IndexOf is case-sensitive.
// Accept the following:
} else if (!PL_strcasecmp("to", headerName) ||
!PL_strcasecmp("from", headerName) ||
!PL_strcasecmp("cc", headerName) ||
!PL_strcasecmp("newsgroups", headerName) ||
!PL_strcasecmp("bcc", headerName) ||
!PL_strcasecmp("followup-to", headerName) ||
!PL_strcasecmp("reply-to", headerName) ||
!PL_strcasecmp("subject", headerName) ||
!PL_strcasecmp("organization", headerName) ||
!PL_strcasecmp("user-agent", headerName) ||
!PL_strcasecmp("content-base", headerName) ||
!PL_strcasecmp("sender", headerName) ||
!PL_strcasecmp("date", headerName) ||
!PL_strcasecmp("x-mailer", headerName) ||
!PL_strcasecmp("content-type", headerName) ||
!PL_strcasecmp("message-id", headerName) ||
!PL_strcasecmp("x-newsreader", headerName) ||
!PL_strcasecmp("x-mimeole", headerName) ||
!PL_strcasecmp("references", headerName) ||
!PL_strcasecmp("in-reply-to", headerName) ||
!PL_strcasecmp("list-post", headerName) ||
!PL_strcasecmp("delivered-to", headerName)) {
skip = false;
} else if (checkExtraHeaders || checkAddonHeaders) {
// Make headerStr lowercase because extraExpandedHeaders/extraAddonHeadersArray
// was made lowercase above.
nsDependentCString headerStr(headerInfo->name);
ToLowerCase(headerStr);
// Accept if it's an "extra" header.
if (extraExpandedHeadersArray.Contains(headerStr))
if (checkExtraHeaders && extraExpandedHeadersArray.Contains(headerStr))
skip = false;
if (checkAddonHeaders && extraAddonHeadersArray.Contains(headerStr))
skip = false;
}
if (skip)
continue;
}