forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			137 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var rootDir = getRootDirectory(gTestPath);
 | |
| const gTestRoot = rootDir.replace("chrome://mochitests/content/", "http://mochi.test:8888/");
 | |
| var gPluginHost = Components.classes["@mozilla.org/plugin/host;1"].getService(Components.interfaces.nsIPluginHost);
 | |
| 
 | |
| var gTestBrowser = null;
 | |
| 
 | |
| add_task(async function() {
 | |
|   registerCleanupFunction(async function() {
 | |
|     clearAllPluginPermissions();
 | |
|     Services.prefs.clearUserPref("plugins.click_to_play");
 | |
|     setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED, "Test Plug-in");
 | |
|     setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED, "Second Test Plug-in");
 | |
|     await asyncSetAndUpdateBlocklist(gTestRoot + "blockNoPlugins.xml", gTestBrowser);
 | |
|     resetBlocklist();
 | |
|     gBrowser.removeCurrentTab();
 | |
|     window.focus();
 | |
|     gTestBrowser = null;
 | |
|   });
 | |
| });
 | |
| 
 | |
| // "Activate" of a given type -> plugins of that type dynamically added should
 | |
| // automatically play.
 | |
| add_task(async function() {
 | |
|   let newTab = BrowserTestUtils.addTab(gBrowser);
 | |
|   gBrowser.selectedTab = newTab;
 | |
|   gTestBrowser = gBrowser.selectedBrowser;
 | |
| 
 | |
|   Services.prefs.setBoolPref("extensions.blocklist.suppressUI", true);
 | |
|   Services.prefs.setBoolPref("plugins.click_to_play", true);
 | |
| 
 | |
|   setTestPluginEnabledState(Ci.nsIPluginTag.STATE_CLICKTOPLAY, "Test Plug-in");
 | |
|   setTestPluginEnabledState(Ci.nsIPluginTag.STATE_CLICKTOPLAY, "Second Test Plug-in");
 | |
| });
 | |
| 
 | |
| add_task(async function() {
 | |
|   await promiseTabLoadEvent(gBrowser.selectedTab, gTestRoot + "plugin_add_dynamically.html");
 | |
| 
 | |
|   let notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
 | |
|   ok(!notification, "Test 1a, Should not have a click-to-play notification");
 | |
| 
 | |
|   // Add a plugin of type test
 | |
|   await ContentTask.spawn(gTestBrowser, {}, async function() {
 | |
|     new XPCNativeWrapper(XPCNativeWrapper.unwrap(content).addPlugin("pluginone", "application/x-test"));
 | |
|   });
 | |
| 
 | |
|   await promisePopupNotification("click-to-play-plugins");
 | |
| 
 | |
|   notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
 | |
|   ok(notification, "Test 1a, Should not have a click-to-play notification");
 | |
| 
 | |
|   await promiseForNotificationShown(notification);
 | |
| 
 | |
|   let centerAction = null;
 | |
|   for (let action of notification.options.pluginData.values()) {
 | |
|     if (action.pluginName == "Test") {
 | |
|       centerAction = action;
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
|   ok(centerAction, "Test 2, found center action for the Test plugin");
 | |
| 
 | |
|   let centerItem = null;
 | |
|   for (let item of PopupNotifications.panel.firstChild.childNodes) {
 | |
|     is(item.value, "block", "Test 3, all plugins should start out blocked");
 | |
|     if (item.action == centerAction) {
 | |
|       centerItem = item;
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
|   ok(centerItem, "Test 4, found center item for the Test plugin");
 | |
| 
 | |
|   // Select the allow now option in the select drop down for Test Plugin
 | |
|   centerItem.value = "allownow";
 | |
| 
 | |
|   // "click" the button to activate the Test plugin
 | |
|   PopupNotifications.panel.firstChild._primaryButton.click();
 | |
| 
 | |
|   let pluginInfo = await promiseForPluginInfo("pluginone");
 | |
|   ok(pluginInfo.activated, "Test 5, plugin should be activated");
 | |
| 
 | |
|   // Add another plugin of type test
 | |
|   await ContentTask.spawn(gTestBrowser, {}, async function() {
 | |
|     new XPCNativeWrapper(XPCNativeWrapper.unwrap(content).addPlugin("plugintwo", "application/x-test"));
 | |
|   });
 | |
| 
 | |
|   pluginInfo = await promiseForPluginInfo("plugintwo");
 | |
|   ok(pluginInfo.activated, "Test 6, plugins should be activated");
 | |
| });
 | |
| 
 | |
| // "Activate" of a given type -> plugins of other types dynamically added
 | |
| // should not automatically play.
 | |
| add_task(async function() {
 | |
|   clearAllPluginPermissions();
 | |
| 
 | |
|   await promiseTabLoadEvent(gBrowser.selectedTab, gTestRoot + "plugin_add_dynamically.html");
 | |
| 
 | |
|   let notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
 | |
|   ok(!notification, "Test 7, Should not have a click-to-play notification");
 | |
| 
 | |
|   // Add a plugin of type test
 | |
|   await ContentTask.spawn(gTestBrowser, {}, async function() {
 | |
|     new XPCNativeWrapper(XPCNativeWrapper.unwrap(content).addPlugin("pluginone", "application/x-test"));
 | |
|   });
 | |
| 
 | |
|   await promisePopupNotification("click-to-play-plugins");
 | |
| 
 | |
|   notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
 | |
|   ok(notification, "Test 8, Should not have a click-to-play notification");
 | |
| 
 | |
|   await promiseForNotificationShown(notification);
 | |
| 
 | |
|   is(notification.options.pluginData.size, 1, "Should be one plugin action");
 | |
| 
 | |
|   let pluginInfo = await promiseForPluginInfo("pluginone");
 | |
|   ok(!pluginInfo.activated, "Test 8, test plugin should be activated");
 | |
| 
 | |
|   let condition = () => !notification.dismissed &&
 | |
|     PopupNotifications.panel.firstChild;
 | |
|   await promiseForCondition(condition);
 | |
| 
 | |
|   // "click" the button to activate the Test plugin
 | |
|   PopupNotifications.panel.firstChild._primaryButton.click();
 | |
| 
 | |
|   pluginInfo = await promiseForPluginInfo("pluginone");
 | |
|   ok(pluginInfo.activated, "Test 9, test plugin should be activated");
 | |
| 
 | |
|   await ContentTask.spawn(gTestBrowser, {}, async function() {
 | |
|     new XPCNativeWrapper(XPCNativeWrapper.unwrap(content).addPlugin("plugintwo", "application/x-second-test"));
 | |
|   });
 | |
| 
 | |
|   await promisePopupNotification("click-to-play-plugins");
 | |
| 
 | |
|   pluginInfo = await promiseForPluginInfo("pluginone");
 | |
|   ok(pluginInfo.activated, "Test 10, plugins should be activated");
 | |
|   pluginInfo = await promiseForPluginInfo("plugintwo");
 | |
|   ok(!pluginInfo.activated, "Test 11, plugins should be activated");
 | |
| });
 | 
