Bug 1325872 - TLS 1.3 Firefox 51 Experiment. r=felipc
authorEKR <ekr@rtfm.com>
Tue, 10 Jan 2017 14:29:30 -0800
changeset 106 b2fcfa5e05a5a4996e96e086c9657ffc89d38d46
parent 105 791a488e9527c24bfdc9b428a318686d863d81cb
child 107 41d6781de8db6db7b09ff5fb5753cedea5fc7721
push id82
push userekr@mozilla.com
push dateTue, 10 Jan 2017 22:30:22 +0000
reviewersfelipc
bugs1325872
Bug 1325872 - TLS 1.3 Firefox 51 Experiment. r=felipc
experiments/tls13-compat-ff51/README.md
experiments/tls13-compat-ff51/code/bootstrap.js
experiments/tls13-compat-ff51/code/install.rdf
experiments/tls13-compat-ff51/experiment.xpi
experiments/tls13-compat-ff51/manifest.json
copy from experiments/tls13-compat-nightly52/README.md
copy to experiments/tls13-compat-ff51/README.md
--- a/experiments/tls13-compat-nightly52/README.md
+++ b/experiments/tls13-compat-ff51/README.md
@@ -1,11 +1,13 @@
 This experiment compares performance/behavior of various TLS servers
 (which can be configured differently) by doing a GET to each URL and
-then reporting the results.
+then reporting the results. It starts by enabling TLS 1.3 and if
+all the tests succed, it leaves it on as the second half of the
+experiment.
 
 The report payload is a JSON list with each entry in the list consisting
 of a dictionary with the following values:
 
 * url -- the URL being tested
 * index -- the order in which the URL was tested
 * start_time -- the time when the request was started in milliseconds since the epoch
 * status -- the HTTP status code
copy from experiments/tls13-compat-nightly52/code/bootstrap.js
copy to experiments/tls13-compat-ff51/code/bootstrap.js
--- a/experiments/tls13-compat-nightly52/code/bootstrap.js
+++ b/experiments/tls13-compat-ff51/code/bootstrap.js
@@ -1,23 +1,25 @@
 let {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource:///modules/experiments/Experiments.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/TelemetryController.jsm");
 
+var gStarted = false;
 const kSELF_ID = "tls-compat-beta51@experiments.mozilla.org";
 const kVERSION_MAX_PREF = "security.tls.version.max";
+
 // These should be different hosts so that we don't bias any performance test
 // toward 1.2.
-
 const kURLs = [
-   "https://disabled.tls13.com/",
-   "https://enabled.tls13.com/"
+  // This must be first because we use it as a test for TLS 1.3 working    
+  "https://enabled.tls13.com/", 
+  "https://disabled.tls13.com/"
 ];
 
 // These variables are unreliable for some reason.
 function read(obj, field) {
   try {
     return obj[field];
   } catch (e) {
     Cu.reportError(e);
@@ -92,42 +94,121 @@ function report(result) {
     }, {});
 }
 
 function disable() {
   Experiments.instance().disableExperiment("FROM_API");
 }
 
 // Inefficient shuffle algorithm, but n <= 10
-function shuffleArray(inarr) {
+function shuffleArray(orig) {
+  var inarr = [];
+  for (i in orig) {
+    inarr.push(orig[i]);
+  }
   var out = [];
     while(inarr.length > 0) {
         x = Math.floor(Math.random() * inarr.length);
         out.push(inarr.splice(x,1)[0])
   }
   return out;
 }
 
+function ensureExperimentBranch() {
+  return new Promise(resolve => {
+    let experiments = Experiments.instance();
+
+    // If we have already determined the branch, return the
+    // response.
+    let branch = experiments.getActiveExperimentBranch();
+    if (branch) {
+      console.log("TLS 1.3 experiment branch already selected: " + branch);
+      resolve(branch);
+      return;
+    }
+
+    // OK, we need to run an experiment to determine the
+    // branch.
+    // Start by making it disabled.
+    branch = "disabled";    
+    let prefs = new Preferences({ defaultBranch: true });
+    prefs.set(kVERSION_MAX_PREF, 4);
+    let todo = [];
+    let shuffled = shuffleArray(kURLs);
+    
+    for (var i in shuffled) {
+      todo.push(makeRequest(i, shuffled[i], null ));
+    }
+
+    Promise.all(todo)
+      .then(result => {
+        for (r in result) {
+          // If we successfully do a TLS 1.3 fetch at all, mark it enabled.
+          if ((result[r].url == kURLs[0]) && result[r].status === 200) {
+            console.log("TLS 1.3 succeeded");
+            branch = "enabled";
+          }
+        }
+        report(result);
+      })
+      .catch(e => Cu.reportError(e))
+      .then(_ => {
+        prefs.set(kVERSION_MAX_PREF, 3);
+      })
+      .then(_ => {
+        let id = experiments.getActiveExperimentID();
+        console.log("TLS 1.3 experiment branch result was: " + branch);        
+        return experiments.setExperimentBranch(id, branch);
+      }).
+      then(_ => resolve(branch));
+  });
+}
+
 // This is a simple experiment:
 // - Install
+// - Enable TLS 1.3.
 // - Connect to a bunch of servers and record the results
 //   (see README.md for details on report format)
-// - Deactivate.
-function install() {
-  let todo = [];
-  let shuffled = shuffleArray(kURLs);
-  
-  for (var i in shuffled) {
-    todo.push(makeRequest(i, shuffled[i], null ));
+// - If the TLS 1.3 connection succeeded, leave TLS 1.3 on.
+
+function startup() {
+  // Don't do anything if the user has already messed with this
+  // setting.
+  let userprefs = new Preferences();
+  if (userprefs.isSet(kVERSION_MAX_PREF)) {
+    console.log("User has changed TLS max version. Skipping");
+    experiments.setExperimentBranch(id, "skipped");
+    disable();
+    return;
   }
-
-  return Promise.all(todo)
-    .then(result => report(result))
-    .catch(e => Cu.reportError(e))
-    .then(_ => {
-      disable();
-    });
+ 
+  // Seems startup() function is launched twice after install, we're
+  // unsure why so far. We only want it to run once.
+  if (gStarted) {
+    return;
+  }
+  gStarted = true;
+  ensureExperimentBranch().then(branch => {
+    let prefs = new Preferences({defaultBranch: true});
+    switch (branch) {
+      case "enabled":
+        prefs.set(kVERSION_MAX_PREF, 4);
+        return;
+      case "disabled":
+        // Do nothing.
+        return;
+      default:
+        throw new Error("Unexpected experiment branch: " + branch);
+    }
+  }, e => {
+    Cu.reportError("Got error during bootstrap startup: " + e);
+  });
 }
 
-function startup() {}
-function shutdown() {}
+function shutdown() {
+  gStarted = false;
+}
+
+function install() {}
 function uninstall() {}
 
+
+
copy from experiments/tls13-compat-nightly52/code/install.rdf
copy to experiments/tls13-compat-ff51/code/install.rdf
--- a/experiments/tls13-compat-nightly52/code/install.rdf
+++ b/experiments/tls13-compat-ff51/code/install.rdf
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
 <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>tls13-compat-nightly52@experiments.mozilla.org</em:id>
+    <em:id>tls13-compat-ff51@experiments.mozilla.org</em:id>
     <em:version>1.0.0</em:version>
     <em:type>128</em:type>
     <em:bootstrap>true</em:bootstrap>
     <em:unpack>false</em:unpack>
 
     <!-- Firefox -->
     <em:targetApplication>
       <Description>
         <em:id>{5428e386-68cf-4283-8ee3-04c12d3f4f4e}</em:id>
-        <em:minVersion>52.0a1</em:minVersion>
-        <em:maxVersion>52.0a1</em:maxVersion>
+        <em:minVersion>51</em:minVersion>
+        <em:maxVersion>51.*</em:maxVersion>
       </Description>
     </em:targetApplication>
 
     <!-- Front End MetaData -->
     <em:name>TLS 1.3 Compatibility Testing</em:name>
     <em:description>Testing compatibility of TLS 1.3.</em:description>
-    <em:aboutURL>https://bugzilla.mozilla.org/show_bug.cgi?id=1310338</em:aboutURL>
+    <em:aboutURL>https://bugzilla.mozilla.org/show_bug.cgi?id=1325872</em:aboutURL>
   </Description>
 </RDF>
copy from experiments/tls13-compat-nightly52/experiment.xpi
copy to experiments/tls13-compat-ff51/experiment.xpi
index 61cd2c775435c948a2c27f403458c24e8480af33..d15ffebf2bfed9b1dcd04e2201ab2c411a50260e
GIT binary patch
literal 7000
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
G?fnl|GUrSH
copy from experiments/tls13-compat-nightly52/manifest.json
copy to experiments/tls13-compat-ff51/manifest.json
--- a/experiments/tls13-compat-nightly52/manifest.json
+++ b/experiments/tls13-compat-ff51/manifest.json
@@ -1,18 +1,19 @@
 {
   "publish"     : true,
   "priority"    : 2,
   "name"        : "TLS 1.3 Compatibility Testing 1",
   "description" : "Measure the compatibility of TLS 1.3",
-  "info"        : "<p><a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1310338\">Related bug</a></p>",
+  "info"        : "<p><a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1325872\">Related bug</a></p>",
   "manifest"    : {
-    "id"               : "tls13-compat-nightly52@experiments.mozilla.org",
+    "id"               : "tls13-compat-ff51@experiments.mozilla.org",
     "startTime"        : 1477637000,
-    "endTime"          : 1481760000,
-    "maxActiveSeconds" : 86400,
+    "endTime"          : 1485216000,
+    "maxActiveSeconds" : 1209600,
     "appName"          : ["Firefox"],
-    "channel"          : ["nightly"],
-    "minVersion"       : "52.0a1*",
-    "maxVersion"       : "52.0a1",
+      "channel"          : ["beta", "default"],
+    "minVersion"       : "51",
+    "minBuildID"       : "20170105155013",
+    "maxVersion"       : "51.*",
     "sample"           : 0.1
   }
 }