Bug 1405047 - Export 43262ffa - chore(ping-centre): Shield ID filtering should happen per ping sent (#3618) draft
authorEd Lee <edilee@mozilla.com>
Mon, 02 Oct 2017 10:40:56 -0700
changeset 673685 f8719e4e8d224881042381bcf9e6e2076b816e48
parent 673683 c210989a93ff4689be3f218c42761a4cd4632902
child 673686 413fc656a8546d2a21deb6e1842513f57937c90d
push id82608
push userbmo:edilee@mozilla.com
push dateMon, 02 Oct 2017 17:41:26 +0000
bugs1405047
milestone57.0
Bug 1405047 - Export 43262ffa - chore(ping-centre): Shield ID filtering should happen per ping sent (#3618) MozReview-Commit-ID: 7vWMHvweBSq
browser/extensions/activity-stream/install.rdf.in
browser/extensions/activity-stream/lib/TelemetryFeed.jsm
browser/modules/PingCentre.jsm
--- a/browser/extensions/activity-stream/install.rdf.in
+++ b/browser/extensions/activity-stream/install.rdf.in
@@ -3,17 +3,17 @@
 #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>activity-stream@mozilla.org</em:id>
     <em:type>2</em:type>
     <em:bootstrap>true</em:bootstrap>
     <em:unpack>false</em:unpack>
-    <em:version>2017.10.02.1059-019fdbda</em:version>
+    <em:version>2017.10.02.1060-43262ffa</em:version>
     <em:name>Activity Stream</em:name>
     <em:description>A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox.</em:description>
     <em:multiprocessCompatible>true</em:multiprocessCompatible>
 
     <em:targetApplication>
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
         <em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
--- a/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
+++ b/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
@@ -16,16 +16,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
   "resource://activity-stream/common/PerfService.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PingCentre",
   "resource:///modules/PingCentre.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "gUUIDGenerator",
   "@mozilla.org/uuid-generator;1",
   "nsIUUIDGenerator");
 
+const ACTIVITY_STREAM_ID = "activity-stream";
 const ACTIVITY_STREAM_ENDPOINT_PREF = "browser.newtabpage.activity-stream.telemetry.ping.endpoint";
 
 // This is a mapping table between the user preferences and its encoding code
 const USER_PREFS_ENCODING = {
   "showSearch": 1 << 0,
   "showTopSites": 1 << 1,
   "feeds.section.topstories": 1 << 2
 };
@@ -155,22 +156,20 @@ this.TelemetryFeed = class TelemetryFeed
   _onTelemetryPrefChange(prefVal) {
     this.telemetryEnabled = prefVal;
   }
 
   /**
    * Lazily initialize PingCentre to send pings
    */
   get pingCentre() {
-    const ACTIVITY_STREAM_ID = "activity-stream";
     Object.defineProperty(this, "pingCentre",
       {
         value: new PingCentre({
           topic: ACTIVITY_STREAM_ID,
-          filter: ACTIVITY_STREAM_ID,
           overrideEndpointPref: ACTIVITY_STREAM_ENDPOINT_PREF
         })
       });
     return this.pingCentre;
   }
 
   /**
    * Get encoded user preferences, multiple prefs will be combined via bitwise OR operator
@@ -358,17 +357,18 @@ this.TelemetryFeed = class TelemetryFeed
         action: "activity_stream_session",
         perf: session.perf
       }
     );
   }
 
   async sendEvent(event_object) {
     if (this.telemetryEnabled) {
-      this.pingCentre.sendPing(event_object);
+      this.pingCentre.sendPing(event_object,
+      {filter: ACTIVITY_STREAM_ID});
     }
   }
 
   handleImpressionStats(action) {
     const payload = action.data;
     let guidSet;
     let index;
 
--- a/browser/modules/PingCentre.jsm
+++ b/browser/modules/PingCentre.jsm
@@ -33,17 +33,16 @@ const FHR_UPLOAD_ENABLED_PREF = "datarep
  */
 class PingCentre {
   constructor(options) {
     if (!options.topic) {
       throw new Error("Must specify topic.");
     }
 
     this._topic = options.topic;
-    this._filter = options.filter;
     this._prefs = Services.prefs.getBranch("");
 
     this._setPingEndpoint(options.topic, options.overrideEndpointPref);
 
     this._enabled = this._prefs.getBoolPref(TELEMETRY_PREF);
     this._onTelemetryPrefChange = this._onTelemetryPrefChange.bind(this);
     this._prefs.addObserver(TELEMETRY_PREF, this._onTelemetryPrefChange);
 
@@ -87,33 +86,34 @@ class PingCentre {
   _onTelemetryPrefChange(aSubject, aTopic, prefKey) {
     this._enabled = this._prefs.getBoolPref(prefKey);
   }
 
   _onFhrPrefChange(aSubject, aTopic, prefKey) {
     this._fhrEnabled = this._prefs.getBoolPref(prefKey);
   }
 
-  _createExperimentsString(activeExperiments) {
+  _createExperimentsString(activeExperiments, filter) {
     let experimentsString = "";
     for (let experimentID in activeExperiments) {
       if (!activeExperiments[experimentID] ||
           !activeExperiments[experimentID].branch ||
-          (this._filter && !experimentID.includes(this._filter))) {
+          (filter && !experimentID.includes(filter))) {
         continue;
       }
       let expString = `${experimentID}:${activeExperiments[experimentID].branch}`;
       experimentsString = experimentsString.concat(`${expString};`);
     }
     return experimentsString;
   }
 
-  async sendPing(data) {
+  async sendPing(data, options) {
+    let filter = options && options.filter;
     let experiments = TelemetryEnvironment.getActiveExperiments();
-    let experimentsString = this._createExperimentsString(experiments);
+    let experimentsString = this._createExperimentsString(experiments, filter);
     if (!this.enabled) {
       return Promise.resolve();
     }
 
     let clientID = data.client_id || await this.telemetryClientId;
     let locale = data.locale || Services.locale.getAppLocalesAsLangTags().pop();
     const payload = Object.assign({
       locale,