test_E10SUtils_nested_URIs.js (2501B)
1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ 2 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */ 3 4 const { E10SUtils } = ChromeUtils.importESModule( 5 "resource://gre/modules/E10SUtils.sys.mjs" 6 ); 7 8 var TEST_PREFERRED_REMOTE_TYPES = [ 9 E10SUtils.WEB_REMOTE_TYPE, 10 E10SUtils.NOT_REMOTE, 11 "fakeRemoteType", 12 ]; 13 14 // These test cases give a nestedURL and a plainURL that should always load in 15 // the same remote type. By making these tests comparisons, they should work 16 // with any pref combination. 17 var TEST_CASES = [ 18 { 19 nestedURL: "jar:file:///some.file!/", 20 plainURL: "file:///some.file", 21 }, 22 { 23 nestedURL: "jar:jar:file:///some.file!/!/", 24 plainURL: "file:///some.file", 25 }, 26 { 27 nestedURL: "jar:http://some.site/file!/", 28 plainURL: "http://some.site/file", 29 }, 30 { 31 nestedURL: "view-source:http://some.site", 32 plainURL: "http://some.site", 33 }, 34 { 35 nestedURL: "view-source:file:///some.file", 36 plainURL: "file:///some.file", 37 }, 38 { 39 nestedURL: "view-source:about:home", 40 plainURL: "about:home", 41 }, 42 { 43 nestedURL: "view-source:about:robots", 44 plainURL: "about:robots", 45 }, 46 { 47 nestedURL: "view-source:pcast:http://some.site", 48 plainURL: "http://some.site", 49 }, 50 ]; 51 52 function run_test() { 53 for (let testCase of TEST_CASES) { 54 for (let preferredRemoteType of TEST_PREFERRED_REMOTE_TYPES) { 55 let plainUri = Services.io.newURI(testCase.plainURL); 56 let plainRemoteType = E10SUtils.getRemoteTypeForURIObject(plainUri, { 57 multiProcess: true, 58 remoteSubFrames: false, 59 preferredRemoteType, 60 }); 61 62 let nestedUri = Services.io.newURI(testCase.nestedURL); 63 let nestedRemoteType = E10SUtils.getRemoteTypeForURIObject(nestedUri, { 64 multiProcess: true, 65 remoteSubFrames: false, 66 preferredRemoteType, 67 }); 68 69 let nestedStr = nestedUri.scheme + ":"; 70 do { 71 nestedUri = nestedUri.QueryInterface(Ci.nsINestedURI).innerURI; 72 if (nestedUri.scheme == "about") { 73 nestedStr += nestedUri.spec; 74 break; 75 } 76 77 nestedStr += nestedUri.scheme + ":"; 78 } while (nestedUri instanceof Ci.nsINestedURI); 79 80 let plainStr = 81 plainUri.scheme == "about" ? plainUri.spec : plainUri.scheme + ":"; 82 equal( 83 nestedRemoteType, 84 plainRemoteType, 85 `Check that ${nestedStr} loads in same remote type as ${plainStr}` + 86 ` with preferred remote type: ${preferredRemoteType}` 87 ); 88 } 89 } 90 }