1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/base/content/test/general/browser_bug356571.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,91 @@ 1.4 +// Bug 356571 - loadOneOrMoreURIs gives up if one of the URLs has an unknown protocol 1.5 + 1.6 +const Cr = Components.results; 1.7 +const Cm = Components.manager; 1.8 + 1.9 +// Set to true when docShell alerts for unknown protocol error 1.10 +var didFail = false; 1.11 + 1.12 +// Override Alert to avoid blocking the test due to unknown protocol error 1.13 +const kPromptServiceUUID = "{6cc9c9fe-bc0b-432b-a410-253ef8bcc699}"; 1.14 +const kPromptServiceContractID = "@mozilla.org/embedcomp/prompt-service;1"; 1.15 + 1.16 +// Save original prompt service factory 1.17 +const kPromptServiceFactory = Cm.getClassObject(Cc[kPromptServiceContractID], 1.18 + Ci.nsIFactory); 1.19 + 1.20 +let fakePromptServiceFactory = { 1.21 + createInstance: function(aOuter, aIid) { 1.22 + if (aOuter != null) 1.23 + throw Cr.NS_ERROR_NO_AGGREGATION; 1.24 + return promptService.QueryInterface(aIid); 1.25 + } 1.26 +}; 1.27 + 1.28 +let promptService = { 1.29 + QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptService]), 1.30 + alert: function() { 1.31 + didFail = true; 1.32 + } 1.33 +}; 1.34 + 1.35 +/* FIXME 1.36 +Cm.QueryInterface(Ci.nsIComponentRegistrar) 1.37 + .registerFactory(Components.ID(kPromptServiceUUID), "Prompt Service", 1.38 + kPromptServiceContractID, fakePromptServiceFactory); 1.39 +*/ 1.40 + 1.41 +const kCompleteState = Ci.nsIWebProgressListener.STATE_STOP + 1.42 + Ci.nsIWebProgressListener.STATE_IS_NETWORK; 1.43 + 1.44 +const kDummyPage = "http://example.org/browser/browser/base/content/test/general/dummy_page.html"; 1.45 +const kURIs = [ 1.46 + "bad://www.mozilla.org/", 1.47 + kDummyPage, 1.48 + kDummyPage, 1.49 +]; 1.50 + 1.51 +var gProgressListener = { 1.52 + _runCount: 0, 1.53 + onStateChange: function (aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) { 1.54 + if ((aStateFlags & kCompleteState) == kCompleteState) { 1.55 + if (++this._runCount != kURIs.length) 1.56 + return; 1.57 + // Check we failed on unknown protocol (received an alert from docShell) 1.58 + ok(didFail, "Correctly failed on unknown protocol"); 1.59 + // Check we opened all tabs 1.60 + ok(gBrowser.tabs.length == kURIs.length, "Correctly opened all expected tabs"); 1.61 + finishTest(); 1.62 + } 1.63 + } 1.64 +} 1.65 + 1.66 +function test() { 1.67 + todo(false, "temp. disabled"); 1.68 + return; /* FIXME */ 1.69 + waitForExplicitFinish(); 1.70 + // Wait for all tabs to finish loading 1.71 + gBrowser.addTabsProgressListener(gProgressListener); 1.72 + loadOneOrMoreURIs(kURIs.join("|")); 1.73 +} 1.74 + 1.75 +function finishTest() { 1.76 + // Unregister the factory so we do not leak 1.77 + Cm.QueryInterface(Ci.nsIComponentRegistrar) 1.78 + .unregisterFactory(Components.ID(kPromptServiceUUID), 1.79 + fakePromptServiceFactory); 1.80 + 1.81 + // Restore the original factory 1.82 + Cm.QueryInterface(Ci.nsIComponentRegistrar) 1.83 + .registerFactory(Components.ID(kPromptServiceUUID), "Prompt Service", 1.84 + kPromptServiceContractID, kPromptServiceFactory); 1.85 + 1.86 + // Remove the listener 1.87 + gBrowser.removeTabsProgressListener(gProgressListener); 1.88 + 1.89 + // Close opened tabs 1.90 + for (var i = gBrowser.tabs.length-1; i > 0; i--) 1.91 + gBrowser.removeTab(gBrowser.tabs[i]); 1.92 + 1.93 + finish(); 1.94 +}