Bug #216133 --> port thunderbird changes for the new content policy manager from the branch to the trunk.

This commit is contained in:
scott%scott-macgregor.org 2004-07-01 02:43:02 +00:00
Родитель d9af05efc3
Коммит 764b6162b9
13 изменённых файлов: 151 добавлений и 7 удалений

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

@ -108,6 +108,8 @@ pref("mailnews.hints_and_tips.url","chrome://messenger-region/locale/region.prop
pref("compose.throbber.url","chrome://messenger-region/locale/region.properties");
pref("addressbook.throbber.url","chrome://messenger-region/locale/region.properties");
pref("network.image.imageBehavior", 2);
/////////////////////////////////////////////////////////////////
// End seamonkey suite mailnews.js pref overrides
/////////////////////////////////////////////////////////////////

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

@ -459,6 +459,7 @@ function loadStartPage() {
try {
// collapse the junk bar
SetUpJunkBar(null);
SetUpRemoteContentBar(null);
var startpageenabled = pref.getBoolPref("mailnews.start_page.enabled");

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

@ -34,6 +34,14 @@ const kClassicMailLayout = 0;
const kWideMailLayout = 1;
const kVerticalMailLayout = 2;
// Per message headder flags to keep track of whether the user is allowing remote
// content for a particular message.
// if you change or add more values to these constants, be sure to modify
// the corresponding definitions in nsMsgContentPolicy.cpp
const kNoRemoteContentPolicy = 0;
const kBlockRemoteContent = 1;
const kAllowRemoteContent = 2;
var gMessengerBundle;
var gPromptService;
var gOfflinePromptsBundle;
@ -2048,6 +2056,41 @@ function SetUpJunkBar(aMsgHdr)
return (isJunk && isAlreadyCollapsed) || (!isJunk && !isAlreadyCollapsed);
}
// hides or shows the remote content bar based on the property in the msg hdr
function SetUpRemoteContentBar(aMsgHdr)
{
var showRemoteContentBar = false;
if (aMsgHdr && aMsgHdr.getUint32Property("remoteContentPolicy") == kBlockRemoteContent)
showRemoteContentBar = true;
var remoteContentBar = document.getElementById("remoteContentBar");
if (showRemoteContentBar)
remoteContentBar.removeAttribute("collapsed");
else
remoteContentBar.setAttribute("collapsed","true");
}
function LoadMsgWithRemoteContent()
{
// we want to get the msg hdr for the currently selected message
// change the "remoteContentBar" property on it
// then reload the message
var msgURI = GetLoadedMessage();
var msgHdr = null;
if (msgURI && !(/type=x-message-display/.test(msgURI)))
{
msgHdr = messenger.messageServiceFromURI(msgURI).messageURIToMsgHdr(msgURI);
if (msgHdr)
{
msgHdr.setUint32Property("remoteContentPolicy", kAllowRemoteContent);
MsgReload();
}
}
}
function MarkCurrentMessageAsRead()
{
gDBView.doCommand(nsMsgViewCommandType.markMessagesRead);
@ -2082,13 +2125,10 @@ function OnMsgLoaded(aUrl)
if (!folder || !msgURI)
return;
if (/type=x-message-display/.test(msgURI))
SetUpJunkBar(null);
else
{
if (!(/type=x-message-display/.test(msgURI)))
msgHdr = messenger.messageServiceFromURI(msgURI).messageURIToMsgHdr(msgURI);
SetUpJunkBar(msgHdr);
}
// we just finished loading a message. set a timer to actually mark the message is read after n seconds
// where n can be configured by the user.

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

@ -1837,6 +1837,13 @@
<button label="&notJunkButton.label;" oncommand="JunkSelectedMessages(false)"/>
</hbox>
<hbox id="remoteContentBar" collapsed="true" align="center">
<image id="remoteContentImage"/>
<label id="remoteContentMessage" value="&remoteContenMessage.label;"/>
<spacer flex="1"/>
<button label="&loadRemoteContentButton.label;" oncommand="LoadMsgWithRemoteContent()"/>
</hbox>
<statusbar class="chromeclass-status" id="status-bar">
<hbox insertbefore="unreadMessageCount" flex="1">
<statusbarpanel id="statusText" label="&statusText.label;" flex="1"/>

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

@ -132,6 +132,7 @@
ondragexit="nsDragAndDrop.dragExit(event, messagepaneObserver);">
<hbox id="junkBar"/>
<hbox id="remoteContentBar"/>
<hbox id="msgHeaderView"/>

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

@ -365,6 +365,7 @@
<vbox id="messagepanebox" flex="1" minheight="100" height="200" minwidth="100" width="200" persist="collapsed height width">
<hbox id="junkBar"/>
<hbox id="remoteContentBar"/>
<hbox id="msgHeaderView"/>
<browser id="messagepane" context="messagePaneContext" autofind="false"
minheight="1" flex="1" name="messagepane"

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

@ -306,6 +306,7 @@ var messageHeaderSink = {
gBuildAttachmentPopupForCurrentMsg = true;
ClearAttachmentList();
ClearEditMessageButton();
SetUpRemoteContentBar(null);
for (index in gMessageListeners)
gMessageListeners[index].onStartHeaders();
@ -436,6 +437,11 @@ var messageHeaderSink = {
{
OnMsgLoaded(url);
},
onMsgHasRemoteContent: function(aMsgHdr)
{
dump('entering on msg has remote content\n\n');
SetUpRemoteContentBar(aMsgHdr);
},
mSecurityInfo : null,
getSecurityInfo: function()
@ -892,7 +898,13 @@ function AddExtraAddressProcessing(emailAddress, addressNode)
var displayName = addressNode.getTextAttribute("displayName");
var emailAddress = addressNode.getTextAttribute("emailAddress");
if (gShowCondensedEmailAddresses && displayName && useDisplayNameForAddress(emailAddress))
// always show the address for the from and reply-to fields
var parentElementId = addressNode.parentNode.id;
var condenseName = true;
if (parentElementId == "expandedfromBox" || parentElementId == "expandedreply-toBox")
condenseName = false;
if (condenseName && gShowCondensedEmailAddresses && displayName && useDisplayNameForAddress(emailAddress))
{
addressNode.setAttribute('label', displayName);
addressNode.setAttribute("tooltiptext", emailAddress);

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

@ -1205,6 +1205,7 @@ function ClearMessagePane()
// hide the junk bar
SetUpJunkBar(null);
SetUpRemoteContentBar(null);
}
}

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

@ -584,6 +584,10 @@
<!ENTITY notJunkButton.label "This is Not Junk">
<!ENTITY junkInfoButton.label "?">
<!-- Remote Content Bar -->
<!ENTITY remoteContenMessage.label "To protect your privacy, &brandShortName; has blocked remote images in this message." >
<!ENTITY loadRemoteContentButton.label "Show Images">
<!-- Search Bar -->
<!ENTITY quickSearchCmd.key "k">

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

@ -415,6 +415,10 @@ var messageHeaderSink = {
OnMsgLoaded(url);
},
onMsgHasRemoteContent: function(aMsgHdr)
{
},
mSecurityInfo : null,
getSecurityInfo: function()
{

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

@ -47,9 +47,24 @@
#include "nsString.h"
#include "nsIContentPolicy.h"
#include "nsIMsgMailNewsUrl.h"
#include "nsIMsgWindow.h"
#include "nsIMimeMiscStatus.h"
#include "nsIMsgMessageService.h"
#include "nsIMsgHdr.h"
#include "nsMsgUtils.h"
static const char kBlockRemoteImages[] = "mailnews.message_display.disable_remote_image";
static const char kAllowPlugins[] = "mailnews.message_display.allow.plugins";
// Per message headder flags to keep track of whether the user is allowing remote
// content for a particular message.
// if you change or add more values to these constants, be sure to modify
// the corresponding definitions in mailWindowOverlay.js
#define kNoRemoteContentPolicy 0
#define kBlockRemoteContent 1
#define kAllowRemoteContent 2
NS_IMPL_ADDREF(nsMsgContentPolicy)
NS_IMPL_RELEASE(nsMsgContentPolicy)
@ -149,6 +164,53 @@ nsMsgContentPolicy::ShouldLoad(PRUint32 aContentType,
// check the 'disable remote images pref' and block the image if appropriate
*aDecision = mBlockRemoteImages ? nsIContentPolicy::REJECT_REQUEST :
nsIContentPolicy::ACCEPT;
// get the msg hdr for the message URI we are actually loading
NS_ENSURE_TRUE(aRequestingLocation, NS_OK);
nsCOMPtr<nsIMsgMessageUrl> msgUrl = do_QueryInterface(aRequestingLocation, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsXPIDLCString resourceURI;
msgUrl->GetUri(getter_Copies(resourceURI));
// now get the msg service for this URI
nsCOMPtr<nsIMsgMessageService> msgService;
rv = GetMessageServiceFromURI(resourceURI.get(), getter_AddRefs(msgService));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIMsgDBHdr> msgHdr;
msgService->MessageURIToMsgHdr(resourceURI, getter_AddRefs(msgHdr));
NS_ENSURE_SUCCESS(rv, rv);
// first, get the hasRemoteContent property
PRUint32 remoteContentPolicy = kNoRemoteContentPolicy;
msgHdr->GetUint32Property("remoteContentPolicy", &remoteContentPolicy);
if (!remoteContentPolicy) // kNoRemoteContentPolicy means we have never set a value on the message
msgHdr->SetUint32Property("remoteContentPolicy", kBlockRemoteContent); // this message contains blocked remote content
if (remoteContentPolicy != kAllowRemoteContent && mBlockRemoteImages)
{
// now we need to call out the msg sink informing it that this message has remote content
nsCOMPtr<nsIMsgMailNewsUrl> mailnewsUrl = do_QueryInterface(aRequestingLocation, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIMsgWindow> msgWindow;
rv = mailnewsUrl->GetMsgWindow(getter_AddRefs(msgWindow));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIMsgHeaderSink> msgHdrSink;
rv = msgWindow->GetMsgHeaderSink(getter_AddRefs(msgHdrSink));
NS_ENSURE_SUCCESS(rv, rv);
msgHdrSink->OnMsgHasRemoteContent(msgHdr); // notify the UI to show the remote content hdr bar so the user can overide
}
else if (remoteContentPolicy == kAllowRemoteContent)
{
// user wants to see the remote content for this mesage
*aDecision = nsIContentPolicy::ACCEPT;
}
}
}
}

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

@ -674,6 +674,12 @@ NS_IMETHODIMP TokenStreamListener::OnEndMsgDownload(nsIMsgMailNewsUrl *url)
return NS_OK;
}
NS_IMETHODIMP TokenStreamListener::OnMsgHasRemoteContent(nsIMsgDBHdr * aMsgHdr)
{
return NS_OK;
}
NS_IMETHODIMP TokenStreamListener::OnEndMsgHeaders(nsIMsgMailNewsUrl *url)
{
return NS_OK;

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

@ -44,6 +44,7 @@ interface nsIStreamListener;
interface nsIChannel;
interface nsIMsgMailNewsUrl;
interface nsIUTF8StringEnumerator;
interface nsIMsgDBHdr;
[scriptable, uuid(4644FB25-5255-11d3-82B8-444553540002)]
interface nsIMimeMiscStatus : nsISupports{
@ -79,4 +80,6 @@ interface nsIMsgHeaderSink : nsISupports {
void onEndMsgDownload(in nsImsgMailNewsUrl url);
attribute nsISupports securityInfo;
void onMsgHasRemoteContent(in nsIMsgDBHdr aMsgHdr);
};