diff options
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_CTP_plugins.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/browser/browser_CTP_plugins.js | 252 |
1 files changed, 157 insertions, 95 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_CTP_plugins.js b/toolkit/mozapps/extensions/test/browser/browser_CTP_plugins.js index dd2992f81..1b119ca5b 100644 --- a/toolkit/mozapps/extensions/test/browser/browser_CTP_plugins.js +++ b/toolkit/mozapps/extensions/test/browser/browser_CTP_plugins.js @@ -1,4 +1,11 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + const gHttpTestRoot = "http://127.0.0.1:8888/" + RELATIVE_DIR + "/"; +let gManagerWindow; +let gTestPluginId; +let gPluginBrowser; function updateBlocklist(aCallback) { var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"] @@ -24,149 +31,204 @@ function resetBlocklist(aCallback) { Services.prefs.setCharPref("extensions.blocklist.url", _originalBlocklistURL); } -add_task(function*() { - SpecialPowers.pushPrefEnv({"set": [ - ["plugins.click_to_play", true], - ["extensions.blocklist.suppressUI", true] - ]}); - registerCleanupFunction(function*() { - let pluginTag = getTestPluginTag(); - pluginTag.enabledState = Ci.nsIPluginTag.STATE_ENABLED; - yield new Promise(resolve => { - setAndUpdateBlocklist(gHttpTestRoot + "blockNoPlugins.xml", resolve); - }); - resetBlocklist(); - }); - +function test() { + waitForExplicitFinish(); + Services.prefs.setBoolPref("plugins.click_to_play", true); + Services.prefs.setBoolPref("extensions.blocklist.suppressUI", true); let pluginTag = getTestPluginTag(); pluginTag.enabledState = Ci.nsIPluginTag.STATE_CLICKTOPLAY; - let managerWindow = yield new Promise(resolve => open_manager("addons://list/plugin", resolve)); + open_manager("addons://list/plugin", part1); +} - let plugins = yield new Promise(resolve => AddonManager.getAddonsByTypes(["plugin"], resolve)); +function part1(aWindow) { + gManagerWindow = aWindow; + AddonManager.getAddonsByTypes(["plugin"], part2); +} - let testPluginId; - for (let plugin of plugins) { +function part2(aPlugins) { + for (let plugin of aPlugins) { if (plugin.name == "Test Plug-in") { - testPluginId = plugin.id; + gTestPluginId = plugin.id; break; } } - ok(testPluginId, "part2: Test Plug-in should exist"); - - let testPlugin = yield new Promise(resolve => AddonManager.getAddonByID(testPluginId, resolve)); + ok(gTestPluginId, "part2: Test Plug-in should exist"); + AddonManager.getAddonByID(gTestPluginId, part3); +} - let pluginEl = get_addon_element(managerWindow, testPluginId); +function part3(aTestPlugin) { + let pluginEl = get_addon_element(gManagerWindow, gTestPluginId); pluginEl.parentNode.ensureElementIsVisible(pluginEl); - let enableButton = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "enable-btn"); + let enableButton = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "enable-btn"); is_element_hidden(enableButton, "part3: enable button should not be visible"); - let disableButton = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "enable-btn"); + let disableButton = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "enable-btn"); is_element_hidden(disableButton, "part3: disable button should not be visible"); - let menu = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "state-menulist"); + let menu = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "state-menulist"); is_element_visible(menu, "part3: state menu should be visible"); - let askToActivateItem = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "ask-to-activate-menuitem"); + let askToActivateItem = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "ask-to-activate-menuitem"); is(menu.selectedItem, askToActivateItem, "part3: state menu should have 'Ask To Activate' selected"); - let pluginTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, gHttpTestRoot + "plugin_test.html"); - let pluginBrowser = pluginTab.linkedBrowser; - - let condition = () => PopupNotifications.getNotification("click-to-play-plugins", pluginBrowser); - yield BrowserTestUtils.waitForCondition(condition, "part4: should have a click-to-play notification"); - - yield BrowserTestUtils.removeTab(pluginTab); - - let alwaysActivateItem = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "always-activate-menuitem"); - menu.selectedItem = alwaysActivateItem; - alwaysActivateItem.doCommand(); - - pluginTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, gHttpTestRoot + "plugin_test.html"); + gBrowser.selectedTab = gBrowser.addTab(); + gPluginBrowser = gBrowser.selectedBrowser; + gPluginBrowser.addEventListener("PluginBindingAttached", part4, true, true); + gPluginBrowser.contentWindow.location = gHttpTestRoot + "plugin_test.html"; +} - yield ContentTask.spawn(pluginTab.linkedBrowser, null, function*() { - let testPlugin = content.document.getElementById("test"); - ok(testPlugin, "part5: should have a plugin element in the page"); - let objLoadingContent = testPlugin.QueryInterface(Ci.nsIObjectLoadingContent); - let condition = () => objLoadingContent.activated; - yield ContentTaskUtils.waitForCondition(condition, "part5: waited too long for plugin to activate"); - ok(objLoadingContent.activated, "part6: plugin should be activated"); - }); +function part4() { + let condition = () => PopupNotifications.getNotification("click-to-play-plugins", gPluginBrowser); + waitForCondition(condition, () => { + gPluginBrowser.removeEventListener("PluginBindingAttached", part4); + gBrowser.removeCurrentTab(); + + let pluginEl = get_addon_element(gManagerWindow, gTestPluginId); + let menu = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "state-menulist"); + let alwaysActivateItem = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "always-activate-menuitem"); + menu.selectedItem = alwaysActivateItem; + alwaysActivateItem.doCommand(); + gBrowser.selectedTab = gBrowser.addTab(); + gPluginBrowser = gBrowser.selectedBrowser; + gPluginBrowser.addEventListener("load", part5, true); + gPluginBrowser.contentWindow.location = gHttpTestRoot + "plugin_test.html"; + }, "part4: should have a click-to-play notification"); +} - yield BrowserTestUtils.removeTab(pluginTab); +function part5() { + let testPlugin = gPluginBrowser.contentDocument.getElementById("test"); + ok(testPlugin, "part5: should have a plugin element in the page"); + let objLoadingContent = testPlugin.QueryInterface(Ci.nsIObjectLoadingContent); + let condition = function() objLoadingContent.activated; + waitForCondition(condition, part6, "part5: waited too long for plugin to activate"); +} - let neverActivateItem = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "never-activate-menuitem"); +function part6() { + let testPlugin = gPluginBrowser.contentDocument.getElementById("test"); + ok(testPlugin, "part6: should have a plugin element in the page"); + let objLoadingContent = testPlugin.QueryInterface(Ci.nsIObjectLoadingContent); + ok(objLoadingContent.activated, "part6: plugin should be activated"); + gPluginBrowser.removeEventListener("load", part5); + gBrowser.removeCurrentTab(); + + let pluginEl = get_addon_element(gManagerWindow, gTestPluginId); + let menu = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "state-menulist"); + let neverActivateItem = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "never-activate-menuitem"); menu.selectedItem = neverActivateItem; neverActivateItem.doCommand(); + gBrowser.selectedTab = gBrowser.addTab(); + gPluginBrowser = gBrowser.selectedBrowser; + gPluginBrowser.addEventListener("PluginBindingAttached", part7, true, true); + gPluginBrowser.contentWindow.location = gHttpTestRoot + "plugin_test.html"; +} - pluginTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, gHttpTestRoot + "plugin_test.html"); - pluginBrowser = pluginTab.linkedBrowser; - - yield ContentTask.spawn(pluginTab.linkedBrowser, null, function*() { - let testPlugin = content.document.getElementById("test"); +function part7() { + let condition = () => PopupNotifications.getNotification("click-to-play-plugins", gPluginBrowser); + waitForCondition(condition, () => { + let testPlugin = gPluginBrowser.contentDocument.getElementById("test"); ok(testPlugin, "part7: should have a plugin element in the page"); let objLoadingContent = testPlugin.QueryInterface(Ci.nsIObjectLoadingContent); ok(!objLoadingContent.activated, "part7: plugin should not be activated"); - }); - yield BrowserTestUtils.removeTab(pluginTab); + gPluginBrowser.removeEventListener("PluginBindingAttached", part7); + gBrowser.removeCurrentTab(); - let details = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "details-btn"); - is_element_visible(details, "part7: details link should be visible"); - EventUtils.synthesizeMouseAtCenter(details, {}, managerWindow); - yield BrowserTestUtils.waitForEvent(managerWindow.document, "ViewChanged"); + let pluginEl = get_addon_element(gManagerWindow, gTestPluginId); + let details = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "details-btn"); + is_element_visible(details, "part7: details link should be visible"); + EventUtils.synthesizeMouseAtCenter(details, {}, gManagerWindow); + wait_for_view_load(gManagerWindow, part8); + }, "part7: disabled plugins still show a notification"); +} +function part8() { + let enableButton = gManagerWindow.document.getElementById("detail-enable-btn"); is_element_hidden(enableButton, "part8: detail enable button should be hidden"); + let disableButton = gManagerWindow.document.getElementById("detail-disable-btn"); is_element_hidden(disableButton, "part8: detail disable button should be hidden"); + let menu = gManagerWindow.document.getElementById("detail-state-menulist"); is_element_visible(menu, "part8: detail state menu should be visible"); + let neverActivateItem = gManagerWindow.document.getElementById("detail-never-activate-menuitem"); is(menu.selectedItem, neverActivateItem, "part8: state menu should have 'Never Activate' selected"); + let alwaysActivateItem = gManagerWindow.document.getElementById("detail-always-activate-menuitem"); menu.selectedItem = alwaysActivateItem; alwaysActivateItem.doCommand(); + gBrowser.selectedTab = gBrowser.addTab(); + gPluginBrowser = gBrowser.selectedBrowser; + gPluginBrowser.addEventListener("load", part9, true); + gPluginBrowser.contentWindow.location = gHttpTestRoot + "plugin_test.html"; +} - pluginTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, gHttpTestRoot + "plugin_test.html"); - pluginBrowser = pluginTab.linkedBrowser; - - yield ContentTask.spawn(pluginTab.linkedBrowser, null, function*() { - let testPlugin = content.document.getElementById("test"); - ok(testPlugin, "part9: should have a plugin element in the page"); - let objLoadingContent = testPlugin.QueryInterface(Ci.nsIObjectLoadingContent); - let condition = () => objLoadingContent.activated; - yield ContentTaskUtils.waitForCondition(condition, "part9: waited too long for plugin to activate"); - ok(objLoadingContent.activated, "part10: plugin should be activated"); - }); +function part9() { + let testPlugin = gPluginBrowser.contentDocument.getElementById("test"); + ok(testPlugin, "part9: should have a plugin element in the page"); + let objLoadingContent = testPlugin.QueryInterface(Ci.nsIObjectLoadingContent); + let condition = function() objLoadingContent.activated; + waitForCondition(condition, part10, "part9: waited too long for plugin to activate"); +} - yield BrowserTestUtils.removeTab(pluginTab); +function part10() { + let testPlugin = gPluginBrowser.contentDocument.getElementById("test"); + ok(testPlugin, "part10: should have a plugin element in the page"); + let objLoadingContent = testPlugin.QueryInterface(Ci.nsIObjectLoadingContent); + ok(objLoadingContent.activated, "part10: plugin should be activated"); + gPluginBrowser.removeEventListener("load", part9); + gBrowser.removeCurrentTab(); + let menu = gManagerWindow.document.getElementById("detail-state-menulist"); + let askToActivateItem = gManagerWindow.document.getElementById("detail-ask-to-activate-menuitem"); menu.selectedItem = askToActivateItem; askToActivateItem.doCommand(); + gBrowser.selectedTab = gBrowser.addTab(); + gPluginBrowser = gBrowser.selectedBrowser; + gPluginBrowser.addEventListener("PluginBindingAttached", part11, true, true); + gPluginBrowser.contentWindow.location = gHttpTestRoot + "plugin_test.html"; +} - pluginTab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, gHttpTestRoot + "plugin_test.html"); - pluginBrowser = pluginTab.linkedBrowser; - - condition = () => PopupNotifications.getNotification("click-to-play-plugins", pluginBrowser); - yield BrowserTestUtils.waitForCondition(condition, "part11: should have a click-to-play notification"); +function part11() { + let condition = () => PopupNotifications.getNotification("click-to-play-plugins", gPluginBrowser); + waitForCondition(condition, () => { + gPluginBrowser.removeEventListener("PluginBindingAttached", part11); + gBrowser.removeCurrentTab(); - yield BrowserTestUtils.removeTab(pluginTab); + let pluginTag = getTestPluginTag(); // causes appDisabled to be set - managerWindow = yield new Promise(resolve => { setAndUpdateBlocklist(gHttpTestRoot + "blockPluginHard.xml", - () => { - close_manager(managerWindow, function() { - open_manager("addons://list/plugin", resolve); - }); - } - ); - }); + function() { + close_manager(gManagerWindow, function() { + open_manager("addons://list/plugin", part12); + }); + }); + }, "part11: should have a click-to-play notification"); +} - pluginEl = get_addon_element(managerWindow, testPluginId); +function part12(aWindow) { + gManagerWindow = aWindow; + let pluginEl = get_addon_element(gManagerWindow, gTestPluginId); pluginEl.parentNode.ensureElementIsVisible(pluginEl); - menu = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "state-menulist"); + let menu = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "state-menulist"); is(menu.disabled, true, "part12: state menu should be disabled"); - details = managerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "details-btn"); - EventUtils.synthesizeMouseAtCenter(details, {}, managerWindow); - yield BrowserTestUtils.waitForEvent(managerWindow.document, "ViewChanged"); + let details = gManagerWindow.document.getAnonymousElementByAttribute(pluginEl, "anonid", "details-btn"); + EventUtils.synthesizeMouseAtCenter(details, {}, gManagerWindow); + wait_for_view_load(gManagerWindow, part13); +} - menu = managerWindow.document.getElementById("detail-state-menulist"); +function part13() { + let menu = gManagerWindow.document.getElementById("detail-state-menulist"); is(menu.disabled, true, "part13: detail state menu should be disabled"); - managerWindow.close(); -}); + setAndUpdateBlocklist(gHttpTestRoot + "blockNoPlugins.xml", function() { + run_next_test(); + }); +} + +function end_test() { + Services.prefs.clearUserPref("plugins.click_to_play"); + Services.prefs.clearUserPref("extensions.blocklist.suppressUI"); + let pluginTag = getTestPluginTag(); + pluginTag.enabledState = Ci.nsIPluginTag.STATE_ENABLED; + resetBlocklist(); + close_manager(gManagerWindow, function() { + finish(); + }); +} |