mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-10 05:08:36 +02:00
102 lines
2.9 KiB
JavaScript
102 lines
2.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
/* eslint-disable no-unused-vars */
|
|
|
|
const { XPCOMUtils } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/XPCOMUtils.sys.mjs"
|
|
);
|
|
|
|
const lazy = {};
|
|
ChromeUtils.defineModuleGetter(
|
|
lazy,
|
|
"JsonSchema",
|
|
"resource://gre/modules/JsonSchema.jsm"
|
|
);
|
|
|
|
XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]);
|
|
|
|
function assertValidates(validator, obj, msg) {
|
|
const result = validator.validate(obj);
|
|
Assert.ok(
|
|
result.valid && result.errors.length === 0,
|
|
`${msg} - errors = ${JSON.stringify(result.errors, undefined, 2)}`
|
|
);
|
|
}
|
|
|
|
async function fetchSchema(uri) {
|
|
try {
|
|
return fetch(uri, { credentials: "omit" }).then(rsp => rsp.json());
|
|
} catch (e) {
|
|
throw new Error(`Could not fetch ${uri}`);
|
|
}
|
|
}
|
|
|
|
async function schemaValidatorFor(uri, { common = false } = {}) {
|
|
const schema = await fetchSchema(uri);
|
|
const validator = new lazy.JsonSchema.Validator(schema);
|
|
|
|
if (common) {
|
|
const commonSchema = await fetchSchema(
|
|
"resource://testing-common/FxMSCommon.schema.json"
|
|
);
|
|
validator.addSchema(commonSchema);
|
|
}
|
|
|
|
return validator;
|
|
}
|
|
|
|
async function makeValidators() {
|
|
const experimentValidator = await schemaValidatorFor(
|
|
"resource://activity-stream/schemas/MessagingExperiment.schema.json"
|
|
);
|
|
|
|
const messageValidators = {
|
|
cfr_doorhanger: await schemaValidatorFor(
|
|
"resource://testing-common/ExtensionDoorhanger.schema.json",
|
|
{ common: true }
|
|
),
|
|
cfr_urlbar_chiclet: await schemaValidatorFor(
|
|
"resource://testing-common/CFRUrlbarChiclet.schema.json",
|
|
{ common: true }
|
|
),
|
|
infobar: await schemaValidatorFor(
|
|
"resource://testing-common/InfoBar.schema.json",
|
|
{ common: true }
|
|
),
|
|
pb_newtab: await schemaValidatorFor(
|
|
"resource://testing-common/NewtabPromoMessage.schema.json",
|
|
{ common: true }
|
|
),
|
|
protections_panel: await schemaValidatorFor(
|
|
"resource://testing-common/ProtectionsPanelMessage.schema.json",
|
|
{ common: true }
|
|
),
|
|
spotlight: await schemaValidatorFor(
|
|
"resource://testing-common/Spotlight.schema.json",
|
|
{ common: true }
|
|
),
|
|
toast_notification: await schemaValidatorFor(
|
|
"resource://testing-common/ToastNotification.schema.json",
|
|
{ common: true }
|
|
),
|
|
toolbar_badge: await schemaValidatorFor(
|
|
"resource://testing-common/ToolbarBadgeMessage.schema.json",
|
|
{ common: true }
|
|
),
|
|
update_action: await schemaValidatorFor(
|
|
"resource://testing-common/UpdateAction.schema.json",
|
|
{ common: true }
|
|
),
|
|
whatsnew_panel_message: await schemaValidatorFor(
|
|
"resource://testing-common/WhatsNewMessage.schema.json",
|
|
{ common: true }
|
|
),
|
|
};
|
|
|
|
messageValidators.milestone_message = messageValidators.cfr_doorhanger;
|
|
|
|
return { experimentValidator, messageValidators };
|
|
}
|