forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			98 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var gMimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
 | |
| var gHandlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService(Ci.nsIHandlerService);
 | |
| 
 | |
| SimpleTest.requestCompleteLog();
 | |
| 
 | |
| function setupFakeHandler() {
 | |
|   let info = gMimeSvc.getFromTypeAndExtension("text/plain", "foo.txt");
 | |
|   ok(info.possibleLocalHandlers.length, "Should have at least one known handler");
 | |
|   let handler = info.possibleLocalHandlers.queryElementAt(0, Ci.nsILocalHandlerApp);
 | |
| 
 | |
|   let infoToModify = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
 | |
|   infoToModify.possibleApplicationHandlers.appendElement(handler, false);
 | |
| 
 | |
|   gHandlerSvc.store(infoToModify);
 | |
| }
 | |
| 
 | |
| add_task(function*() {
 | |
|   setupFakeHandler();
 | |
|   yield openPreferencesViaOpenPreferencesAPI("applications", null, {leaveOpen: true});
 | |
|   info("Preferences page opened on the applications pane.");
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
| 
 | |
|   let container = win.document.getElementById("handlersView");
 | |
|   let ourItem = container.querySelector("richlistitem[type='text/x-test-handler']");
 | |
|   ok(ourItem, "handlersView is present");
 | |
|   ourItem.scrollIntoView();
 | |
|   container.selectItem(ourItem);
 | |
|   ok(ourItem.selected, "Should be able to select our item.");
 | |
| 
 | |
|   let list = yield waitForCondition(() => win.document.getAnonymousElementByAttribute(ourItem, "class", "actionsMenu"));
 | |
|   info("Got list after item was selected");
 | |
| 
 | |
|   let chooseItem = list.firstChild.querySelector(".choose-app-item");
 | |
|   let dialogLoadedPromise = promiseLoadSubDialog("chrome://global/content/appPicker.xul");
 | |
|   let cmdEvent = win.document.createEvent("xulcommandevent");
 | |
|   cmdEvent.initCommandEvent("command", true, true, win, 0, false, false, false, false, null);
 | |
|   chooseItem.dispatchEvent(cmdEvent);
 | |
| 
 | |
|   let dialog = yield dialogLoadedPromise;
 | |
|   info("Dialog loaded");
 | |
| 
 | |
|   let dialogDoc = dialog.document;
 | |
|   let dialogList = dialogDoc.getElementById("app-picker-listbox");
 | |
|   dialogList.selectItem(dialogList.firstChild);
 | |
|   let selectedApp = dialogList.firstChild.handlerApp;
 | |
|   dialogDoc.documentElement.acceptDialog();
 | |
| 
 | |
|   // Verify results are correct in mime service:
 | |
|   let mimeInfo = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
 | |
|   ok(mimeInfo.preferredApplicationHandler.equals(selectedApp), "App should be set as preferred.");
 | |
| 
 | |
|   // Check that we display this result:
 | |
|   list = yield waitForCondition(() => win.document.getAnonymousElementByAttribute(ourItem, "class", "actionsMenu"));
 | |
|   info("Got list after item was selected");
 | |
|   ok(list.selectedItem, "Should have a selected item");
 | |
|   ok(mimeInfo.preferredApplicationHandler.equals(list.selectedItem.handlerApp),
 | |
|      "App should be visible as preferred item.");
 | |
| 
 | |
| 
 | |
|   // Now try to 'manage' this list:
 | |
|   dialogLoadedPromise = promiseLoadSubDialog("chrome://browser/content/preferences/applicationManager.xul");
 | |
| 
 | |
|   let manageItem = list.firstChild.querySelector(".manage-app-item");
 | |
|   cmdEvent = win.document.createEvent("xulcommandevent");
 | |
|   cmdEvent.initCommandEvent("command", true, true, win, 0, false, false, false, false, null);
 | |
|   manageItem.dispatchEvent(cmdEvent);
 | |
| 
 | |
|   dialog = yield dialogLoadedPromise;
 | |
|   info("Dialog loaded the second time");
 | |
| 
 | |
|   dialogDoc = dialog.document;
 | |
|   dialogList = dialogDoc.getElementById("appList");
 | |
|   let itemToRemove = dialogList.querySelector('listitem[label="' + selectedApp.name + '"]');
 | |
|   dialogList.selectItem(itemToRemove);
 | |
|   let itemsBefore = dialogList.children.length;
 | |
|   dialogDoc.getElementById("remove").click();
 | |
|   ok(!itemToRemove.parentNode, "Item got removed from DOM");
 | |
|   is(dialogList.children.length, itemsBefore - 1, "Item got removed");
 | |
|   dialogDoc.documentElement.acceptDialog();
 | |
| 
 | |
|   // Verify results are correct in mime service:
 | |
|   mimeInfo = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
 | |
|   ok(!mimeInfo.preferredApplicationHandler, "App should no longer be set as preferred.");
 | |
| 
 | |
|   // Check that we display this result:
 | |
|   list = yield waitForCondition(() => win.document.getAnonymousElementByAttribute(ourItem, "class", "actionsMenu"));
 | |
|   ok(list.selectedItem, "Should have a selected item");
 | |
|   ok(!list.selectedItem.handlerApp,
 | |
|      "No app should be visible as preferred item.");
 | |
| 
 | |
|   gBrowser.removeCurrentTab();
 | |
| });
 | |
| 
 | |
| registerCleanupFunction(function() {
 | |
|   let infoToModify = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
 | |
|   gHandlerSvc.remove(infoToModify);
 | |
| });
 | |
| 
 | 
