mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Bug 1365714 - Part 2 - System add-on to control rollout of the CTP feature. r=bsmedberg
MozReview-Commit-ID: LKk8UNgBnQb --HG-- rename : browser/extensions/e10srollout/install.rdf.in => browser/extensions/clicktoplay-rollout/install.rdf.in rename : browser/extensions/e10srollout/moz.build => browser/extensions/clicktoplay-rollout/moz.build
This commit is contained in:
parent
a68d24e991
commit
a256ce3b76
144
browser/extensions/clicktoplay-rollout/bootstrap.js
vendored
Normal file
144
browser/extensions/clicktoplay-rollout/bootstrap.js
vendored
Normal file
@ -0,0 +1,144 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
"use strict";
|
||||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/Preferences.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/UpdateUtils.jsm");
|
||||
Cu.import("resource://gre/modules/AppConstants.jsm");
|
||||
Cu.import("resource://gre/modules/TelemetryEnvironment.jsm");
|
||||
|
||||
// The amount of people to be part of the rollout
|
||||
const TEST_THRESHOLD = {
|
||||
"beta": 0.5, // 50%
|
||||
"release": 0.05, // 5%
|
||||
};
|
||||
|
||||
if (AppConstants.RELEASE_OR_BETA) {
|
||||
// The rollout is controlled by the channel name, which
|
||||
// is the only way to distinguish between Beta and Release.
|
||||
// However, non-official release builds (like the ones done by distros
|
||||
// to ship Firefox on their package managers) do not set a value
|
||||
// for the release channel, which gets them to the default value
|
||||
// of.. (drumroll) "default".
|
||||
// But we can't just always configure the same settings for the
|
||||
// "default" channel because that's also the name that a locally
|
||||
// built Firefox gets, and CTP is already directly set there
|
||||
// through an #ifdef in firefox.js
|
||||
TEST_THRESHOLD.default = TEST_THRESHOLD.release;
|
||||
}
|
||||
|
||||
const PREF_COHORT_SAMPLE = "plugins.ctprollout.cohortSample";
|
||||
const PREF_COHORT_NAME = "plugins.ctprollout.cohort";
|
||||
const PREF_FLASH_STATE = "plugin.state.flash";
|
||||
|
||||
function startup() {
|
||||
defineCohort();
|
||||
}
|
||||
|
||||
function defineCohort() {
|
||||
let updateChannel = UpdateUtils.getUpdateChannel(false);
|
||||
if (!(updateChannel in TEST_THRESHOLD)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let cohort = Preferences.get(PREF_COHORT_NAME);
|
||||
|
||||
if (!cohort) {
|
||||
// The cohort has not been defined yet: this is the first
|
||||
// time that we're running. Let's see if the user has
|
||||
// a non-default setting to avoid changing it.
|
||||
let currentPluginState = Preferences.get(PREF_FLASH_STATE);
|
||||
switch (currentPluginState) {
|
||||
case Ci.nsIPluginTag.STATE_CLICKTOPLAY:
|
||||
cohort = "early-adopter-ctp";
|
||||
break;
|
||||
|
||||
case Ci.nsIPluginTag.STATE_DISABLED:
|
||||
cohort = "early-adopter-disabled";
|
||||
break;
|
||||
|
||||
default:
|
||||
// intentionally missing from the list is STATE_ENABLED,
|
||||
// which will keep cohort undefined.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (cohort) {
|
||||
case undefined:
|
||||
case "test":
|
||||
case "control":
|
||||
{
|
||||
// If it's either test/control, the cohort might have changed
|
||||
// if the desired sampling has been changed.
|
||||
let testThreshold = TEST_THRESHOLD[updateChannel];
|
||||
let testGroup = (getUserSample(false) < testThreshold);
|
||||
|
||||
if (testGroup) {
|
||||
cohort = "test";
|
||||
let defaultPrefs = new Preferences({defaultBranch: true});
|
||||
defaultPrefs.set(PREF_FLASH_STATE, Ci.nsIPluginTag.STATE_CLICKTOPLAY);
|
||||
} else {
|
||||
cohort = "control";
|
||||
}
|
||||
|
||||
setCohort(cohort);
|
||||
watchForPrefChanges();
|
||||
break;
|
||||
}
|
||||
|
||||
case "early-adopter-ctp":
|
||||
case "early-adopter-disabled":
|
||||
default:
|
||||
// "user-changed-from-*" will fall into this default case and
|
||||
// not do anything special.
|
||||
setCohort(cohort);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function getUserSample() {
|
||||
let prefValue = Preferences.get(PREF_COHORT_SAMPLE, undefined);
|
||||
let value = 0.0;
|
||||
|
||||
if (typeof(prefValue) == "string") {
|
||||
value = parseFloat(prefValue, 10);
|
||||
return value;
|
||||
}
|
||||
|
||||
value = Math.random();
|
||||
Preferences.set(PREF_COHORT_SAMPLE, value.toString().substr(0, 8));
|
||||
return value;
|
||||
}
|
||||
|
||||
function setCohort(cohortName) {
|
||||
Preferences.set(PREF_COHORT_NAME, cohortName);
|
||||
TelemetryEnvironment.setExperimentActive("clicktoplay-rollout", cohortName);
|
||||
|
||||
try {
|
||||
if (Ci.nsICrashReporter) {
|
||||
Services.appinfo.QueryInterface(Ci.nsICrashReporter).annotateCrashReport("CTPCohort", cohortName);
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function watchForPrefChanges() {
|
||||
Preferences.observe(PREF_FLASH_STATE, function() {
|
||||
let currentCohort = Preferences.get(PREF_COHORT_NAME, "unknown");
|
||||
setCohort(`user-changed-from-${currentCohort}`);
|
||||
});
|
||||
}
|
||||
|
||||
function install() {
|
||||
}
|
||||
|
||||
function shutdown(data, reason) {
|
||||
}
|
||||
|
||||
function uninstall() {
|
||||
}
|
32
browser/extensions/clicktoplay-rollout/install.rdf.in
Normal file
32
browser/extensions/clicktoplay-rollout/install.rdf.in
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
#filter substitution
|
||||
|
||||
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
|
||||
|
||||
<Description about="urn:mozilla:install-manifest">
|
||||
<em:id>clicktoplay-rollout@mozilla.org</em:id>
|
||||
<em:version>1.0</em:version>
|
||||
<em:type>2</em:type>
|
||||
<em:bootstrap>true</em:bootstrap>
|
||||
<em:multiprocessCompatible>true</em:multiprocessCompatible>
|
||||
|
||||
<!-- Target Application this theme can install into,
|
||||
with minimum and maximum supported versions. -->
|
||||
<em:targetApplication>
|
||||
<Description>
|
||||
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
||||
<em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
|
||||
<em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion>
|
||||
</Description>
|
||||
</em:targetApplication>
|
||||
|
||||
<!-- Front End MetaData -->
|
||||
<em:name>Click-to-Play staged rollout</em:name>
|
||||
<em:description>Staged rollout for Click-to-Play Flash.</em:description>
|
||||
</Description>
|
||||
</RDF>
|
16
browser/extensions/clicktoplay-rollout/moz.build
Normal file
16
browser/extensions/clicktoplay-rollout/moz.build
Normal file
@ -0,0 +1,16 @@
|
||||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
|
||||
DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
|
||||
|
||||
FINAL_TARGET_FILES.features['clicktoplay-rollout@mozilla.org'] += [
|
||||
'bootstrap.js'
|
||||
]
|
||||
|
||||
FINAL_TARGET_PP_FILES.features['clicktoplay-rollout@mozilla.org'] += [
|
||||
'install.rdf.in'
|
||||
]
|
@ -6,6 +6,7 @@
|
||||
|
||||
DIRS += [
|
||||
'aushelper',
|
||||
'clicktoplay-rollout',
|
||||
'e10srollout',
|
||||
'followonsearch',
|
||||
'pdfjs',
|
||||
|
@ -7,6 +7,7 @@
|
||||
"{firefox}\\omni.ja": {"mincount": 0, "maxcount": 46, "minbytes": 0, "maxbytes": 3014656},
|
||||
"{firefox}\\browser\\omni.ja": {"mincount": 0, "maxcount": 28, "minbytes": 0, "maxbytes": 1835008},
|
||||
"{firefox}\\browser\\features\\aushelper@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
|
||||
"{firefox}\\browser\\features\\clicktoplay-rollout@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
|
||||
"{firefox}\\browser\\features\\e10srollout@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
|
||||
"{firefox}\\browser\\features\\flyweb@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
|
||||
"{firefox}\\browser\\features\\formautofill@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
|
||||
|
Loading…
Reference in New Issue
Block a user