summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/browser/browser_types.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_types.js')
-rw-r--r--toolkit/mozapps/extensions/test/browser/browser_types.js473
1 files changed, 473 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_types.js b/toolkit/mozapps/extensions/test/browser/browser_types.js
new file mode 100644
index 000000000..8abb0ff73
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/browser/browser_types.js
@@ -0,0 +1,473 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Tests that registering new types works
+
+var gManagerWindow;
+var gCategoryUtilities;
+
+var gProvider = {
+};
+
+var gTypes = [
+ new AddonManagerPrivate.AddonType("type1", null, "Type 1",
+ AddonManager.VIEW_TYPE_LIST, 4500),
+ new AddonManagerPrivate.AddonType("missing1", null, "Missing 1"),
+ new AddonManagerPrivate.AddonType("type2", null, "Type 1",
+ AddonManager.VIEW_TYPE_LIST, 5100,
+ AddonManager.TYPE_UI_HIDE_EMPTY),
+ {
+ id: "type3",
+ name: "Type 3",
+ uiPriority: 5200,
+ viewType: AddonManager.VIEW_TYPE_LIST
+ }
+];
+
+function go_back(aManager) {
+ if (gUseInContentUI) {
+ gBrowser.goBack();
+ } else {
+ EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("back-btn"),
+ { }, aManager);
+ }
+}
+
+function go_forward(aManager) {
+ if (gUseInContentUI) {
+ gBrowser.goForward();
+ } else {
+ EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("forward-btn"),
+ { }, aManager);
+ }
+}
+
+function check_state(aManager, canGoBack, canGoForward) {
+ var doc = aManager.document;
+
+ if (gUseInContentUI) {
+ is(gBrowser.canGoBack, canGoBack, "canGoBack should be correct");
+ is(gBrowser.canGoForward, canGoForward, "canGoForward should be correct");
+ }
+
+ if (!is_hidden(doc.getElementById("back-btn"))) {
+ is(!doc.getElementById("back-btn").disabled, canGoBack, "Back button should have the right state");
+ is(!doc.getElementById("forward-btn").disabled, canGoForward, "Forward button should have the right state");
+ }
+}
+
+function test() {
+ waitForExplicitFinish();
+
+ run_next_test();
+}
+
+function end_test() {
+ finish();
+}
+
+// Add a new type, open the manager and make sure it is in the right place
+add_test(function() {
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ open_manager(null, function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.get("type2"), "Type 2 should be present");
+ ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent");
+
+ is(gCategoryUtilities.get("type1").previousSibling.getAttribute("value"),
+ "addons://list/extension", "Type 1 should be in the right place");
+ is(gCategoryUtilities.get("type2").previousSibling.getAttribute("value"),
+ "addons://list/theme", "Type 2 should be in the right place");
+
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+ ok(!gCategoryUtilities.isTypeVisible("type2"), "Type 2 should be hidden");
+
+ run_next_test();
+ });
+});
+
+// Select the type, close the manager and remove it then open the manager and
+// check we're back to the default view
+add_test(function() {
+ gCategoryUtilities.openType("type1", function() {
+ close_manager(gManagerWindow, function() {
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ open_manager(null, function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should be absent");
+ ok(!gCategoryUtilities.get("type2", true), "Type 2 should be absent");
+ ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent");
+
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view");
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+});
+
+// Add a type while the manager is still open and check it appears
+add_test(function() {
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should be absent");
+ ok(!gCategoryUtilities.get("type2", true), "Type 2 should be absent");
+ ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent");
+
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.get("type2"), "Type 2 should be present");
+ ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent");
+
+ is(gCategoryUtilities.get("type1").previousSibling.getAttribute("value"),
+ "addons://list/extension", "Type 1 should be in the right place");
+ is(gCategoryUtilities.get("type2").previousSibling.getAttribute("value"),
+ "addons://list/theme", "Type 2 should be in the right place");
+
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+ ok(!gCategoryUtilities.isTypeVisible("type2"), "Type 2 should be hidden");
+
+ run_next_test();
+ });
+});
+
+// Remove the type while it is beng viewed and check it is replaced with the
+// default view
+add_test(function() {
+ gCategoryUtilities.openType("type1", function() {
+ gCategoryUtilities.openType("plugin", function() {
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "type1", "Should be showing the custom view");
+ check_state(gManagerWindow, true, true);
+
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should be absent");
+ ok(!gCategoryUtilities.get("type2", true), "Type 2 should be absent");
+ ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent");
+
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view");
+ check_state(gManagerWindow, true, true);
+
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "extension", "Should be showing the extension view");
+ check_state(gManagerWindow, false, true);
+
+ go_forward(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view");
+ check_state(gManagerWindow, true, true);
+
+ go_forward(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "plugin", "Should be back to the plugins view");
+ check_state(gManagerWindow, true, false);
+
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view");
+ check_state(gManagerWindow, true, true);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+ });
+ });
+ });
+});
+
+// Test that when going back to a now missing category we skip it
+add_test(function() {
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("type1", function() {
+ gCategoryUtilities.openType("plugin", function() {
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_back(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the first view");
+ check_state(gManagerWindow, false, true);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+});
+
+// Test that when going forward to a now missing category we skip it
+add_test(function() {
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("type1", function() {
+ gCategoryUtilities.openType("plugin", function() {
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the extension view");
+
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_forward(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "plugin", "Should be back to the plugin view");
+ check_state(gManagerWindow, true, false);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+ });
+ });
+});
+
+// Test that when going back to a now missing category and we can't go back any
+// any further then we just display the default view
+add_test(function() {
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ open_manager("addons://list/type1", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+ is(gCategoryUtilities.selectedCategory, "type1", "Should be at the custom view");
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("extension", function() {
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_back(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view");
+ check_state(gManagerWindow, false, true);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+});
+
+// Test that when going forward to a now missing category and we can't go
+// forward any further then we just display the default view
+add_test(function() {
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("type1", function() {
+ go_back(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "extension", "Should be at the extension view");
+
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_forward(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view");
+ check_state(gManagerWindow, true, false);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+});
+
+// Test that when going back we skip multiple missing categories
+add_test(function() {
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("type1", function() {
+ gCategoryUtilities.openType("type3", function() {
+ gCategoryUtilities.openType("plugin", function() {
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_back(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the first view");
+ check_state(gManagerWindow, false, true);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+ });
+});
+
+// Test that when going forward we skip multiple missing categories
+add_test(function() {
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("type1", function() {
+ gCategoryUtilities.openType("type3", function() {
+ gCategoryUtilities.openType("plugin", function() {
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ go_back(gManagerWindow);
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the extension view");
+
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_forward(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "plugin", "Should be back to the plugin view");
+ check_state(gManagerWindow, true, false);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+ });
+ });
+ });
+ });
+});
+
+// Test that when going back we skip all missing categories and when we can't go
+// back any any further then we just display the default view
+add_test(function() {
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ open_manager("addons://list/type1", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+ is(gCategoryUtilities.selectedCategory, "type1", "Should be at the custom view");
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("type3", function() {
+ gCategoryUtilities.openType("extension", function() {
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_back(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view");
+ check_state(gManagerWindow, false, true);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+});
+
+// Test that when going forward we skip all missing categories and when we can't
+// go back any any further then we just display the default view
+add_test(function() {
+ AddonManagerPrivate.registerProvider(gProvider, gTypes);
+
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+
+ ok(gCategoryUtilities.get("type1"), "Type 1 should be present");
+ ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible");
+
+ gCategoryUtilities.openType("type1", function() {
+ gCategoryUtilities.openType("type3", function() {
+ go_back(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ go_back(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "extension", "Should be at the extension view");
+
+ AddonManagerPrivate.unregisterProvider(gProvider);
+
+ ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present");
+
+ go_forward(gManagerWindow);
+
+ wait_for_view_load(gManagerWindow, function() {
+ is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view");
+ check_state(gManagerWindow, true, false);
+
+ close_manager(gManagerWindow, run_next_test);
+ });
+ });
+ });
+ });
+ });
+ });
+});