Backing out bug 632290 due to more permanent failures.

This commit is contained in:
Dave Townsend 2014-12-18 12:40:29 -08:00
Родитель a734ce9a37
Коммит 2475e48b37
1 изменённых файлов: 51 добавлений и 61 удалений

Просмотреть файл

@ -14,7 +14,11 @@ var gManagerWindow;
const URI_ABOUT_DEFAULT = "chrome://mozapps/content/extensions/about.xul";
const URI_ABOUT_CUSTOM = CHROMEROOT + "addon_about.xul";
add_task(function* test() {
function test() {
requestLongerTimeout(2);
waitForExplicitFinish();
var gProvider = new MockProvider();
gProvider.createAddons([{
id: "test1@tests.mozilla.org",
@ -28,67 +32,53 @@ const URI_ABOUT_CUSTOM = CHROMEROOT + "addon_about.xul";
aboutURL: URI_ABOUT_CUSTOM
}]);
gManagerWindow = yield open_manager("addons://list/extension");
open_manager("addons://list/extension", function(aManager) {
gManagerWindow = aManager;
yield test_about_window("Test add-on 1", URI_ABOUT_DEFAULT);
yield test_about_window("Test add-on 2", URI_ABOUT_CUSTOM);
yield close_manager(gManagerWindow);
});
function test_about_window(aAddonItemName, aExpectedAboutUri) {
return new Promise((resolve, reject) => {
let addonList = gManagerWindow.document.getElementById("addon-list");
let selectedItem = null;
for (let addonItem of addonList.childNodes) {
if (addonItem.hasAttribute("name") &&
addonItem.getAttribute("name") === aAddonItemName) {
selectedItem = addonItem;
break;
}
}
ok(selectedItem, "Found addon item for " + aAddonItemName);
info("Waiting for about dialog");
// This gets notified inside a modal dialog that spins the event loop, so we're
// stuck with callbacks rather than Task/Promise.
Services.ww.registerNotification(function TEST_ww_observer(aSubject, aTopic,
aData) {
if (aTopic == "domwindowclosed") {
Services.ww.unregisterNotification(TEST_ww_observer);
info("About dialog closing, waiting for focus on browser window");
} else if (aTopic == "domwindowopened") {
// Always let the stack unwind...
executeSoon(() => {
info("About dialog opened, waiting for focus");
let win = aSubject.QueryInterface(Ci.nsIDOMEventTarget);
waitForFocus(function() {
info("Saw about dialog");
is(win.location,
aExpectedAboutUri,
"The correct add-on about window should have opened");
is(win.arguments && win.arguments[0] && win.arguments[0].name,
aAddonItemName,
"window.arguments[0] should refer to the add-on object");
win.close();
}, win);
});
} else {
info("Got window notification " + aTopic);
}
test_about_window("Test add-on 1", URI_ABOUT_DEFAULT, function() {
test_about_window("Test add-on 2", URI_ABOUT_CUSTOM, function() {
close_manager(gManagerWindow, finish);
});
});
// This opens a modal dialog, so the main execution thread doesn't get control
// (and the event loop spins under us) until the WindowWatcher domwindowopened
// callback closes it.
gManagerWindow.gViewController.doCommand("cmd_showItemAbout",
selectedItem.mAddon);
// wait for focus back on manager window
waitForFocus(resolve);
});
}
function test_about_window(aAddonItemName, aExpectedAboutUri, aCallback) {
var addonList = gManagerWindow.document.getElementById("addon-list");
for (var addonItem of addonList.childNodes) {
if (addonItem.hasAttribute("name") &&
addonItem.getAttribute("name") === aAddonItemName)
break;
}
info("Waiting for about dialog");
Services.ww.registerNotification(function TEST_ww_observer(aSubject, aTopic,
aData) {
if (aTopic == "domwindowclosed") {
Services.ww.unregisterNotification(TEST_ww_observer);
info("About dialog closed, waiting for focus on browser window");
waitForFocus(() => executeSoon(aCallback));
} else if (aTopic == "domwindowopened") {
info("About dialog opened, waiting for focus");
let win = aSubject.QueryInterface(Ci.nsIDOMEventTarget);
waitForFocus(function() {
info("Saw about dialog");
is(win.location,
aExpectedAboutUri,
"The correct add-on about window should have opened");
is(win.arguments && win.arguments[0] && win.arguments[0].name,
aAddonItemName,
"window.arguments[0] should refer to the add-on object");
executeSoon(() => win.close());
}, win);
}
});
gManagerWindow.gViewController.doCommand("cmd_showItemAbout",
addonItem.mAddon);
}