gecko-dev/dom/base/test/unit/test_thirdpartyutil.js
Kris Maglione e930b89c34 Bug 1514594: Part 3 - Change ChromeUtils.import API.
***
Bug 1514594: Part 3a - Change ChromeUtils.import to return an exports object; not pollute global. r=mccr8

This changes the behavior of ChromeUtils.import() to return an exports object,
rather than a module global, in all cases except when `null` is passed as a
second argument, and changes the default behavior not to pollute the global
scope with the module's exports. Thus, the following code written for the old
model:

  ChromeUtils.import("resource://gre/modules/Services.jsm");

is approximately the same as the following, in the new model:

  var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");

Since the two behaviors are mutually incompatible, this patch will land with a
scripted rewrite to update all existing callers to use the new model rather
than the old.
***
Bug 1514594: Part 3b - Mass rewrite all JS code to use the new ChromeUtils.import API. rs=Gijs

This was done using the followng script:

https://bitbucket.org/kmaglione/m-c-rewrites/src/tip/processors/cu-import-exports.jsm
***
Bug 1514594: Part 3c - Update ESLint plugin for ChromeUtils.import API changes. r=Standard8

Differential Revision: https://phabricator.services.mozilla.com/D16747
***
Bug 1514594: Part 3d - Remove/fix hundreds of duplicate imports from sync tests. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16748
***
Bug 1514594: Part 3e - Remove no-op ChromeUtils.import() calls. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16749
***
Bug 1514594: Part 3f.1 - Cleanup various test corner cases after mass rewrite. r=Gijs
***
Bug 1514594: Part 3f.2 - Cleanup various non-test corner cases after mass rewrite. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16750

--HG--
extra : rebase_source : 359574ee3064c90f33bf36c2ebe3159a24cc8895
extra : histedit_source : b93c8f42808b1599f9122d7842d2c0b3e656a594%2C64a3a4e3359dc889e2ab2b49461bab9e27fc10a7
2019-01-17 10:18:31 -08:00

87 lines
3.3 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
// Test ThirdPartyUtil methods. See mozIThirdPartyUtil.
var prefs = Services.prefs;
// Since this test creates a TYPE_DOCUMENT channel via javascript, it will
// end up using the wrong LoadInfo constructor. Setting this pref will disable
// the ContentPolicyType assertion in the constructor.
prefs.setBoolPref("network.loadinfo.skip_type_assertion", true);
var NS_ERROR_INVALID_ARG = Cr.NS_ERROR_INVALID_ARG;
function do_check_throws(f, result, stack) {
if (!stack) {
try {
// We might not have a 'Components' object.
stack = Components.stack.caller;
} catch (e) {
}
}
try {
f();
} catch (exc) {
Assert.equal(exc.result, result);
return;
}
do_throw("expected " + result + " exception, none thrown", stack);
}
function run_test() {
let util = Cc["@mozilla.org/thirdpartyutil;1"].getService(Ci.mozIThirdPartyUtil);
// Create URIs and channels pointing to foo.com and bar.com.
// We will use these to put foo.com into first and third party contexts.
let spec1 = "http://foo.com/foo.html";
let spec2 = "http://bar.com/bar.html";
let uri1 = NetUtil.newURI(spec1);
let uri2 = NetUtil.newURI(spec2);
const contentPolicyType = Ci.nsIContentPolicy.TYPE_DOCUMENT;
let channel1 = NetUtil.newChannel({uri: uri1, loadUsingSystemPrincipal: true, contentPolicyType});
NetUtil.newChannel({uri: uri2, loadUsingSystemPrincipal: true, contentPolicyType});
// Create some file:// URIs.
let filespec1 = "file://foo.txt";
let filespec2 = "file://bar.txt";
let fileuri1 = NetUtil.newURI(filespec1);
let fileuri2 = NetUtil.newURI(filespec2);
NetUtil.newChannel({uri: fileuri1, loadUsingSystemPrincipal: true});
NetUtil.newChannel({uri: fileuri2, loadUsingSystemPrincipal: true});
// Test isThirdPartyURI.
Assert.ok(!util.isThirdPartyURI(uri1, uri1));
Assert.ok(util.isThirdPartyURI(uri1, uri2));
Assert.ok(util.isThirdPartyURI(uri2, uri1));
Assert.ok(!util.isThirdPartyURI(fileuri1, fileuri1));
Assert.ok(!util.isThirdPartyURI(fileuri1, fileuri2));
Assert.ok(util.isThirdPartyURI(uri1, fileuri1));
do_check_throws(function() { util.isThirdPartyURI(uri1, null); },
NS_ERROR_INVALID_ARG);
do_check_throws(function() { util.isThirdPartyURI(null, uri1); },
NS_ERROR_INVALID_ARG);
do_check_throws(function() { util.isThirdPartyURI(null, null); },
NS_ERROR_INVALID_ARG);
// We can't test isThirdPartyWindow since we can't really set up a window
// hierarchy. We leave that to mochitests.
// Test isThirdPartyChannel. As above, we can't test the bits that require
// a load context or window heirarchy. Because of bug 1259873, we assume
// that these are not third-party.
do_check_throws(function() { util.isThirdPartyChannel(null); },
NS_ERROR_INVALID_ARG);
Assert.ok(!util.isThirdPartyChannel(channel1));
Assert.ok(!util.isThirdPartyChannel(channel1, uri1));
Assert.ok(util.isThirdPartyChannel(channel1, uri2));
let httpchannel1 = channel1.QueryInterface(Ci.nsIHttpChannelInternal);
httpchannel1.forceAllowThirdPartyCookie = true;
Assert.ok(!util.isThirdPartyChannel(channel1));
Assert.ok(!util.isThirdPartyChannel(channel1, uri1));
Assert.ok(util.isThirdPartyChannel(channel1, uri2));
}