forked from mirrors/gecko-dev
MozReview-Commit-ID: LjrRXr1thc8 --HG-- rename : toolkit/components/payments/.eslintrc.js => browser/components/payments/.eslintrc.js rename : toolkit/components/payments/content/paymentDialogFrameScript.js => browser/components/payments/content/paymentDialogFrameScript.js rename : toolkit/components/payments/content/paymentDialogWrapper.css => browser/components/payments/content/paymentDialogWrapper.css rename : toolkit/components/payments/content/paymentDialogWrapper.js => browser/components/payments/content/paymentDialogWrapper.js rename : toolkit/components/payments/content/paymentDialogWrapper.xhtml => browser/components/payments/content/paymentDialogWrapper.xhtml rename : toolkit/components/payments/docs/index.rst => browser/components/payments/docs/index.rst rename : toolkit/components/payments/jar.mn => browser/components/payments/jar.mn rename : toolkit/components/payments/moz.build => browser/components/payments/moz.build rename : toolkit/components/payments/paymentUIService.js => browser/components/payments/paymentUIService.js rename : toolkit/components/payments/payments.manifest => browser/components/payments/payments.manifest rename : toolkit/components/payments/res/PaymentsStore.js => browser/components/payments/res/PaymentsStore.js rename : toolkit/components/payments/res/components/address-option.css => browser/components/payments/res/components/address-option.css rename : toolkit/components/payments/res/components/address-option.js => browser/components/payments/res/components/address-option.js rename : toolkit/components/payments/res/components/basic-card-option.css => browser/components/payments/res/components/basic-card-option.css rename : toolkit/components/payments/res/components/basic-card-option.js => browser/components/payments/res/components/basic-card-option.js rename : toolkit/components/payments/res/components/currency-amount.js => browser/components/payments/res/components/currency-amount.js rename : toolkit/components/payments/res/components/labelled-checkbox.js => browser/components/payments/res/components/labelled-checkbox.js rename : toolkit/components/payments/res/components/payment-details-item.css => browser/components/payments/res/components/payment-details-item.css rename : toolkit/components/payments/res/components/payment-details-item.js => browser/components/payments/res/components/payment-details-item.js rename : toolkit/components/payments/res/components/rich-option.js => browser/components/payments/res/components/rich-option.js rename : toolkit/components/payments/res/components/rich-select.css => browser/components/payments/res/components/rich-select.css rename : toolkit/components/payments/res/components/rich-select.js => browser/components/payments/res/components/rich-select.js rename : toolkit/components/payments/res/components/shipping-option.css => browser/components/payments/res/components/shipping-option.css rename : toolkit/components/payments/res/components/shipping-option.js => browser/components/payments/res/components/shipping-option.js rename : toolkit/components/payments/res/containers/address-picker.js => browser/components/payments/res/containers/address-picker.js rename : toolkit/components/payments/res/containers/basic-card-form.js => browser/components/payments/res/containers/basic-card-form.js rename : toolkit/components/payments/res/containers/order-details.css => browser/components/payments/res/containers/order-details.css rename : toolkit/components/payments/res/containers/order-details.js => browser/components/payments/res/containers/order-details.js rename : toolkit/components/payments/res/containers/payment-dialog.js => browser/components/payments/res/containers/payment-dialog.js rename : toolkit/components/payments/res/containers/payment-method-picker.js => browser/components/payments/res/containers/payment-method-picker.js rename : toolkit/components/payments/res/containers/shipping-option-picker.js => browser/components/payments/res/containers/shipping-option-picker.js rename : toolkit/components/payments/res/debugging.css => browser/components/payments/res/debugging.css rename : toolkit/components/payments/res/debugging.html => browser/components/payments/res/debugging.html rename : toolkit/components/payments/res/debugging.js => browser/components/payments/res/debugging.js rename : toolkit/components/payments/res/mixins/ObservedPropertiesMixin.js => browser/components/payments/res/mixins/ObservedPropertiesMixin.js rename : toolkit/components/payments/res/mixins/PaymentStateSubscriberMixin.js => browser/components/payments/res/mixins/PaymentStateSubscriberMixin.js rename : toolkit/components/payments/res/paymentRequest.css => browser/components/payments/res/paymentRequest.css rename : toolkit/components/payments/res/paymentRequest.js => browser/components/payments/res/paymentRequest.js rename : toolkit/components/payments/res/paymentRequest.xhtml => browser/components/payments/res/paymentRequest.xhtml rename : toolkit/components/payments/res/unprivileged-fallbacks.js => browser/components/payments/res/unprivileged-fallbacks.js rename : toolkit/components/payments/res/vendor/custom-elements.min.js => browser/components/payments/res/vendor/custom-elements.min.js rename : toolkit/components/payments/res/vendor/custom-elements.min.js.map => browser/components/payments/res/vendor/custom-elements.min.js.map rename : toolkit/components/payments/server.py => browser/components/payments/server.py rename : toolkit/components/payments/test/PaymentTestUtils.jsm => browser/components/payments/test/PaymentTestUtils.jsm rename : toolkit/components/payments/test/browser/.eslintrc.js => browser/components/payments/test/browser/.eslintrc.js rename : toolkit/components/payments/test/browser/blank_page.html => browser/components/payments/test/browser/blank_page.html rename : toolkit/components/payments/test/browser/browser.ini => browser/components/payments/test/browser/browser.ini rename : toolkit/components/payments/test/browser/browser_card_edit.js => browser/components/payments/test/browser/browser_card_edit.js rename : toolkit/components/payments/test/browser/browser_change_shipping.js => browser/components/payments/test/browser/browser_change_shipping.js rename : toolkit/components/payments/test/browser/browser_host_name.js => browser/components/payments/test/browser/browser_host_name.js rename : toolkit/components/payments/test/browser/browser_profile_storage.js => browser/components/payments/test/browser/browser_profile_storage.js rename : toolkit/components/payments/test/browser/browser_request_serialization.js => browser/components/payments/test/browser/browser_request_serialization.js rename : toolkit/components/payments/test/browser/browser_request_shipping.js => browser/components/payments/test/browser/browser_request_shipping.js rename : toolkit/components/payments/test/browser/browser_request_summary.js => browser/components/payments/test/browser/browser_request_summary.js rename : toolkit/components/payments/test/browser/browser_shippingaddresschange_error.js => browser/components/payments/test/browser/browser_shippingaddresschange_error.js rename : toolkit/components/payments/test/browser/browser_show_dialog.js => browser/components/payments/test/browser/browser_show_dialog.js rename : toolkit/components/payments/test/browser/browser_total.js => browser/components/payments/test/browser/browser_total.js rename : toolkit/components/payments/test/browser/head.js => browser/components/payments/test/browser/head.js rename : toolkit/components/payments/test/mochitest/.eslintrc.js => browser/components/payments/test/mochitest/.eslintrc.js rename : toolkit/components/payments/test/mochitest/formautofill/mochitest.ini => browser/components/payments/test/mochitest/formautofill/mochitest.ini rename : toolkit/components/payments/test/mochitest/formautofill/test_editCreditCard.html => browser/components/payments/test/mochitest/formautofill/test_editCreditCard.html rename : toolkit/components/payments/test/mochitest/mochitest.ini => browser/components/payments/test/mochitest/mochitest.ini rename : toolkit/components/payments/test/mochitest/payments_common.js => browser/components/payments/test/mochitest/payments_common.js rename : toolkit/components/payments/test/mochitest/test_ObservedPropertiesMixin.html => browser/components/payments/test/mochitest/test_ObservedPropertiesMixin.html rename : toolkit/components/payments/test/mochitest/test_PaymentStateSubscriberMixin.html => browser/components/payments/test/mochitest/test_PaymentStateSubscriberMixin.html rename : toolkit/components/payments/test/mochitest/test_PaymentsStore.html => browser/components/payments/test/mochitest/test_PaymentsStore.html rename : toolkit/components/payments/test/mochitest/test_address_picker.html => browser/components/payments/test/mochitest/test_address_picker.html rename : toolkit/components/payments/test/mochitest/test_basic_card_form.html => browser/components/payments/test/mochitest/test_basic_card_form.html rename : toolkit/components/payments/test/mochitest/test_currency_amount.html => browser/components/payments/test/mochitest/test_currency_amount.html rename : toolkit/components/payments/test/mochitest/test_labelled_checkbox.html => browser/components/payments/test/mochitest/test_labelled_checkbox.html rename : toolkit/components/payments/test/mochitest/test_order_details.html => browser/components/payments/test/mochitest/test_order_details.html rename : toolkit/components/payments/test/mochitest/test_payer_address_picker.html => browser/components/payments/test/mochitest/test_payer_address_picker.html rename : toolkit/components/payments/test/mochitest/test_payment_details_item.html => browser/components/payments/test/mochitest/test_payment_details_item.html rename : toolkit/components/payments/test/mochitest/test_payment_dialog.html => browser/components/payments/test/mochitest/test_payment_dialog.html rename : toolkit/components/payments/test/mochitest/test_payment_method_picker.html => browser/components/payments/test/mochitest/test_payment_method_picker.html rename : toolkit/components/payments/test/mochitest/test_rich_select.html => browser/components/payments/test/mochitest/test_rich_select.html rename : toolkit/components/payments/test/mochitest/test_shipping_option_picker.html => browser/components/payments/test/mochitest/test_shipping_option_picker.html rename : toolkit/components/payments/test/unit/.eslintrc.js => browser/components/payments/test/unit/.eslintrc.js rename : toolkit/components/payments/test/unit/head.js => browser/components/payments/test/unit/head.js rename : toolkit/components/payments/test/unit/test_response_creation.js => browser/components/payments/test/unit/test_response_creation.js rename : toolkit/components/payments/test/unit/xpcshell.ini => browser/components/payments/test/unit/xpcshell.ini
153 lines
5.2 KiB
JavaScript
153 lines
5.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/* This list allows pre-existing or 'unfixable' JS issues to remain, while we
|
|
* detect newly occurring issues in shipping JS. It is a list of regexes
|
|
* matching files which have errors:
|
|
*/
|
|
const kWhitelist = new Set([
|
|
/browser\/content\/browser\/places\/controller.js$/,
|
|
]);
|
|
|
|
const kESModuleList = new Set([
|
|
/browser\/res\/payments\/(components|containers|mixins)\/.*\.js$/,
|
|
/browser\/res\/payments\/paymentRequest\.js$/,
|
|
/browser\/res\/payments\/PaymentsStore\.js$/,
|
|
]);
|
|
|
|
// Normally we would use reflect.jsm to get Reflect.parse. However, if
|
|
// we do that, then all the AST data is allocated in reflect.jsm's
|
|
// zone. That exposes a bug in our GC. The GC collects reflect.jsm's
|
|
// zone but not the zone in which our test code lives (since no new
|
|
// data is being allocated in it). The cross-compartment wrappers in
|
|
// our zone that point to the AST data never get collected, and so the
|
|
// AST data itself is never collected. We need to GC both zones at
|
|
// once to fix the problem.
|
|
const init = Cc["@mozilla.org/jsreflect;1"].createInstance();
|
|
init();
|
|
|
|
/**
|
|
* Check if an error should be ignored due to matching one of the whitelist
|
|
* objects defined in kWhitelist
|
|
*
|
|
* @param uri the uri to check against the whitelist
|
|
* @return true if the uri should be skipped, false otherwise.
|
|
*/
|
|
function uriIsWhiteListed(uri) {
|
|
for (let whitelistItem of kWhitelist) {
|
|
if (whitelistItem.test(uri.spec)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if a URI should be parsed as an ES module.
|
|
*
|
|
* @param uri the uri to check against the ES module list
|
|
* @return true if the uri should be parsed as a module, otherwise parse it as a script.
|
|
*/
|
|
function uriIsESModule(uri) {
|
|
for (let whitelistItem of kESModuleList) {
|
|
if (whitelistItem.test(uri.spec)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function parsePromise(uri, parseTarget) {
|
|
let promise = new Promise((resolve, reject) => {
|
|
let xhr = new XMLHttpRequest();
|
|
xhr.open("GET", uri, true);
|
|
xhr.onreadystatechange = function() {
|
|
if (this.readyState == this.DONE) {
|
|
let scriptText = this.responseText;
|
|
try {
|
|
info(`Checking ${parseTarget} ${uri}`);
|
|
let parseOpts = {
|
|
source: uri,
|
|
target: parseTarget,
|
|
};
|
|
Reflect.parse(scriptText, parseOpts);
|
|
resolve(true);
|
|
} catch (ex) {
|
|
let errorMsg = "Script error reading " + uri + ": " + ex;
|
|
ok(false, errorMsg);
|
|
resolve(false);
|
|
}
|
|
}
|
|
};
|
|
xhr.onerror = (error) => {
|
|
ok(false, "XHR error reading " + uri + ": " + error);
|
|
resolve(false);
|
|
};
|
|
xhr.overrideMimeType("application/javascript");
|
|
xhr.send(null);
|
|
});
|
|
return promise;
|
|
}
|
|
|
|
add_task(async function checkAllTheJS() {
|
|
// In debug builds, even on a fast machine, collecting the file list may take
|
|
// more than 30 seconds, and parsing all files may take four more minutes.
|
|
// For this reason, this test must be explictly requested in debug builds by
|
|
// using the "--setpref parse=<filter>" argument to mach. You can specify:
|
|
// - A case-sensitive substring of the file name to test (slow).
|
|
// - A single absolute URI printed out by a previous run (fast).
|
|
// - An empty string to run the test on all files (slowest).
|
|
let parseRequested = Services.prefs.prefHasUserValue("parse");
|
|
let parseValue = parseRequested && Services.prefs.getCharPref("parse");
|
|
if (SpecialPowers.isDebugBuild) {
|
|
if (!parseRequested) {
|
|
ok(true, "Test disabled on debug build. To run, execute: ./mach" +
|
|
" mochitest-browser --setpref parse=<case_sensitive_filter>" +
|
|
" browser/base/content/test/general/browser_parsable_script.js");
|
|
return;
|
|
}
|
|
// Request a 15 minutes timeout (30 seconds * 30) for debug builds.
|
|
requestLongerTimeout(30);
|
|
}
|
|
|
|
let uris;
|
|
// If an absolute URI is specified on the command line, use it immediately.
|
|
if (parseValue && parseValue.includes(":")) {
|
|
uris = [NetUtil.newURI(parseValue)];
|
|
} else {
|
|
let appDir = Services.dirsvc.get("GreD", Ci.nsIFile);
|
|
// This asynchronously produces a list of URLs (sadly, mostly sync on our
|
|
// test infrastructure because it runs against jarfiles there, and
|
|
// our zipreader APIs are all sync)
|
|
let startTimeMs = Date.now();
|
|
info("Collecting URIs");
|
|
uris = await generateURIsFromDirTree(appDir, [".js", ".jsm"]);
|
|
info("Collected URIs in " + (Date.now() - startTimeMs) + "ms");
|
|
|
|
// Apply the filter specified on the command line, if any.
|
|
if (parseValue) {
|
|
uris = uris.filter(uri => {
|
|
if (uri.spec.includes(parseValue)) {
|
|
return true;
|
|
}
|
|
info("Not checking filtered out " + uri.spec);
|
|
return false;
|
|
});
|
|
}
|
|
}
|
|
|
|
// We create an array of promises so we can parallelize all our parsing
|
|
// and file loading activity:
|
|
await throttledMapPromises(uris, uri => {
|
|
if (uriIsWhiteListed(uri)) {
|
|
info("Not checking whitelisted " + uri.spec);
|
|
return undefined;
|
|
}
|
|
let target = "script";
|
|
if (uriIsESModule(uri)) {
|
|
target = "module";
|
|
}
|
|
return parsePromise(uri.spec, target);
|
|
});
|
|
ok(true, "All files parsed");
|
|
});
|