Bug 1502076 - Part 2: Remove the fastblock UI from the Control Centre r=johannh
authorEhsan Akhgari <ehsan@mozilla.com>
Fri, 26 Oct 2018 06:55:20 +0000
changeset 443089 4579afb8b513704a4c668ebcf774dac31b25ab04
parent 443088 fc41d57ddd83ac90943b3b510ab71d03590af87b
child 443090 2db84dbb7f99acbe326b372d03be97620b27fba0
push id34937
push usernerli@mozilla.com
push dateFri, 26 Oct 2018 09:49:07 +0000
treeherdermozilla-central@2db84dbb7f99 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjohannh
bugs1502076
milestone65.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1502076 - Part 2: Remove the fastblock UI from the Control Centre r=johannh Depends on D9794 Differential Revision: https://phabricator.services.mozilla.com/D9795
browser/app/profile/firefox.js
browser/base/content/browser-contentblocking.js
browser/base/content/test/trackingUI/browser_trackingUI_report_breakage.js
browser/base/content/test/trackingUI/browser_trackingUI_state.js
browser/base/content/test/trackingUI/browser_trackingUI_telemetry.js
browser/components/controlcenter/content/panel.inc.xul
browser/components/nsBrowserGlue.js
browser/components/uitour/test/browser_contentBlocking.js
browser/locales/en-US/chrome/browser/browser.dtd
browser/themes/shared/controlcenter/panel.inc.css
browser/themes/shared/controlcenter/slowtrackers-disabled.svg
browser/themes/shared/controlcenter/slowtrackers.svg
browser/themes/shared/jar.inc.mn
toolkit/components/telemetry/Events.yaml
toolkit/components/telemetry/Scalars.yaml
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1521,19 +1521,16 @@ pref("browser.contentblocking.global-tog
 pref("browser.contentblocking.global-toggle.enabled", false);
 #endif
 
 #ifdef NIGHTLY_BUILD
 // Enable the Storage Access API in Nightly
 pref("dom.storage_access.enabled", true);
 #endif
 
-// Disable the UI for FastBlock in product.
-pref("browser.contentblocking.fastblock.control-center.ui.enabled", false);
-
 // Define a set of default features for the Content Blocking UI.
 pref("browser.contentblocking.trackingprotection.ui.enabled", true);
 pref("browser.contentblocking.trackingprotection.control-center.ui.enabled", true);
 pref("browser.contentblocking.rejecttrackers.ui.enabled", true);
 pref("browser.contentblocking.rejecttrackers.ui.recommended", true);
 pref("browser.contentblocking.rejecttrackers.control-center.ui.enabled", true);
 pref("browser.contentblocking.cookies-site-data.ui.reject-trackers.recommended", true);
 pref("browser.contentblocking.cookies-site-data.ui.reject-trackers.enabled", true);
--- a/browser/base/content/browser-contentblocking.js
+++ b/browser/base/content/browser-contentblocking.js
@@ -1,33 +1,12 @@
 /* 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/. */
 
-var FastBlock = {
-  reportBreakageLabel: "fastblock",
-  telemetryIdentifier: "fb",
-  PREF_ENABLED: "browser.fastblock.enabled",
-  PREF_UI_ENABLED: "browser.contentblocking.fastblock.control-center.ui.enabled",
-
-  get categoryItem() {
-    delete this.categoryItem;
-    return this.categoryItem = document.getElementById("identity-popup-content-blocking-category-fastblock");
-  },
-
-  init() {
-    XPCOMUtils.defineLazyPreferenceGetter(this, "enabled", this.PREF_ENABLED, false);
-    XPCOMUtils.defineLazyPreferenceGetter(this, "visible", this.PREF_UI_ENABLED, false);
-  },
-
-  isBlockerActivated(state) {
-    return state & Ci.nsIWebProgressListener.STATE_BLOCKED_SLOW_TRACKING_CONTENT;
-  },
-};
-
 var TrackingProtection = {
   reportBreakageLabel: "trackingprotection",
   telemetryIdentifier: "tp",
   PREF_ENABLED_GLOBALLY: "privacy.trackingprotection.enabled",
   PREF_ENABLED_IN_PRIVATE_WINDOWS: "privacy.trackingprotection.pbmode.enabled",
   PREF_UI_ENABLED: "browser.contentblocking.trackingprotection.control-center.ui.enabled",
   enabledGlobally: false,
   enabledInPrivateWindows: false,
@@ -209,17 +188,17 @@ var ContentBlocking = {
   // A list of blockers that will be displayed in the categories list
   // when blockable content is detected. A blocker must be an object
   // with at least the following two properties:
   //  - enabled: Whether the blocker is currently turned on.
   //  - categoryItem: The DOM item that represents the entry in the category list.
   //
   // It may also contain an init() and uninit() function, which will be called
   // on ContentBlocking.init() and ContentBlocking.uninit().
-  blockers: [FastBlock, TrackingProtection, ThirdPartyCookies],
+  blockers: [TrackingProtection, ThirdPartyCookies],
 
   get _baseURIForChannelClassifier() {
     // Convert document URI into the format used by
     // nsChannelClassifier::ShouldEnableTrackingProtection.
     // Any scheme turned into https is correct.
     try {
       return Services.io.newURI("https://" + gBrowser.selectedBrowser.currentURI.hostPort);
     } catch (e) {
@@ -358,19 +337,16 @@ var ContentBlocking = {
     body += `${TrackingProtection.PREF_UI_ENABLED}: ${Services.prefs.getBoolPref(TrackingProtection.PREF_UI_ENABLED)}\n`;
     body += `urlclassifier.trackingTable: ${Services.prefs.getStringPref("urlclassifier.trackingTable")}\n`;
     body += `network.http.referer.defaultPolicy: ${Services.prefs.getIntPref("network.http.referer.defaultPolicy")}\n`;
     body += `network.http.referer.defaultPolicy.pbmode: ${Services.prefs.getIntPref("network.http.referer.defaultPolicy.pbmode")}\n`;
     body += `${ThirdPartyCookies.PREF_UI_ENABLED}: ${Services.prefs.getBoolPref(ThirdPartyCookies.PREF_UI_ENABLED)}\n`;
     body += `${ThirdPartyCookies.PREF_ENABLED}: ${Services.prefs.getIntPref(ThirdPartyCookies.PREF_ENABLED)}\n`;
     body += `network.cookie.lifetimePolicy: ${Services.prefs.getIntPref("network.cookie.lifetimePolicy")}\n`;
     body += `privacy.restrict3rdpartystorage.expiration: ${Services.prefs.getIntPref("privacy.restrict3rdpartystorage.expiration")}\n`;
-    body += `${FastBlock.PREF_ENABLED}: ${Services.prefs.getBoolPref(FastBlock.PREF_ENABLED)}\n`;
-    body += `${FastBlock.PREF_UI_ENABLED}: ${Services.prefs.getBoolPref(FastBlock.PREF_UI_ENABLED)}\n`;
-    body += `browser.fastblock.timeout: ${Services.prefs.getIntPref("browser.fastblock.timeout")}\n`;
 
     let comments = document.getElementById("identity-popup-breakageReportView-collection-comments");
     body += "\n**Comments**\n" + comments.value;
 
     formData.set("body", body);
 
     let activatedBlockers = [];
     for (let blocker of this.blockers) {
@@ -464,17 +440,16 @@ var ContentBlocking = {
     this.iconBox.toggleAttribute("active", active);
     this.iconBox.toggleAttribute("hasException", this.enabled && hasException);
 
     // For release (due to the large volume) we only want to receive reports
     // for breakage that is directly related to third party cookie blocking.
     if (this.reportBreakageEnabled ||
         (ThirdPartyCookies.reportBreakageEnabled &&
          ThirdPartyCookies.activated &&
-         !FastBlock.activated &&
          !TrackingProtection.activated)) {
       this.reportBreakageButton.removeAttribute("hidden");
     } else {
       this.reportBreakageButton.setAttribute("hidden", "true");
     }
 
     if (isSimulated) {
       this.iconBox.removeAttribute("animate");
--- a/browser/base/content/test/trackingUI/browser_trackingUI_report_breakage.js
+++ b/browser/base/content/test/trackingUI/browser_trackingUI_report_breakage.js
@@ -81,17 +81,16 @@ add_task(async function testReportBreaka
         "browser.contentblocking.reportBreakage.enabled": true,
       },
       buttonVisible: false,
     },
     {
       url: COOKIE_PAGE,
       prefs: {
         "browser.contentblocking.enabled": true,
-        "browser.fastblock.enabled": false,
         "privacy.trackingprotection.enabled": false,
         "network.cookie.cookieBehavior": Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER,
         "browser.contentblocking.reportBreakage.enabled": false,
         "browser.contentblocking.rejecttrackers.reportBreakage.enabled": true,
       },
       buttonVisible: true,
     },
   ];
@@ -208,19 +207,16 @@ add_task(async function testReportBreaka
           "browser.contentblocking.trackingprotection.control-center.ui.enabled",
           "urlclassifier.trackingTable",
           "network.http.referer.defaultPolicy",
           "network.http.referer.defaultPolicy.pbmode",
           "browser.contentblocking.rejecttrackers.control-center.ui.enabled",
           "network.cookie.cookieBehavior",
           "network.cookie.lifetimePolicy",
           "privacy.restrict3rdpartystorage.expiration",
-          "browser.fastblock.enabled",
-          "browser.contentblocking.fastblock.control-center.ui.enabled",
-          "browser.fastblock.timeout",
         ];
         let prefsBody = "";
 
         for (let pref of prefs) {
           prefsBody += `${pref}: ${Preferences.get(pref)}\r\n`;
         }
 
         Assert.deepEqual(sections, [
--- a/browser/base/content/test/trackingUI/browser_trackingUI_state.js
+++ b/browser/base/content/test/trackingUI/browser_trackingUI_state.js
@@ -12,40 +12,33 @@
  *     2) A page with tracking elements is loaded.
  *
  * See also Bugs 1175327, 1043801, 1178985
  */
 
 const CB_PREF = "browser.contentblocking.enabled";
 const TP_PREF = "privacy.trackingprotection.enabled";
 const TP_PB_PREF = "privacy.trackingprotection.pbmode.enabled";
-const FB_PREF = "browser.fastblock.enabled";
-const FB_TIMEOUT_PREF = "browser.fastblock.timeout";
-const FB_LIMIT_PREF = "browser.fastblock.limit";
 const TPC_PREF = "network.cookie.cookieBehavior";
 const BENIGN_PAGE = "http://tracking.example.org/browser/browser/base/content/test/trackingUI/benignPage.html";
 const TRACKING_PAGE = "http://tracking.example.org/browser/browser/base/content/test/trackingUI/trackingPage.html";
 const COOKIE_PAGE = "http://not-tracking.example.com/browser/browser/base/content/test/trackingUI/cookiePage.html";
 var ContentBlocking = null;
-var FastBlock = null;
 var TrackingProtection = null;
 var ThirdPartyCookies = null;
 var tabbrowser = null;
 var gTrackingPageURL = TRACKING_PAGE;
 
 registerCleanupFunction(function() {
-  TrackingProtection = ContentBlocking = FastBlock =
+  TrackingProtection = ContentBlocking =
     ThirdPartyCookies = tabbrowser = null;
   UrlClassifierTestUtils.cleanupTestTrackers();
   Services.prefs.clearUserPref(TP_PREF);
   Services.prefs.clearUserPref(TP_PB_PREF);
   Services.prefs.clearUserPref(CB_PREF);
-  Services.prefs.clearUserPref(FB_PREF);
-  Services.prefs.clearUserPref(FB_TIMEOUT_PREF);
-  Services.prefs.clearUserPref(FB_LIMIT_PREF);
   Services.prefs.clearUserPref(TPC_PREF);
 });
 
 // This is a special version of "hidden" that doesn't check for item
 // visibility and just asserts the display and opacity attributes.
 // That way we can test elements even when their panel is hidden...
 function hidden(sel) {
   let win = tabbrowser.ownerGlobal;
@@ -105,24 +98,19 @@ function testBenignPageWithException() {
   ok(hidden("#identity-popup-content-blocking-detected"), "blocking detected label is hidden");
   ok(hidden("#identity-popup-content-blocking-category-list"), "category list is hidden");
 }
 
 function areTrackersBlocked(isPrivateBrowsing) {
   let cbEnabled = Services.prefs.getBoolPref(CB_PREF);
   let blockedByTP = cbEnabled &&
                     Services.prefs.getBoolPref(isPrivateBrowsing ? TP_PB_PREF : TP_PREF);
-  let blockedByFB = cbEnabled &&
-                    Services.prefs.getBoolPref(FB_PREF) &&
-                    // The timeout pref is only checked for completeness,
-                    // checking it is technically unneeded for this test.
-                    Services.prefs.getIntPref(FB_TIMEOUT_PREF) == 0;
   let blockedByTPC = cbEnabled &&
                      Services.prefs.getIntPref(TPC_PREF) == Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER;
-  return blockedByTP || blockedByFB || blockedByTPC;
+  return blockedByTP || blockedByTPC;
 }
 
 function testTrackingPage(window) {
   info("Tracking content must be blocked");
   ok(ContentBlocking.content.hasAttribute("detected"), "trackers are detected");
   ok(!ContentBlocking.content.hasAttribute("hasException"), "content shows no exception");
 
   let isPrivateBrowsing = PrivateBrowsingUtils.isWindowPrivate(window);
@@ -150,24 +138,19 @@ function testTrackingPage(window) {
     is(!hidden("#tracking-action-unblock"), blockedByTP,
        "unblockButton is" + (blockedByTP ? "" : " not") + " visible");
   }
 
   ok(hidden("#identity-popup-content-blocking-not-detected"), "blocking not detected label is hidden");
   ok(!hidden("#identity-popup-content-blocking-detected"), "blocking detected label is visible");
 
   ok(!hidden("#identity-popup-content-blocking-category-list"), "category list is visible");
-  let category;
-  if (Services.prefs.getBoolPref(FB_PREF)) {
-    category = "#identity-popup-content-blocking-category-fastblock";
-  } else {
-    category = Services.prefs.getIntPref(TPC_PREF) == Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER ?
-                 "#identity-popup-content-blocking-category-3rdpartycookies" :
-                 "#identity-popup-content-blocking-category-tracking-protection";
-  }
+  let category = Services.prefs.getIntPref(TPC_PREF) == Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER ?
+               "#identity-popup-content-blocking-category-3rdpartycookies" :
+               "#identity-popup-content-blocking-category-tracking-protection";
   is(hidden(category + " > .identity-popup-content-blocking-category-add-blocking"), blockedByTP,
     "Category item is" + (blockedByTP ? " not" : "") + " showing add blocking");
   is(hidden(category + " > .identity-popup-content-blocking-category-state-label"), !blockedByTP,
     "Category item is" + (blockedByTP ? "" : " not") + " set to blocked");
 
   if (Services.prefs.getIntPref(TPC_PREF) == Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER) {
     ok(hidden("#identity-popup-content-blocking-category-label-default"),
       "Not showing default cookie restrictions label.");
@@ -200,24 +183,19 @@ function testTrackingPageUnblocked(block
      "blockButton is" + (blockingEnabled ? " not" : "") + " visible");
   ok(hidden("#tracking-action-unblock"), "unblockButton is hidden");
   ok(!hidden("#identity-popup-content-blocking-disabled-label"), "disabled label is visible");
 
   ok(hidden("#identity-popup-content-blocking-not-detected"), "blocking not detected label is hidden");
   ok(!hidden("#identity-popup-content-blocking-detected"), "blocking detected label is visible");
 
   ok(!hidden("#identity-popup-content-blocking-category-list"), "category list is visible");
-  let category;
-  if (Services.prefs.getBoolPref(FB_PREF)) {
-    category = "#identity-popup-content-blocking-category-fastblock";
-  } else {
-    category = Services.prefs.getIntPref(TPC_PREF) == Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER ?
-                 "#identity-popup-content-blocking-category-3rdpartycookies" :
-                 "#identity-popup-content-blocking-category-tracking-protection";
-  }
+  let category = Services.prefs.getIntPref(TPC_PREF) == Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER ?
+               "#identity-popup-content-blocking-category-3rdpartycookies" :
+               "#identity-popup-content-blocking-category-tracking-protection";
   is(hidden(category + " > .identity-popup-content-blocking-category-add-blocking"), blockedByTP,
     "Category item is" + (blockedByTP ? " not" : "") + " showing add blocking");
   // Always hidden no matter if blockedByTP or not, since we have an exception.
   ok(hidden("#identity-popup-content-blocking-category-tracking-protection > .identity-popup-content-blocking-category-state-label"),
     "TP category item is not set to blocked");
 }
 
 function testTrackingPageWithCBDisabled() {
@@ -326,17 +304,16 @@ add_task(async function testNormalBrowsi
 
   ContentBlocking = gBrowser.ownerGlobal.ContentBlocking;
   ok(ContentBlocking, "CB is attached to the browser window");
   TrackingProtection = gBrowser.ownerGlobal.TrackingProtection;
   ok(TrackingProtection, "TP is attached to the browser window");
   is(TrackingProtection.enabled, Services.prefs.getBoolPref(TP_PREF),
      "TP.enabled is based on the original pref value");
 
-  Services.prefs.setBoolPref(FB_PREF, false);
   Services.prefs.setIntPref(TPC_PREF, Ci.nsICookieService.BEHAVIOR_ACCEPT);
 
   await testContentBlockingEnabled(tab);
 
   Services.prefs.setBoolPref(CB_PREF, false);
   ok(!ContentBlocking.enabled, "CB is disabled after setting the pref");
 
   await testContentBlockingDisabled(tab);
@@ -350,29 +327,27 @@ add_task(async function testNormalBrowsi
 
   Services.prefs.setBoolPref(CB_PREF, false);
   ok(!ContentBlocking.enabled, "CB is disabled after setting the pref");
 
   await testContentBlockingDisabled(tab);
 
   gBrowser.removeCurrentTab();
 
-  Services.prefs.clearUserPref(FB_PREF);
   Services.prefs.clearUserPref(TPC_PREF);
 });
 
 add_task(async function testPrivateBrowsing() {
   let privateWin = await BrowserTestUtils.openNewBrowserWindow({private: true});
   tabbrowser = privateWin.gBrowser;
   let tab = tabbrowser.selectedTab = BrowserTestUtils.addTab(tabbrowser);
 
   // Set the normal mode pref to false to check the pbmode pref.
   Services.prefs.setBoolPref(TP_PREF, false);
 
-  Services.prefs.setBoolPref(FB_PREF, false);
   Services.prefs.setIntPref(TPC_PREF, Ci.nsICookieService.BEHAVIOR_ACCEPT);
 
   ContentBlocking = tabbrowser.ownerGlobal.ContentBlocking;
   ok(ContentBlocking, "CB is attached to the private window");
   TrackingProtection = tabbrowser.ownerGlobal.TrackingProtection;
   ok(TrackingProtection, "TP is attached to the private window");
   is(TrackingProtection.enabled, Services.prefs.getBoolPref(TP_PB_PREF),
      "TP.enabled is based on the pb pref value");
@@ -393,72 +368,23 @@ add_task(async function testPrivateBrows
 
   Services.prefs.setBoolPref(CB_PREF, false);
   ok(!ContentBlocking.enabled, "CB is disabled after setting the pref");
 
   await testContentBlockingDisabled(tab);
 
   privateWin.close();
 
-  Services.prefs.clearUserPref(FB_PREF);
   Services.prefs.clearUserPref(TPC_PREF);
 });
 
-add_task(async function testFastBlock() {
-  await UrlClassifierTestUtils.addTestTrackers();
-
-  tabbrowser = gBrowser;
-  let tab = tabbrowser.selectedTab = BrowserTestUtils.addTab(tabbrowser);
-
-  Services.prefs.setBoolPref(FB_PREF, false);
-  Services.prefs.setIntPref(TPC_PREF, Ci.nsICookieService.BEHAVIOR_ACCEPT);
-
-  ContentBlocking = gBrowser.ownerGlobal.ContentBlocking;
-  ok(ContentBlocking, "CB is attached to the browser window");
-  FastBlock = gBrowser.ownerGlobal.FastBlock;
-  ok(FastBlock, "TP is attached to the browser window");
-  is(FastBlock.enabled, Services.prefs.getBoolPref(FB_PREF),
-     "FB.enabled is based on the original pref value");
-  Services.prefs.setBoolPref(CB_PREF, true);
-  ok(ContentBlocking.enabled, "CB is enabled after setting the pref");
-
-  await testContentBlockingEnabled(tab);
-
-  Services.prefs.setBoolPref(CB_PREF, false);
-  ok(!ContentBlocking.enabled, "CB is disabled after setting the pref");
-
-  await testContentBlockingDisabled(tab);
-
-  Services.prefs.setBoolPref(FB_PREF, true);
-  Services.prefs.setIntPref(FB_TIMEOUT_PREF, 0);
-  Services.prefs.setIntPref(FB_LIMIT_PREF, 0);
-  ok(FastBlock.enabled, "FB is enabled after setting the pref");
-  Services.prefs.setBoolPref(CB_PREF, true);
-  ok(ContentBlocking.enabled, "CB is enabled after setting the pref");
-
-  await testContentBlockingEnabled(tab);
-
-  Services.prefs.setBoolPref(CB_PREF, false);
-  ok(!ContentBlocking.enabled, "CB is disabled after setting the pref");
-
-  await testContentBlockingDisabled(tab);
-
-  Services.prefs.clearUserPref(FB_PREF);
-  Services.prefs.clearUserPref(FB_TIMEOUT_PREF);
-  Services.prefs.clearUserPref(FB_LIMIT_PREF);
-  Services.prefs.clearUserPref(TPC_PREF);
-  gBrowser.removeCurrentTab();
-});
-
 add_task(async function testThirdPartyCookies() {
   await UrlClassifierTestUtils.addTestTrackers();
   gTrackingPageURL = COOKIE_PAGE;
 
-  Services.prefs.setBoolPref(FB_PREF, false);
-
   tabbrowser = gBrowser;
   let tab = tabbrowser.selectedTab = BrowserTestUtils.addTab(tabbrowser);
 
   ContentBlocking = gBrowser.ownerGlobal.ContentBlocking;
   ok(ContentBlocking, "CB is attached to the browser window");
   ThirdPartyCookies = gBrowser.ownerGlobal.ThirdPartyCookies;
   ok(ThirdPartyCookies, "TP is attached to the browser window");
   is(ThirdPartyCookies.enabled,
@@ -481,12 +407,11 @@ add_task(async function testThirdPartyCo
 
   await testContentBlockingEnabled(tab);
 
   Services.prefs.setBoolPref(CB_PREF, false);
   ok(!ContentBlocking.enabled, "CB is disabled after setting the pref");
 
   await testContentBlockingDisabled(tab);
 
-  Services.prefs.clearUserPref(FB_PREF);
   Services.prefs.clearUserPref(TPC_PREF);
   gBrowser.removeCurrentTab();
 });
--- a/browser/base/content/test/trackingUI/browser_trackingUI_telemetry.js
+++ b/browser/base/content/test/trackingUI/browser_trackingUI_telemetry.js
@@ -36,18 +36,16 @@ add_task(async function setup() {
     Services.telemetry.getHistogramById("TRACKING_PROTECTION_ENABLED").snapshot().counts;
   is(enabledCounts[0], 1, "TP was not enabled on start up");
 
   let scalars = Services.telemetry.snapshotScalars(
     Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTOUT, false).parent;
 
   is(scalars["contentblocking.enabled"], Services.prefs.getBoolPref("browser.contentblocking.enabled"),
     "CB enabled status was recorded at startup");
-  is(scalars["contentblocking.fastblock_enabled"], Services.prefs.getBoolPref("browser.fastblock.enabled"),
-    "FB enabled status was recorded at startup");
   is(scalars["contentblocking.exceptions"], 0, "no CB exceptions at startup");
 });
 
 
 add_task(async function testShieldHistogram() {
   Services.prefs.setBoolPref(PREF, true);
   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
 
--- a/browser/components/controlcenter/content/panel.inc.xul
+++ b/browser/components/controlcenter/content/panel.inc.xul
@@ -77,24 +77,16 @@
           </hbox>
 
           <description id="identity-popup-content-blocking-detected"
                        crop="end">&contentBlocking.detected;</description>
           <description id="identity-popup-content-blocking-not-detected"
                        crop="end">&contentBlocking.notDetected;</description>
 
           <vbox id="identity-popup-content-blocking-category-list">
-            <hbox id="identity-popup-content-blocking-category-fastblock"
-                  class="identity-popup-content-blocking-category" align="center" role="group">
-              <image class="identity-popup-content-blocking-category-icon fastblock-icon"/>
-              <label flex="1" class="identity-popup-content-blocking-category-label">&contentBlocking.fastBlock.label;</label>
-              <label flex="1" class="identity-popup-content-blocking-category-state-label">&contentBlocking.fastBlock.blocking.label;</label>
-              <label flex="1" class="identity-popup-content-blocking-category-add-blocking text-link"
-                     onclick="ContentBlocking.openPreferences('identityPopup-CB-fastblock'); gIdentityHandler.recordClick('fb_add_blocking');">&contentBlocking.fastBlock.add.label;</label>
-            </hbox>
             <hbox id="identity-popup-content-blocking-category-tracking-protection"
                   class="identity-popup-content-blocking-category" align="center" role="group">
               <image class="identity-popup-content-blocking-category-icon tracking-protection-icon"/>
               <label flex="1" class="identity-popup-content-blocking-category-label">&contentBlocking.trackingProtection3.label;</label>
               <label flex="1" class="identity-popup-content-blocking-category-state-label">&contentBlocking.trackingProtection.blocking.label;</label>
               <label flex="1" class="identity-popup-content-blocking-category-add-blocking text-link"
                      id="identity-popup-tracking-protection-add-blocking"
                      onclick="ContentBlocking.openPreferences('identityPopup-CB-tracking-protection'); gIdentityHandler.recordClick('tp_add_blocking');">&contentBlocking.trackingProtection.add.label;</label>
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -1359,19 +1359,16 @@ BrowserGlue.prototype = {
     Services.telemetry.getHistogramById("TRACKING_PROTECTION_ENABLED").add(tpEnabled);
 
     let tpPBDisabled = Services.prefs.getBoolPref("privacy.trackingprotection.pbmode.enabled");
     Services.telemetry.getHistogramById("TRACKING_PROTECTION_PBM_DISABLED").add(!tpPBDisabled);
 
     let cookieBehavior = Services.prefs.getIntPref("network.cookie.cookieBehavior");
     Services.telemetry.getHistogramById("COOKIE_BEHAVIOR").add(cookieBehavior);
 
-    let fastBlockEnabled = Services.prefs.getBoolPref("browser.fastblock.enabled");
-    Services.telemetry.scalarSet("contentblocking.fastblock_enabled", fastBlockEnabled);
-
     let contentBlockingEnabled = Services.prefs.getBoolPref("browser.contentblocking.enabled");
     Services.telemetry.scalarSet("contentblocking.enabled", contentBlockingEnabled);
 
     let exceptions = 0;
     for (let permission of Services.perms.enumerator) {
       if (permission.type == "trackingprotection") {
         exceptions++;
       }
--- a/browser/components/uitour/test/browser_contentBlocking.js
+++ b/browser/components/uitour/test/browser_contentBlocking.js
@@ -1,28 +1,24 @@
 "use strict";
 
 const PREF_INTRO_COUNT = "browser.contentblocking.introCount";
 const PREF_CB_ENABLED = "browser.contentblocking.enabled";
 const PREF_TP_ENABLED = "privacy.trackingprotection.enabled";
-const PREF_FB_ENABLED = "browser.fastblock.enabled";
-const PREF_FB_TIMEOUT = "browser.fastblock.timeout";
 const BENIGN_PAGE = "http://tracking.example.org/browser/browser/base/content/test/trackingUI/benignPage.html";
 const TRACKING_PAGE = "http://tracking.example.org/browser/browser/base/content/test/trackingUI/trackingPage.html";
 const TOOLTIP_PANEL = document.getElementById("UITourTooltip");
 const TOOLTIP_ANCHOR = document.getElementById("tracking-protection-icon-animatable-box");
 
 var {UrlClassifierTestUtils} = ChromeUtils.import("resource://testing-common/UrlClassifierTestUtils.jsm", {});
 
 registerCleanupFunction(function() {
   UrlClassifierTestUtils.cleanupTestTrackers();
   Services.prefs.clearUserPref(PREF_CB_ENABLED);
   Services.prefs.clearUserPref(PREF_TP_ENABLED);
-  Services.prefs.clearUserPref(PREF_FB_ENABLED);
-  Services.prefs.clearUserPref(PREF_FB_TIMEOUT);
   Services.prefs.clearUserPref(PREF_INTRO_COUNT);
 });
 
 function allowOneIntro() {
   Services.prefs.setIntPref(PREF_INTRO_COUNT, window.ContentBlocking.MAX_INTROS - 1);
 }
 
 add_task(async function setup_test() {
@@ -79,58 +75,8 @@ add_task(async function test_tracking() 
 
   info("Open another tracking page and make sure we don't show the panel again");
   await BrowserTestUtils.withNewTab(TRACKING_PAGE, async function() {
     await Assert.rejects(waitForConditionPromise(() => {
       return BrowserTestUtils.is_visible(TOOLTIP_PANEL);
     }, "timeout"), /timeout/, "Info panel shouldn't appear more than MAX_INTROS");
   });
 });
-
-add_task(async function test_fastBlock() {
-  Services.prefs.clearUserPref(PREF_INTRO_COUNT);
-
-  Services.prefs.setBoolPref(PREF_TP_ENABLED, false);
-  Services.prefs.setBoolPref(PREF_FB_ENABLED, true);
-  Services.prefs.setIntPref(PREF_FB_TIMEOUT, 0);
-
-  info("Load a test page containing tracking elements for FastBlock");
-  allowOneIntro();
-  await BrowserTestUtils.withNewTab({gBrowser, url: TRACKING_PAGE}, async function() {
-    await new Promise((resolve, reject) => {
-      waitForPopupAtAnchor(TOOLTIP_PANEL, TOOLTIP_ANCHOR, resolve,
-                           "Intro panel should appear");
-    });
-
-    is(Services.prefs.getIntPref(PREF_INTRO_COUNT), window.ContentBlocking.MAX_INTROS, "Check intro count increased");
-
-    let step2URL = Services.urlFormatter.formatURLPref("privacy.trackingprotection.introURL") +
-                   "?step=2&newtab=true&variation=1";
-    let buttons = document.getElementById("UITourTooltipButtons");
-
-    info("Click the step text and nothing should happen");
-    let tabCount = gBrowser.tabs.length;
-    await EventUtils.synthesizeMouseAtCenter(buttons.children[0], {});
-    is(gBrowser.tabs.length, tabCount, "Same number of tabs should be open");
-
-    info("Resetting count to test that viewing the tour prevents future panels");
-    allowOneIntro();
-
-    let panelHiddenPromise = promisePanelElementHidden(window, TOOLTIP_PANEL);
-    let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser, step2URL);
-    info("Clicking the main button");
-    EventUtils.synthesizeMouseAtCenter(buttons.children[1], {});
-    let tab = await tabPromise;
-    is(Services.prefs.getIntPref(PREF_INTRO_COUNT), window.ContentBlocking.MAX_INTROS,
-       "Check intro count is at the max after opening step 2");
-    is(gBrowser.tabs.length, tabCount + 1, "Tour step 2 tab opened");
-    await panelHiddenPromise;
-    ok(true, "Panel hid when the button was clicked");
-    BrowserTestUtils.removeTab(tab);
-  });
-
-  info("Open another tracking page and make sure we don't show the panel again");
-  await BrowserTestUtils.withNewTab(TRACKING_PAGE, async function() {
-    await Assert.rejects(waitForConditionPromise(() => {
-      return BrowserTestUtils.is_visible(TOOLTIP_PANEL);
-    }, "timeout"), /timeout/, "Info panel shouldn't appear more than MAX_INTROS");
-  });
-});
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -959,34 +959,16 @@ you can use these alternative items. Oth
 
 <!ENTITY contentBlocking.title "Content Blocking">
 <!ENTITY contentBlocking.detected "Blockable content detected on this site.">
 <!ENTITY contentBlocking.notDetected "No blockable content detected on this page.">
 <!ENTITY contentBlocking.disabled.label "Disabled">
 <!ENTITY contentBlocking.disabled.tooltip "You have disabled Content Blocking.">
 <!ENTITY contentBlocking.exception.tooltip "You have disabled Content Blocking for this site.">
 
-<!ENTITY contentBlocking.fastBlock.label "Slow-Loading Trackers">
-<!-- LOCALIZATION NOTE (contentBlocking.fastBlock.blocked.label):
-     This label signals that this type of content blocking is turned
-     ON and is successfully blocking malicious/slow content, so this is
-     a positive thing. It forms the end of the (imaginary) sentence
-     "Slow-Loading Trackers [are] Blocked"-->
-<!ENTITY contentBlocking.fastBlock.blocked.label "Blocked">
-<!-- LOCALIZATION NOTE (contentBlocking.fastBlock.blocking.label):
-     This label signals that this type of content blocking is turned
-     ON, so this is a positive thing. It forms the verb in (imaginary) sentence
-     "Firefox is blocking Slow-Loading Trackers"-->
-<!ENTITY contentBlocking.fastBlock.blocking.label "Blocking">
-<!-- LOCALIZATION NOTE (contentBlocking.fastBlock.add.label):
-     This is displayed as a link to preferences, where the user can add
-     this specific type of content blocking. When this text is shown
-     the type of content blocking is currently not enabled. -->
-<!ENTITY contentBlocking.fastBlock.add.label "Add Blocking…">
-
 <!ENTITY contentBlocking.trackingProtection2.label "All Detected Trackers">
 <!ENTITY contentBlocking.trackingProtection3.label "Trackers">
 <!-- LOCALIZATION NOTE (contentBlocking.trackingProtection.blocked.label):
      This label signals that this type of content blocking is turned
      ON and is successfully blocking tracker content, so this is
      a positive thing. It forms the end of the (imaginary) sentence
      "Trackers [are] Blocked"-->
 <!ENTITY contentBlocking.trackingProtection.blocked.label "Blocked">
--- a/browser/themes/shared/controlcenter/panel.inc.css
+++ b/browser/themes/shared/controlcenter/panel.inc.css
@@ -448,24 +448,16 @@ description#identity-popup-content-verif
 .identity-popup-content-blocking-category:not(.blocked) .identity-popup-content-blocking-category-state-label {
   display: none;
 }
 
 .identity-popup-content-blocking-category.blocked .identity-popup-content-blocking-category-add-blocking {
   display: none;
 }
 
-.fastblock-icon {
-  list-style-image: url(chrome://browser/skin/controlcenter/slowtrackers.svg);
-}
-
-#identity-popup-content-blocking-category-fastblock.blocked > .fastblock-icon {
-  list-style-image: url(chrome://browser/skin/controlcenter/slowtrackers-disabled.svg);
-}
-
 .tracking-protection-icon {
   list-style-image: url(chrome://browser/skin/controlcenter/trackers.svg);
 }
 
 #identity-popup-content-blocking-category-tracking-protection.blocked > .tracking-protection-icon {
   list-style-image: url(chrome://browser/skin/controlcenter/trackers-disabled.svg);
 }
 
deleted file mode 100644
--- a/browser/themes/shared/controlcenter/slowtrackers-disabled.svg
+++ /dev/null
@@ -1,7 +0,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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity">
-  <path fill="context-fill" d="M14,6c-1,0-1.746,1-2.246,1.992-.047-.193-.115-.38-.176-.57L8,11H9v1.5a.5.5,0,0,0,.5.5h2a.5.5,0,0,0,.5-.5V10h2a2,2,0,0,0,0-4Z"/>
-  <path fill="context-fill" d="M14.707,1.293a1,1,0,0,0-1.414,0L9.944,4.641A5.359,5.359,0,0,0,6,3C2,3,0,6.686,0,10H1v2.5a.5.5,0,0,0,.5.5h.086l-.293.293a1,1,0,1,0,1.414,1.414l12-12A1,1,0,0,0,14.707,1.293Z"/>
-</svg>
deleted file mode 100644
--- a/browser/themes/shared/controlcenter/slowtrackers.svg
+++ /dev/null
@@ -1,6 +0,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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity">
-  <path d="M14,6c-1,0-1.746,1-2.246,1.992C11.112,5.355,9.2,3,6,3,2,3,0,6.686,0,10H1v2.5a.5.5,0,0,0,.5.5h2a.5.5,0,0,0,.5-.5V11H9v1.5a.5.5,0,0,0,.5.5h2a.5.5,0,0,0,.5-.5V10h2a2,2,0,0,0,0-4Z"/>
-</svg>
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -24,18 +24,16 @@
   skin/classic/browser/addons/addon-install-warning.svg        (../shared/addons/addon-install-warning.svg)
   skin/classic/browser/controlcenter/3rdpartycookies.svg       (../shared/controlcenter/3rdpartycookies.svg)
   skin/classic/browser/controlcenter/3rdpartycookies-disabled.svg (../shared/controlcenter/3rdpartycookies-disabled.svg)
   skin/classic/browser/controlcenter/conn-not-secure.svg       (../shared/controlcenter/conn-not-secure.svg)
   skin/classic/browser/controlcenter/connection.svg            (../shared/controlcenter/connection.svg)
   skin/classic/browser/controlcenter/mcb-disabled.svg          (../shared/controlcenter/mcb-disabled.svg)
   skin/classic/browser/controlcenter/extension.svg             (../shared/controlcenter/extension.svg)
   skin/classic/browser/controlcenter/permissions.svg           (../shared/controlcenter/permissions.svg)
-  skin/classic/browser/controlcenter/slowtrackers.svg          (../shared/controlcenter/slowtrackers.svg)
-  skin/classic/browser/controlcenter/slowtrackers-disabled.svg (../shared/controlcenter/slowtrackers-disabled.svg)
   skin/classic/browser/controlcenter/trackers.svg              (../shared/controlcenter/trackers.svg)
   skin/classic/browser/controlcenter/trackers-disabled.svg     (../shared/controlcenter/trackers-disabled.svg)
   skin/classic/browser/controlcenter/tracking-protection.svg   (../shared/controlcenter/tracking-protection.svg)
   skin/classic/browser/controlcenter/warning.svg               (../shared/controlcenter/warning.svg)
   skin/classic/browser/customizableui/empty-overflow-panel.png     (../shared/customizableui/empty-overflow-panel.png)
   skin/classic/browser/customizableui/empty-overflow-panel@2x.png  (../shared/customizableui/empty-overflow-panel@2x.png)
   skin/classic/browser/customizableui/density-compact.svg      (../shared/customizableui/density-compact.svg)
   skin/classic/browser/customizableui/density-normal.svg       (../shared/customizableui/density-normal.svg)
--- a/toolkit/components/telemetry/Events.yaml
+++ b/toolkit/components/telemetry/Events.yaml
@@ -613,24 +613,22 @@ security.ui.identitypopup:
     notification_emails:
       - jhofmann@mozilla.com
       - pdol@mozilla.com
       - seceng-telemetry@mozilla.com
     release_channel_collection: opt-in
     record_in_processes:
       - main
     extra_keys:
-      fb: Whether FastBlock was active while the user opened the popup
       tp: Whether Tracking Protection was active while the user opened the popup
       cr: Whether Cookie Restrictions was active while the user opened the popup
     products:
       - firefox
   click:
     objects: [
-      "fb_add_blocking",
       "tp_add_blocking",
       "cookies_add_blocking",
       "cb_prefs_button",
       "clear_sitedata",
       "unblock",
       "unblock_private",
       "block",
       "report_breakage"
@@ -643,13 +641,12 @@ security.ui.identitypopup:
     notification_emails:
       - jhofmann@mozilla.com
       - pdol@mozilla.com
       - seceng-telemetry@mozilla.com
     release_channel_collection: opt-in
     record_in_processes:
       - main
     extra_keys:
-      fb: Whether FastBlock was active while the user interacted with the UI
       tp: Whether Tracking Protection was active while the user interacted with the UI
       cr: Whether Cookie Restrictions was active while the user interacted with the UI
     products:
       - firefox
--- a/toolkit/components/telemetry/Scalars.yaml
+++ b/toolkit/components/telemetry/Scalars.yaml
@@ -451,30 +451,16 @@ contentblocking:
     kind: boolean
     notification_emails:
       - jhofmann@mozilla.com
       - pdol@mozilla.com
       - seceng-telemetry@mozilla.com
     release_channel_collection: opt-out
     record_in_processes:
       - main
-  fastblock_enabled:
-    bug_numbers:
-      - 1484251
-    description: >
-      Whether FastBlock was enabled at startup.
-    expires: never
-    kind: boolean
-    notification_emails:
-      - jhofmann@mozilla.com
-      - pdol@mozilla.com
-      - seceng-telemetry@mozilla.com
-    release_channel_collection: opt-out
-    record_in_processes:
-      - main
   exceptions:
     bug_numbers:
       - 1484251
     description: >
       How many tracking protection/content blocking exceptions a user has at startup.
     expires: "70"
     kind: uint
     notification_emails: