forked from mirrors/gecko-dev
MozReview-Commit-ID: LidgzhI4Z7h --HG-- rename : browser/extensions/shield-recipe-client/content/AboutPages.jsm => toolkit/components/normandy/content/AboutPages.jsm rename : browser/extensions/shield-recipe-client/content/about-studies/about-studies.css => toolkit/components/normandy/content/about-studies/about-studies.css rename : browser/extensions/shield-recipe-client/content/about-studies/about-studies.html => toolkit/components/normandy/content/about-studies/about-studies.html rename : browser/extensions/shield-recipe-client/content/about-studies/about-studies.js => toolkit/components/normandy/content/about-studies/about-studies.js rename : browser/extensions/shield-recipe-client/content/about-studies/common.js => toolkit/components/normandy/content/about-studies/common.js rename : browser/extensions/shield-recipe-client/content/about-studies/img/shield-logo.png => toolkit/components/normandy/content/about-studies/img/shield-logo.png rename : browser/extensions/shield-recipe-client/content/about-studies/shield-studies.js => toolkit/components/normandy/content/about-studies/shield-studies.js rename : browser/extensions/shield-recipe-client/content/shield-content-frame.js => toolkit/components/normandy/content/shield-content-frame.js rename : browser/extensions/shield-recipe-client/content/shield-content-process.js => toolkit/components/normandy/content/shield-content-process.js rename : browser/extensions/shield-recipe-client/docs/data-collection.rst => toolkit/components/normandy/docs/data-collection.rst rename : browser/extensions/shield-recipe-client/docs/index.rst => toolkit/components/normandy/docs/index.rst rename : browser/extensions/shield-recipe-client/jar.mn => toolkit/components/normandy/jar.mn rename : browser/extensions/shield-recipe-client/lib/ActionSandboxManager.jsm => toolkit/components/normandy/lib/ActionSandboxManager.jsm rename : browser/extensions/shield-recipe-client/lib/AddonStudies.jsm => toolkit/components/normandy/lib/AddonStudies.jsm rename : browser/extensions/shield-recipe-client/lib/Addons.jsm => toolkit/components/normandy/lib/Addons.jsm rename : browser/extensions/shield-recipe-client/lib/CleanupManager.jsm => toolkit/components/normandy/lib/CleanupManager.jsm rename : browser/extensions/shield-recipe-client/lib/ClientEnvironment.jsm => toolkit/components/normandy/lib/ClientEnvironment.jsm rename : browser/extensions/shield-recipe-client/lib/EventEmitter.jsm => toolkit/components/normandy/lib/EventEmitter.jsm rename : browser/extensions/shield-recipe-client/lib/FilterExpressions.jsm => toolkit/components/normandy/lib/FilterExpressions.jsm rename : browser/extensions/shield-recipe-client/lib/Heartbeat.jsm => toolkit/components/normandy/lib/Heartbeat.jsm rename : browser/extensions/shield-recipe-client/lib/LogManager.jsm => toolkit/components/normandy/lib/LogManager.jsm rename : browser/extensions/shield-recipe-client/lib/NormandyApi.jsm => toolkit/components/normandy/lib/NormandyApi.jsm rename : browser/extensions/shield-recipe-client/lib/NormandyDriver.jsm => toolkit/components/normandy/lib/NormandyDriver.jsm rename : browser/extensions/shield-recipe-client/lib/PreferenceExperiments.jsm => toolkit/components/normandy/lib/PreferenceExperiments.jsm rename : browser/extensions/shield-recipe-client/lib/PreferenceFilters.jsm => toolkit/components/normandy/lib/PreferenceFilters.jsm rename : browser/extensions/shield-recipe-client/lib/RecipeRunner.jsm => toolkit/components/normandy/lib/RecipeRunner.jsm rename : browser/extensions/shield-recipe-client/lib/Sampling.jsm => toolkit/components/normandy/lib/Sampling.jsm rename : browser/extensions/shield-recipe-client/lib/SandboxManager.jsm => toolkit/components/normandy/lib/SandboxManager.jsm rename : browser/extensions/shield-recipe-client/lib/ShieldPreferences.jsm => toolkit/components/normandy/lib/ShieldPreferences.jsm rename : browser/extensions/shield-recipe-client/lib/Storage.jsm => toolkit/components/normandy/lib/Storage.jsm rename : browser/extensions/shield-recipe-client/lib/TelemetryEvents.jsm => toolkit/components/normandy/lib/TelemetryEvents.jsm rename : browser/extensions/shield-recipe-client/lib/Uptake.jsm => toolkit/components/normandy/lib/Uptake.jsm rename : browser/extensions/shield-recipe-client/lib/Utils.jsm => toolkit/components/normandy/lib/Utils.jsm rename : browser/extensions/shield-recipe-client/moz.build => toolkit/components/normandy/moz.build rename : browser/extensions/shield-recipe-client/skin/osx/Heartbeat.css => toolkit/components/normandy/skin/osx/Heartbeat.css rename : browser/extensions/shield-recipe-client/skin/shared/Heartbeat.css => toolkit/components/normandy/skin/shared/Heartbeat.css rename : browser/extensions/shield-recipe-client/skin/shared/heartbeat-icon.svg => toolkit/components/normandy/skin/shared/heartbeat-icon.svg rename : browser/extensions/shield-recipe-client/skin/shared/heartbeat-star-lit.svg => toolkit/components/normandy/skin/shared/heartbeat-star-lit.svg rename : browser/extensions/shield-recipe-client/skin/shared/heartbeat-star-off.svg => toolkit/components/normandy/skin/shared/heartbeat-star-off.svg rename : browser/extensions/shield-recipe-client/test/.eslintrc.js => toolkit/components/normandy/test/.eslintrc.js rename : browser/extensions/shield-recipe-client/test/browser/.eslintrc.js => toolkit/components/normandy/test/browser/.eslintrc.js rename : browser/extensions/shield-recipe-client/test/browser/action_server.sjs => toolkit/components/normandy/test/browser/action_server.sjs rename : browser/extensions/shield-recipe-client/test/browser/browser.ini => toolkit/components/normandy/test/browser/browser.ini rename : browser/extensions/shield-recipe-client/test/browser/browser_ActionSandboxManager.js => toolkit/components/normandy/test/browser/browser_ActionSandboxManager.js rename : browser/extensions/shield-recipe-client/test/browser/browser_AddonStudies.js => toolkit/components/normandy/test/browser/browser_AddonStudies.js rename : browser/extensions/shield-recipe-client/test/browser/browser_Addons.js => toolkit/components/normandy/test/browser/browser_Addons.js rename : browser/extensions/shield-recipe-client/test/browser/browser_CleanupManager.js => toolkit/components/normandy/test/browser/browser_CleanupManager.js rename : browser/extensions/shield-recipe-client/test/browser/browser_ClientEnvironment.js => toolkit/components/normandy/test/browser/browser_ClientEnvironment.js rename : browser/extensions/shield-recipe-client/test/browser/browser_EventEmitter.js => toolkit/components/normandy/test/browser/browser_EventEmitter.js rename : browser/extensions/shield-recipe-client/test/browser/browser_FilterExpressions.js => toolkit/components/normandy/test/browser/browser_FilterExpressions.js rename : browser/extensions/shield-recipe-client/test/browser/browser_Heartbeat.js => toolkit/components/normandy/test/browser/browser_Heartbeat.js rename : browser/extensions/shield-recipe-client/test/browser/browser_LogManager.js => toolkit/components/normandy/test/browser/browser_LogManager.js rename : browser/extensions/shield-recipe-client/test/browser/browser_bootstrap.js => toolkit/components/normandy/test/browser/browser_Normandy.js rename : browser/extensions/shield-recipe-client/test/browser/browser_NormandyDriver.js => toolkit/components/normandy/test/browser/browser_NormandyDriver.js rename : browser/extensions/shield-recipe-client/test/browser/browser_PreferenceExperiments.js => toolkit/components/normandy/test/browser/browser_PreferenceExperiments.js rename : browser/extensions/shield-recipe-client/test/browser/browser_RecipeRunner.js => toolkit/components/normandy/test/browser/browser_RecipeRunner.js rename : browser/extensions/shield-recipe-client/test/browser/browser_ShieldPreferences.js => toolkit/components/normandy/test/browser/browser_ShieldPreferences.js rename : browser/extensions/shield-recipe-client/test/browser/browser_ShieldRecipeClient.js => toolkit/components/normandy/test/browser/browser_ShieldRecipeClient.js rename : browser/extensions/shield-recipe-client/test/browser/browser_Storage.js => toolkit/components/normandy/test/browser/browser_Storage.js rename : browser/extensions/shield-recipe-client/test/browser/browser_about_preferences.js => toolkit/components/normandy/test/browser/browser_about_preferences.js rename : browser/extensions/shield-recipe-client/test/browser/browser_about_studies.js => toolkit/components/normandy/test/browser/browser_about_studies.js rename : browser/extensions/shield-recipe-client/test/browser/fixtures/addon-fixture/manifest.json => toolkit/components/normandy/test/browser/fixtures/addon-fixture/manifest.json rename : browser/extensions/shield-recipe-client/test/browser/fixtures/normandy.xpi => toolkit/components/normandy/test/browser/fixtures/normandy.xpi rename : browser/extensions/shield-recipe-client/test/browser/head.js => toolkit/components/normandy/test/browser/head.js rename : browser/extensions/shield-recipe-client/test/unit/.eslintrc.js => toolkit/components/normandy/test/unit/.eslintrc.js rename : browser/extensions/shield-recipe-client/test/unit/echo_server.sjs => toolkit/components/normandy/test/unit/echo_server.sjs rename : browser/extensions/shield-recipe-client/test/unit/head_xpc.js => toolkit/components/normandy/test/unit/head_xpc.js rename : browser/extensions/shield-recipe-client/test/unit/invalid_recipe_signature_api/api/v1/index.json => toolkit/components/normandy/test/unit/invalid_recipe_signature_api/api/v1/index.json rename : browser/extensions/shield-recipe-client/test/unit/invalid_recipe_signature_api/api/v1/recipe/signed/index.json => toolkit/components/normandy/test/unit/invalid_recipe_signature_api/api/v1/recipe/signed/index.json rename : browser/extensions/shield-recipe-client/test/unit/invalid_recipe_signature_api/normandy.content-signature.mozilla.org-20210705.dev.chain => toolkit/components/normandy/test/unit/invalid_recipe_signature_api/normandy.content-signature.mozilla.org-20210705.dev.chain rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/console-log/implementation/sha384-RGx3rydrSq53UfmW9kFcK0mQYra67XIvZvr4MhmAe--ljiiMQOtgM7Cmca48um3v => toolkit/components/normandy/test/unit/mock_api/api/v1/action/console-log/implementation/sha384-RGx3rydrSq53UfmW9kFcK0mQYra67XIvZvr4MhmAe--ljiiMQOtgM7Cmca48um3v rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/console-log/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/action/console-log/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/action/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/opt-out-study/implementation/sha384-HM_avYcD00o27ufwU1V7PIBtiuMAXML6MMwlYrDEqDX-XzGVuOfL52RCM680JExN => toolkit/components/normandy/test/unit/mock_api/api/v1/action/opt-out-study/implementation/sha384-HM_avYcD00o27ufwU1V7PIBtiuMAXML6MMwlYrDEqDX-XzGVuOfL52RCM680JExN rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/opt-out-study/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/action/opt-out-study/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/preference-experiment/implementation/sha384-KQgG38GQ7KZAb2VIB48ANQO6nBcxZoLm2ORzUviRT5nAvSywyPjZ5cJIElw6iXIt => toolkit/components/normandy/test/unit/mock_api/api/v1/action/preference-experiment/implementation/sha384-KQgG38GQ7KZAb2VIB48ANQO6nBcxZoLm2ORzUviRT5nAvSywyPjZ5cJIElw6iXIt rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/preference-experiment/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/action/preference-experiment/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/show-heartbeat/implementation/sha384-dEGiyKPEln8Ns5cQHzGpMIGdirSAAX0X-Kwlu-U3sJ05yNbO-ANij_a6c5SyL7G4 => toolkit/components/normandy/test/unit/mock_api/api/v1/action/show-heartbeat/implementation/sha384-dEGiyKPEln8Ns5cQHzGpMIGdirSAAX0X-Kwlu-U3sJ05yNbO-ANij_a6c5SyL7G4 rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/show-heartbeat/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/action/show-heartbeat/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/action/signed/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/action/signed/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/classify_client/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/classify_client/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/recipe/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/recipe/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/api/v1/recipe/signed/index.json => toolkit/components/normandy/test/unit/mock_api/api/v1/recipe/signed/index.json rename : browser/extensions/shield-recipe-client/test/unit/mock_api/normandy.content-signature.mozilla.org-20210705.dev.chain => toolkit/components/normandy/test/unit/mock_api/normandy.content-signature.mozilla.org-20210705.dev.chain rename : browser/extensions/shield-recipe-client/test/unit/query_server.sjs => toolkit/components/normandy/test/unit/query_server.sjs rename : browser/extensions/shield-recipe-client/test/unit/test_NormandyApi.js => toolkit/components/normandy/test/unit/test_NormandyApi.js rename : browser/extensions/shield-recipe-client/test/unit/test_Sampling.js => toolkit/components/normandy/test/unit/test_Sampling.js rename : browser/extensions/shield-recipe-client/test/unit/test_SandboxManager.js => toolkit/components/normandy/test/unit/test_SandboxManager.js rename : browser/extensions/shield-recipe-client/test/unit/test_Utils.js => toolkit/components/normandy/test/unit/test_Utils.js rename : browser/extensions/shield-recipe-client/test/unit/utils.js => toolkit/components/normandy/test/unit/utils.js rename : browser/extensions/shield-recipe-client/test/unit/xpcshell.ini => toolkit/components/normandy/test/unit/xpcshell.ini rename : browser/extensions/shield-recipe-client/vendor/LICENSE_THIRDPARTY => toolkit/components/normandy/vendor/LICENSE_THIRDPARTY rename : browser/extensions/shield-recipe-client/vendor/PropTypes.js => toolkit/components/normandy/vendor/PropTypes.js rename : browser/extensions/shield-recipe-client/vendor/React.js => toolkit/components/normandy/vendor/React.js rename : browser/extensions/shield-recipe-client/vendor/ReactDOM.js => toolkit/components/normandy/vendor/ReactDOM.js rename : browser/extensions/shield-recipe-client/vendor/classnames.js => toolkit/components/normandy/vendor/classnames.js rename : browser/extensions/shield-recipe-client/vendor/mozjexl.js => toolkit/components/normandy/vendor/mozjexl.js extra : rebase_source : 23de90d080eb96bed8cab7c9f8557f1b27c5d9ae extra : source : 18a7f08a6cdc379574836737f776c62c6e755134
167 lines
4.8 KiB
JavaScript
167 lines
4.8 KiB
JavaScript
"use strict";
|
|
|
|
ChromeUtils.import("resource://normandy/lib/ActionSandboxManager.jsm", this);
|
|
ChromeUtils.import("resource://normandy/lib/NormandyDriver.jsm", this);
|
|
|
|
async function withManager(script, testFunction) {
|
|
const manager = new ActionSandboxManager(script);
|
|
manager.addHold("testing");
|
|
await testFunction(manager);
|
|
manager.removeHold("testing");
|
|
}
|
|
|
|
add_task(async function testMissingCallbackName() {
|
|
await withManager("1 + 1", async manager => {
|
|
is(
|
|
await manager.runAsyncCallback("missingCallback"),
|
|
undefined,
|
|
"runAsyncCallback returns undefined when given a missing callback name",
|
|
);
|
|
});
|
|
});
|
|
|
|
add_task(async function testCallback() {
|
|
const script = `
|
|
registerAsyncCallback("testCallback", async function(normandy) {
|
|
return 5;
|
|
});
|
|
`;
|
|
|
|
await withManager(script, async manager => {
|
|
const result = await manager.runAsyncCallback("testCallback");
|
|
is(result, 5, "runAsyncCallback executes the named callback inside the sandbox");
|
|
});
|
|
});
|
|
|
|
add_task(async function testArguments() {
|
|
const script = `
|
|
registerAsyncCallback("testCallback", async function(normandy, a, b) {
|
|
return a + b;
|
|
});
|
|
`;
|
|
|
|
await withManager(script, async manager => {
|
|
const result = await manager.runAsyncCallback("testCallback", 4, 6);
|
|
is(result, 10, "runAsyncCallback passes arguments to the callback");
|
|
});
|
|
});
|
|
|
|
add_task(async function testCloning() {
|
|
const script = `
|
|
registerAsyncCallback("testCallback", async function(normandy, obj) {
|
|
return {foo: "bar", baz: obj.baz};
|
|
});
|
|
`;
|
|
|
|
await withManager(script, async manager => {
|
|
const result = await manager.runAsyncCallback("testCallback", {baz: "biff"});
|
|
|
|
Assert.deepEqual(
|
|
result,
|
|
{foo: "bar", baz: "biff"},
|
|
(
|
|
"runAsyncCallback clones arguments into the sandbox and return values into the " +
|
|
"context it was called from"
|
|
),
|
|
);
|
|
});
|
|
});
|
|
|
|
add_task(async function testError() {
|
|
const script = `
|
|
registerAsyncCallback("testCallback", async function(normandy) {
|
|
throw new Error("WHY")
|
|
});
|
|
`;
|
|
|
|
await withManager(script, async manager => {
|
|
try {
|
|
await manager.runAsyncCallback("testCallback");
|
|
ok(false, "runAsnycCallbackFromScript throws errors when raised by the sandbox");
|
|
} catch (err) {
|
|
is(err.message, "WHY", "runAsnycCallbackFromScript throws errors when raised by the sandbox");
|
|
}
|
|
});
|
|
});
|
|
|
|
add_task(async function testDriver() {
|
|
// The value returned by runAsyncCallback is cloned without the cloneFunctions
|
|
// option, so we can't inspect the driver itself since its methods will not be
|
|
// present. Instead, we inspect the properties on it available to the sandbox.
|
|
const script = `
|
|
registerAsyncCallback("testCallback", async function(normandy) {
|
|
return Object.keys(normandy);
|
|
});
|
|
`;
|
|
|
|
await withManager(script, async manager => {
|
|
const sandboxDriverKeys = await manager.runAsyncCallback("testCallback");
|
|
const referenceDriver = new NormandyDriver(manager);
|
|
for (const prop of Object.keys(referenceDriver)) {
|
|
ok(sandboxDriverKeys.includes(prop), `runAsyncCallback's driver has the "${prop}" property.`);
|
|
}
|
|
});
|
|
});
|
|
|
|
add_task(async function testGlobalObject() {
|
|
// Test that window is an alias for the global object, and that it
|
|
// has some expected functions available on it.
|
|
const script = `
|
|
window.setOnWindow = "set";
|
|
this.setOnGlobal = "set";
|
|
|
|
registerAsyncCallback("testCallback", async function(normandy) {
|
|
return {
|
|
setOnWindow: setOnWindow,
|
|
setOnGlobal: window.setOnGlobal,
|
|
setTimeoutExists: setTimeout !== undefined,
|
|
clearTimeoutExists: clearTimeout !== undefined,
|
|
};
|
|
});
|
|
`;
|
|
|
|
await withManager(script, async manager => {
|
|
const result = await manager.runAsyncCallback("testCallback");
|
|
Assert.deepEqual(result, {
|
|
setOnWindow: "set",
|
|
setOnGlobal: "set",
|
|
setTimeoutExists: true,
|
|
clearTimeoutExists: true,
|
|
}, "sandbox.window is the global object and has expected functions.");
|
|
});
|
|
});
|
|
|
|
add_task(async function testRegisterActionShim() {
|
|
const recipe = {
|
|
foo: "bar",
|
|
};
|
|
const script = `
|
|
class TestAction {
|
|
constructor(driver, recipe) {
|
|
this.driver = driver;
|
|
this.recipe = recipe;
|
|
}
|
|
|
|
execute() {
|
|
return new Promise(resolve => {
|
|
resolve({
|
|
foo: this.recipe.foo,
|
|
isDriver: "log" in this.driver,
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
registerAction('test-action', TestAction);
|
|
`;
|
|
|
|
await withManager(script, async manager => {
|
|
const result = await manager.runAsyncCallback("action", recipe);
|
|
is(result.foo, "bar", "registerAction registers an async callback for actions");
|
|
is(
|
|
result.isDriver,
|
|
true,
|
|
"registerAction passes the driver to the action class constructor",
|
|
);
|
|
});
|
|
});
|