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 += [
|
DIRS += [
|
||||||
'aushelper',
|
'aushelper',
|
||||||
|
'clicktoplay-rollout',
|
||||||
'e10srollout',
|
'e10srollout',
|
||||||
'followonsearch',
|
'followonsearch',
|
||||||
'pdfjs',
|
'pdfjs',
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
"{firefox}\\omni.ja": {"mincount": 0, "maxcount": 46, "minbytes": 0, "maxbytes": 3014656},
|
"{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\\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\\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\\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\\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},
|
"{firefox}\\browser\\features\\formautofill@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
|
||||||
|
Loading…
Reference in New Issue
Block a user