browser_bug356571.js (2791B)
1 // Bug 356571 - loadOneOrMoreURIs gives up if one of the URLs has an unknown protocol 2 3 var Cm = Components.manager; 4 5 // Set to true when docShell alerts for unknown protocol error 6 var didFail = false; 7 8 // Override Alert to avoid blocking the test due to unknown protocol error 9 const kPromptServiceUUID = "{6cc9c9fe-bc0b-432b-a410-253ef8bcc699}"; 10 const kPromptServiceContractID = "@mozilla.org/prompter;1"; 11 12 // Save original prompt service factory 13 const kPromptServiceFactory = Cm.getClassObject( 14 Cc[kPromptServiceContractID], 15 Ci.nsIFactory 16 ); 17 18 var fakePromptServiceFactory = { 19 createInstance(aIid) { 20 return promptService.QueryInterface(aIid); 21 }, 22 }; 23 24 var promptService = { 25 QueryInterface: ChromeUtils.generateQI(["nsIPromptService"]), 26 alert() { 27 didFail = true; 28 }, 29 }; 30 31 /* FIXME 32 Cm.QueryInterface(Ci.nsIComponentRegistrar) 33 .registerFactory(Components.ID(kPromptServiceUUID), "Prompt Service", 34 kPromptServiceContractID, fakePromptServiceFactory); 35 */ 36 37 const kCompleteState = 38 Ci.nsIWebProgressListener.STATE_STOP + 39 Ci.nsIWebProgressListener.STATE_IS_NETWORK; 40 41 const kDummyPage = 42 // eslint-disable-next-line @microsoft/sdl/no-insecure-url 43 "http://example.org/browser/browser/base/content/test/general/dummy_page.html"; 44 const kURIs = ["bad://www.mozilla.org/", kDummyPage, kDummyPage]; 45 46 var gProgressListener = { 47 _runCount: 0, 48 onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags) { 49 if ((aStateFlags & kCompleteState) == kCompleteState) { 50 if (++this._runCount != kURIs.length) { 51 return; 52 } 53 // Check we failed on unknown protocol (received an alert from docShell) 54 ok(didFail, "Correctly failed on unknown protocol"); 55 // Check we opened all tabs 56 Assert.equal( 57 gBrowser.tabs.length, 58 kURIs.length, 59 "Correctly opened all expected tabs" 60 ); 61 finishTest(); 62 } 63 }, 64 }; 65 66 function test() { 67 todo(false, "temp. disabled"); 68 /* FIXME */ 69 /* 70 waitForExplicitFinish(); 71 // Wait for all tabs to finish loading 72 gBrowser.addTabsProgressListener(gProgressListener); 73 loadOneOrMoreURIs(kURIs.join("|")); 74 */ 75 } 76 77 function finishTest() { 78 // Unregister the factory so we do not leak 79 Cm.QueryInterface(Ci.nsIComponentRegistrar).unregisterFactory( 80 Components.ID(kPromptServiceUUID), 81 fakePromptServiceFactory 82 ); 83 84 // Restore the original factory 85 Cm.QueryInterface(Ci.nsIComponentRegistrar).registerFactory( 86 Components.ID(kPromptServiceUUID), 87 "Prompt Service", 88 kPromptServiceContractID, 89 kPromptServiceFactory 90 ); 91 92 // Remove the listener 93 gBrowser.removeTabsProgressListener(gProgressListener); 94 95 // Close opened tabs 96 for (var i = gBrowser.tabs.length - 1; i > 0; i--) { 97 gBrowser.removeTab(gBrowser.tabs[i]); 98 } 99 100 finish(); 101 }