From 2cd5e17472089fcbf0fe39e91b01e2e9d91c141a Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Mon, 25 Mar 2013 19:30:14 -0700 Subject: [PATCH] Timeout loading :downloads after 10 seconds. --- common/locale/en-US/messages.properties | 1 + common/modules/downloads.jsm | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/common/locale/en-US/messages.properties b/common/locale/en-US/messages.properties index b7a6211d..fc69e8fa 100644 --- a/common/locale/en-US/messages.properties +++ b/common/locale/en-US/messages.properties @@ -155,6 +155,7 @@ dialog.notAvailable-1 = Dialog %S not available # TODO: merge with addon.*? download.unknownCommand = Unknown command download.commandNotAllowed = Command not allowed +download.givingUpAfter = Giving up loading downloads after %S seconds download.prompt.launchExecutable = This will launch an executable download. Would you like to continue? (yes/[no]/always): download.nActive-1 = %S active diff --git a/common/modules/downloads.jsm b/common/modules/downloads.jsm index aa4e9ec1..fdf5925b 100644 --- a/common/modules/downloads.jsm +++ b/common/modules/downloads.jsm @@ -13,6 +13,8 @@ lazyRequire("overlay", ["overlay"]); Cu.import("resource://gre/modules/DownloadUtils.jsm", this); +var MAX_LOAD_TIME = 10 * 1000; + let prefix = "DOWNLOAD_"; var states = iter([v, k.slice(prefix.length).toLowerCase()] for ([k, v] in Iterator(Ci.nsIDownloadManager)) @@ -258,9 +260,15 @@ var DownloadList = Class("DownloadList", this.index = Array.indexOf(this.nodes.list.childNodes, this.nodes.head); + let start = Date.now(); for (let row in iter(services.downloadManager.DBConnection - .createStatement("SELECT id FROM moz_downloads"))) + .createStatement("SELECT id FROM moz_downloads"))) { + if (Date.now() - start > MAX_LOAD_TIME) { + util.dactyl.warn(_("download.givingUpAfter", (Date.now() - start) / 1000)); + break; + } this.addDownload(row.id); + } this.update(); util.addObserver(this);