forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			93 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const { PreferenceExperiments } = ChromeUtils.import(
 | 
						|
  "resource://normandy/lib/PreferenceExperiments.jsm"
 | 
						|
);
 | 
						|
const { ShieldPreferences } = ChromeUtils.import(
 | 
						|
  "resource://normandy/lib/ShieldPreferences.jsm"
 | 
						|
);
 | 
						|
 | 
						|
const OPT_OUT_STUDIES_ENABLED_PREF = "app.shield.optoutstudies.enabled";
 | 
						|
 | 
						|
const { NormandyTestUtils } = ChromeUtils.import(
 | 
						|
  "resource://testing-common/NormandyTestUtils.jsm"
 | 
						|
);
 | 
						|
const {
 | 
						|
  addonStudyFactory,
 | 
						|
  preferenceStudyFactory,
 | 
						|
} = NormandyTestUtils.factories;
 | 
						|
 | 
						|
ShieldPreferences.init();
 | 
						|
 | 
						|
decorate_task(
 | 
						|
  withMockPreferences(),
 | 
						|
  AddonStudies.withStudies([
 | 
						|
    addonStudyFactory({ active: true }),
 | 
						|
    addonStudyFactory({ active: true }),
 | 
						|
  ]),
 | 
						|
  async function testDisableStudiesWhenOptOutDisabled({
 | 
						|
    mockPreferences,
 | 
						|
    addonStudies: [study1, study2],
 | 
						|
  }) {
 | 
						|
    mockPreferences.set(OPT_OUT_STUDIES_ENABLED_PREF, true);
 | 
						|
    const observers = [
 | 
						|
      studyEndObserved(study1.recipeId),
 | 
						|
      studyEndObserved(study2.recipeId),
 | 
						|
    ];
 | 
						|
    Services.prefs.setBoolPref(OPT_OUT_STUDIES_ENABLED_PREF, false);
 | 
						|
    await Promise.all(observers);
 | 
						|
 | 
						|
    const newStudy1 = await AddonStudies.get(study1.recipeId);
 | 
						|
    const newStudy2 = await AddonStudies.get(study2.recipeId);
 | 
						|
    ok(
 | 
						|
      !newStudy1.active && !newStudy2.active,
 | 
						|
      "Setting the opt-out pref to false stops all active opt-out studies."
 | 
						|
    );
 | 
						|
  }
 | 
						|
);
 | 
						|
 | 
						|
decorate_task(
 | 
						|
  withMockPreferences(),
 | 
						|
  PreferenceExperiments.withMockExperiments([
 | 
						|
    preferenceStudyFactory({ active: true }),
 | 
						|
    preferenceStudyFactory({ active: true }),
 | 
						|
  ]),
 | 
						|
  withStub(PreferenceExperiments, "stop"),
 | 
						|
  async function testDisableExperimentsWhenOptOutDisabled({
 | 
						|
    mockPreferences,
 | 
						|
    prefExperiments: [study1, study2],
 | 
						|
    stopStub,
 | 
						|
  }) {
 | 
						|
    mockPreferences.set(OPT_OUT_STUDIES_ENABLED_PREF, true);
 | 
						|
    let stopArgs = [];
 | 
						|
    let stoppedBoth = new Promise(resolve => {
 | 
						|
      let calls = 0;
 | 
						|
      stopStub.callsFake(function() {
 | 
						|
        stopArgs.push(Array.from(arguments));
 | 
						|
        calls++;
 | 
						|
        if (calls == 2) {
 | 
						|
          resolve();
 | 
						|
        }
 | 
						|
      });
 | 
						|
    });
 | 
						|
    Services.prefs.setBoolPref(OPT_OUT_STUDIES_ENABLED_PREF, false);
 | 
						|
    await stoppedBoth;
 | 
						|
 | 
						|
    Assert.deepEqual(stopArgs, [
 | 
						|
      [
 | 
						|
        study1.slug,
 | 
						|
        {
 | 
						|
          reason: "general-opt-out",
 | 
						|
          caller: "observePrefChange::general-opt-out",
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      [
 | 
						|
        study2.slug,
 | 
						|
        {
 | 
						|
          reason: "general-opt-out",
 | 
						|
          caller: "observePrefChange::general-opt-out",
 | 
						|
        },
 | 
						|
      ],
 | 
						|
    ]);
 | 
						|
  }
 | 
						|
);
 |