mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-04 16:15:25 +00:00
201 lines
5.9 KiB
JavaScript
201 lines
5.9 KiB
JavaScript
function whenDelayedStartupFinished(aWindow, aCallback) {
|
|
Services.obs.addObserver(function observer(aSubject, aTopic) {
|
|
if (aWindow == aSubject) {
|
|
Services.obs.removeObserver(observer, aTopic);
|
|
executeSoon(aCallback);
|
|
}
|
|
}, "browser-delayed-startup-finished", false);
|
|
}
|
|
|
|
function findChromeWindowByURI(aURI) {
|
|
let windows = Services.wm.getEnumerator(null);
|
|
while (windows.hasMoreElements()) {
|
|
let win = windows.getNext();
|
|
if (win.location.href == aURI)
|
|
return win;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function updateTabContextMenu(tab) {
|
|
let menu = document.getElementById("tabContextMenu");
|
|
if (!tab)
|
|
tab = gBrowser.selectedTab;
|
|
var evt = new Event("");
|
|
tab.dispatchEvent(evt);
|
|
menu.openPopup(tab, "end_after", 0, 0, true, false, evt);
|
|
is(TabContextMenu.contextTab, tab, "TabContextMenu context is the expected tab");
|
|
menu.hidePopup();
|
|
}
|
|
|
|
function findToolbarCustomizationWindow(aBrowserWin) {
|
|
if (!aBrowserWin)
|
|
aBrowserWin = window;
|
|
|
|
let iframe = aBrowserWin.document.getElementById("customizeToolbarSheetIFrame");
|
|
let win = iframe && iframe.contentWindow;
|
|
if (win)
|
|
return win;
|
|
|
|
win = findChromeWindowByURI("chrome://global/content/customizeToolbar.xul");
|
|
if (win && win.opener == aBrowserWin)
|
|
return win;
|
|
|
|
throw Error("Failed to find the customization window");
|
|
}
|
|
|
|
function openToolbarCustomizationUI(aCallback, aBrowserWin) {
|
|
if (!aBrowserWin)
|
|
aBrowserWin = window;
|
|
|
|
aBrowserWin.document.getElementById("cmd_CustomizeToolbars").doCommand();
|
|
|
|
aBrowserWin.gNavToolbox.addEventListener("beforecustomization", function UI_loaded() {
|
|
aBrowserWin.gNavToolbox.removeEventListener("beforecustomization", UI_loaded);
|
|
|
|
let win = findToolbarCustomizationWindow(aBrowserWin);
|
|
waitForFocus(function () {
|
|
aCallback(win);
|
|
}, win);
|
|
});
|
|
}
|
|
|
|
function closeToolbarCustomizationUI(aCallback, aBrowserWin) {
|
|
let win = findToolbarCustomizationWindow(aBrowserWin);
|
|
|
|
win.addEventListener("unload", function unloaded() {
|
|
win.removeEventListener("unload", unloaded);
|
|
executeSoon(aCallback);
|
|
});
|
|
|
|
let button = win.document.getElementById("donebutton");
|
|
button.focus();
|
|
button.doCommand();
|
|
}
|
|
|
|
function waitForCondition(condition, nextTest, errorMsg) {
|
|
var tries = 0;
|
|
var interval = setInterval(function() {
|
|
if (tries >= 30) {
|
|
ok(false, errorMsg);
|
|
moveOn();
|
|
}
|
|
if (condition()) {
|
|
moveOn();
|
|
}
|
|
tries++;
|
|
}, 100);
|
|
var moveOn = function() { clearInterval(interval); nextTest(); };
|
|
}
|
|
|
|
// Check that a specified (string) URL hasn't been "remembered" (ie, is not
|
|
// in history, will not appear in about:newtab or auto-complete, etc.)
|
|
function ensureSocialUrlNotRemembered(url) {
|
|
let gh = Cc["@mozilla.org/browser/global-history;2"]
|
|
.getService(Ci.nsIGlobalHistory2);
|
|
let uri = Services.io.newURI(url, null, null);
|
|
ok(!gh.isVisited(uri), "social URL " + url + " should not be in global history");
|
|
}
|
|
|
|
function getTestPlugin() {
|
|
var ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
|
|
var tags = ph.getPluginTags();
|
|
|
|
// Find the test plugin
|
|
for (var i = 0; i < tags.length; i++) {
|
|
if (tags[i].name == "Test Plug-in")
|
|
return tags[i];
|
|
}
|
|
ok(false, "Unable to find plugin");
|
|
return null;
|
|
}
|
|
|
|
function runSocialTestWithProvider(manifest, callback) {
|
|
let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
|
|
|
|
// Check that none of the provider's content ends up in history.
|
|
registerCleanupFunction(function () {
|
|
for (let what of ['sidebarURL', 'workerURL', 'iconURL']) {
|
|
if (manifest[what]) {
|
|
ensureSocialUrlNotRemembered(manifest[what]);
|
|
}
|
|
}
|
|
});
|
|
|
|
info("runSocialTestWithProvider: " + manifest.toSource());
|
|
|
|
let oldProvider;
|
|
SocialService.addProvider(manifest, function(provider) {
|
|
info("runSocialTestWithProvider: provider added");
|
|
oldProvider = Social.provider;
|
|
Social.provider = provider;
|
|
|
|
// Now that we've set the UI's provider, enable the social functionality
|
|
Services.prefs.setBoolPref("social.enabled", true);
|
|
|
|
// Need to re-call providerReady since it is actually called before the test
|
|
// framework is loaded and the provider state won't be set in the browser yet.
|
|
SocialUI._providerReady();
|
|
|
|
registerCleanupFunction(function () {
|
|
// if one test happens to fail, it is likely finishSocialTest will not
|
|
// be called, causing most future social tests to also fail as they
|
|
// attempt to add a provider which already exists - so work
|
|
// around that by also attempting to remove the test provider.
|
|
try {
|
|
SocialService.removeProvider(provider.origin, finish);
|
|
} catch (ex) {
|
|
;
|
|
}
|
|
Social.provider = oldProvider;
|
|
Services.prefs.clearUserPref("social.enabled");
|
|
});
|
|
|
|
function finishSocialTest() {
|
|
SocialService.removeProvider(provider.origin, finish);
|
|
}
|
|
callback(finishSocialTest);
|
|
});
|
|
}
|
|
|
|
|
|
function runSocialTests(tests, cbPreTest, cbPostTest, cbFinish) {
|
|
let testIter = Iterator(tests);
|
|
|
|
if (cbPreTest === undefined) {
|
|
cbPreTest = function(cb) {cb()};
|
|
}
|
|
if (cbPostTest === undefined) {
|
|
cbPostTest = function(cb) {cb()};
|
|
}
|
|
|
|
function runNextTest() {
|
|
let name, func;
|
|
try {
|
|
[name, func] = testIter.next();
|
|
} catch (err if err instanceof StopIteration) {
|
|
// out of items:
|
|
(cbFinish || finish)();
|
|
return;
|
|
}
|
|
// We run on a timeout as the frameworker also makes use of timeouts, so
|
|
// this helps keep the debug messages sane.
|
|
executeSoon(function() {
|
|
function cleanupAndRunNextTest() {
|
|
info("sub-test " + name + " complete");
|
|
cbPostTest(runNextTest);
|
|
}
|
|
cbPreTest(function() {
|
|
info("sub-test " + name + " starting");
|
|
try {
|
|
func.call(tests, cleanupAndRunNextTest);
|
|
} catch (ex) {
|
|
ok(false, "sub-test " + name + " failed: " + ex.toString() +"\n"+ex.stack);
|
|
cleanupAndRunNextTest();
|
|
}
|
|
})
|
|
});
|
|
}
|
|
runNextTest();
|
|
}
|