Backed out 6 changesets (bug 1409148) for ESlint failure at browser/base/content/test/plugins/browser_CTP_overlay_styles.js:73 r=backout
authorAndreea Pavel <apavel@mozilla.com>
Thu, 09 Nov 2017 23:42:41 +0200
changeset 444350 a91a0cde388fd500bf49ff37ba9f152f6e7cced4
parent 444349 1935e4699d80e778154b2bd623e13a54bef23071
child 444351 98c482aa0b42ebc35841b524fc54645492db8b6a
push id1618
push userCallek@gmail.com
push dateThu, 11 Jan 2018 17:45:48 +0000
treeherdermozilla-release@882ca853e05a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbackout
bugs1409148
milestone58.0a1
backs out86e066b54fc308c358f2dc2954662a74dc36eff5
bd2913f16345b2e0df4743ba184d7a379f87707e
331d0da78f3ef01dcd6cda0156b26814f0ab4527
86d7f89e9cfbe228ece390c74d06ddf60bbb56c6
9159635ae827c2ccf6404d98049353b8313320b6
59532da5ffffe1eedbe030485398e7d4af7824c3
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 6 changesets (bug 1409148) for ESlint failure at browser/base/content/test/plugins/browser_CTP_overlay_styles.js:73 r=backout Backed out changeset 86e066b54fc3 (bug 1409148) Backed out changeset bd2913f16345 (bug 1409148) Backed out changeset 331d0da78f3e (bug 1409148) Backed out changeset 86d7f89e9cfb (bug 1409148) Backed out changeset 9159635ae827 (bug 1409148) Backed out changeset 59532da5ffff (bug 1409148)
browser/base/content/test/plugins/browser.ini
browser/base/content/test/plugins/browser_CTP_notificationBar.js
browser/base/content/test/plugins/browser_CTP_outsideScrollArea.js
browser/base/content/test/plugins/browser_CTP_overlay_styles.js
browser/base/content/test/plugins/browser_CTP_resize.js
browser/base/content/test/plugins/browser_CTP_shouldShowOverlay.js
browser/base/content/test/plugins/plugin_overlay_styles.html
browser/base/content/test/plugins/plugin_test.html
browser/modules/PluginContent.jsm
browser/themes/shared/jar.inc.mn
browser/themes/shared/notification-icons.inc.css
browser/themes/shared/notification-icons/plugin-blocked.svg
browser/themes/shared/notification-icons/plugin.svg
browser/themes/shared/plugin-doorhanger.inc.css
caps/tests/mochitest/test_bug292789.html
toolkit/locales/en-US/chrome/pluginproblem/pluginproblem.dtd
toolkit/pluginproblem/content/pluginProblem.xml
toolkit/pluginproblem/content/pluginProblemContent.css
toolkit/themes/shared/mozapps.inc.mn
toolkit/themes/shared/plugins/contentPluginActivate.png
toolkit/themes/shared/plugins/contentPluginClose.png
toolkit/themes/shared/plugins/plugin-blocked.svg
toolkit/themes/shared/plugins/plugin.svg
toolkit/themes/shared/plugins/pluginProblem.css
--- a/browser/base/content/test/plugins/browser.ini
+++ b/browser/base/content/test/plugins/browser.ini
@@ -21,17 +21,16 @@ support-files =
   plugin_bug797677.html
   plugin_bug820497.html
   plugin_clickToPlayAllow.html
   plugin_clickToPlayDeny.html
   plugin_favorfallback.html
   plugin_hidden_to_visible.html
   plugin_iframe.html
   plugin_outsideScrollArea.html
-  plugin_overlay_styles.html
   plugin_overlayed.html
   plugin_positioned.html
   plugin_simple_blank.swf
   plugin_shouldShowOverlay.html
   plugin_small.html
   plugin_small_2.html
   plugin_syncRemoved.html
   plugin_test.html
@@ -67,17 +66,16 @@ tags = blocklist
 [browser_CTP_iframe.js]
 tags = blocklist
 [browser_CTP_nonplugins.js]
 tags = blocklist
 [browser_CTP_notificationBar.js]
 tags = blocklist
 [browser_CTP_outsideScrollArea.js]
 tags = blocklist
-[browser_CTP_overlay_styles.js]
 [browser_CTP_remove_navigate.js]
 tags = blocklist
 [browser_CTP_resize.js]
 tags = blocklist
 [browser_CTP_shouldShowOverlay.js]
 [browser_CTP_zoom.js]
 tags = blocklist
 [browser_blocking.js]
--- a/browser/base/content/test/plugins/browser_CTP_notificationBar.js
+++ b/browser/base/content/test/plugins/browser_CTP_notificationBar.js
@@ -77,18 +77,18 @@ add_task(async function() {
 
   let pluginInfo = await promiseForPluginInfo("test");
   ok(!pluginInfo.activated, "Test 1a, plugin should not be activated");
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let doc = content.document;
     let plugin = doc.getElementById("test");
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(!overlay || overlay.getAttribute("sizing") == "blank",
-      "Test 3b, overlay should be blank.");
+    Assert.ok(!overlay || !overlay.classList.contains("visible"),
+      "Test 3b, overlay should be hidden.");
   });
 });
 
 add_task(async function() {
   await promiseTabLoadEvent(gBrowser.selectedTab, gTestRoot + "plugin_positioned.html");
 
   // Work around for delayed PluginBindingAttached
   await promiseUpdatePluginBindings(gTestBrowser);
@@ -104,18 +104,18 @@ add_task(async function() {
     Assert.equal(plugin.pluginFallbackType, Ci.nsIObjectLoadingContent.PLUGIN_CLICK_TO_PLAY,
       "Test 4b, plugin fallback type should be PLUGIN_CLICK_TO_PLAY");
   });
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let doc = content.document;
     let plugin = doc.getElementById("test");
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(!overlay || overlay.getAttribute("sizing") == "blank",
-      "Test 4b, overlay should be blank.");
+    Assert.ok(!overlay || !overlay.classList.contains("visible"),
+      "Test 4b, overlay should be hidden.");
   });
 });
 
 // Test that the notification bar is getting dismissed when directly activating plugins
 // via the doorhanger.
 
 add_task(async function() {
   await promiseTabLoadEvent(gBrowser.selectedTab, gTestRoot + "plugin_small.html");
--- a/browser/base/content/test/plugins/browser_CTP_outsideScrollArea.js
+++ b/browser/base/content/test/plugins/browser_CTP_outsideScrollArea.js
@@ -53,17 +53,17 @@ add_task(async function() {
 
   await promisePopupNotification("click-to-play-plugins");
 
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     let plugin = content.document.getElementById("test");
     let doc = content.document;
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
     Assert.ok(overlay && overlay.classList.contains("visible") &&
-              overlay.getAttribute("sizing") != "blank",
+              !overlay.classList.contains("minimal"),
               "Test 2, overlay should be visible.");
   });
 });
 
 add_task(async function() {
   await promiseTabLoadEvent(gBrowser.selectedTab, gTestRoot + "plugin_outsideScrollArea.html");
 
   await ContentTask.spawn(gTestBrowser, {}, async function() {
@@ -83,17 +83,17 @@ add_task(async function() {
 
   await promisePopupNotification("click-to-play-plugins");
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let plugin = content.document.getElementById("test");
     let doc = content.document;
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
     Assert.ok(overlay && overlay.classList.contains("visible") &&
-              overlay.getAttribute("sizing") != "blank",
+              !overlay.classList.contains("minimal"),
               "Test 3, overlay should be visible.");
   });
 });
 
 add_task(async function() {
   await promiseTabLoadEvent(gBrowser.selectedTab, gTestRoot + "plugin_outsideScrollArea.html");
 
   await ContentTask.spawn(gTestBrowser, {}, async function() {
@@ -111,12 +111,12 @@ add_task(async function() {
   // Work around for delayed PluginBindingAttached
   await promiseUpdatePluginBindings(gTestBrowser);
 
   await promisePopupNotification("click-to-play-plugins");
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let plugin = content.document.getElementById("test");
     let doc = content.document;
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(!overlay || overlay.getAttribute("sizing") == "blank",
-      "Test 4, overlay should be blank.");
+    Assert.ok(!overlay || !overlay.classList.contains("visible"),
+      "Test 4, overlay should be hidden.");
   });
 });
deleted file mode 100644
--- a/browser/base/content/test/plugins/browser_CTP_overlay_styles.js
+++ /dev/null
@@ -1,93 +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/. */
-
-"use strict";
-
-/* This test ensures that the click-to-play "Activate Plugin" overlay
- * is shown in the right style (which is dependent on its size).
- */
-
-const rootDir = getRootDirectory(gTestPath);
-const gTestRoot = rootDir.replace("chrome://mochitests/content/", "http://127.0.0.1:8888/");
-
-var gTestBrowser = null;
-
-const testcases = {
-
-  // 10x10
-  testcase1: {
-    sizing: "blank",
-    notext: null,
-  },
-
-  // 40x40
-  testcase2: {
-    sizing: "tiny",
-    notext: "notext",
-  },
-
-  // 100x70
-  testcase3: {
-    sizing: "reduced",
-    notext: "notext",
-  },
-
-  // 200x200
-  testcase4: {
-    sizing: null,
-    notext: "notext",
-  },
-
-  // 300x300
-  testcase5: {
-    sizing: null,
-    notext: null,
-  },
-}
-
-
-add_task(async function() {
-  registerCleanupFunction(function() {
-    clearAllPluginPermissions();
-    setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED, "Test Plug-in");
-    gBrowser.removeCurrentTab();
-    gTestBrowser = null;
-  });
-});
-
-add_task(async function() {
-  gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
-  gTestBrowser = gBrowser.selectedBrowser;
-
-  setTestPluginEnabledState(Ci.nsIPluginTag.STATE_CLICKTOPLAY, "Test Plug-in");
-
-  let popupNotification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
-  ok(!popupNotification, "Sanity check, should not have a click-to-play notification");
-
-  await promiseTabLoadEvent(gBrowser.selectedTab, gTestRoot + "plugin_overlay_styles.html");
-
-  // Work around for delayed PluginBindingAttached
-  await promiseUpdatePluginBindings(gTestBrowser);
-
-  await ContentTask.spawn(gTestBrowser, {testcases}, async function({testcases}) {
-    let doc = content.document;
-
-    for (let testcaseId of Object.keys(testcases)) {
-      let plugin = doc.querySelector(`#${testcaseId} > object`);
-      let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-      Assert.ok(overlay, `overlay exists in ${testcaseId}`);
-
-      let expectations = testcases[testcaseId];
-
-      Assert.ok(overlay.classList.contains("visible") == true,
-                `The expected visibility is correct in ${testcaseId}`);
-
-      Assert.ok(overlay.getAttribute("sizing") == expectations.sizing,
-                `The expected sizing is correct in ${testcaseId}`);
-
-      Assert.ok(overlay.getAttribute("notext") == expectations.notext,
-                `The expected notext is correct in ${testcaseId}`);
-    }
-  });
-});
--- a/browser/base/content/test/plugins/browser_CTP_resize.js
+++ b/browser/base/content/test/plugins/browser_CTP_resize.js
@@ -41,36 +41,36 @@ add_task(async function() {
 add_task(async function() {
   let popupNotification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
   ok(popupNotification, "Test 2, Should have a click-to-play notification");
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let doc = content.document;
     let plugin = doc.getElementById("test");
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(!overlay || overlay.getAttribute("sizing") == "blank",
-      "Test 2, overlay should be blank.");
+    Assert.ok(!overlay || overlay.classList.contains("minimal"),
+      "Test 2, overlay should be hidden.");
   });
 });
 
 add_task(async function() {
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     let plugin = content.document.getElementById("test");
     plugin.style.width = "300px";
   });
 
   // Work around for delayed PluginBindingAttached
   await promiseUpdatePluginBindings(gTestBrowser);
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let doc = content.document;
     let plugin = doc.getElementById("test");
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(!overlay || overlay.getAttribute("sizing") == "blank",
-      "Test 3, overlay should be blank.");
+    Assert.ok(!overlay || overlay.classList.contains("minimal"),
+      "Test 3, overlay should be hidden.");
   });
 });
 
 
 add_task(async function() {
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     let plugin = content.document.getElementById("test");
     plugin.style.height = "300px";
@@ -79,17 +79,17 @@ add_task(async function() {
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     content.document.getElementById("test").clientTop;
   });
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let doc = content.document;
     let plugin = doc.getElementById("test");
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(overlay && overlay.getAttribute("sizing") != "blank",
+    Assert.ok(overlay && overlay.classList.contains("visible"),
       "Test 4, overlay should be visible.");
   });
 });
 
 add_task(async function() {
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     let plugin = content.document.getElementById("test");
     plugin.style.width = "10px";
@@ -99,18 +99,18 @@ add_task(async function() {
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     content.document.getElementById("test").clientTop;
   });
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let doc = content.document;
     let plugin = doc.getElementById("test");
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(!overlay || overlay.getAttribute("sizing") == "blank",
-      "Test 5, overlay should be blank.");
+    Assert.ok(!overlay || overlay.classList.contains("minimal"),
+      "Test 5, overlay should be hidden.");
   });
 });
 
 add_task(async function() {
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     let plugin = content.document.getElementById("test");
     plugin.style.height = "300px";
     plugin.style.width = "300px";
@@ -119,12 +119,12 @@ add_task(async function() {
   await ContentTask.spawn(gTestBrowser, {}, async function() {
     content.document.getElementById("test").clientTop;
   });
 
   await ContentTask.spawn(gTestBrowser, null, async function() {
     let doc = content.document;
     let plugin = doc.getElementById("test");
     let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
-    Assert.ok(overlay && overlay.getAttribute("sizing") != "blank",
+    Assert.ok(overlay && overlay.classList.contains("visible"),
       "Test 6, overlay should be visible.");
   });
 });
--- a/browser/base/content/test/plugins/browser_CTP_shouldShowOverlay.js
+++ b/browser/base/content/test/plugins/browser_CTP_shouldShowOverlay.js
@@ -2,22 +2,16 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 /* This test ensures that the click-to-play "Activate Plugin" overlay
  * is shown when expected.
  * All testcases are in the plugin_shouldShowOverlay.html file.
- *
- * Note: Technically, the overlay is *always* shown. When this test was
- * originally written, the meaning of "shown" was "shown with the contents",
- * as opposed to "shown as blank". The behavior hasn't changed, but the naming
- * has: now, a "shown as blank" overlay no longer receives a ".hidden" class.
- * It receives a sizing="blank" attribute.
  */
 
 var rootDir = getRootDirectory(gTestPath);
 const gTestRoot = rootDir.replace("chrome://mochitests/content/", "http://127.0.0.1:8888/");
 
 var gTestBrowser = null;
 
 add_task(async function() {
@@ -50,13 +44,13 @@ add_task(async function() {
     for (let testcase of testcases) {
       let plugin = testcase.querySelector("object");
       Assert.ok(plugin, `plugin exists in ${testcase.id}`);
 
       let overlay = doc.getAnonymousElementByAttribute(plugin, "anonid", "main");
       Assert.ok(overlay, `overlay exists in ${testcase.id}`);
 
       let expectedVisibility = (testcase.getAttribute("shouldshow") == "true");
-      Assert.ok((overlay.getAttribute("sizing") != "blank") == expectedVisibility,
+      Assert.ok(overlay.classList.contains("visible") == expectedVisibility,
                 `The expected visibility is correct in ${testcase.id}`);
     }
   })
 });
deleted file mode 100644
--- a/browser/base/content/test/plugins/plugin_overlay_styles.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-</head>
-<body>
-
-  <div id="testcase1" class="testcase">
-    <object width="10" height="10" type="application/x-test"></object>
-  </div>
-
-  <div id="testcase2" class="testcase">
-    <object width="40" height="40" type="application/x-test"></object>
-  </div>
-
-  <div id="testcase3" class="testcase">
-    <object width="100" height="70" type="application/x-test"></object>
-  </div>
-
-  <div id="testcase4" class="testcase">
-    <object width="200" height="200" type="application/x-test"></object>
-  </div>
-
-  <div id="testcase5" class="testcase">
-    <object width="300" height="300" type="application/x-test"></object>
-  </div>
-
-</body>
-</html>
--- a/browser/base/content/test/plugins/plugin_test.html
+++ b/browser/base/content/test/plugins/plugin_test.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8">
 </head>
 <body>
-<embed id="test" style="width: 300px; height: 300px" type="application/x-test">
+<embed id="test" style="width: 200px; height: 200px" type="application/x-test">
 </body>
 </html>
--- a/browser/modules/PluginContent.jsm
+++ b/browser/modules/PluginContent.jsm
@@ -25,24 +25,19 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 
 this.PluginContent = function(global) {
   this.init(global);
 };
 
 const FLASH_MIME_TYPE = "application/x-shockwave-flash";
 const REPLACEMENT_STYLE_SHEET = Services.io.newURI("chrome://pluginproblem/content/pluginReplaceBinding.css");
 
-const OVERLAY_DISPLAY = {
-  HIDDEN: 0, // The overlay will be transparent
-  BLANK: 1, // The overlay will be just a grey box
-  TINY: 2, // The overlay with a 16x16 plugin icon
-  REDUCED: 3, // The overlay with a 32x32 plugin icon
-  NOTEXT: 4, // The overlay with a 48x48 plugin icon and the close button
-  FULL: 5, // The full overlay: 48x48 plugin icon, close button and label
-};
+const OVERLAY_DISPLAY_HIDDEN = 0;
+const OVERLAY_DISPLAY_VISIBLE = 1;
+const OVERLAY_DISPLAY_MINIMAL = 2;
 
 PluginContent.prototype = {
   init(global) {
     this.global = global;
     // Need to hold onto the content window or else it'll get destroyed
     this.content = this.global.content;
     // Cache of plugin actions for the current page.
     this.pluginData = new Map();
@@ -289,90 +284,54 @@ PluginContent.prototype = {
              blocklistState,
            };
   },
 
   /**
    * Update the visibility of the plugin overlay.
    */
   setVisibility(plugin, overlay, overlayDisplayState) {
-    overlay.classList.toggle("visible", overlayDisplayState != OVERLAY_DISPLAY.HIDDEN);
-    if (overlayDisplayState != OVERLAY_DISPLAY.HIDDEN) {
+    overlay.classList.toggle("visible", overlayDisplayState != OVERLAY_DISPLAY_HIDDEN);
+    overlay.classList.toggle("minimal", overlayDisplayState == OVERLAY_DISPLAY_MINIMAL)
+    if (overlayDisplayState == OVERLAY_DISPLAY_VISIBLE) {
       overlay.removeAttribute("dismissed");
     }
   },
 
   /**
-   * Adjust the style in which the overlay will be displayed. It might be adjusted
-   * based on its size, or if there's some other element covering all corners of
-   * the overlay.
+   * Check whether the plugin should be visible on the page. A plugin should
+   * not be visible if the overlay is too big, or if any other page content
+   * overlays it.
    *
-   * This function will handle adjusting the style of the overlay, but will
-   * not handle hiding it. That is done by setVisibility with the return value
-   * from this function.
-   *
-   * @returns A value from OVERLAY_DISPLAY.
+   * This function will handle showing or hiding the overlay.
+   * @returns true if the plugin is invisible.
    */
-  computeAndAdjustOverlayDisplay(plugin, overlay) {
+  computeOverlayDisplayState(plugin, overlay) {
     let fallbackType = plugin.pluginFallbackType;
     if (plugin.pluginFallbackTypeOverride !== undefined) {
       fallbackType = plugin.pluginFallbackTypeOverride;
     }
     if (fallbackType == Ci.nsIObjectLoadingContent.PLUGIN_CLICK_TO_PLAY_QUIET) {
-      return OVERLAY_DISPLAY.HIDDEN;
+      return OVERLAY_DISPLAY_HIDDEN;
     }
 
     // If the overlay size is 0, we haven't done layout yet. Presume that
     // plugins are visible until we know otherwise.
     if (overlay.scrollWidth == 0) {
-      return OVERLAY_DISPLAY.FULL;
+      return OVERLAY_DISPLAY_VISIBLE;
     }
 
-    let overlayDisplay = OVERLAY_DISPLAY.FULL;
-
     // Is the <object>'s size too small to hold what we want to show?
     let pluginRect = plugin.getBoundingClientRect();
-    let pluginWidth = Math.ceil(pluginRect.width);
-    let pluginHeight = Math.ceil(pluginRect.height);
-
-    // We must set the attributes while here inside this function in order
-    // for a possible re-style to occur, which will make the scrollWidth/Height
-    // checks below correct. Otherwise, we would be requesting e.g. a TINY
-    // overlay here, but the default styling would be used, and that would make
-    // it overflow, causing it to change to BLANK instead of remaining as TINY.
-
-    if (pluginWidth <= 32 || pluginHeight <= 32) {
-      overlay.setAttribute("sizing", "blank");
-      overlayDisplay = OVERLAY_DISPLAY.BLANK;
-    } else if (pluginWidth <= 80 || pluginHeight <= 60) {
-      overlayDisplay = OVERLAY_DISPLAY.TINY;
-      overlay.setAttribute("sizing", "tiny");
-      overlay.setAttribute("notext", "notext");
-    } else if (pluginWidth <= 120 || pluginHeight <= 80) {
-      overlayDisplay = OVERLAY_DISPLAY.REDUCED;
-      overlay.setAttribute("sizing", "reduced");
-      overlay.setAttribute("notext", "notext");
-    } else if (pluginWidth <= 240 || pluginHeight <= 160) {
-      overlayDisplay = OVERLAY_DISPLAY.NOTEXT;
-      overlay.removeAttribute("sizing");
-      overlay.setAttribute("notext", "notext");
-    } else {
-      overlayDisplay = OVERLAY_DISPLAY.FULL;
-      overlay.removeAttribute("sizing");
-      overlay.removeAttribute("notext");
-    }
-
-
     // XXX bug 446693. The text-shadow on the submitted-report text at
     //     the bottom causes scrollHeight to be larger than it should be.
-    let overflows = (overlay.scrollWidth > pluginWidth) ||
-                    (overlay.scrollHeight - 5 > pluginHeight);
+    let overflows = (overlay.scrollWidth > Math.ceil(pluginRect.width)) ||
+                    (overlay.scrollHeight - 5 > Math.ceil(pluginRect.height));
     if (overflows) {
-      overlay.setAttribute("sizing", "blank");
-      return OVERLAY_DISPLAY.BLANK;
+      return OVERLAY_DISPLAY_MINIMAL;
     }
 
     // Is the plugin covered up by other content so that it is not clickable?
     // Floating point can confuse .elementFromPoint, so inset just a bit
     let left = pluginRect.left + 2;
     let right = pluginRect.right - 2;
     let top = pluginRect.top + 2;
     let bottom = pluginRect.bottom - 2;
@@ -389,22 +348,21 @@ PluginContent.prototype = {
                            .getInterface(Ci.nsIDOMWindowUtils);
 
     for (let [x, y] of points) {
       if (x < 0 || y < 0) {
         continue;
       }
       let el = cwu.elementFromPoint(x, y, true, true);
       if (el === plugin) {
-        return overlayDisplay;
+        return OVERLAY_DISPLAY_VISIBLE;
       }
     }
 
-    overlay.setAttribute("sizing", "blank");
-    return OVERLAY_DISPLAY.BLANK;
+    return OVERLAY_DISPLAY_HIDDEN;
   },
 
   addLinkClickCallback(linkNode, callbackName /* callbackArgs...*/) {
     // XXX just doing (callback)(arg) was giving a same-origin error. bug?
     let self = this;
     let callbackArgs = Array.prototype.slice.call(arguments).slice(2);
     linkNode.addEventListener("click",
                               function(evt) {
@@ -513,17 +471,17 @@ PluginContent.prototype = {
       }
     }
 
     let plugin = event.target;
 
     if (eventType == "PluginPlaceholderReplaced") {
       plugin.removeAttribute("href");
       let overlay = this.getPluginUI(plugin, "main");
-      this.setVisibility(plugin, overlay, OVERLAY_DISPLAY.FULL);
+      this.setVisibility(plugin, overlay, OVERLAY_DISPLAY_VISIBLE);
       let inIDOMUtils = Cc["@mozilla.org/inspector/dom-utils;1"]
                           .getService(Ci.inIDOMUtils);
       // Add psuedo class so our styling will take effect
       inIDOMUtils.addPseudoClassLock(plugin, "-moz-handler-clicktoplay");
       overlay.addEventListener("click", this, true);
       return;
     }
 
@@ -598,20 +556,20 @@ PluginContent.prototype = {
         break;
     }
 
     // Show the in-content UI if it's not too big. The crashed plugin handler already did this.
     let overlay = this.getPluginUI(plugin, "main");
     if (eventType != "PluginCrashed") {
       if (overlay != null) {
         this.setVisibility(plugin, overlay,
-                           this.computeAndAdjustOverlayDisplay(plugin, overlay));
+                           this.computeOverlayDisplayState(plugin, overlay));
         let resizeListener = () => {
           this.setVisibility(plugin, overlay,
-            this.computeAndAdjustOverlayDisplay(plugin, overlay));
+            this.computeOverlayDisplayState(plugin, overlay));
           this.updateNotificationUI();
         };
         plugin.addEventListener("overflow", resizeListener);
         plugin.addEventListener("underflow", resizeListener);
       }
     }
 
     let closeIcon = this.getPluginUI(plugin, "closeIcon");
@@ -940,19 +898,19 @@ PluginContent.prototype = {
           fallbackType != Ci.nsIObjectLoadingContent.PLUGIN_VULNERABLE_UPDATABLE &&
           fallbackType != Ci.nsIObjectLoadingContent.PLUGIN_VULNERABLE_NO_UPDATE) {
         continue;
       }
       let overlay = this.getPluginUI(plugin, "main");
       if (!overlay) {
         continue;
       }
-      let overlayDisplayState = this.computeAndAdjustOverlayDisplay(plugin, overlay);
+      let overlayDisplayState = this.computeOverlayDisplayState(plugin, overlay);
       this.setVisibility(plugin, overlay, overlayDisplayState);
-      if (overlayDisplayState > OVERLAY_DISPLAY.BLANK) {
+      if (overlayDisplayState == OVERLAY_DISPLAY_VISIBLE) {
         actions.delete(info.permissionString);
         if (actions.size == 0) {
           break;
         }
       }
     }
 
     // If there are any items remaining in `actions` now, they are hidden
@@ -1126,31 +1084,31 @@ PluginContent.prototype = {
     this.addLinkClickCallback(helpIcon, "openHelpPage");
 
     let crashText = this.getPluginUI(plugin, "crashedText");
     crashText.textContent = message;
 
     let link = this.getPluginUI(plugin, "reloadLink");
     this.addLinkClickCallback(link, "reloadPage");
 
-    let overlayDisplayState = this.computeAndAdjustOverlayDisplay(plugin, overlay);
+    let overlayDisplayState = this.computeOverlayDisplayState(plugin, overlay);
 
     // Is the <object>'s size too small to hold what we want to show?
-    if (overlayDisplayState != OVERLAY_DISPLAY.FULL) {
+    if (overlayDisplayState != OVERLAY_DISPLAY_VISIBLE) {
       // First try hiding the crash report submission UI.
       statusDiv.removeAttribute("status");
 
-      overlayDisplayState = this.computeAndAdjustOverlayDisplay(plugin, overlay);
+      overlayDisplayState = this.computeOverlayDisplayState(plugin, overlay);
     }
     this.setVisibility(plugin, overlay, overlayDisplayState);
 
     let doc = plugin.ownerDocument;
     let runID = plugin.runID;
 
-    if (overlayDisplayState == OVERLAY_DISPLAY.FULL) {
+    if (overlayDisplayState == OVERLAY_DISPLAY_VISIBLE) {
       // If a previous plugin on the page was too small and resulted in adding a
       // notification bar, then remove it because this plugin instance it big
       // enough to serve as in-content notification.
       this.hideNotificationBar("plugin-crashed");
       doc.mozNoPluginCrashedNotification = true;
 
       // Notify others that the crash reporter UI is now ready.
       // Currently, this event is only used by tests.
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -63,16 +63,18 @@
   skin/classic/browser/notification-icons/login-detailed.svg                (../shared/notification-icons/login-detailed.svg)
   skin/classic/browser/notification-icons/login.svg                         (../shared/notification-icons/login.svg)
   skin/classic/browser/notification-icons/microphone-blocked.svg            (../shared/notification-icons/microphone-blocked.svg)
   skin/classic/browser/notification-icons/microphone-detailed.svg           (../shared/notification-icons/microphone-detailed.svg)
   skin/classic/browser/notification-icons/microphone.svg                    (../shared/notification-icons/microphone.svg)
   skin/classic/browser/notification-icons/persistent-storage-blocked.svg    (../shared/notification-icons/persistent-storage-blocked.svg)
   skin/classic/browser/notification-icons/persistent-storage.svg            (../shared/notification-icons/persistent-storage.svg)
   skin/classic/browser/notification-icons/plugin-badge.svg                  (../shared/notification-icons/plugin-badge.svg)
+  skin/classic/browser/notification-icons/plugin-blocked.svg                (../shared/notification-icons/plugin-blocked.svg)
+  skin/classic/browser/notification-icons/plugin.svg                        (../shared/notification-icons/plugin.svg)
   skin/classic/browser/notification-icons/popup.svg                         (../shared/notification-icons/popup.svg)
   skin/classic/browser/notification-icons/popup-subitem.svg                 (../shared/notification-icons/popup-subitem.svg)
   skin/classic/browser/notification-icons/screen-blocked.svg                (../shared/notification-icons/screen-blocked.svg)
   skin/classic/browser/notification-icons/screen.svg                        (../shared/notification-icons/screen.svg)
   skin/classic/browser/notification-icons/update.svg                        (../shared/notification-icons/update.svg)
 
   skin/classic/browser/tracking-protection-16.svg              (../shared/identity-block/tracking-protection-16.svg)
   skin/classic/browser/newtab/close.png                        (../shared/newtab/close.png)
--- a/browser/themes/shared/notification-icons.inc.css
+++ b/browser/themes/shared/notification-icons.inc.css
@@ -218,22 +218,22 @@ html|*#webRTC-previewVideo {
 .popup-notification-icon[popupid*="offline-app-requested"],
 .popup-notification-icon[popupid="offline-app-usage"] {
   list-style-image: url(chrome://global/skin/icons/question-64.png);
 }
 
 /* PLUGINS */
 
 .plugin-icon {
-  list-style-image: url(chrome://mozapps/skin/plugins/plugin.svg);
+  list-style-image: url(chrome://browser/skin/notification-icons/plugin.svg);
   transition: fill 1.5s;
 }
 
 .plugin-blocked-icon {
-  list-style-image: url(chrome://mozapps/skin/plugins/plugin-blocked.svg);
+  list-style-image: url(chrome://browser/skin/notification-icons/plugin-blocked.svg);
   transition: fill 1.5s;
 }
 
 #plugin-icon-badge {
   list-style-image: url(chrome://browser/skin/notification-icons/plugin-badge.svg);
   opacity: 0;
   transition: opacity 1.5s;
 }
@@ -255,17 +255,17 @@ html|*#webRTC-previewVideo {
     opacity: 0;
   }
   to {
     opacity: 1;
   }
 }
 
 .plugin-blocked > .plugin-icon {
-  list-style-image: url(chrome://mozapps/skin/plugins/plugin-blocked.svg);
+  list-style-image: url(chrome://browser/skin/notification-icons/plugin-blocked.svg);
   fill: #d92215 !important;
 }
 
 .plugin-blocked > #plugin-icon-badge {
   visibility: collapse;
 }
 
 #notification-popup-box[hidden] {
rename from toolkit/themes/shared/plugins/plugin-blocked.svg
rename to browser/themes/shared/notification-icons/plugin-blocked.svg
rename from toolkit/themes/shared/plugins/plugin.svg
rename to browser/themes/shared/notification-icons/plugin.svg
--- a/browser/themes/shared/plugin-doorhanger.inc.css
+++ b/browser/themes/shared/plugin-doorhanger.inc.css
@@ -1,14 +1,14 @@
 .messageImage[value="plugin-hidden"] {
-  list-style-image: url(chrome://mozapps/skin/plugins/plugin.svg);
+  list-style-image: url(chrome://browser/skin/notification-icons/plugin.svg);
 }
 
 /* Keep any changes to this style in sync with pluginProblem.css */
 notification.pluginVulnerable {
   background-color: rgb(72,72,72);
   background-image: url(chrome://mozapps/skin/plugins/contentPluginStripe.png);
   color: white;
 }
 
 notification.pluginVulnerable .messageImage {
-  list-style-image: url(chrome://mozapps/skin/plugins/plugin-blocked.svg);
+  list-style-image: url(chrome://browser/skin/notification-icons/plugin-blocked.svg);
 }
--- a/caps/tests/mochitest/test_bug292789.html
+++ b/caps/tests/mochitest/test_bug292789.html
@@ -51,18 +51,18 @@ function testScriptSrc(aCallback) {
       // trigger the callback
       if (aCallback)
         aCallback();
     }
 }
 
 /** <img src=""> tests **/
 var img_global = "chrome://global/skin/media/error.png";
-var img_mozapps = "chrome://mozapps/skin/profile/profileicon.png";
-var res_mozapps = "resource://gre/chrome/toolkit/skin/classic/mozapps/profile/profileicon.png";
+var img_mozapps = "chrome://mozapps/skin/plugins/contentPluginClose.png";
+var res_mozapps = "resource://gre/chrome/toolkit/skin/classic/mozapps/plugins/contentPluginClose.png";
 
 var imgTests = [[img_global, "success"],
                 [img_mozapps, "fail"],
                 [res_mozapps, "success"]];
 
 var curImgTest = 0;
 
 function runImgTest() {
--- a/toolkit/locales/en-US/chrome/pluginproblem/pluginproblem.dtd
+++ b/toolkit/locales/en-US/chrome/pluginproblem/pluginproblem.dtd
@@ -1,13 +1,14 @@
 <!-- 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/. -->
 
 <!-- LOCALIZATION NOTE (tapToPlayPlugin): Mobile (used for touch interfaces) only has one type of plugin possible. -->
+<!ENTITY pluginActivationWarning                             "This site uses a plugin that may slow &brandShortName;.">
 <!ENTITY tapToPlayPlugin                                     "Tap here to activate plugin.">
 <!ENTITY clickToActivatePlugin                               "Activate plugin.">
 <!ENTITY checkForUpdates                                     "Check for updates…">
 <!ENTITY blockedPlugin.label                                 "This plugin has been blocked for your protection.">
 <!ENTITY hidePluginBtn.label                                 "Hide plugin">
 <!ENTITY managePlugins                                       "Manage plugins…">
 
 <!-- LOCALIZATION NOTE (reloadPlugin.pre): include a trailing space as needed -->
--- a/toolkit/pluginproblem/content/pluginProblem.xml
+++ b/toolkit/pluginproblem/content/pluginProblem.xml
@@ -22,16 +22,17 @@
     </resources>
 
     <content>
         <html:div class="mainBox" anonid="main" chromedir="&locale.dir;">
             <html:div class="hoverBox">
                 <html:label>
                     <html:button class="icon" anonid="icon"/>
                     <html:div class="msg msgVulnerabilityStatus" anonid="vulnerabilityStatus"><!-- set at runtime --></html:div>
+                    <html:div class="msg msgActivationWarning">&pluginActivationWarning;</html:div>
                     <html:div class="msg msgTapToPlay">&tapToPlayPlugin;</html:div>
                     <html:div class="msg msgClickToPlay" anonid="clickToPlay">&clickToActivatePlugin;</html:div>
                 </html:label>
 
                 <html:div class="msg msgBlocked">&blockedPlugin.label;</html:div>
                 <html:div class="msg msgCrashed">
                     <html:div class="msgCrashedText" anonid="crashedText"><!-- set at runtime --></html:div>
                     <!-- link href set at runtime -->
--- a/toolkit/pluginproblem/content/pluginProblemContent.css
+++ b/toolkit/pluginproblem/content/pluginProblemContent.css
@@ -63,16 +63,21 @@ a .mainBox:focus,
   visibility: hidden;
 }
 
 .visible > .hoverBox,
 .visible > .closeIcon {
   visibility: visible;
 }
 
+.minimal > .hoverBox,
+.minimal > .closeIcon {
+  visibility: hidden;
+}
+
 .mainBox[chromedir="rtl"] {
   direction: rtl;
 }
 
 a .hoverBox,
 :-moz-handler-clicktoplay .hoverBox,
 :-moz-handler-vulnerable-updatable .hoverBox,
 :-moz-handler-vulnerable-no-update .hoverBox {
@@ -87,16 +92,17 @@ a .hoverBox,
 }
 
 .msg {
   display: none;
 }
 
 a .msgClickToPlay,
 :-moz-handler-clicktoplay .msgClickToPlay,
+:-moz-handler-clicktoplay .msgActivationWarning,
 :-moz-handler-vulnerable-updatable .msgVulnerabilityStatus,
 :-moz-handler-vulnerable-updatable .msgCheckForUpdates,
 :-moz-handler-vulnerable-updatable .msgClickToPlay,
 :-moz-handler-vulnerable-no-update .msgVulnerabilityStatus,
 :-moz-handler-vulnerable-no-update .msgClickToPlay,
 :-moz-handler-blocked .msgBlocked,
 :-moz-handler-crashed .msgCrashed {
   display: block;
--- a/toolkit/themes/shared/mozapps.inc.mn
+++ b/toolkit/themes/shared/mozapps.inc.mn
@@ -20,26 +20,26 @@
   skin/classic/mozapps/extensions/extensionGeneric-16.svg    (../../shared/extensions/extensionGeneric-16.svg)
   skin/classic/mozapps/extensions/utilities.svg              (../../shared/extensions/utilities.svg)
   skin/classic/mozapps/extensions/navigation.svg             (../../shared/extensions/navigation.svg)
   skin/classic/mozapps/extensions/alerticon-warning.svg      (../../shared/extensions/alerticon-warning.svg)
   skin/classic/mozapps/extensions/alerticon-error.svg        (../../shared/extensions/alerticon-error.svg)
   skin/classic/mozapps/extensions/alerticon-info-positive.svg (../../shared/extensions/alerticon-info-positive.svg)
   skin/classic/mozapps/extensions/alerticon-info-negative.svg (../../shared/extensions/alerticon-info-negative.svg)
   skin/classic/mozapps/extensions/category-legacy.svg        (../../shared/extensions/category-legacy.svg)
-  skin/classic/mozapps/plugins/plugin.svg                    (../../shared/plugins/plugin.svg)
-  skin/classic/mozapps/plugins/plugin-blocked.svg            (../../shared/plugins/plugin-blocked.svg)
   skin/classic/mozapps/plugins/pluginGeneric.svg             (../../shared/extensions/category-plugins.svg)
   skin/classic/mozapps/plugins/pluginProblem.css             (../../shared/plugins/pluginProblem.css)
   skin/classic/mozapps/aboutNetworking.css                   (../../shared/aboutNetworking.css)
 #ifndef ANDROID
   skin/classic/mozapps/aboutProfiles.css                     (../../shared/aboutProfiles.css)
 #endif
   skin/classic/mozapps/aboutServiceWorkers.css               (../../shared/aboutServiceWorkers.css)
+  skin/classic/mozapps/plugins/contentPluginActivate.png     (../../shared/plugins/contentPluginActivate.png)
   skin/classic/mozapps/plugins/contentPluginBlocked.png      (../../shared/plugins/contentPluginBlocked.png)
+  skin/classic/mozapps/plugins/contentPluginClose.png        (../../shared/plugins/contentPluginClose.png)
   skin/classic/mozapps/plugins/contentPluginCrashed.png      (../../shared/plugins/contentPluginCrashed.png)
   skin/classic/mozapps/plugins/contentPluginStripe.png       (../../shared/plugins/contentPluginStripe.png)
 
 % override chrome://mozapps/skin/extensions/category-plugins.svg          chrome://mozapps/skin/plugins/pluginGeneric.svg
 % override chrome://mozapps/skin/extensions/category-extensions.svg       chrome://mozapps/skin/extensions/extensionGeneric.svg
 % override chrome://mozapps/skin/extensions/category-languages.svg        chrome://mozapps/skin/extensions/localeGeneric.svg
 % override chrome://mozapps/skin/extensions/category-themes.svg           chrome://mozapps/skin/extensions/themeGeneric.svg
 % override chrome://mozapps/skin/extensions/category-dictionaries.svg chrome://mozapps/skin/extensions/dictionaryGeneric.svg
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..31351dc3b7ef57cee15989759c9556e8a2f6dd79
GIT binary patch
literal 3043
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..61eb5582881dc34346107611c7921be6fcfe899a
GIT binary patch
literal 1370
zc$@)R1*Q6lP)<h;3K|Lk000e1NJLTq001xm000mO1ONa4`lmEH0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU${7FPXR2Ugm!D(!hbsPuq@9*EI*R$@Z
zqswU59Sj&~CgB)}99uUw$DxTr1o243C^1A{8UZK7F$gbF6GM!ss6iq|f-oTK7-NXQ
z7(xJH9<a3=W$o@BPy0MipPysl4WAF;F|`aUF%M1#M$m=R)^0pOnU6Q%Lmq>|+(tjx
zyYPg=v#^>Lz{#KybfS5~T}&cOP-Se<tGWl<f;VD>XB|FoS+1#_zOX2mq-63wywcly
zGT4;_=Gj(ziwecB{GlAfq$4u6YPH?ztLV1@?qmgK3CWNB>lJ{2l#Jbjh1)uh{l_{n
zg9y^grF$x-^iYFE0hCPq94p>><wTIuU<MJJ)_6Z#=(xwP$}!-GjD3+=UzzSFz{~^?
zs6>7@?fMHJtyctq%|j)t{K3#P3y7H*G~0STxT<Bils97nH^rw{wFdf&zyuJOX7KgC
zs@C{SYQiI12A|m@q9I2dAUu*C4G--VgXP!)P^vV&e^YxTe5_7YtIyt#Gs-gkHHNmd
zwcPVfrL<Ldpyka|;fJSQ)Rd+EpbkuvI_mY*qO;{wzh6l!jwkg4dyT}vt_)3WK+Fcp
zjyIY${S%Sv+$N;=1l8UdYVL`q(|YEVHlH`EEZbjWcgB-3qq(Ph2({SQ)7uh?vZ2}v
zFRbubOReYYCASifb4#eV7aO_0TklP%!q6PfM$S;O<GanaEG4ChK;mBw^#XI-9>BPp
ztU0F)J6s*h{XW?l2`srZs*%z90Q2B$egNYhFK^NNZABM-?R93)$n6E4;|!y@AJt;P
zRlpdtH|U8mNA7OyHrul!4?oRNO>A5NDg^TGBmp-5j#Zvd3^`nO=Rja_=cvLAbSIHV
zg|{>Y_+ENRYpUN?EO|z6FYJn@G2yljFY*VhWWX4+H)x5`%qjMqNNAU=3O2}iXrp`q
z6$a=L0SJH~+cN|U5EF<Eq+ozRAOT?l5!te2A^`%W1wb0<Fvx&GEKD>(wpuhc$Y4V-
zu|T-Y0Rd@dW?QA~j09ps4%hEXy%{7yl-VeRV7Z+Ho2E-0^^zxgOYO53U-spjVS<<=
z;XVf38Ut`9nq)aA97>EhTzgE86hO#N;DO*jtEWOLv-vA+&T!zluBr?1A&0ADsoMt0
z=jJZ7t@1#cF4|X0p0S&AuPtuX`fMead~RZCRRR3yoG*xS5{(XfcDQe+d3!Q3?3mJI
z&PakPOt>s?dbYE!Xiz9hB=CIan9>vXb;Jj?v`Y2GWjS;P-xU_uxQ9hDHhObGS5yzC
z7yDCzw5EzWcVQ79!ikyIV!L8WrXu}2%__#t+m-mRZWvS|&#>Yo0qUm6nityR<7s0=
zg+X9bi8Tf}>r9pFH_JgF(U^E^c}sje&Ep0bVBv*A_Uw*Y`H;N<IQst3hQ_EmW{_$E
zGl()%ny}<FWaj>~?n?pix324_mn|w7F^C`_2t9g*_tY}iHU1V8XjjIi^VN$y;{wD4
zBJ`OmyyvUsKX?}&IgopCM~3GqRRS}E!BJa5?#FWOMH~PK6I6*`*Vf)0YYE*+0#Dmk
zOr4c&{sli;bxcZ_X$OB02%PM{p#gKus|yOf_?(*T8YUf;@J{-*f3!}m-%9LO7g<Ur
z(_#90tqu?#Q}a;I<#0j50B+D}OBhd33h_2CqXJmCm(Jm!J%}e9&Bsfai#(VSLKlv&
cdx%N@10$?eQwD%?vH$=807*qoM6N<$f{_h-mH+?%
--- a/toolkit/themes/shared/plugins/pluginProblem.css
+++ b/toolkit/themes/shared/plugins/pluginProblem.css
@@ -2,22 +2,16 @@
  * 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/. */
 
 @namespace html url(http://www.w3.org/1999/xhtml);
 
 /* These styles affect only the bound element, not other page content. */
 /* Keep any changes to these styles in sync with plugin-doorhanger.inc.css */
 .mainBox {
- --grey-10: #f9f9fa;
- --grey-60: #4a4a4f;
- --grey-70: #38383d;
-}
-
-.mainBox {
   font: message-box;
   font-size: 12px;
   text-align: center;
   display: table;
   width: 100%;
   height: 100%;
   background-color: rgb(72,72,72);
   color: white;
@@ -28,20 +22,22 @@
   display: table-cell;
   box-sizing: border-box;
   padding: 5px;
   vertical-align: middle;
   width: 100%;
   height: 100%;
 }
 :-moz-handler-vulnerable-updatable .hoverBox:active,
-:-moz-handler-vulnerable-no-update .hoverBox:active {
+:-moz-handler-vulnerable-no-update .hoverBox:active,
+:-moz-handler-clicktoplay .hoverBox:active {
   background-color: rgb(65, 65, 65);
 }
 
+:-moz-handler-clicktoplay .hoverBox:active .msgClickToPlay,
 :-moz-handler-vulnerable-updatable .hoverBox:active .msgClickToPlay,
 :-moz-handler-vulnerable-no-update .hoverBox:active .msgClickToPlay {
   color: red;
 }
 
 :-moz-handler-vulnerable-updatable .hoverBox,
 :-moz-handler-vulnerable-no-update .hoverBox,
 :-moz-handler-blocked .hoverBox,
@@ -53,36 +49,33 @@ html|a {
   color: white;
 }
 
 .icon {
   width: 48px;
   height: 48px;
   background-position: center;
   background-repeat: no-repeat;
-  background-size: contain;
   border: none;
   background-color: transparent;
   -moz-user-focus: ignore;
   margin-bottom: 6px;
-  -moz-context-properties: fill;
 }
 
 :-moz-handler-vulnerable-updatable .icon,
 :-moz-handler-vulnerable-no-update .icon {
   background-image: url(chrome://mozapps/skin/plugins/contentPluginBlocked.png);
   -moz-user-focus: normal;
 }
 :-moz-handler-blocked .icon {
   background-image: url(chrome://mozapps/skin/plugins/contentPluginBlocked.png);
 }
 a .icon,
 :-moz-handler-clicktoplay .icon {
-  background-image: url(chrome://mozapps/skin/plugins/plugin.svg);
-  fill: var(--grey-10);
+  background-image: url(chrome://mozapps/skin/plugins/contentPluginActivate.png);
   -moz-user-focus: normal;
 }
 :-moz-handler-crashed .icon {
   background-image: url(chrome://mozapps/skin/plugins/contentPluginCrashed.png);
 }
 
 .throbber {
   padding-left: 16px; /* width of the background image */
@@ -92,16 +85,20 @@ a .icon,
 
 @media (min-resolution: 1.1dppx) {
   .throbber {
     background-image: url(chrome://global/skin/icons/loading@2x.png);
     background-size: 16px;
   }
 }
 
+.msgClickToPlay {
+  text-decoration: underline;
+}
+
 /* on desktop, don't ever show the tap-to-play UI: that is for mobile only */
 :-moz-handler-clicktoplay .msgTapToPlay,
 a .msgTapToPlay  {
   display: none;
 }
 
 .submitStatus div {
   min-height: 19px; /* height of biggest line (with throbber) */
@@ -153,37 +150,33 @@ a .msgTapToPlay  {
 }
 
 .mainBox[chromedir="rtl"] .helpIcon {
   float: right;
 }
 
 .closeIcon {
   display: block;
-  width: 20px;
-  height: 20px;
+  width: 16px;
+  height: 16px;
   margin-top: 4px;
-  margin-inline-start: -24px;
+  margin-inline-start: -20px;
   margin-inline-end: 4px;
   border: none;
-  border-radius: 2px;
   background-color: transparent;
-  background-image: url(chrome://global/skin/icons/close.svg);
+  background-image: url("chrome://mozapps/skin/plugins/contentPluginClose.png");
   background-repeat: no-repeat;
-  -moz-context-properties: fill, fill-opacity;
-  fill-opacity: 0;
-  fill: var(--grey-10);
 }
 
 .closeIcon:hover {
-  fill-opacity: .1;
+  background-position: -16px 0;
 }
 
 .closeIcon:hover:active {
-  fill-opacity: .2;
+  background-position: -32px 0;
 }
 
 .action-link {
   display: inline-block;
   border-radius: 10px;
   background-color: rgb(35, 35, 35);
   padding: 2px 8px;
   margin-top: 7px;
@@ -194,59 +187,8 @@ a .msgTapToPlay  {
 }
 
 :-moz-handler-vulnerable-updatable .action-link {
   background-color: #a81b0c;
 }
 :-moz-handler-vulnerable-updatable .action-link:active {
   background-color: #801409;
 }
-
-/* New Photon styling
- *
- * At the moment, these rules are written to only override
- * :-moz-handler-clicktoplay styling. Once we finish the
- * redesign for all cases, we can change the CSS directly
- * above instead of writing these super-specific rules.
- */
-:-moz-handler-clicktoplay .mainBox {
-  background-color: var(--grey-70);
-}
-
-:-moz-handler-clicktoplay .msgClickToPlay {
-  font-size: 13px;
-}
-
-:-moz-handler-clicktoplay .mainBox[sizing=blank] .hoverBox {
-  visibility: hidden;
-}
-
-:-moz-handler-clicktoplay .mainBox[sizing=tiny] .icon {
-  width: 16px;
-  height: 16px;
-}
-
-:-moz-handler-clicktoplay .mainBox[sizing=reduced] .icon {
-  width: 32px;
-  height: 32px;
-}
-
-:-moz-handler-clicktoplay .mainBox[sizing=blank] .closeIcon,
-:-moz-handler-clicktoplay .mainBox[sizing=tiny] .closeIcon,
-:-moz-handler-clicktoplay .mainBox[sizing=reduced] .closeIcon {
-  display: none;
-}
-
-:-moz-handler-clicktoplay .mainBox[notext] .msgClickToPlay {
-  display: none;
-}
-
-:-moz-handler-clicktoplay .mainBox[notext] .icon {
-  /* Override a `margin-bottom: 6px` now that .msgClickToPlay
-   * below the icon is no longer shown, in order to achieve
-   * a perfect vertical centering of the icon.
-   */
-  margin-bottom: 0;
-}
-
-:-moz-handler-clicktoplay .hoverBox:active {
-  background-color: var(--grey-60);
-}