diff --git a/toolkit/mozapps/extensions/test/browser/Makefile.in b/toolkit/mozapps/extensions/test/browser/Makefile.in index 1ce9c5e5eaf..91d9aa8a8d4 100644 --- a/toolkit/mozapps/extensions/test/browser/Makefile.in +++ b/toolkit/mozapps/extensions/test/browser/Makefile.in @@ -84,6 +84,8 @@ _TEST_FILES = \ browser_recentupdates.js \ browser_manualupdates.js \ browser_globalwarnings.js \ + browser_eula.js \ + browser_eula.xml \ redirect.sjs \ releaseNotes.xhtml \ $(NULL) diff --git a/toolkit/mozapps/extensions/test/browser/browser_bug557956.js b/toolkit/mozapps/extensions/test/browser/browser_bug557956.js index 6b4fcd0db35..3575dc5a5f4 100644 --- a/toolkit/mozapps/extensions/test/browser/browser_bug557956.js +++ b/toolkit/mozapps/extensions/test/browser/browser_bug557956.js @@ -32,7 +32,14 @@ function test() { function end_test() { Services.prefs.clearUserPref("extensions.update.url"); - finish(); + // Test generates a lot of available installs so just cancel them all + AddonManager.getAllInstalls(function(aInstalls) { + aInstalls.forEach(function(aInstall) { + aInstall.cancel(); + }); + + finish(); + }); } function install_test_addons(aCallback) { diff --git a/toolkit/mozapps/extensions/test/browser/browser_bug581076.js b/toolkit/mozapps/extensions/test/browser/browser_bug581076.js index edf689dfad1..63928f1ac1a 100644 --- a/toolkit/mozapps/extensions/test/browser/browser_bug581076.js +++ b/toolkit/mozapps/extensions/test/browser/browser_bug581076.js @@ -28,7 +28,15 @@ function test() { function end_test() { Services.prefs.clearUserPref(PREF_GETADDONS_GETSEARCHRESULTS); - close_manager(gManagerWindow, finish); + + // Test generates a lot of available installs so just cancel them all + AddonManager.getAllInstalls(function(aInstalls) { + aInstalls.forEach(function(aInstall) { + aInstall.cancel(); + }); + + close_manager(gManagerWindow, finish); + }); } function search(aRemoteSearch, aCallback) { diff --git a/toolkit/mozapps/extensions/test/browser/browser_bug596336.js b/toolkit/mozapps/extensions/test/browser/browser_bug596336.js index 4c8956d539e..97f9fcd7cbd 100644 --- a/toolkit/mozapps/extensions/test/browser/browser_bug596336.js +++ b/toolkit/mozapps/extensions/test/browser/browser_bug596336.js @@ -19,8 +19,12 @@ function test() { } function end_test() { - close_manager(gManagerWindow, function() { - finish(); + // Test generates an available installs so just cancel it + AddonManager.getAllInstalls(function(aInstalls) { + is(aInstalls.length, 1, "Should be one available install"); + aInstalls[0].cancel(); + + close_manager(gManagerWindow, finish); }); } diff --git a/toolkit/mozapps/extensions/test/browser/browser_eula.js b/toolkit/mozapps/extensions/test/browser/browser_eula.js new file mode 100644 index 00000000000..9c6babc10df --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/browser_eula.js @@ -0,0 +1,89 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Tests that the eula is shown correctly for search results + +var gManagerWindow; +var gCategoryUtilities; + +var gApp = document.getElementById("bundle_brand").getString("brandShortName"); +var gSearchCount = 0; + +function test() { + requestLongerTimeout(2); + waitForExplicitFinish(); + + // Turn on searching for this test + Services.prefs.setIntPref(PREF_SEARCH_MAXRESULTS, 15); + Services.prefs.setCharPref("extensions.getAddons.search.url", TESTROOT + "browser_eula.xml"); + + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + run_next_test(); + }); +} + +function end_test() { + close_manager(gManagerWindow, function() { + Services.prefs.clearUserPref("extensions.getAddons.search.url"); + + finish(); + }); +} + +function get_node(parent, anonid) { + return parent.ownerDocument.getAnonymousElementByAttribute(parent, "anonid", anonid); +} + +function installSearchResult(aCallback) { + var searchBox = gManagerWindow.document.getElementById("header-search"); + // Search for something different each time + searchBox.value = "foo" + gSearchCount; + gSearchCount++; + + EventUtils.synthesizeMouseAtCenter(searchBox, { }, gManagerWindow); + EventUtils.synthesizeKey("VK_RETURN", { }, gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + let remote = gManagerWindow.document.getElementById("search-filter-remote") + EventUtils.synthesizeMouseAtCenter(remote, { }, gManagerWindow); + + let item = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org"); + ok(!!item, "Should see the search result in the list"); + + let status = get_node(item, "install-status"); + EventUtils.synthesizeMouseAtCenter(get_node(status, "install-remote-btn"), {}, gManagerWindow); + + item.mInstall.addListener({ + onInstallEnded: function() { + executeSoon(aCallback); + } + }); + }); +} + +// Install an add-on through the search page, accept the EULA and then undo it +add_test(function() { + // Accept the EULA when it appears + let sawEULA = false; + wait_for_window_open(function(aWindow) { + sawEULA = true; + is(aWindow.location.href, "chrome://mozapps/content/extensions/eula.xul", "Window opened should be correct"); + is(aWindow.document.getElementById("eula").value, "This is the EULA for this add-on", "EULA should be correct"); + + aWindow.document.documentElement.acceptDialog(); + }); + + installSearchResult(function() { + ok(sawEULA, "Should have seen the EULA"); + + AddonManager.getAllInstalls(function(aInstalls) { + is(aInstalls.length, 1, "Should be one pending install"); + aInstalls[0].cancel(); + + run_next_test(); + }); + }); +}); diff --git a/toolkit/mozapps/extensions/test/browser/browser_eula.xml b/toolkit/mozapps/extensions/test/browser/browser_eula.xml new file mode 100644 index 00000000000..965ab8a0bdf --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/browser_eula.xml @@ -0,0 +1,35 @@ + + + + Install Tests + Extension + addon1@tests.mozilla.org + 1.0 + + + Test Creator + http://example.com/creator.html + + + Public + Test add-on + Test add-on + This is the EULA for this add-on + + + Firefox + {ec8030f7-c20a-464f-9b0e-13a3a9e97384} + 0 + * + + + SeaMonkey + {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} + 0 + * + + + ALL + http://example.com/browser/toolkit/mozapps/extensions/test/browser/addons/browser_install1_2.xpi + + diff --git a/toolkit/mozapps/extensions/test/browser/browser_install.js b/toolkit/mozapps/extensions/test/browser/browser_install.js index 06d8c3867bb..89177b83185 100644 --- a/toolkit/mozapps/extensions/test/browser/browser_install.js +++ b/toolkit/mozapps/extensions/test/browser/browser_install.js @@ -34,8 +34,8 @@ function end_test() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { aAddon.uninstall(); + finish(); }); - finish(); }); } diff --git a/toolkit/mozapps/extensions/test/browser/head.js b/toolkit/mozapps/extensions/test/browser/head.js index 5af3715cd66..d0ef308f248 100644 --- a/toolkit/mozapps/extensions/test/browser/head.js +++ b/toolkit/mozapps/extensions/test/browser/head.js @@ -41,6 +41,18 @@ registerCleanupFunction(function() { } catch (e) { } + + // We can for now know that getAllInstalls actually calls its callback before + // it returns so this will complete before the next test start. + AddonManager.getAllInstalls(function(aInstalls) { + aInstalls.forEach(function(aInstall) { + if (aInstall instanceof MockInstall) + return; + + ok(false, "Should not have seen an install of " + aInstall.sourceURI.spec + " in state " + aInstall.state); + aInstall.cancel(); + }); + }); }); function add_test(test) { @@ -232,6 +244,29 @@ function restart_manager(aManagerWindow, aView, aCallback, aLoadCallback) { }); } +function wait_for_window_open(aCallback) { + Services.wm.addListener({ + onOpenWindow: function(aWindow) { + Services.wm.removeListener(this); + + let domwindow = aWindow.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowInternal); + domwindow.addEventListener("load", function() { + domwindow.removeEventListener("load", arguments.callee, false); + executeSoon(function() { + aCallback(domwindow); + }); + }, false); + }, + + onCloseWindow: function(aWindow) { + }, + + onWindowTitleChange: function(aWindow, aTitle) { + } + }); +} + function is_hidden(aElement) { var style = aElement.ownerDocument.defaultView.getComputedStyle(aElement, ""); if (style.display == "none")