forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			196 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const gTestRoot = "chrome://mochikit/content/browser/browser/base/content/test/";
 | 
						|
 | 
						|
var gTestBrowser = null;
 | 
						|
var gNextTest = null;
 | 
						|
 | 
						|
function get_test_plugin() {
 | 
						|
  var ph = Components.classes["@mozilla.org/plugin/host;1"]
 | 
						|
                     .getService(Components.interfaces.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];
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// This listens for the next opened window and checks it is of the right url.
 | 
						|
// opencallback is called when the new window is fully loaded
 | 
						|
// closecallback is called when the window is closed
 | 
						|
function WindowOpenListener(url, opencallback, closecallback) {
 | 
						|
  this.url = url;
 | 
						|
  this.opencallback = opencallback;
 | 
						|
  this.closecallback = closecallback;
 | 
						|
 | 
						|
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
 | 
						|
                     .getService(Components.interfaces.nsIWindowMediator);
 | 
						|
  wm.addListener(this);
 | 
						|
}
 | 
						|
 | 
						|
WindowOpenListener.prototype = {
 | 
						|
  url: null,
 | 
						|
  opencallback: null,
 | 
						|
  closecallback: null,
 | 
						|
  window: null,
 | 
						|
  domwindow: null,
 | 
						|
 | 
						|
  handleEvent: function(event) {
 | 
						|
    is(this.domwindow.document.location.href, this.url, "Should have opened the correct window");
 | 
						|
 | 
						|
    this.domwindow.removeEventListener("load", this, false);
 | 
						|
    // Allow any other load handlers to execute
 | 
						|
    var self = this;
 | 
						|
    executeSoon(function() { self.opencallback(self.domwindow); } );
 | 
						|
  },
 | 
						|
 | 
						|
  onWindowTitleChange: function(window, title) {
 | 
						|
  },
 | 
						|
 | 
						|
  onOpenWindow: function(window) {
 | 
						|
    if (this.window)
 | 
						|
      return;
 | 
						|
 | 
						|
    this.window = window;
 | 
						|
    this.domwindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
 | 
						|
                           .getInterface(Components.interfaces.nsIDOMWindowInternal);
 | 
						|
    this.domwindow.addEventListener("load", this, false);
 | 
						|
  },
 | 
						|
 | 
						|
  onCloseWindow: function(window) {
 | 
						|
    if (this.window != window)
 | 
						|
      return;
 | 
						|
 | 
						|
    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
 | 
						|
                       .getService(Components.interfaces.nsIWindowMediator);
 | 
						|
    wm.removeListener(this);
 | 
						|
    this.opencallback = null;
 | 
						|
    this.window = null;
 | 
						|
    this.domwindow = null;
 | 
						|
 | 
						|
    // Let the window close complete
 | 
						|
    executeSoon(this.closecallback);
 | 
						|
    this.closecallback = null;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
function test() {
 | 
						|
  waitForExplicitFinish();
 | 
						|
 | 
						|
  var newTab = gBrowser.addTab();
 | 
						|
  gBrowser.selectedTab = newTab;
 | 
						|
  gTestBrowser = gBrowser.selectedBrowser;
 | 
						|
  gTestBrowser.addEventListener("load", pageLoad, true);
 | 
						|
  prepareTest(test1, gTestRoot + "plugin_unknown.html");
 | 
						|
}
 | 
						|
 | 
						|
function finishTest() {
 | 
						|
  gTestBrowser.removeEventListener("load", pageLoad, true);
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
  window.focus();
 | 
						|
  finish();
 | 
						|
}
 | 
						|
 | 
						|
function pageLoad() {
 | 
						|
  // The plugin events are async dispatched and can come after the load event
 | 
						|
  // This just allows the events to fire before we then go on to test the states
 | 
						|
  executeSoon(gNextTest);
 | 
						|
}
 | 
						|
 | 
						|
function prepareTest(nextTest, url) {
 | 
						|
  gNextTest = nextTest;
 | 
						|
  gTestBrowser.contentWindow.location = url;
 | 
						|
}
 | 
						|
 | 
						|
// Tests a page with an unknown plugin in it.
 | 
						|
function test1() {
 | 
						|
  var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
 | 
						|
  ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 1, Should have displayed the missing plugin notification");
 | 
						|
  ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 1, Should not have displayed the blocked plugin notification");
 | 
						|
  ok(gTestBrowser.missingPlugins, "Test 1, Should be a missing plugin list");
 | 
						|
  ok("application/x-unknown" in gTestBrowser.missingPlugins, "Test 1, Should know about application/x-unknown");
 | 
						|
  ok(!("application/x-test" in gTestBrowser.missingPlugins), "Test 1, Should not know about application/x-test");
 | 
						|
 | 
						|
  var plugin = get_test_plugin();
 | 
						|
  ok(plugin, "Should have a test plugin");
 | 
						|
  plugin.disabled = false;
 | 
						|
  plugin.blocklisted = false;
 | 
						|
  prepareTest(test2, gTestRoot + "plugin_test.html");
 | 
						|
}
 | 
						|
 | 
						|
// Tests a page with a working plugin in it.
 | 
						|
function test2() {
 | 
						|
  var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
 | 
						|
  ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 2, Should not have displayed the missing plugin notification");
 | 
						|
  ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 2, Should not have displayed the blocked plugin notification");
 | 
						|
  ok(!gTestBrowser.missingPlugins, "Test 2, Should not be a missing plugin list");
 | 
						|
 | 
						|
  var plugin = get_test_plugin();
 | 
						|
  ok(plugin, "Should have a test plugin");
 | 
						|
  plugin.disabled = true;
 | 
						|
  prepareTest(test3, gTestRoot + "plugin_test.html");
 | 
						|
}
 | 
						|
 | 
						|
// Tests a page with a disabled plugin in it.
 | 
						|
function test3() {
 | 
						|
  var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
 | 
						|
  ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 3, Should not have displayed the missing plugin notification");
 | 
						|
  ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 3, Should not have displayed the blocked plugin notification");
 | 
						|
  ok(!gTestBrowser.missingPlugins, "Test 3, Should not be a missing plugin list");
 | 
						|
 | 
						|
  new WindowOpenListener("chrome://mozapps/content/extensions/extensions.xul", test4, prepareTest5);
 | 
						|
 | 
						|
  EventUtils.synthesizeMouse(gTestBrowser.contentDocument.getElementById("test"),
 | 
						|
                             0, 0, {}, gTestBrowser.contentWindow);
 | 
						|
}
 | 
						|
 | 
						|
function test4(win) {
 | 
						|
  is(win.gView, "plugins", "Should have displayed the plugins pane");
 | 
						|
  win.close();
 | 
						|
}
 | 
						|
 | 
						|
function prepareTest5() {
 | 
						|
  var plugin = get_test_plugin();
 | 
						|
  plugin.disabled = false;
 | 
						|
  plugin.blocklisted = true;
 | 
						|
  prepareTest(test5, gTestRoot + "plugin_test.html");
 | 
						|
}
 | 
						|
 | 
						|
// Tests a page with a blocked plugin in it.
 | 
						|
function test5() {
 | 
						|
  var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
 | 
						|
  ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 5, Should not have displayed the missing plugin notification");
 | 
						|
  ok(notificationBox.getNotificationWithValue("blocked-plugins"), "Test 5, Should have displayed the blocked plugin notification");
 | 
						|
  ok(gTestBrowser.missingPlugins, "Test 5, Should be a missing plugin list");
 | 
						|
  ok("application/x-test" in gTestBrowser.missingPlugins, "Test 5, Should know about application/x-test");
 | 
						|
  ok(!("application/x-unknown" in gTestBrowser.missingPlugins), "Test 5, Should not know about application/x-unknown");
 | 
						|
 | 
						|
  prepareTest(test6, gTestRoot + "plugin_both.html");
 | 
						|
}
 | 
						|
 | 
						|
// Tests a page with a blocked and unknown plugin in it.
 | 
						|
function test6() {
 | 
						|
  var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
 | 
						|
  ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 6, Should have displayed the missing plugin notification");
 | 
						|
  ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 6, Should not have displayed the blocked plugin notification");
 | 
						|
  ok(gTestBrowser.missingPlugins, "Test 6, Should be a missing plugin list");
 | 
						|
  ok("application/x-unknown" in gTestBrowser.missingPlugins, "Test 6, Should know about application/x-unknown");
 | 
						|
  ok("application/x-test" in gTestBrowser.missingPlugins, "Test 6, Should know about application/x-test");
 | 
						|
 | 
						|
  prepareTest(test7, gTestRoot + "plugin_both2.html");
 | 
						|
}
 | 
						|
 | 
						|
// Tests a page with a blocked and unknown plugin in it (alternate order to above).
 | 
						|
function test7() {
 | 
						|
  var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
 | 
						|
  ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 7, Should have displayed the missing plugin notification");
 | 
						|
  ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 7, Should not have displayed the blocked plugin notification");
 | 
						|
  ok(gTestBrowser.missingPlugins, "Test 7, Should be a missing plugin list");
 | 
						|
  ok("application/x-unknown" in gTestBrowser.missingPlugins, "Test 7, Should know about application/x-unknown");
 | 
						|
  ok("application/x-test" in gTestBrowser.missingPlugins, "Test 7, Should know about application/x-test");
 | 
						|
 | 
						|
  var plugin = get_test_plugin();
 | 
						|
  plugin.disabled = false;
 | 
						|
  plugin.blocklisted = false;
 | 
						|
  finishTest();
 | 
						|
}
 |