Bug 934205 - Add link to install more themes from the Add-on Manager. Original patch written by MattN. r?mattn draft
authorJared Wein <jwein@mozilla.com>
Mon, 19 Dec 2016 21:47:46 -0500
changeset 451239 475052b049b5feb077f3f41b735fba504ae09325
parent 451227 799f964e4d73d6fb0ce317474fdc3c3b457b653c
child 451574 c115eb1bc581dc7d7596baf8beee9197a35d0b54
push id39111
push userbmo:jaws@mozilla.com
push dateTue, 20 Dec 2016 02:48:06 +0000
reviewersmattn
bugs934205
milestone53.0a1
Bug 934205 - Add link to install more themes from the Add-on Manager. Original patch written by MattN. r?mattn MozReview-Commit-ID: 4LeqpQyFxDg
browser/app/profile/firefox.js
toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
toolkit/mozapps/extensions/content/extensions.css
toolkit/mozapps/extensions/content/extensions.js
toolkit/mozapps/extensions/content/extensions.xul
toolkit/mozapps/extensions/test/browser/browser.ini
toolkit/mozapps/extensions/test/browser/browser_getmorethemes.js
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -44,16 +44,17 @@ pref("extensions.getAddons.cache.enabled
 pref("extensions.getAddons.maxResults", 15);
 pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/firefox/api/%API_VERSION%/search/guid:%IDS%?src=firefox&appOS=%OS%&appVersion=%VERSION%");
 pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/firefox/api/%API_VERSION%/search/guid:%IDS%?src=firefox&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
 pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
 pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/firefox/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%?src=firefox");
 pref("extensions.webservice.discoverURL", "https://discovery.addons.mozilla.org/%LOCALE%/firefox/discovery/pane/%VERSION%/%OS%/%COMPATIBILITY_MODE%");
 pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/%APP%/api/%API_VERSION%/list/recommended/all/%MAX_RESULTS%/%OS%/%VERSION%?src=firefox");
 pref("extensions.getAddons.link.url", "https://addons.mozilla.org/%LOCALE%/firefox/");
+pref("extensions.getAddons.themes.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/themes/?src=firefox");
 
 pref("extensions.update.autoUpdateDefault", true);
 
 pref("extensions.hotfix.id", "firefox-hotfix@mozilla.org");
 pref("extensions.hotfix.cert.checkAttributes", true);
 pref("extensions.hotfix.certs.1.sha1Fingerprint", "91:53:98:0C:C1:86:DF:47:8F:35:22:9E:11:C9:A7:31:04:49:A1:AA");
 pref("extensions.hotfix.certs.2.sha1Fingerprint", "39:E7:2B:7A:5B:CF:37:78:F9:5D:4A:E0:53:2D:2F:3D:68:53:C5:60");
 
--- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
+++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
@@ -15,16 +15,19 @@
 <!ENTITY listEmpty.recentUpdates.label        "You haven’t recently updated any add-ons">
 <!ENTITY listEmpty.findUpdates.label          "Check For Updates">
 <!ENTITY listEmpty.search.label               "Could not find any matching add-ons">
 <!ENTITY listEmpty.button.label               "Learn more about add-ons">
 <!ENTITY installAddonFromFile.label           "Install Add-on From File…">
 <!ENTITY installAddonFromFile.accesskey       "I">
 <!ENTITY toolsMenu.tooltip                    "Tools for all add-ons">
 
+<!ENTITY getThemes.description                "Looking to personalize your browser?">
+<!ENTITY getThemes.learnMore                  "Choose from thousands of themes.">
+
 <!ENTITY cmd.back.tooltip                     "Go back one page">
 <!ENTITY cmd.forward.tooltip                  "Go forward one page">
 
 <!ENTITY showUnsignedExtensions.button.label  "Some extensions could not be verified">
 <!ENTITY showAllExtensions.button.label       "Show all extensions">
 <!ENTITY debugAddons.label                    "Debug Add-ons">
 <!ENTITY debugAddons.accesskey                "B">
 
--- a/toolkit/mozapps/extensions/content/extensions.css
+++ b/toolkit/mozapps/extensions/content/extensions.css
@@ -193,20 +193,18 @@ setting[type="menulist"] {
 
 /* Plugins aren't yet disabled by safemode (bug 342333),
    so don't show that warning when viewing plugins. */
 #addons-page[warning="safemode"] .view-pane[type="plugin"] .global-warning-container,
 #addons-page[warning="safemode"] #detail-view[loading="true"] .global-warning {
   display: none;
 }
 
-#addons-page .view-pane:not([type="plugin"]) #plugindeprecation-notice {
-  display: none;
-}
-
+#addons-page .view-pane:not([type="theme"]) #getthemes-container,
+#addons-page .view-pane:not([type="plugin"]) #plugindeprecation-notice,
 #addons-page .view-pane:not([type="experiment"]) .experiment-info-container {
   display: none;
 }
 
 .addon .relnotes {
   -moz-user-select: text;
 }
 #detail-name, #detail-desc, #detail-fulldesc {
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -2759,16 +2759,23 @@ var gListView = {
     }
 
     if (Preferences.get("plugin.load_flash_only", true)) {
       document.getElementById("plugindeprecation-learnmore-link")
         .setAttribute("href", Services.urlFormatter.formatURLPref("app.support.baseURL") + "npapi");
     } else {
       document.getElementById("plugindeprecation-notice").hidden = true;
     }
+
+    if (Preferences.get("extensions.getAddons.themes.browseURL", "")) {
+      document.getElementById("getthemes-learnmore-link")
+        .setAttribute("href", Services.urlFormatter.formatURLPref("extensions.getAddons.themes.browseURL"));
+    } else {
+      document.getElementById("getthemes-container").hidden = true;
+    }
   },
 
   show: function(aType, aRequest) {
     let showOnlyDisabledUnsigned = false;
     if (aType.endsWith("?unsigned=true")) {
       aType = aType.replace(/\?.*/, "");
       showOnlyDisabledUnsigned = true;
     }
--- a/toolkit/mozapps/extensions/content/extensions.xul
+++ b/toolkit/mozapps/extensions/content/extensions.xul
@@ -355,16 +355,23 @@
               </vbox>
               <vbox id="plugindeprecation-notice" class="alert-container">
                 <hbox class="alert">
                   <description>&pluginDeprecation.description; &#160;
                     <label class="text-link plain" id="plugindeprecation-learnmore-link">&pluginDeprecation.learnMore;</label>
                   </description>
                 </hbox>
               </vbox>
+              <vbox id="getthemes-container" class="alert-container">
+                <hbox class="alert">
+                  <description>&getThemes.description; &#160;
+                    <label class="text-link plain" id="getthemes-learnmore-link">&getThemes.learnMore;</label>
+                  </description>
+                </hbox>
+              </vbox>
               <hbox class="view-header global-warning-container">
                 <!-- global warnings -->
                 <hbox class="global-warning" flex="1">
                   <hbox class="global-warning-safemode" flex="1" align="center"
                         tooltiptext="&warning.safemode.label;">
                     <image class="warning-icon"/>
                     <label class="global-warning-text" flex="1" crop="end"
                            value="&warning.safemode.label;"/>
--- a/toolkit/mozapps/extensions/test/browser/browser.ini
+++ b/toolkit/mozapps/extensions/test/browser/browser.ini
@@ -49,16 +49,17 @@ support-files =
   !/toolkit/mozapps/extensions/test/xpinstall/unsigned.xpi
   !/toolkit/mozapps/extensions/test/xpinstall/amosigned.xpi
 
 [browser_addonrepository_performance.js]
 [browser_bug557956.js]
 [browser_bug616841.js]
 [browser_cancelCompatCheck.js]
 [browser_checkAddonCompatibility.js]
+[browser_getmorethemes.js]
 [browser_gmpProvider.js]
 [browser_hotfix.js]
 # Verifies the old style of signing hotfixes
 skip-if = require_signing
 [browser_installssl.js]
 [browser_newaddon.js]
 [browser_updatessl.js]
 [browser_system_addons_are_e10s.js]
new file mode 100644
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/browser/browser_getmorethemes.js
@@ -0,0 +1,46 @@
+const MAIN_URL = "https://example.com/" + RELATIVE_DIR + "discovery.html";
+const PREF_GETTHEMESURL = "extensions.getAddons.themes.browseURL";
+
+add_task(function* getthemes_link_visible_on_appearance_when_pref_set() {
+  yield SpecialPowers.pushPrefEnv({set: [[PREF_GETTHEMESURL, MAIN_URL]]});
+
+  let aManager = yield open_manager("addons://list/extension");
+  info("Testing theme discovery information");
+  var button = aManager.document.querySelector("#getthemes-learnmore-link");
+  is_element_hidden(button, "Thume discovery button should be hidden");
+
+  info("Changing view to appearance");
+  EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-theme"), { }, aManager);
+
+  yield new Promise(resolve => wait_for_view_load(aManager, resolve));
+  button = aManager.document.querySelector("#getthemes-learnmore-link");
+  is_element_visible(button, "Theme discovery message should be visible");
+
+  info("Clicking button to get more themes");
+  let awaitNewTab = BrowserTestUtils.waitForNewTab(gBrowser, MAIN_URL);
+  EventUtils.synthesizeMouseAtCenter(button, { }, aManager);
+  yield awaitNewTab;
+
+  is(gBrowser.currentURI.spec, Services.urlFormatter.formatURLPref(PREF_GETTHEMESURL), "Theme discovery URL should match");
+
+  yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
+  yield close_manager(aManager);
+});
+
+add_task(function* getthemes_link_hidden_on_appearance_when_pref_cleared() {
+  yield SpecialPowers.pushPrefEnv({set: [[PREF_GETTHEMESURL, ""]]});
+
+  let aManager = yield open_manager("addons://list/extension");
+  info("Testing theme discovery information");
+  var button = aManager.document.querySelector("#getthemes-learnmore-link");
+  is_element_hidden(button, "Thume discovery button should be hidden");
+
+  info("Changing view to appearance");
+  EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-theme"), { }, aManager);
+
+  yield new Promise(resolve => wait_for_view_load(aManager, resolve));
+  button = aManager.document.querySelector("#getthemes-learnmore-link");
+  is_element_hidden(button, "Theme discovery message should be hidden");
+
+  yield close_manager(aManager);
+});