rem: case 0: --gUpdateWizard.remainingExtensionUpdateCount; break; 
add: default: this._errors.push({ name: this._objs[aIndex].name, error: aValue }); 
context:   onStateChange: function (aIndex, aState, aValue)  {    var strings = document.getElementById("updateStrings");    const nsIXPIProgressDialog = Components.interfaces.nsIXPIProgressDialog;    switch (aState) {    case nsIXPIProgressDialog.DOWNLOAD_START:      var label = strings.getFormattedString("downloadingPrefix", [this._objs[aIndex].name]);      var actionItem = document.getElementById("actionItem");      actionItem.value = label;      break;    case nsIXPIProgressDialog.DOWNLOAD_DONE:    case nsIXPIProgressDialog.INSTALL_START:      var label = strings.getFormattedString("installingPrefix", [this._objs[aIndex].name]);      var actionItem = document.getElementById("actionItem");      actionItem.value = label;      this._installing = true;      break;    case nsIXPIProgressDialog.INSTALL_DONE:      switch (aValue) {      case 999:         this._restartRequired = true;        break;      case 0:         --gUpdateWizard.remainingExtensionUpdateCount;        break;      }      break;    case nsIXPIProgressDialog.DIALOG_CLOSE:      this._installing = false;      var nextPage = this._errors ? "errors" : (this._restartRequired ? "restart" : "finished");      document.getElementById("installing").setAttribute("next", nextPage);      document.documentElement.advance();      break;    }  },
meta: 5459	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/5459/f6eaa90736e7beb3ceaf8a1ef7cf2f642cf43cdf/update.js/clean/toolkit/mozapps/extensions/content/update.js