Bug 393303 - "Create a blocked string for dirty downloads (virus scan failed)" [p=comrade693+bmo@gmail.com (Shawn Wilsher [sdwilsh]) r=gavin a=blocking-firefox3+]

This commit is contained in:
reed@reedloden.com 2007-11-30 12:24:10 -08:00
parent 6cceaba004
commit a010e72f21
8 changed files with 60 additions and 20 deletions

View File

@ -62,6 +62,7 @@ interface nsIDownloadManager : nsISupports {
const short DOWNLOAD_QUEUED = 5;
const short DOWNLOAD_BLOCKED = 6;
const short DOWNLOAD_SCANNING = 7;
const short DOWNLOAD_DIRTY = 8;
const short DOWNLOAD_TYPE_DOWNLOAD = 0;

View File

@ -1372,6 +1372,7 @@ nsDownloadManager::RetryDownload(PRUint32 aID)
// if our download is not canceled or failed, we should fail
if (dl->mDownloadState != nsIDownloadManager::DOWNLOAD_FAILED &&
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_BLOCKED &&
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_DIRTY &&
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_CANCELED)
return NS_ERROR_FAILURE;
@ -1445,7 +1446,8 @@ nsDownloadManager::CleanUp()
DownloadState states[] = { nsIDownloadManager::DOWNLOAD_FINISHED,
nsIDownloadManager::DOWNLOAD_FAILED,
nsIDownloadManager::DOWNLOAD_CANCELED,
nsIDownloadManager::DOWNLOAD_BLOCKED };
nsIDownloadManager::DOWNLOAD_BLOCKED,
nsIDownloadManager::DOWNLOAD_DIRTY };
nsCOMPtr<mozIStorageStatement> stmt;
nsresult rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING(
@ -1453,9 +1455,10 @@ nsDownloadManager::CleanUp()
"WHERE state = ?1 "
"OR state = ?2 "
"OR state = ?3 "
"OR state = ?4"), getter_AddRefs(stmt));
"OR state = ?4 "
"OR state = ?5"), getter_AddRefs(stmt));
NS_ENSURE_SUCCESS(rv, rv);
for (PRUint32 i = 0; i < 4; ++i) {
for (PRUint32 i = 0; i < NS_ARRAY_LENGTH(states); ++i) {
rv = stmt->BindInt32Parameter(i, states[i]);
NS_ENSURE_SUCCESS(rv, rv);
}
@ -1477,7 +1480,8 @@ nsDownloadManager::GetCanCleanUp(PRBool *aResult)
DownloadState states[] = { nsIDownloadManager::DOWNLOAD_FINISHED,
nsIDownloadManager::DOWNLOAD_FAILED,
nsIDownloadManager::DOWNLOAD_CANCELED,
nsIDownloadManager::DOWNLOAD_BLOCKED };
nsIDownloadManager::DOWNLOAD_BLOCKED,
nsIDownloadManager::DOWNLOAD_DIRTY };
nsCOMPtr<mozIStorageStatement> stmt;
nsresult rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING(
@ -1486,9 +1490,10 @@ nsDownloadManager::GetCanCleanUp(PRBool *aResult)
"WHERE state = ?1 "
"OR state = ?2 "
"OR state = ?3 "
"OR state = ?4"), getter_AddRefs(stmt));
"OR state = ?4 "
"OR state = ?5"), getter_AddRefs(stmt));
NS_ENSURE_SUCCESS(rv, rv);
for (PRUint32 i = 0; i < 4; ++i) {
for (PRUint32 i = 0; i < NS_ARRAY_LENGTH(states); ++i) {
rv = stmt->BindInt32Parameter(i, states[i]);
NS_ENSURE_SUCCESS(rv, rv);
}
@ -1752,6 +1757,7 @@ nsDownload::SetState(DownloadState aState)
// dispatch to the observers as well.
switch (aState) {
case nsIDownloadManager::DOWNLOAD_BLOCKED:
case nsIDownloadManager::DOWNLOAD_DIRTY:
case nsIDownloadManager::DOWNLOAD_CANCELED:
case nsIDownloadManager::DOWNLOAD_FAILED:
// Transfers are finished, so break the reference cycle
@ -1883,6 +1889,8 @@ nsDownload::SetState(DownloadState aState)
case nsIDownloadManager::DOWNLOAD_BLOCKED:
mDownloadManager->SendEvent(this, "dl-blocked");
break;
case nsIDownloadManager::DOWNLOAD_DIRTY:
mDownloadManager->SendEvent(this, "dl-dirty");
default:
break;
}

View File

@ -225,7 +225,7 @@ nsDownloadScanner::Scan::Run()
DownloadState downloadState = 0;
switch (mStatus) {
case AVSCAN_BAD:
downloadState = nsIDownloadManager::DOWNLOAD_BLOCKED;
downloadState = nsIDownloadManager::DOWNLOAD_DIRTY;
break;
default:
case AVSCAN_FAILED:

View File

@ -66,6 +66,7 @@ stateFailed=Failed
stateCanceled=Canceled
# LOCALIZATION NOTE (stateBlocked): 'Parental Controls' should be capitalized
stateBlocked=Blocked by Parental Controls
stateDirty=Blocked: Download may contain a virus or spyware
fileDoesNotExistOpenTitle=Cannot Open %S
fileDoesNotExistShowTitle=Cannot Show %S

View File

@ -70,6 +70,7 @@ DownloadProgressListener.prototype = {
case nsIDM.DOWNLOAD_FAILED:
case nsIDM.DOWNLOAD_CANCELED:
case nsIDM.DOWNLOAD_BLOCKED:
case nsIDM.DOWNLOAD_DIRTY:
case nsIDM.DOWNLOAD_FINISHED:
downloadCompleted(aDownload);
if (state == nsIDM.DOWNLOAD_FINISHED)

View File

@ -89,17 +89,7 @@
return state == dl.DOWNLOAD_FINISHED ||
state == dl.DOWNLOAD_CANCELED ||
state == dl.DOWNLOAD_BLOCKED ||
state == dl.DOWNLOAD_FAILED;
]]>
</getter>
</property>
<property name="canceledOrFailed">
<getter>
<![CDATA[
var state = parseInt(this.getAttribute("state"));
var dl = Components.interfaces.nsIDownloadManager;
return state == dl.DOWNLOAD_CANCELED ||
state == dl.DOWNLOAD_BLOCKED ||
state == dl.DOWNLOAD_DIRTY ||
state == dl.DOWNLOAD_FAILED;
]]>
</getter>
@ -319,4 +309,31 @@
</xul:hbox>
</content>
</binding>
<binding id="download-dirty" extends="chrome://mozapps/content/downloads/download.xml#download-base">
<content>
<xul:hbox flex="1">
<xul:vbox pack="start">
<xul:image class="downloadTypeIcon blockedIcon"/>
</xul:vbox>
<xul:vbox pack="start" flex="1">
<xul:label xbl:inherits="value=target,tooltiptext=target"
crop="center" class="name"/>
<xul:spacer flex="1"/>
<xul:label xbl:inherits="value=status,tooltiptext=status" flex="1"
crop="right" class="status"/>
</xul:vbox>
<xul:vbox pack="center">
<xul:hbox>
<xul:button class="retry mini-button" tooltiptext="&cmd.retry.label;"
command="cmd_retry" ondblclick="event.stopPropagation();"/>
<xul:button class="info mini-button" tooltiptext="&cmd.info.label;"
command="cmd_showInfo" ondblclick="event.stopPropagation();"
anonid="info"/>
</xul:hbox>
</xul:vbox>
</xul:hbox>
</content>
</binding>
</bindings>

View File

@ -31,6 +31,10 @@ richlistitem[type="download"][state="7"] {
-moz-binding: url('chrome://mozapps/content/downloads/download.xml#download-scanning');
}
richlistitem[type="download"][state="8"] {
-moz-binding: url('chrome://mozapps/content/downloads/download.xml#download-dirty');
}
/* Only focus buttons in the selected item*/
richlistitem[type="download"]:not([selected="true"]) button {
-moz-user-focus: none;

View File

@ -91,6 +91,7 @@ let gStr = {
stateFailed: "stateFailed",
stateCanceled: "stateCanceled",
stateBlocked: "stateBlocked",
stateDirty: "stateDirty",
units: ["bytes", "kilobyte", "megabyte", "gigabyte"],
@ -304,6 +305,7 @@ function onDownloadDblClick(aEvent)
break;
case nsIDM.DOWNLOAD_CANCELED:
case nsIDM.DOWNLOAD_BLOCKED:
case nsIDM.DOWNLOAD_DIRTY:
case nsIDM.DOWNLOAD_FAILED:
gDownloadViewController.doCommand("cmd_retry");
break;
@ -538,7 +540,10 @@ var gContextMenus = [
["menuitem_retry", "menuitem_removeFromList", "menuitem_clearList",
"menuseparator_copy_location", "menuitem_copyLocation"],
// DOWNLOAD_SCANNING
["menuitem_copyLocation"]
["menuitem_copyLocation"],
// DOWNLOAD_DIRTY
["menuitem_retry", "menuitem_removeFromList", "menuitem_clearList",
"menuseparator_copy_location", "menuitem_copyLocation"]
];
function buildContextMenu(aEvent)
@ -831,6 +836,7 @@ function updateStatus(aItem, aDownload) {
case nsIDM.DOWNLOAD_FAILED:
case nsIDM.DOWNLOAD_CANCELED:
case nsIDM.DOWNLOAD_BLOCKED:
case nsIDM.DOWNLOAD_DIRTY:
let (stateSize = {}) {
stateSize[nsIDM.DOWNLOAD_FINISHED] = function() {
// Display the file size, but show "Unknown" for negative sizes
@ -846,6 +852,7 @@ function updateStatus(aItem, aDownload) {
stateSize[nsIDM.DOWNLOAD_FAILED] = function() gStr.stateFailed;
stateSize[nsIDM.DOWNLOAD_CANCELED] = function() gStr.stateCanceled;
stateSize[nsIDM.DOWNLOAD_BLOCKED] = function() gStr.stateBlocked;
stateSize[nsIDM.DOWNLOAD_DIRTY] = function() gStr.stateDirty;
// Insert 1 is the download size or download state
status = replaceInsert(gStr.doneStatus, 1, stateSize[state]());
@ -1075,7 +1082,7 @@ function buildDownloadListWithTime(aTime)
var stmt = gDownloadListWithTimeQuery;
if (!stmt) {
stmt = db.createStatement(replaceInsert(gBaseQuery, 1, "startTime >= ?1 " +
"AND (state = ?2 OR state = ?3 OR state = ?4 OR state = ?5)"));
"AND (state = ?2 OR state = ?3 OR state = ?4 OR state = ?5 OR state = ?6)"));
gDownloadListWithTimeQuery = stmt;
}
@ -1085,6 +1092,7 @@ function buildDownloadListWithTime(aTime)
stmt.bindInt32Parameter(2, nsIDM.DOWNLOAD_FAILED);
stmt.bindInt32Parameter(3, nsIDM.DOWNLOAD_CANCELED);
stmt.bindInt32Parameter(4, nsIDM.DOWNLOAD_BLOCKED);
stmt.bindInt32Parameter(5, nsIDM.DOWNLOAD_DIRTY);
buildDownloadList(stmt, gDownloadsDoneArea);
} finally {
stmt.reset();