Backed out 3 changesets (bug 1324062) for frequent Win7VM bc2 failures a=backout
authorWes Kocher <wkocher@mozilla.com>
Fri, 20 Jan 2017 11:53:36 -0800
changeset 330343 16e7adbfad3644cf6defb631f461b11305b625c0
parent 330342 d15f6cbb443d1979bff7d2e974448b6bb3dedcd9
child 330344 41d8ef56d03b9b5b382d0575def6712d9d51b1df
push id36309
push userkwierso@gmail.com
push dateFri, 20 Jan 2017 19:53:45 +0000
treeherderautoland@16e7adbfad36 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbackout
bugs1324062
milestone53.0a1
backs outd01f82be01f1ffe1399d5161d6c036d94afbe527
054cfcf60c7585d2bb082db5c441bfa531db427a
1658b20cb69c92497cceb6254c2f63de08faff12
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
Backed out 3 changesets (bug 1324062) for frequent Win7VM bc2 failures a=backout Backed out changeset d01f82be01f1 (bug 1324062) Backed out changeset 054cfcf60c75 (bug 1324062) Backed out changeset 1658b20cb69c (bug 1324062) MozReview-Commit-ID: LTl7fJ8zrp9
browser/components/customizableui/CustomizableUI.jsm
browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
browser/components/customizableui/test/browser_967000_button_sync.js
browser/components/customizableui/test/head.js
browser/extensions/moz.build
browser/extensions/webcompat-reporter/bootstrap.js
browser/extensions/webcompat-reporter/content/TabListener.jsm
browser/extensions/webcompat-reporter/content/WebCompatReporter.jsm
browser/extensions/webcompat-reporter/content/tab-frame.js
browser/extensions/webcompat-reporter/content/wc-frame.js
browser/extensions/webcompat-reporter/install.rdf.in
browser/extensions/webcompat-reporter/jar.mn
browser/extensions/webcompat-reporter/locale/en-US/webcompat.properties
browser/extensions/webcompat-reporter/locale/jar.mn
browser/extensions/webcompat-reporter/locale/moz.build
browser/extensions/webcompat-reporter/moz.build
browser/extensions/webcompat-reporter/skin/lightbulb.css
browser/extensions/webcompat-reporter/skin/lightbulb.svg
browser/extensions/webcompat-reporter/test/browser/.eslintrc.js
browser/extensions/webcompat-reporter/test/browser/browser.ini
browser/extensions/webcompat-reporter/test/browser/browser_button_state.js
browser/extensions/webcompat-reporter/test/browser/browser_disabled_cleanup.js
browser/extensions/webcompat-reporter/test/browser/browser_report_site_issue.js
browser/extensions/webcompat-reporter/test/browser/head.js
browser/extensions/webcompat-reporter/test/browser/test.html
browser/extensions/webcompat-reporter/test/browser/webcompat.html
browser/locales/Makefile.in
browser/modules/BrowserUITelemetry.jsm
modules/libpref/init/all.js
testing/talos/talos/xtalos/xperf_whitelist.json
--- a/browser/components/customizableui/CustomizableUI.jsm
+++ b/browser/components/customizableui/CustomizableUI.jsm
@@ -220,22 +220,16 @@ var CustomizableUIInternal = {
     let showCharacterEncoding = Services.prefs.getComplexValue(
       "browser.menu.showCharacterEncoding",
       Ci.nsIPrefLocalizedString
     ).data;
     if (showCharacterEncoding == "true") {
       panelPlacements.push("characterencoding-button");
     }
 
-    if (AppConstants.NIGHTLY_BUILD) {
-      if (Services.prefs.getBoolPref("extensions.webcompat-reporter.enabled")) {
-        panelPlacements.push("webcompat-reporter-button");
-      }
-    }
-
     this.registerArea(CustomizableUI.AREA_PANEL, {
       anchor: "PanelUI-menu-button",
       type: CustomizableUI.TYPE_MENU_PANEL,
       defaultPlacements: panelPlacements
     }, true);
     PanelWideWidgetTracker.init();
 
     let navbarPlacements = [
--- a/browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
+++ b/browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
@@ -25,31 +25,26 @@ add_task(function* testWrapUnwrap() {
 });
 
 // Creating and destroying a widget should correctly deal with panel placeholders
 add_task(function* testPanelPlaceholders() {
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   // The value of expectedPlaceholders depends on the default palette layout.
   // Bug 1229236 is for these tests to be smarter so the test doesn't need to
   // change when the default placements change.
-  let expectedPlaceholders = 1;
-  if (isInDevEdition()) {
-    expectedPlaceholders += 1;
-  } else if (isInNightly()) {
-    expectedPlaceholders += 2;
-  }
+  let expectedPlaceholders = 1 + (isInDevEdition() ? 1 : 0);
   is(panel.querySelectorAll(".panel-customization-placeholder").length, expectedPlaceholders, "The number of placeholders should be correct.");
   CustomizableUI.createWidget({id: kTestWidget2, label: "Pretty label", tooltiptext: "Pretty tooltip", defaultArea: CustomizableUI.AREA_PANEL});
   let elem = document.getElementById(kTestWidget2);
   let wrapper = document.getElementById("wrapper-" + kTestWidget2);
   ok(elem, "There should be an item");
   ok(wrapper, "There should be a wrapper");
   is(wrapper.firstChild.id, kTestWidget2, "Wrapper should have test widget");
   is(wrapper.parentNode, panel, "Wrapper should be in panel");
-  expectedPlaceholders = (expectedPlaceholders - 1) || 3;
+  expectedPlaceholders = isInDevEdition() ? 1 : 3;
   is(panel.querySelectorAll(".panel-customization-placeholder").length, expectedPlaceholders, "The number of placeholders should be correct.");
   CustomizableUI.destroyWidget(kTestWidget2);
   wrapper = document.getElementById("wrapper-" + kTestWidget2);
   ok(!wrapper, "There should be a wrapper");
   let item = document.getElementById(kTestWidget2);
   ok(!item, "There should no longer be an item");
   yield endCustomizing();
 });
--- a/browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
+++ b/browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
@@ -19,19 +19,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(zoomControls, printButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -48,19 +47,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(zoomControls, savePageButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should be in default state.");
 });
 
 
 // Dragging the zoom controls to be before the new-window button should not move any widgets.
 add_task(function*() {
@@ -75,19 +73,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(zoomControls, newWindowButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the zoom controls to be before the history-panelmenu should move the zoom-controls in to the row higher than the history-panelmenu.
 add_task(function*() {
   yield startCustomizing();
@@ -101,19 +98,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(zoomControls, historyPanelMenu);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -131,19 +127,18 @@ add_task(function*() {
                              "history-panelmenu",
                              "fullscreen-button",
                              "zoom-controls",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(zoomControls, preferencesButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -161,19 +156,18 @@ add_task(function*() {
                                "print-button",
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "developer-button",
                                "sync-button",
-                               "webcompat-reporter-button"
                               ];
-  removeNonReleaseButtons(placementsAfterInsert);
+  removeDeveloperButtonIfDevEdition(placementsAfterInsert);
   simulateItemDrag(openFileButton, zoomControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterInsert);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let palette = document.getElementById("customization-palette");
   // Check that the palette items are re-wrapped correctly.
   let feedWrapper = document.getElementById("wrapper-feed-button");
   let feedButton = document.getElementById("feed-button");
   is(feedButton.parentNode, feedWrapper,
@@ -203,19 +197,18 @@ add_task(function*() {
                                "print-button",
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "developer-button",
                                "sync-button",
-                               "webcompat-reporter-button"
                               ];
-  removeNonReleaseButtons(placementsAfterInsert);
+  removeDeveloperButtonIfDevEdition(placementsAfterInsert);
   simulateItemDrag(openFileButton, editControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterInsert);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let palette = document.getElementById("customization-palette");
   // Check that the palette items are re-wrapped correctly.
   let feedWrapper = document.getElementById("wrapper-feed-button");
   let feedButton = document.getElementById("feed-button");
   is(feedButton.parentNode, feedWrapper,
@@ -242,19 +235,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(editControls, zoomControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the new-window-button should
 // move the zoom-controls before the edit-controls.
 add_task(function*() {
@@ -269,19 +261,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(editControls, newWindowButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the privatebrowsing-button
@@ -299,19 +290,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(editControls, privateBrowsingButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the save-page-button
@@ -329,19 +319,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button"
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(editControls, savePageButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to the panel itself should append
@@ -359,27 +348,21 @@ add_task(function*() {
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "edit-controls",
                              "developer-button",
                              "sync-button",
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
-  if (isInNightly()) {
-    CustomizableUI.removeWidgetFromArea("webcompat-reporter-button");
-  }
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(editControls, panel);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
-  if (isInNightly()) {
-    CustomizableUI.addWidgetToArea("webcompat-reporter-button", CustomizableUI.AREA_PANEL);
-  }
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to the customization-palette and
 // back should work.
 add_task(function*() {
   yield startCustomizing();
   let editControls = document.getElementById("edit-controls");
@@ -391,19 +374,18 @@ add_task(function*() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button",
                              "sync-button",
-                             "webcompat-reporter-button",
                             ];
-  removeNonReleaseButtons(placementsAfterMove);
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   let paletteChildElementCount = palette.childElementCount;
   simulateItemDrag(editControls, palette);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   is(paletteChildElementCount + 1, palette.childElementCount,
      "The palette should have a new child, congratulations!");
   is(editControls.parentNode.id, "wrapper-edit-controls",
      "The edit-controls should be properly wrapped.");
   is(editControls.parentNode.getAttribute("place"), "palette",
@@ -419,44 +401,42 @@ add_task(function*() {
 // should append the edit-controls to the bottom of the panel.
 add_task(function*() {
   yield startCustomizing();
   let editControls = document.getElementById("edit-controls");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let numPlaceholders = 2;
   for (let i = 0; i < numPlaceholders; i++) {
     // This test relies on there being a specific number of widgets in the
-    // panel. The addition of sync-button and webcompat-reporter-button screwed
-    // this up, so we remove them here. We should either fix the tests to not
-    // rely on the specific layout, or fix bug 1007910 which would change the
-    // placeholder logic in different ways. Bug 1229236 is for these tests to
-    // be smarter.
-    removeNonOriginalButtons();
+    // panel. The addition of sync-button screwed this up, so we remove it
+    // here. We should either fix the tests to not rely on the specific layout,
+    // or fix bug 1007910 which would change the placeholder logic in different
+    // ways. Bug 1229236 is for these tests to be smarter.
+    CustomizableUI.removeWidgetFromArea("sync-button");
     // NB: We can't just iterate over all of the placeholders
     // because each drag-drop action recreates them.
     let placeholder = panel.getElementsByClassName("panel-customization-placeholder")[i];
     let placementsAfterMove = ["zoom-controls",
                                "new-window-button",
                                "privatebrowsing-button",
                                "save-page-button",
                                "print-button",
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "edit-controls",
-                               "developer-button",
-                              ];
-    removeNonReleaseButtons(placementsAfterMove);
+                               "developer-button"];
+    removeDeveloperButtonIfDevEdition(placementsAfterMove);
     simulateItemDrag(editControls, placeholder);
     assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
     let zoomControls = document.getElementById("zoom-controls");
     simulateItemDrag(editControls, zoomControls);
-    restoreNonOriginalButtons();
+    CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
     ok(CustomizableUI.inDefaultState, "Should still be in default state.");
   }
 });
 
 // Dragging the open-file-button back on to itself should work.
 add_task(function*() {
   yield startCustomizing();
   let openFileButton = document.getElementById("open-file-button");
@@ -469,51 +449,49 @@ add_task(function*() {
   is(editControls.parentNode.tagName, "toolbarpaletteitem",
      "edit-controls should be wrapped by a toolbarpaletteitem");
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging a small button onto the last big button should work.
 add_task(function*() {
   // Bug 1007910 requires there be a placeholder on the final row for this
-  // test to work as written. The addition of sync-button and
-  // webcompat-reporter-button meant that's not true so we remove them from
-  // here. Bug 1229236 is for these tests to be smarter.
-  removeNonOriginalButtons();
+  // test to work as written. The addition of sync-button meant that's not true
+  // so we remove it from here. Bug 1229236 is for these tests to be smarter.
+  CustomizableUI.removeWidgetFromArea("sync-button");
   yield startCustomizing();
   let editControls = document.getElementById("edit-controls");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let target = panel.getElementsByClassName("panel-customization-placeholder")[0];
   let placementsAfterMove = ["zoom-controls",
                              "new-window-button",
                              "privatebrowsing-button",
                              "save-page-button",
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "edit-controls",
-                             "developer-button",
-                            ];
-  removeNonReleaseButtons(placementsAfterMove);
+                             "developer-button"];
+  removeDeveloperButtonIfDevEdition(placementsAfterMove);
   simulateItemDrag(editControls, target);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let itemToDrag = "email-link-button"; // any button in the palette by default.
   let button = document.getElementById(itemToDrag);
   placementsAfterMove.splice(11, 0, itemToDrag);
   simulateItemDrag(button, editControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
 
   // Put stuff back:
   let palette = document.getElementById("customization-palette");
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(button, palette);
   simulateItemDrag(editControls, zoomControls);
-  restoreNonOriginalButtons();
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 add_task(function* asyncCleanup() {
   yield endCustomizing();
   yield resetCustomization();
 });
--- a/browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
+++ b/browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
@@ -16,47 +16,47 @@ add_task(function*() {
   }
   if (!isInDevEdition()) {
     ok(CustomizableUI.inDefaultState, "Should be in default state.");
   } else {
     ok(!CustomizableUI.inDefaultState, "Should not be in default state if on DevEdition.");
   }
 
   // This test relies on an exact number of widgets being in the panel.
-  // Remove the buttons to satisfy that. (bug 1229236)
-  removeNonOriginalButtons();
+  // Remove the sync-button to satisfy that. (bug 1229236)
+  CustomizableUI.removeWidgetFromArea("sync-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placements);
   is(getVisiblePlaceholderCount(panel), 2, "Should only have 2 visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 2, "Should only have 2 visible placeholders after re-entering");
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
-  restoreNonOriginalButtons();
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // Two orphaned items should have one placeholder next to them (case 1).
 add_task(function*() {
   yield startCustomizing();
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   // This test relies on an exact number of widgets being in the panel.
-  // Remove the button to satisfy that. (bug 1229236)
-  removeNonOriginalButtons()
+  // Remove the sync-button to satisfy that. (bug 1229236)
+  CustomizableUI.removeWidgetFromArea("sync-button");
 
   let btn = document.getElementById("open-file-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
   let placementsAfterAppend = placements;
 
   placementsAfterAppend = placements.concat(["open-file-button"]);
   simulateItemDrag(btn, panel);
@@ -76,30 +76,30 @@ add_task(function*() {
 
   btn = document.getElementById("open-file-button");
   simulateItemDrag(btn, palette);
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
-  restoreNonOriginalButtons();
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // Two orphaned items should have one placeholder next to them (case 2).
 add_task(function*() {
   yield startCustomizing();
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
   // This test relies on an exact number of widgets being in the panel.
-  // Remove the buttons to satisfy that. (bug 1229236)
-  removeNonOriginalButtons();
+  // Remove the sync-button to satisfy that. (bug 1229236)
+  CustomizableUI.removeWidgetFromArea("sync-button");
 
   let btn = document.getElementById("add-ons-button");
   let btn2 = document.getElementById("developer-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let palette = document.getElementById("customization-palette");
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   let placementsAfterAppend = placements.filter(p => p != btn.id && p != btn2.id);
@@ -118,31 +118,31 @@ add_task(function*() {
   simulateItemDrag(btn2, panel);
 
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placements);
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
-  restoreNonOriginalButtons();
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // A wide widget at the bottom of the panel should have three placeholders after it.
 add_task(function*() {
   yield startCustomizing();
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   // This test relies on an exact number of widgets being in the panel.
-  // Remove the buttons to satisfy that. (bug 1229236)
-  removeNonOriginalButtons();
+  // Remove the sync-button to satisfy that. (bug 1229236)
+  CustomizableUI.removeWidgetFromArea("sync-button");
 
   let btn = document.getElementById("edit-controls");
   let btn2 = document.getElementById("developer-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let palette = document.getElementById("customization-palette");
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   placements.pop();
@@ -162,17 +162,17 @@ add_task(function*() {
 
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(btn, zoomControls);
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
-  restoreNonOriginalButtons();
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // The default placements should have two placeholders at the bottom (or 1 in win8).
 add_task(function*() {
   yield startCustomizing();
   let numPlaceholders = -1;
 
@@ -181,26 +181,26 @@ add_task(function*() {
   } else {
     numPlaceholders = 2;
   }
 
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state.");
 
   // This test relies on an exact number of widgets being in the panel.
-  // Remove the buttons to satisfy that. (bug 1229236)
-  removeNonOriginalButtons();
+  // Remove the sync-button to satisfy that. (bug 1229236)
+  CustomizableUI.removeWidgetFromArea("sync-button");
 
   is(getVisiblePlaceholderCount(panel), numPlaceholders, "Should have " + numPlaceholders + " visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), numPlaceholders, "Should have " + numPlaceholders + " visible placeholders after re-entering");
 
-  restoreNonOriginalButtons();
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 add_task(function* asyncCleanup() {
   yield endCustomizing();
   yield resetCustomization();
 });
 
--- a/browser/components/customizableui/test/browser_967000_button_sync.js
+++ b/browser/components/customizableui/test/browser_967000_button_sync.js
@@ -57,16 +57,19 @@ add_task(function* setup() {
   });
 });
 
 // The test expects the about:preferences#sync page to open in the current tab
 function* openPrefsFromMenuPanel(expectedPanelId, entryPoint) {
   info("Check Sync button functionality");
   Services.prefs.setCharPref("identity.fxaccounts.remote.signup.uri", "http://example.com/");
 
+  // add the Sync button to the panel
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
+
   // check the button's functionality
   yield PanelUI.show();
 
   if (entryPoint == "uitour") {
     UITour.tourBrowsersByWindow.set(window, new Set());
     UITour.tourBrowsersByWindow.get(window).add(gBrowser.selectedBrowser);
   }
 
@@ -144,16 +147,18 @@ add_task(function* () {
 
   mockedInternal.getTabClients = () => [];
   mockedInternal.syncTabs = () => Promise.resolve();
 
   document.getElementById("sync-reauth-state").hidden = true;
   document.getElementById("sync-setup-state").hidden = true;
   document.getElementById("sync-syncnow-state").hidden = false;
 
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
+
   let syncPanel = document.getElementById("PanelUI-remotetabs");
   let links = syncPanel.querySelectorAll(".remotetabs-promo-link");
 
   is(links.length, 2, "found 2 links as expected");
 
   // test each link and left and middle mouse buttons
   for (let link of links) {
     for (let button = 0; button < 2; button++) {
@@ -204,16 +209,18 @@ add_task(function* () {
     return Promise.resolve();
   }
 
   // configure our broadcasters so we are in the right state.
   document.getElementById("sync-reauth-state").hidden = true;
   document.getElementById("sync-setup-state").hidden = true;
   document.getElementById("sync-syncnow-state").hidden = false;
 
+  // add the Sync button to the panel
+  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
   yield PanelUI.show();
   document.getElementById("sync-button").click();
   let syncPanel = document.getElementById("PanelUI-remotetabs");
   ok(syncPanel.getAttribute("current"), "Sync Panel is in view");
 
   let subpanel = document.getElementById("PanelUI-remotetabs-main")
   ok(!subpanel.hidden, "main pane is visible");
   let deck = document.getElementById("PanelUI-remotetabs-deck");
--- a/browser/components/customizableui/test/head.js
+++ b/browser/components/customizableui/test/head.js
@@ -113,42 +113,20 @@ function getToolboxCustomToolbarId(toolb
 function resetCustomization() {
   return CustomizableUI.reset();
 }
 
 function isInDevEdition() {
   return AppConstants.MOZ_DEV_EDITION;
 }
 
-function isInNightly() {
-  return AppConstants.NIGHTLY_BUILD;
-}
-
-function removeNonReleaseButtons(areaPanelPlacements) {
+function removeDeveloperButtonIfDevEdition(areaPanelPlacements) {
   if (isInDevEdition()) {
     areaPanelPlacements.splice(areaPanelPlacements.indexOf("developer-button"), 1);
   }
-
-  if (!isInNightly()) {
-    areaPanelPlacements.splice(areaPanelPlacements.indexOf("webcompat-reporter-button"), 1);
-  }
-}
-
-function removeNonOriginalButtons() {
-  CustomizableUI.removeWidgetFromArea("sync-button");
-  if (isInNightly()) {
-    CustomizableUI.removeWidgetFromArea("webcompat-reporter-button");
-  }
-}
-
-function restoreNonOriginalButtons() {
-  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL);
-  if (isInNightly()) {
-    CustomizableUI.addWidgetToArea("webcompat-reporter-button", CustomizableUI.AREA_PANEL);
-  }
 }
 
 function assertAreaPlacements(areaId, expectedPlacements) {
   let actualPlacements = getAreaWidgetIds(areaId);
   placementArraysEqual(areaId, actualPlacements, expectedPlacements);
 }
 
 function placementArraysEqual(areaId, actualPlacements, expectedPlacements) {
--- a/browser/extensions/moz.build
+++ b/browser/extensions/moz.build
@@ -22,14 +22,8 @@ if not CONFIG['RELEASE_OR_BETA']:
         'presentation',
     ]
 
 # Only include mortar system add-ons if we locally enable it
 if CONFIG['MOZ_MORTAR']:
     DIRS += [
         'mortar',
     ]
-
-# Nightly-only system add-ons
-if CONFIG['NIGHTLY_BUILD']:
-    DIRS += [
-        'webcompat-reporter',
-    ]
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/bootstrap.js
+++ /dev/null
@@ -1,46 +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/. */
-
-let { classes: Cc, interfaces: Ci, utils: Cu } = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const WEBCOMPATREPORTER_JSM = "chrome://webcompat-reporter/content/WebCompatReporter.jsm";
-
-XPCOMUtils.defineLazyModuleGetter(this, "WebCompatReporter",
-  WEBCOMPATREPORTER_JSM);
-
-const PREF_WC_REPORTER_ENABLED = "extensions.webcompat-reporter.enabled";
-
-let prefObserver = function(aSubject, aTopic, aData) {
-  let enabled = Services.prefs.getBoolPref(PREF_WC_REPORTER_ENABLED);
-  if (enabled) {
-    WebCompatReporter.init();
-  } else {
-    WebCompatReporter.uninit();
-  }
-};
-
-function startup(aData, aReason) {
-  // Observe pref changes and enable/disable as necessary.
-  Services.prefs.addObserver(PREF_WC_REPORTER_ENABLED, prefObserver, false);
-
-  // Only initialize if pref is enabled.
-  let enabled = Services.prefs.getBoolPref(PREF_WC_REPORTER_ENABLED);
-  if (enabled) {
-    WebCompatReporter.init();
-  }
-}
-
-function shutdown(aData, aReason) {
-  if (aReason === APP_SHUTDOWN) {
-    return;
-  }
-
-  Cu.unload(WEBCOMPATREPORTER_JSM);
-}
-
-function install(aData, aReason) {}
-function uninstall(aData, aReason) {}
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/content/TabListener.jsm
+++ /dev/null
@@ -1,63 +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/. */
-
-this.EXPORTED_SYMBOLS = ["TabListener"];
-
-let { classes: Cc, interfaces: Ci, utils: Cu } = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
- "resource:///modules/CustomizableUI.jsm");
-
-const WIDGET_ID = "webcompat-reporter-button";
-
-// Class that watches for url/location/tab changes and enables or disables
-// the Report Site Issue button accordingly
-class TabListener {
-  constructor(win) {
-    this.win = win;
-    this.browser = win.gBrowser;
-    this.addListeners();
-  }
-
-  addListeners() {
-    this.browser.addTabsProgressListener(this);
-    this.browser.tabContainer.addEventListener("TabSelect", this);
-  }
-
-  removeListeners() {
-    this.browser.removeTabsProgressListener(this);
-    this.browser.tabContainer.removeEventListener("TabSelect", this);
-  }
-
-  handleEvent(e) {
-    switch (e.type) {
-      case "TabSelect":
-        this.setButtonState(e.target.linkedBrowser.currentURI.scheme);
-        break;
-    }
-  }
-
-  onLocationChange(browser, webProgress, request, uri, flags) {
-    this.setButtonState(uri.scheme);
-  }
-
-  static isReportableScheme(scheme) {
-    return ["http", "https"].some((prefix) => scheme.startsWith(prefix));
-  }
-
-  setButtonState(scheme) {
-    // Bail early if the button is in the palette.
-    if (!CustomizableUI.getPlacementOfWidget(WIDGET_ID)) {
-      return;
-    }
-
-    if (TabListener.isReportableScheme(scheme)) {
-      CustomizableUI.getWidget(WIDGET_ID).forWindow(this.win).node.removeAttribute("disabled");
-    } else {
-      CustomizableUI.getWidget(WIDGET_ID).forWindow(this.win).node.setAttribute("disabled", true);
-    }
-  }
-}
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/content/WebCompatReporter.jsm
+++ /dev/null
@@ -1,163 +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/. */
-
-this.EXPORTED_SYMBOLS = ["WebCompatReporter"];
-
-let { classes: Cc, interfaces: Ci, utils: Cu } = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
-  "resource:///modules/CustomizableUI.jsm");
-
-XPCOMUtils.defineLazyGetter(this, "wcStrings", function() {
-  return Services.strings.createBundle(
-    "chrome://webcompat-reporter/locale/webcompat.properties");
-});
-
-XPCOMUtils.defineLazyGetter(this, "wcStyleURI", function() {
-  return Services.io.newURI("chrome://webcompat-reporter/skin/lightbulb.css");
-});
-
-const WIDGET_ID = "webcompat-reporter-button";
-const TABLISTENER_JSM = "chrome://webcompat-reporter/content/TabListener.jsm";
-
-let WebCompatReporter = {
-  get endpoint() {
-    return Services.urlFormatter.formatURLPref(
-      "extensions.webcompat-reporter.newIssueEndpoint");
-  },
-
-  init() {
-    Cu.import(TABLISTENER_JSM);
-
-    let styleSheetService = Cc["@mozilla.org/content/style-sheet-service;1"]
-      .getService(Ci.nsIStyleSheetService);
-    this._sheetType = styleSheetService.AUTHOR_SHEET;
-    this._cachedSheet = styleSheetService.preloadSheet(wcStyleURI,
-                                                       this._sheetType);
-
-    CustomizableUI.createWidget({
-      id: WIDGET_ID,
-      label: wcStrings.GetStringFromName("wc-reporter.label"),
-      tooltiptext: wcStrings.GetStringFromName("wc-reporter.tooltip"),
-      defaultArea: CustomizableUI.AREA_PANEL,
-      disabled: true,
-      onCommand: (e) => this.reportIssue(e.target.ownerDocument),
-    });
-
-    for (let win of CustomizableUI.windows) {
-      this.onWindowOpened(win);
-    }
-
-    CustomizableUI.addListener(this);
-  },
-
-  onWindowOpened(win) {
-    // Attach stylesheet for the button icon.
-    win.QueryInterface(Ci.nsIInterfaceRequestor)
-      .getInterface(Ci.nsIDOMWindowUtils)
-      .addSheet(this._cachedSheet, this._sheetType);
-    // Attach listeners to new window.
-    win._webcompatReporterTabListener = new TabListener(win);
-  },
-
-  onWindowClosed(win) {
-    if (win._webcompatReporterTabListener) {
-      win._webcompatReporterTabListener.removeListeners();
-      delete win._webcompatReporterTabListener;
-    }
-  },
-
-  uninit() {
-    CustomizableUI.destroyWidget(WIDGET_ID);
-
-    for (let win of CustomizableUI.windows) {
-      this.onWindowClosed(win);
-
-      win.QueryInterface(Ci.nsIInterfaceRequestor)
-        .getInterface(Ci.nsIDOMWindowUtils)
-        .removeSheet(wcStyleURI, this._sheetType);
-    }
-
-    CustomizableUI.removeListener(this);
-    Cu.unload(TABLISTENER_JSM);
-  },
-
-  // This method injects a framescript that should send back a screenshot blob
-  // of the top-level window of the currently selected tab, resolved as a
-  // Promise.
-  getScreenshot(gBrowser) {
-    const FRAMESCRIPT = "chrome://webcompat-reporter/content/tab-frame.js";
-    const TABDATA_MESSAGE = "WebCompat:SendTabData";
-
-    return new Promise((resolve) => {
-      let mm = gBrowser.selectedBrowser.messageManager;
-      mm.loadFrameScript(FRAMESCRIPT, false);
-
-      mm.addMessageListener(TABDATA_MESSAGE, function receiveFn(message) {
-        mm.removeMessageListener(TABDATA_MESSAGE, receiveFn);
-        resolve([gBrowser, message.json]);
-      });
-    });
-  },
-
-  // This should work like so:
-  // 1) set up listeners for a new webcompat.com tab, and open it, passing
-  //    along the current URI
-  // 2) if we successfully got a screenshot from getScreenshot,
-  //    inject a frame script that will postMessage it to webcompat.com
-  //    so it can show a preview to the user and include it in FormData
-  // Note: openWebCompatTab arguments are passed in as an array because they
-  // are the result of a promise resolution.
-  openWebCompatTab([gBrowser, tabData]) {
-    const SCREENSHOT_MESSAGE = "WebCompat:SendScreenshot";
-    const FRAMESCRIPT = "chrome://webcompat-reporter/content/wc-frame.js";
-    let win = Services.wm.getMostRecentWindow("navigator:browser");
-    const WEBCOMPAT_ORIGIN = new win.URL(WebCompatReporter.endpoint).origin;
-
-    let tab = gBrowser.loadOneTab(
-      `${WebCompatReporter.endpoint}?url=${encodeURIComponent(tabData.url)}&src=desktop-reporter`,
-      {inBackground: false});
-
-    // If we successfully got a screenshot blob, add a listener to know when
-    // the new tab is loaded before sending it over.
-    if (tabData && tabData.blob) {
-      let browser = gBrowser.getBrowserForTab(tab);
-      let loadedListener = {
-        QueryInterface: XPCOMUtils.generateQI(["nsIWebProgressListener",
-          "nsISupportsWeakReference"]),
-        onStateChange(webProgress, request, flags, status) {
-          let isStopped = flags & Ci.nsIWebProgressListener.STATE_STOP;
-          let isNetwork = flags & Ci.nsIWebProgressListener.STATE_IS_NETWORK;
-          if (isStopped && isNetwork && webProgress.isTopLevel) {
-            let location;
-            try {
-              location = request.QueryInterface(Ci.nsIChannel).URI;
-            } catch (ex) {}
-
-            if (location && location.prePath === WEBCOMPAT_ORIGIN) {
-              let mm = gBrowser.selectedBrowser.messageManager;
-              mm.loadFrameScript(FRAMESCRIPT, false);
-              mm.sendAsyncMessage(SCREENSHOT_MESSAGE, {
-                screenshot: tabData.blob,
-                origin: WEBCOMPAT_ORIGIN
-              });
-
-              browser.removeProgressListener(this);
-            }
-          }
-        }
-      };
-
-      browser.addProgressListener(loadedListener);
-    }
-  },
-
-  reportIssue(xulDoc) {
-    this.getScreenshot(xulDoc.defaultView.gBrowser).then(this.openWebCompatTab)
-                                                   .catch(Cu.reportError);
-  }
-};
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/content/tab-frame.js
+++ /dev/null
@@ -1,37 +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/. */
-
-let { utils: Cu } = Components;
-
-const TABDATA_MESSAGE = "WebCompat:SendTabData";
-
-let getScreenshot = function(win) {
-  return new Promise(resolve => {
-    let url = win.location.href;
-    try {
-      let dpr = win.devicePixelRatio;
-      let canvas = win.document.createElement("canvas");
-      let ctx = canvas.getContext("2d");
-      let x = win.document.documentElement.scrollLeft;
-      let y = win.document.documentElement.scrollTop;
-      let w = win.innerWidth;
-      let h = win.innerHeight;
-      canvas.width = dpr * w;
-      canvas.height = dpr * h;
-      ctx.scale(dpr, dpr);
-      ctx.drawWindow(win, x, y, w, h, "#fff");
-      canvas.toBlob(blob => {
-        resolve({url, blob});
-      });
-    } catch (ex) {
-      // CanvasRenderingContext2D.drawWindow can fail depending on memory or
-      // surface size. Rather than reject, resolve the URL so the user can
-      // file an issue without a screenshot.
-      Cu.reportError(`WebCompatReporter: getting a screenshot failed: ${ex}`);
-      resolve({url});
-    }
-  });
-};
-
-getScreenshot(content).then(data => sendAsyncMessage(TABDATA_MESSAGE, data));
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/content/wc-frame.js
+++ /dev/null
@@ -1,23 +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/. */
-
-let { utils: Cu } = Components;
-
-const SCREENSHOT_MESSAGE = "WebCompat:SendScreenshot";
-
-addMessageListener(SCREENSHOT_MESSAGE, function handleMessage(message) {
-  removeMessageListener(SCREENSHOT_MESSAGE, handleMessage);
-  // postMessage the screenshot blob from a content Sandbox so message event.origin
-  // is what we expect on the client-side (i.e., https://webcompat.com)
-  try {
-    let sb = new Cu.Sandbox(content.document.nodePrincipal);
-    sb.win = content;
-    sb.screenshotBlob = Cu.cloneInto(message.data.screenshot, content);
-    sb.wcOrigin = Cu.cloneInto(message.data.origin, content);
-    Cu.evalInSandbox("win.postMessage(screenshotBlob, wcOrigin);", sb);
-    Cu.nukeSandbox(sb);
-  } catch (ex) {
-    Cu.reportError(`WebCompatReporter: sending a screenshot failed: ${ex}`);
-  }
-});
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/install.rdf.in
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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>webcompat-reporter@mozilla.org</em:id>
-    <em:type>2</em:type>
-    <em:bootstrap>true</em:bootstrap>
-    <em:multiprocessCompatible>true</em:multiprocessCompatible>
-
-    <em:name>WebCompat Reporter</em:name>
-    <em:description>Report site compatibility issues on webcompat.com.</em:description>
-
-    <em:version>1.0.0</em:version>
-
-    <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>
-  </Description>
-</RDF>
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/jar.mn
+++ /dev/null
@@ -1,9 +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/.
-
-[features/webcompat-reporter@mozilla.org] chrome.jar:
-% content webcompat-reporter %content/
-% skin webcompat-reporter classic/1.0 %skin/
-  content/  (content/*)
-  skin/  (skin/*)
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/locale/en-US/webcompat.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-wc-reporter.label=Report Site Issue
-wc-reporter.tooltip=Report a site compatibility issue
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/locale/jar.mn
+++ /dev/null
@@ -1,8 +0,0 @@
-#filter substitution
-# 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/.
-
-[features/webcompat-reporter@mozilla.org] @AB_CD@.jar:
-% locale webcompat-reporter @AB_CD@ %locale/@AB_CD@/
-  locale/@AB_CD@/                    (en-US/*)
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/locale/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- 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/.
-
-JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/moz.build
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- 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']
-
-DIRS += ['locale']
-
-FINAL_TARGET_FILES.features['webcompat-reporter@mozilla.org'] += [
-  'bootstrap.js'
-]
-
-FINAL_TARGET_PP_FILES.features['webcompat-reporter@mozilla.org'] += [
-  'install.rdf.in'
-]
-
-JAR_MANIFESTS += ['jar.mn']
-
-BROWSER_CHROME_MANIFESTS += ['test/browser/browser.ini']
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/skin/lightbulb.css
+++ /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/. */
-#webcompat-reporter-button {
-  list-style-image: url("chrome://webcompat-reporter/skin/lightbulb.svg");
-}
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/skin/lightbulb.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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" viewBox="0 0 85 128">
-  <path d="M85.23,34.52v-7L43.34,35.21v6.94Zm0-16L43.34,26.28v6.94L85.23,25.5Zm-2.86-1.47v-.26A15,15,0,0,0,81.58,12h0a1.23,1.23,0,0,1-.17-.52,3.62,3.62,0,0,0-.35-.87.3.3,0,0,0-.09-.17h0A18.33,18.33,0,0,0,64.15,0C55.91,0,49,5,46.72,12h25.5L45.94,16.82l-2.6.43v7l4.08-.78Z" transform="translate(-23.46)" fill-opacity="0.6"/>
-  <path d="M28.65,92.41c1.7,18,14.52,30.59,35.83,30.59s34.13-12.61,35.83-30.59c1.33-18.21-4.72-23.88-12.75-35.61a36.8,36.8,0,0,1-5.23-11.57s-24.25.29-24.33,0H46.71A36.8,36.8,0,0,1,41.47,56.8C33.36,68.52,27.32,74.2,28.65,92.41Z" transform="translate(-23.46)" fill="none" stroke="#000" stroke-opacity="0.6" stroke-width="10"/>
-  <path d="M82.11,86.19c-.17-.26-.35-.43-.61-2L70.83,51.58c-1.13.17-.69.17-1.13.17h-.78c-.52.17-.35.78-.17,1.3L78.81,83.67a11.18,11.18,0,0,0-8-1,7.69,7.69,0,0,0-1.47.69l-4.25-1.3a8.07,8.07,0,0,0-4.94,1.65,11.54,11.54,0,0,0-2.6-1,10.73,10.73,0,0,0-7.46.52L60,53.14a3.83,3.83,0,0,0,.26-1.39c-2.25-.09-2.25.09-2.17.69L47.24,85.58a1.2,1.2,0,0,0-.26.35,1,1,0,1,0,1.56,1.21c2-2.52,4.86-3.3,8.5-2.34a5.55,5.55,0,0,1,1.65.61,5.19,5.19,0,0,0-.87,3.12c.09,2.25.87,3.82,2.08,4.42a2.16,2.16,0,0,0,2.17-.09c1-.69,1.56-2.34,1.39-4.42a5.24,5.24,0,0,0-1.65-3.38,6.35,6.35,0,0,1,6-.17,6.65,6.65,0,0,0-1.13,3.56c-.09,2,.52,3.56,1.65,4.25a2.48,2.48,0,0,0,2.34.09c1.13-.69,1.82-2.25,1.73-4.25A5.78,5.78,0,0,0,71,84.88c.17-.09.26-.09.43-.17,3-1,7.46.78,9.11,2.78a1,1,0,0,0,1.39.17A1.09,1.09,0,0,0,82.11,86.19ZM60.86,91.13h-.09a3.58,3.58,0,0,1-1-2.69,4,4,0,0,1,.52-2,3,3,0,0,1,1,2.08C61.55,90.09,61.2,91,60.86,91.13ZM69.62,91h-.09a.27.27,0,0,1-.17-.09c-.26-.17-.78-.87-.69-2.43A5.31,5.31,0,0,1,69.36,86a3.51,3.51,0,0,1,1,2.34C70.31,90.09,69.88,90.78,69.62,91Z" transform="translate(-23.46)" fill="none" stroke="#000" stroke-opacity="0.6" stroke-width="5"/>
-</svg>
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/.eslintrc.js
+++ /dev/null
@@ -1,7 +0,0 @@
-"use strict";
-
-module.exports = {
-  "extends": [
-    "../../../../../testing/mochitest/browser.eslintrc.js"
-  ]
-};
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/browser.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[DEFAULT]
-support-files =
-  head.js
-  test.html
-  webcompat.html
-
-[browser_disabled_cleanup.js]
-[browser_button_state.js]
-[browser_report_site_issue.js]
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/browser_button_state.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const REPORTABLE_PAGE = "http://example.com/";
-const REPORTABLE_PAGE2 = "https://example.com/";
-const NONREPORTABLE_PAGE = "about:blank";
-
-/* Test that the Report Site Issue button is enabled for http and https tabs,
-   on page load, or TabSelect, and disabled for everything else. */
-add_task(function* test_button_state_disabled() {
-  let tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, REPORTABLE_PAGE);
-  yield PanelUI.show();
-  is(isButtonDisabled(), false, "Check that button is enabled for reportable schemes on tab load");
-
-  let tab2 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, NONREPORTABLE_PAGE);
-  is(isButtonDisabled(), true, "Check that button is disabled for non-reportable schemes on tab load");
-
-  let tab3 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, REPORTABLE_PAGE2);
-  is(isButtonDisabled(), false, "Check that button is enabled for reportable schemes on tab load");
-
-
-  yield BrowserTestUtils.switchTab(gBrowser, tab2);
-  is(isButtonDisabled(), true, "Check that button is disabled for non-reportable schemes on TabSelect");
-
-  yield BrowserTestUtils.switchTab(gBrowser, tab1);
-  is(isButtonDisabled(), false, "Check that button is enabled for reportable schemes on TabSelect");
-
-  yield BrowserTestUtils.removeTab(tab1);
-  yield BrowserTestUtils.removeTab(tab2);
-  yield BrowserTestUtils.removeTab(tab3);
-});
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/browser_disabled_cleanup.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// Test the addon is cleaning up after itself when disabled.
-add_task(function* test_disabled() {
-  yield SpecialPowers.pushPrefEnv({set: [[PREF_WC_REPORTER_ENABLED, false]]});
-
-  yield BrowserTestUtils.withNewTab({gBrowser, url: "about:blank"}, function() {
-    is(typeof window._webCompatReporterTabListener, "undefined", "TabListener expando does not exist.");
-    is(document.getElementById("webcompat-reporter-button"), null, "Report Site Issue button does not exist.");
-  });
-});
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/browser_report_site_issue.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Test that clicking on the Report Site Issue button opens a new tab
-   and sends a postMessaged blob at it.
-   testing/profiles/prefs_general.js sets the value for
-   "extensions.webcompat-reporter.newIssueEndpoint" */
-add_task(function* test_screenshot() {
-  yield SpecialPowers.pushPrefEnv({set: [[PREF_WC_REPORTER_ENDPOINT, NEW_ISSUE_PAGE]]});
-
-  let tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE);
-  yield PanelUI.show();
-
-  let webcompatButton = document.getElementById("webcompat-reporter-button");
-  ok(webcompatButton, "Report Site Issue button exists.");
-
-  let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser);
-  webcompatButton.click();
-  let tab2 = yield newTabPromise;
-
-  yield BrowserTestUtils.waitForContentEvent(tab2.linkedBrowser, "ScreenshotReceived", false, null, true);
-
-  yield ContentTask.spawn(tab2.linkedBrowser, {TEST_PAGE}, function(args) {
-    let doc = content.document;
-    let urlParam = doc.getElementById("url").innerText;
-    let preview = doc.getElementById("screenshot-preview");
-    is(urlParam, args.TEST_PAGE, "Reported page is correctly added to the url param");
-
-    is(preview.innerText, "Pass", "A Blob object was successfully transferred to the test page.")
-    ok(preview.style.backgroundImage.startsWith("url(\"data:image/png;base64,iVBOR"), "A green screenshot was successfully postMessaged");
-  });
-
-  yield BrowserTestUtils.removeTab(tab2);
-  yield BrowserTestUtils.removeTab(tab1);
-});
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/head.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const PREF_WC_REPORTER_ENABLED = "extensions.webcompat-reporter.enabled";
-const PREF_WC_REPORTER_ENDPOINT = "extensions.webcompat-reporter.newIssueEndpoint";
-
-const TEST_ROOT = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.com");
-const TEST_PAGE = TEST_ROOT + "test.html";
-const NEW_ISSUE_PAGE = TEST_ROOT + "webcompat.html";
-
-function isButtonDisabled() {
-  return document.getElementById("webcompat-reporter-button").disabled;
-}
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/test.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<style>
-  body {background: rgb(0, 128, 0);}
-</style>
\ No newline at end of file
deleted file mode 100644
--- a/browser/extensions/webcompat-reporter/test/browser/webcompat.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<style>
- #screenshot-preview {width: 200px; height: 200px;}
-</style>
-<div id="url"></div>
-<div id="screenshot-preview">Fail</div>
-<script>
-let params = new URL(location.href).searchParams;
-let preview = document.getElementById("screenshot-preview");
-let url = document.getElementById("url");
-url.innerText = params.get("url");
-
-function getBlobAsDataURL(blob) {
-  return new Promise((resolve, reject) => {
-    let reader = new FileReader();
-
-    reader.addEventListener("error", (e) => {
-      reject(`There was an error reading the blob: ${e.type}`);
-    });
-
-    reader.addEventListener("load", (e) => {
-      resolve(e.target.result);
-    });
-
-    reader.readAsDataURL(blob);
-  });
-}
-
-function setPreviewBG(backgroundData) {
-  return new Promise((resolve) => {
-    preview.style.background = `url(${backgroundData})`;
-    resolve();
-  });
-}
-
-function sendReceivedEvent() {
-  window.dispatchEvent(new CustomEvent("ScreenshotReceived", {bubbles:true}));
-}
-
-window.addEventListener("message", function(event) {
-  if (event.data instanceof Blob) {
-    preview.innerText = "Pass";
-  }
-
-  getBlobAsDataURL(event.data).then(setPreviewBG).then(sendReceivedEvent);
-});
-</script>
\ No newline at end of file
--- a/browser/locales/Makefile.in
+++ b/browser/locales/Makefile.in
@@ -101,19 +101,16 @@ libs-%:
 ifndef RELEASE_OR_BETA
 	@$(MAKE) -C ../extensions/presentation/locale AB_CD=$* XPI_NAME=locale-$*
 endif
 	@$(MAKE) -C ../../intl/locales AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) -C ../../devtools/client/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
 	@$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
 	@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
-ifdef NIGHTLY_BUILD
-	@$(MAKE) -C ../extensions/webcompat-reporter/locale AB_CD=$* XPI_NAME=locale-$*
-endif
 
 repackage-win32-installer: WIN32_INSTALLER_OUT=$(ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe
 repackage-win32-installer: $(call ESCAPE_WILDCARD,$(WIN32_INSTALLER_IN)) $(SUBMAKEFILES) libs-$(AB_CD)
 	@echo 'Repackaging $(WIN32_INSTALLER_IN) into $(WIN32_INSTALLER_OUT).'
 	$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY) export
 	$(MAKE) -C ../installer/windows CONFIG_DIR=l10ngen l10ngen/setup.exe l10ngen/7zSD.sfx
 	$(MAKE) repackage-zip \
 	  AB_CD=$(AB_CD) \
--- a/browser/modules/BrowserUITelemetry.jsm
+++ b/browser/modules/BrowserUITelemetry.jsm
@@ -6,18 +6,16 @@
 
 this.EXPORTED_SYMBOLS = ["BrowserUITelemetry"];
 
 const {interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
-XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
-  "resource://gre/modules/AppConstants.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "UITelemetry",
   "resource://gre/modules/UITelemetry.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "RecentWindow",
   "resource:///modules/RecentWindow.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
   "resource:///modules/CustomizableUI.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "UITour",
   "resource:///modules/UITour.jsm");
@@ -76,22 +74,16 @@ XPCOMUtils.defineLazyGetter(this, "DEFAU
   let showCharacterEncoding = Services.prefs.getComplexValue(
     "browser.menu.showCharacterEncoding",
     Ci.nsIPrefLocalizedString
   ).data;
   if (showCharacterEncoding == "true") {
     result["PanelUI-contents"].push("characterencoding-button");
   }
 
-  if (AppConstants.NIGHTLY_BUILD) {
-    if (Services.prefs.getBoolPref("extensions.webcompat-reporter.enabled")) {
-      result["PanelUI-contents"].push("webcompat-reporter-button");
-    }
-  }
-
   return result;
 });
 
 XPCOMUtils.defineLazyGetter(this, "DEFAULT_AREAS", function() {
   return Object.keys(DEFAULT_AREA_PLACEMENTS);
 });
 
 XPCOMUtils.defineLazyGetter(this, "PALETTE_ITEMS", function() {
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -4735,24 +4735,16 @@ pref("extensions.webExtensionsMinPlatfor
 
 // Other webextensions prefs
 pref("extensions.webextensions.keepStorageOnUninstall", false);
 pref("extensions.webextensions.keepUuidOnUninstall", false);
 // Redirect basedomain used by identity api
 pref("extensions.webextensions.identity.redirectDomain", "extensions.allizom.org");
 pref("extensions.webextensions.remote", false);
 
-// Report Site Issue button
-pref("extensions.webcompat-reporter.newIssueEndpoint", "https://webcompat.com/issues/new");
-#ifdef NIGHTLY_BUILD
-pref("extensions.webcompat-reporter.enabled", true);
-#else
-pref("extensions.webcompat-reporter.enabled", false);
-#endif
-
 pref("network.buffer.cache.count", 24);
 pref("network.buffer.cache.size",  32768);
 
 // Desktop Notification
 pref("notification.feature.enabled", false);
 
 // Web Notification
 pref("dom.webnotifications.enabled", true);
--- a/testing/talos/talos/xtalos/xperf_whitelist.json
+++ b/testing/talos/talos/xtalos/xperf_whitelist.json
@@ -10,17 +10,16 @@
  "{firefox}\\browser\\features\\disableSHA1rollout@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},
  "{firefox}\\browser\\features\\loop@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
  "{firefox}\\browser\\features\\firefox@getpocket.com.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
  "{firefox}\\browser\\features\\presentation@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
  "{firefox}\\browser\\features\\webcompat@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
- "{firefox}\\browser\\features\\webcompat-reporter@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
  "{firefox}\\browser\\features\\shield-recipe-client@mozilla.org.xpi": {"mincount": 0, "maxcount": 100, "minbytes": 0, "maxbytes": 10000000},
  "{talos}\\tests\\tp5n\\tp5n.manifest": {"mincount": 0, "maxcount": 8, "minbytes": 0, "maxbytes": 32786},
  "{talos}\\talos\\tests\\tp5n\\tp5n.manifest": {"mincount": 0, "maxcount": 8, "minbytes": 0, "maxbytes": 32786},
  "{talos}\\tests\\tp5n\\tp5n.manifest.develop": {"mincount": 0, "maxcount": 8, "minbytes": 0, "maxbytes": 32786},
  "{talos}\\talos\\tests\\tp5n\\tp5n.manifest.develop": {"mincount": 0, "maxcount": 8, "minbytes": 0, "maxbytes": 32786},
  "{profile}\\localstore.rdf": {"mincount": 2, "maxcount": 2, "minbytes": 8192, "maxbytes": 8192},
  "{firefox}\\dependentlibs.list": {"mincount": 4, "maxcount": 4, "minbytes": 16384, "maxbytes": 16384},
  "{profile}\\content-prefs.sqlite": {"mincount": 6, "maxcount": 6, "minbytes": 65768, "maxbytes": 65768},