diff --git a/toolkit/mozapps/update/test/unit/test_0030_general.js b/toolkit/mozapps/update/test/unit/test_0030_general.js index ec8881ca93e..2ae71bfcbb0 100644 --- a/toolkit/mozapps/update/test/unit/test_0030_general.js +++ b/toolkit/mozapps/update/test/unit/test_0030_general.js @@ -243,13 +243,13 @@ function initMockIncrementalDownload() { var registrar = AUS_Cm.QueryInterface(AUS_Ci.nsIComponentRegistrar); gIncrementalDownloadClassID = registrar.contractIDToCID(INC_CONTRACT_ID); gIncOldFactory = AUS_Cm.getClassObject(AUS_Cc[INC_CONTRACT_ID], - AUS_Ci.nsIFactory); + AUS_Ci.nsIFactory); registrar.unregisterFactory(gIncrementalDownloadClassID, gIncOldFactory); var components = [IncrementalDownload]; registrar.registerFactory(gIncrementalDownloadClassID, "", INC_CONTRACT_ID, newFactory); gIncOldFactory = AUS_Cm.getClassObject(AUS_Cc[INC_CONTRACT_ID], - AUS_Ci.nsIFactory); + AUS_Ci.nsIFactory); } function cleanupMockIncrementalDownload() { diff --git a/toolkit/mozapps/update/test/unit/test_0082_prompt_unsupportAlreadyNotified.js b/toolkit/mozapps/update/test/unit/test_0082_prompt_unsupportAlreadyNotified.js new file mode 100644 index 00000000000..6286b2a4173 --- /dev/null +++ b/toolkit/mozapps/update/test/unit/test_0082_prompt_unsupportAlreadyNotified.js @@ -0,0 +1,129 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +/** + * Test that nsIUpdatePrompt doesn't display UI for showUpdateAvailable for an + * unsupported system update when it has already been shown (bug 843497). + */ + +function run_test() { + do_test_pending(); + do_register_cleanup(end_test); + removeUpdateDirsAndFiles(); + setUpdateURLOverride(); + // The mock XMLHttpRequest is MUCH faster + overrideXHR(callHandleEvent); + standardInit(); + // The HTTP server is only used for the mar file downloads which is slow + start_httpserver(URL_PATH); + + let registrar = Components.manager.QueryInterface(AUS_Ci.nsIComponentRegistrar); + registrar.registerFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af55}"), + "Fake Window Watcher", + "@mozilla.org/embedcomp/window-watcher;1", + WindowWatcherFactory); + registrar.registerFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af56}"), + "Fake Window Mediator", + "@mozilla.org/appshell/window-mediator;1", + WindowMediatorFactory); + + logTestInfo("testing nsIUpdatePrompt notifications should not be seen for " + + "an unsupported system update when it has already been shown"); + + Services.prefs.setBoolPref(PREF_APP_UPDATE_SILENT, false); + Services.prefs.setBoolPref(PREF_APP_UPDATE_NOTIFIEDUNSUPPORTED, true); + // This preference is used to determine when the background update check has + // completed since a successful check will clear the preference. + Services.prefs.setIntPref(PREF_APP_UPDATE_BACKGROUNDERRORS, 1); + + gResponseBody = getRemoteUpdatesXMLString(" \n"); + gAUS.notify(null); + do_execute_soon(check_test); +} + +function check_test() { + if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_BACKGROUNDERRORS)) { + do_execute_soon(check_test); + return; + } + do_check_true(true); + do_test_finished(); +} + +function end_test() { + let registrar = Components.manager.QueryInterface(AUS_Ci.nsIComponentRegistrar); + registrar.unregisterFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af55}"), + WindowWatcherFactory); + registrar.unregisterFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af56}"), + WindowMediatorFactory); + cleanUp(); +} + +// Callback function used by the custom XMLHttpRequest implementation to +// call the nsIDOMEventListener's handleEvent method for onload. +function callHandleEvent() { + gXHR.status = 400; + gXHR.responseText = gResponseBody; + try { + var parser = AUS_Cc["@mozilla.org/xmlextras/domparser;1"]. + createInstance(AUS_Ci.nsIDOMParser); + gXHR.responseXML = parser.parseFromString(gResponseBody, "application/xml"); + } + catch(e) { + } + var e = { target: gXHR }; + gXHR.onload(e); +} + +function check_showUpdateAvailable() { + do_throw("showUpdateAvailable should not have called openWindow!"); +} + +var WindowWatcher = { + openWindow: function(aParent, aUrl, aName, aFeatures, aArgs) { + check_showUpdateAvailable(); + }, + + QueryInterface: function(aIID) { + if (aIID.equals(AUS_Ci.nsIWindowWatcher) || + aIID.equals(AUS_Ci.nsISupports)) + return this; + + throw AUS_Cr.NS_ERROR_NO_INTERFACE; + } +} + +var WindowWatcherFactory = { + createInstance: function createInstance(aOuter, aIID) { + if (aOuter != null) + throw AUS_Cr.NS_ERROR_NO_AGGREGATION; + return WindowWatcher.QueryInterface(aIID); + } +}; + +var WindowMediator = { + getMostRecentWindow: function(aWindowType) { + return null; + }, + + QueryInterface: function(aIID) { + if (aIID.equals(AUS_Ci.nsIWindowMediator) || + aIID.equals(AUS_Ci.nsISupports)) + return this; + + throw AUS_Cr.NS_ERROR_NO_INTERFACE; + } +} + +var WindowMediatorFactory = { + createInstance: function createInstance(aOuter, aIID) { + if (aOuter != null) + throw AUS_Cr.NS_ERROR_NO_AGGREGATION; + return WindowMediator.QueryInterface(aIID); + } +}; diff --git a/toolkit/mozapps/update/test/unit/xpcshell.ini b/toolkit/mozapps/update/test/unit/xpcshell.ini index 3aa25fb8407..3eba7ad685f 100644 --- a/toolkit/mozapps/update/test/unit/xpcshell.ini +++ b/toolkit/mozapps/update/test/unit/xpcshell.ini @@ -20,6 +20,9 @@ tail = [test_0081_prompt_uiAlreadyOpen.js] skip-if = toolkit == "gonk" reason = custom nsIUpdatePrompt +[test_0082_prompt_unsupportAlreadyNotified.js] +skip-if = toolkit == "gonk" +reason = custom nsIUpdatePrompt ; Tests that require the updater binary [include:xpcshell_updater.ini] skip-if = os == 'android'