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:
Родитель
f7a0d5f810
Коммит
466773ae30
|
@ -62,6 +62,7 @@ interface nsIDownloadManager : nsISupports {
|
||||||
const short DOWNLOAD_QUEUED = 5;
|
const short DOWNLOAD_QUEUED = 5;
|
||||||
const short DOWNLOAD_BLOCKED = 6;
|
const short DOWNLOAD_BLOCKED = 6;
|
||||||
const short DOWNLOAD_SCANNING = 7;
|
const short DOWNLOAD_SCANNING = 7;
|
||||||
|
const short DOWNLOAD_DIRTY = 8;
|
||||||
|
|
||||||
const short DOWNLOAD_TYPE_DOWNLOAD = 0;
|
const short DOWNLOAD_TYPE_DOWNLOAD = 0;
|
||||||
|
|
||||||
|
|
|
@ -1372,6 +1372,7 @@ nsDownloadManager::RetryDownload(PRUint32 aID)
|
||||||
// if our download is not canceled or failed, we should fail
|
// if our download is not canceled or failed, we should fail
|
||||||
if (dl->mDownloadState != nsIDownloadManager::DOWNLOAD_FAILED &&
|
if (dl->mDownloadState != nsIDownloadManager::DOWNLOAD_FAILED &&
|
||||||
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_BLOCKED &&
|
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_BLOCKED &&
|
||||||
|
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_DIRTY &&
|
||||||
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_CANCELED)
|
dl->mDownloadState != nsIDownloadManager::DOWNLOAD_CANCELED)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
@ -1445,7 +1446,8 @@ nsDownloadManager::CleanUp()
|
||||||
DownloadState states[] = { nsIDownloadManager::DOWNLOAD_FINISHED,
|
DownloadState states[] = { nsIDownloadManager::DOWNLOAD_FINISHED,
|
||||||
nsIDownloadManager::DOWNLOAD_FAILED,
|
nsIDownloadManager::DOWNLOAD_FAILED,
|
||||||
nsIDownloadManager::DOWNLOAD_CANCELED,
|
nsIDownloadManager::DOWNLOAD_CANCELED,
|
||||||
nsIDownloadManager::DOWNLOAD_BLOCKED };
|
nsIDownloadManager::DOWNLOAD_BLOCKED,
|
||||||
|
nsIDownloadManager::DOWNLOAD_DIRTY };
|
||||||
|
|
||||||
nsCOMPtr<mozIStorageStatement> stmt;
|
nsCOMPtr<mozIStorageStatement> stmt;
|
||||||
nsresult rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING(
|
nsresult rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING(
|
||||||
|
@ -1453,9 +1455,10 @@ nsDownloadManager::CleanUp()
|
||||||
"WHERE state = ?1 "
|
"WHERE state = ?1 "
|
||||||
"OR state = ?2 "
|
"OR state = ?2 "
|
||||||
"OR state = ?3 "
|
"OR state = ?3 "
|
||||||
"OR state = ?4"), getter_AddRefs(stmt));
|
"OR state = ?4 "
|
||||||
|
"OR state = ?5"), getter_AddRefs(stmt));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
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]);
|
rv = stmt->BindInt32Parameter(i, states[i]);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
}
|
||||||
|
@ -1477,7 +1480,8 @@ nsDownloadManager::GetCanCleanUp(PRBool *aResult)
|
||||||
DownloadState states[] = { nsIDownloadManager::DOWNLOAD_FINISHED,
|
DownloadState states[] = { nsIDownloadManager::DOWNLOAD_FINISHED,
|
||||||
nsIDownloadManager::DOWNLOAD_FAILED,
|
nsIDownloadManager::DOWNLOAD_FAILED,
|
||||||
nsIDownloadManager::DOWNLOAD_CANCELED,
|
nsIDownloadManager::DOWNLOAD_CANCELED,
|
||||||
nsIDownloadManager::DOWNLOAD_BLOCKED };
|
nsIDownloadManager::DOWNLOAD_BLOCKED,
|
||||||
|
nsIDownloadManager::DOWNLOAD_DIRTY };
|
||||||
|
|
||||||
nsCOMPtr<mozIStorageStatement> stmt;
|
nsCOMPtr<mozIStorageStatement> stmt;
|
||||||
nsresult rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING(
|
nsresult rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING(
|
||||||
|
@ -1486,9 +1490,10 @@ nsDownloadManager::GetCanCleanUp(PRBool *aResult)
|
||||||
"WHERE state = ?1 "
|
"WHERE state = ?1 "
|
||||||
"OR state = ?2 "
|
"OR state = ?2 "
|
||||||
"OR state = ?3 "
|
"OR state = ?3 "
|
||||||
"OR state = ?4"), getter_AddRefs(stmt));
|
"OR state = ?4 "
|
||||||
|
"OR state = ?5"), getter_AddRefs(stmt));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
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]);
|
rv = stmt->BindInt32Parameter(i, states[i]);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
}
|
||||||
|
@ -1752,6 +1757,7 @@ nsDownload::SetState(DownloadState aState)
|
||||||
// dispatch to the observers as well.
|
// dispatch to the observers as well.
|
||||||
switch (aState) {
|
switch (aState) {
|
||||||
case nsIDownloadManager::DOWNLOAD_BLOCKED:
|
case nsIDownloadManager::DOWNLOAD_BLOCKED:
|
||||||
|
case nsIDownloadManager::DOWNLOAD_DIRTY:
|
||||||
case nsIDownloadManager::DOWNLOAD_CANCELED:
|
case nsIDownloadManager::DOWNLOAD_CANCELED:
|
||||||
case nsIDownloadManager::DOWNLOAD_FAILED:
|
case nsIDownloadManager::DOWNLOAD_FAILED:
|
||||||
// Transfers are finished, so break the reference cycle
|
// Transfers are finished, so break the reference cycle
|
||||||
|
@ -1883,6 +1889,8 @@ nsDownload::SetState(DownloadState aState)
|
||||||
case nsIDownloadManager::DOWNLOAD_BLOCKED:
|
case nsIDownloadManager::DOWNLOAD_BLOCKED:
|
||||||
mDownloadManager->SendEvent(this, "dl-blocked");
|
mDownloadManager->SendEvent(this, "dl-blocked");
|
||||||
break;
|
break;
|
||||||
|
case nsIDownloadManager::DOWNLOAD_DIRTY:
|
||||||
|
mDownloadManager->SendEvent(this, "dl-dirty");
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,7 +225,7 @@ nsDownloadScanner::Scan::Run()
|
||||||
DownloadState downloadState = 0;
|
DownloadState downloadState = 0;
|
||||||
switch (mStatus) {
|
switch (mStatus) {
|
||||||
case AVSCAN_BAD:
|
case AVSCAN_BAD:
|
||||||
downloadState = nsIDownloadManager::DOWNLOAD_BLOCKED;
|
downloadState = nsIDownloadManager::DOWNLOAD_DIRTY;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case AVSCAN_FAILED:
|
case AVSCAN_FAILED:
|
||||||
|
|
|
@ -66,6 +66,7 @@ stateFailed=Failed
|
||||||
stateCanceled=Canceled
|
stateCanceled=Canceled
|
||||||
# LOCALIZATION NOTE (stateBlocked): 'Parental Controls' should be capitalized
|
# LOCALIZATION NOTE (stateBlocked): 'Parental Controls' should be capitalized
|
||||||
stateBlocked=Blocked by Parental Controls
|
stateBlocked=Blocked by Parental Controls
|
||||||
|
stateDirty=Blocked: Download may contain a virus or spyware
|
||||||
|
|
||||||
fileDoesNotExistOpenTitle=Cannot Open %S
|
fileDoesNotExistOpenTitle=Cannot Open %S
|
||||||
fileDoesNotExistShowTitle=Cannot Show %S
|
fileDoesNotExistShowTitle=Cannot Show %S
|
||||||
|
|
|
@ -70,6 +70,7 @@ DownloadProgressListener.prototype = {
|
||||||
case nsIDM.DOWNLOAD_FAILED:
|
case nsIDM.DOWNLOAD_FAILED:
|
||||||
case nsIDM.DOWNLOAD_CANCELED:
|
case nsIDM.DOWNLOAD_CANCELED:
|
||||||
case nsIDM.DOWNLOAD_BLOCKED:
|
case nsIDM.DOWNLOAD_BLOCKED:
|
||||||
|
case nsIDM.DOWNLOAD_DIRTY:
|
||||||
case nsIDM.DOWNLOAD_FINISHED:
|
case nsIDM.DOWNLOAD_FINISHED:
|
||||||
downloadCompleted(aDownload);
|
downloadCompleted(aDownload);
|
||||||
if (state == nsIDM.DOWNLOAD_FINISHED)
|
if (state == nsIDM.DOWNLOAD_FINISHED)
|
||||||
|
|
|
@ -89,17 +89,7 @@
|
||||||
return state == dl.DOWNLOAD_FINISHED ||
|
return state == dl.DOWNLOAD_FINISHED ||
|
||||||
state == dl.DOWNLOAD_CANCELED ||
|
state == dl.DOWNLOAD_CANCELED ||
|
||||||
state == dl.DOWNLOAD_BLOCKED ||
|
state == dl.DOWNLOAD_BLOCKED ||
|
||||||
state == dl.DOWNLOAD_FAILED;
|
state == dl.DOWNLOAD_DIRTY ||
|
||||||
]]>
|
|
||||||
</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_FAILED;
|
state == dl.DOWNLOAD_FAILED;
|
||||||
]]>
|
]]>
|
||||||
</getter>
|
</getter>
|
||||||
|
@ -319,4 +309,31 @@
|
||||||
</xul:hbox>
|
</xul:hbox>
|
||||||
</content>
|
</content>
|
||||||
</binding>
|
</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>
|
</bindings>
|
||||||
|
|
|
@ -31,6 +31,10 @@ richlistitem[type="download"][state="7"] {
|
||||||
-moz-binding: url('chrome://mozapps/content/downloads/download.xml#download-scanning');
|
-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*/
|
/* Only focus buttons in the selected item*/
|
||||||
richlistitem[type="download"]:not([selected="true"]) button {
|
richlistitem[type="download"]:not([selected="true"]) button {
|
||||||
-moz-user-focus: none;
|
-moz-user-focus: none;
|
||||||
|
|
|
@ -91,6 +91,7 @@ let gStr = {
|
||||||
stateFailed: "stateFailed",
|
stateFailed: "stateFailed",
|
||||||
stateCanceled: "stateCanceled",
|
stateCanceled: "stateCanceled",
|
||||||
stateBlocked: "stateBlocked",
|
stateBlocked: "stateBlocked",
|
||||||
|
stateDirty: "stateDirty",
|
||||||
|
|
||||||
units: ["bytes", "kilobyte", "megabyte", "gigabyte"],
|
units: ["bytes", "kilobyte", "megabyte", "gigabyte"],
|
||||||
|
|
||||||
|
@ -304,6 +305,7 @@ function onDownloadDblClick(aEvent)
|
||||||
break;
|
break;
|
||||||
case nsIDM.DOWNLOAD_CANCELED:
|
case nsIDM.DOWNLOAD_CANCELED:
|
||||||
case nsIDM.DOWNLOAD_BLOCKED:
|
case nsIDM.DOWNLOAD_BLOCKED:
|
||||||
|
case nsIDM.DOWNLOAD_DIRTY:
|
||||||
case nsIDM.DOWNLOAD_FAILED:
|
case nsIDM.DOWNLOAD_FAILED:
|
||||||
gDownloadViewController.doCommand("cmd_retry");
|
gDownloadViewController.doCommand("cmd_retry");
|
||||||
break;
|
break;
|
||||||
|
@ -538,7 +540,10 @@ var gContextMenus = [
|
||||||
["menuitem_retry", "menuitem_removeFromList", "menuitem_clearList",
|
["menuitem_retry", "menuitem_removeFromList", "menuitem_clearList",
|
||||||
"menuseparator_copy_location", "menuitem_copyLocation"],
|
"menuseparator_copy_location", "menuitem_copyLocation"],
|
||||||
// DOWNLOAD_SCANNING
|
// DOWNLOAD_SCANNING
|
||||||
["menuitem_copyLocation"]
|
["menuitem_copyLocation"],
|
||||||
|
// DOWNLOAD_DIRTY
|
||||||
|
["menuitem_retry", "menuitem_removeFromList", "menuitem_clearList",
|
||||||
|
"menuseparator_copy_location", "menuitem_copyLocation"]
|
||||||
];
|
];
|
||||||
|
|
||||||
function buildContextMenu(aEvent)
|
function buildContextMenu(aEvent)
|
||||||
|
@ -831,6 +836,7 @@ function updateStatus(aItem, aDownload) {
|
||||||
case nsIDM.DOWNLOAD_FAILED:
|
case nsIDM.DOWNLOAD_FAILED:
|
||||||
case nsIDM.DOWNLOAD_CANCELED:
|
case nsIDM.DOWNLOAD_CANCELED:
|
||||||
case nsIDM.DOWNLOAD_BLOCKED:
|
case nsIDM.DOWNLOAD_BLOCKED:
|
||||||
|
case nsIDM.DOWNLOAD_DIRTY:
|
||||||
let (stateSize = {}) {
|
let (stateSize = {}) {
|
||||||
stateSize[nsIDM.DOWNLOAD_FINISHED] = function() {
|
stateSize[nsIDM.DOWNLOAD_FINISHED] = function() {
|
||||||
// Display the file size, but show "Unknown" for negative sizes
|
// 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_FAILED] = function() gStr.stateFailed;
|
||||||
stateSize[nsIDM.DOWNLOAD_CANCELED] = function() gStr.stateCanceled;
|
stateSize[nsIDM.DOWNLOAD_CANCELED] = function() gStr.stateCanceled;
|
||||||
stateSize[nsIDM.DOWNLOAD_BLOCKED] = function() gStr.stateBlocked;
|
stateSize[nsIDM.DOWNLOAD_BLOCKED] = function() gStr.stateBlocked;
|
||||||
|
stateSize[nsIDM.DOWNLOAD_DIRTY] = function() gStr.stateDirty;
|
||||||
|
|
||||||
// Insert 1 is the download size or download state
|
// Insert 1 is the download size or download state
|
||||||
status = replaceInsert(gStr.doneStatus, 1, stateSize[state]());
|
status = replaceInsert(gStr.doneStatus, 1, stateSize[state]());
|
||||||
|
@ -1075,7 +1082,7 @@ function buildDownloadListWithTime(aTime)
|
||||||
var stmt = gDownloadListWithTimeQuery;
|
var stmt = gDownloadListWithTimeQuery;
|
||||||
if (!stmt) {
|
if (!stmt) {
|
||||||
stmt = db.createStatement(replaceInsert(gBaseQuery, 1, "startTime >= ?1 " +
|
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;
|
gDownloadListWithTimeQuery = stmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1085,6 +1092,7 @@ function buildDownloadListWithTime(aTime)
|
||||||
stmt.bindInt32Parameter(2, nsIDM.DOWNLOAD_FAILED);
|
stmt.bindInt32Parameter(2, nsIDM.DOWNLOAD_FAILED);
|
||||||
stmt.bindInt32Parameter(3, nsIDM.DOWNLOAD_CANCELED);
|
stmt.bindInt32Parameter(3, nsIDM.DOWNLOAD_CANCELED);
|
||||||
stmt.bindInt32Parameter(4, nsIDM.DOWNLOAD_BLOCKED);
|
stmt.bindInt32Parameter(4, nsIDM.DOWNLOAD_BLOCKED);
|
||||||
|
stmt.bindInt32Parameter(5, nsIDM.DOWNLOAD_DIRTY);
|
||||||
buildDownloadList(stmt, gDownloadsDoneArea);
|
buildDownloadList(stmt, gDownloadsDoneArea);
|
||||||
} finally {
|
} finally {
|
||||||
stmt.reset();
|
stmt.reset();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче