summaryrefslogtreecommitdiffstats
path: root/application/palemoon/components/downloads/DownloadsCommon.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'application/palemoon/components/downloads/DownloadsCommon.jsm')
-rw-r--r--application/palemoon/components/downloads/DownloadsCommon.jsm36
1 files changed, 8 insertions, 28 deletions
diff --git a/application/palemoon/components/downloads/DownloadsCommon.jsm b/application/palemoon/components/downloads/DownloadsCommon.jsm
index 2bfd7b528..aac43d197 100644
--- a/application/palemoon/components/downloads/DownloadsCommon.jsm
+++ b/application/palemoon/components/downloads/DownloadsCommon.jsm
@@ -647,12 +647,8 @@ XPCOMUtils.defineLazyGetter(DownloadsCommon, "useJSTransfer", function () {
function DownloadsDataCtor(aPrivate) {
this._isPrivate = aPrivate;
- // This Object contains all the available DownloadsDataItem objects, indexed by
- // their globally unique identifier. The identifiers of downloads that have
- // been removed from the Download Manager data are still present, however the
- // associated objects are replaced with the value "null". This is required to
- // prevent race conditions when populating the list asynchronously.
- this.dataItems = {};
+ // Contains all the available DownloadsDataItem objects.
+ this.dataItems = new Set();
// Array of view objects that should be notified when the available download
// data changes.
@@ -690,8 +686,8 @@ DownloadsDataCtor.prototype = {
*/
get canRemoveFinished()
{
- for (let [, dataItem] of Iterator(this.dataItems)) {
- if (dataItem && !dataItem.inProgress) {
+ for (let dataItem of this.dataItems) {
+ if (!dataItem.inProgress) {
return true;
}
}
@@ -716,7 +712,7 @@ DownloadsDataCtor.prototype = {
{
let dataItem = new DownloadsDataItem(aDownload);
this._downloadToDataItemMap.set(aDownload, dataItem);
- this.dataItems[dataItem.downloadGuid] = dataItem;
+ this.dataItems.add(dataItem);
for (let view of this._views) {
view.onDataItemAdded(dataItem, true);
@@ -745,7 +741,7 @@ DownloadsDataCtor.prototype = {
}
this._downloadToDataItemMap.delete(aDownload);
- this.dataItems[dataItem.downloadGuid] = null;
+ this.dataItems.delete(dataItem);
for (let view of this._views) {
view.onDataItemRemoved(dataItem);
}
@@ -861,14 +857,7 @@ DownloadsDataCtor.prototype = {
//let loadedItemsArray = [dataItem
// for each (dataItem in this.dataItems)
// if (dataItem)];
-
- let loadedItemsArray = [];
-
- for each (let dataItem in this.dataItems) {
- if (dataItem) {
- loadedItemsArray.push(dataItem);
- }
- }
+ let loadedItemsArray = [...this.dataItems];
loadedItemsArray.sort(function(a, b) b.download.startTime - a.download.startTime);
loadedItemsArray.forEach(
@@ -1345,13 +1334,6 @@ function DownloadsDataItem(aSource)
DownloadsDataItem.prototype = {
/**
- * The JavaScript API does not need identifiers for Download objects, so they
- * are generated sequentially for the corresponding DownloadDataItem.
- */
- get _autoIncrementId() ++DownloadsDataItem.prototype.__lastId,
- __lastId: 0,
-
- /**
* Initializes this object from the JavaScript API for downloads.
*
* The endTime property is initialized to the current date and time.
@@ -1362,8 +1344,6 @@ DownloadsDataItem.prototype = {
_initFromJSDownload: function (aDownload)
{
this.download = aDownload;
-
- this.downloadGuid = "id:" + this._autoIncrementId;
this.endTime = Date.now();
this.updateFromJSDownload();
@@ -2029,7 +2009,7 @@ DownloadsIndicatorDataCtor.prototype = {
{
let dataItems = this._isPrivate ? PrivateDownloadsData.dataItems
: DownloadsData.dataItems;
- for each (let dataItem in dataItems) {
+ for (let dataItem of dataItems) {
if (dataItem && dataItem.inProgress) {
yield dataItem;
}