Bug 1263313 Remove search pane from about:addons draft
authorAndrew Swan <aswan@mozilla.com>
Tue, 05 Dec 2017 21:17:13 -0800
changeset 710010 366ae12a5892ef3865343304196726f14ad818be
parent 710009 e0b8db0851664249ef49f25bca73f43b3a022922
child 743503 91d059b0fe95ed90dec1f501ee85cd81c39b70ee
push id92738
push useraswan@mozilla.com
push dateFri, 08 Dec 2017 17:56:08 +0000
bugs1263313
milestone59.0a1
Bug 1263313 Remove search pane from about:addons Also remove related code that was only used from here including stuff related to marketplace purchases, etc. MozReview-Commit-ID: ESX78tVQK7M
browser/app/profile/firefox.js
mobile/android/app/mobile.js
testing/profiles/prefs_general.js
testing/talos/talos/config.py
testing/talos/talos/unittests/test_talosconfig_browser_config.json
toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
toolkit/mozapps/extensions/content/extensions.css
toolkit/mozapps/extensions/content/extensions.js
toolkit/mozapps/extensions/content/extensions.xml
toolkit/mozapps/extensions/content/extensions.xul
toolkit/mozapps/extensions/internal/AddonRepository.jsm
toolkit/mozapps/extensions/test/xpcshell/data/test_AddonRepository_compatmode_ignore.xml
toolkit/mozapps/extensions/test/xpcshell/data/test_AddonRepository_compatmode_normal.xml
toolkit/mozapps/extensions/test/xpcshell/data/test_AddonRepository_compatmode_strict.xml
toolkit/mozapps/extensions/test/xpcshell/data/test_bug424262.xml
toolkit/mozapps/extensions/test/xpcshell/data/test_bug554133.xml
toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_compatmode.js
toolkit/mozapps/extensions/test/xpcshell/test_bug424262.js
toolkit/mozapps/extensions/test/xpcshell/test_bug554133.js
toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
toolkit/themes/shared/extensions/category-search.svg
toolkit/themes/shared/extensions/extensions.inc.css
toolkit/themes/shared/mozapps.inc.mn
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -38,23 +38,20 @@ pref("extensions.minCompatibleAppVersion
 pref("extensions.checkCompatibility.temporaryThemeOverride_minAppVersion", "29.0a1");
 
 pref("xpinstall.customConfirmationUI", true);
 pref("extensions.webextPermissionPrompts", true);
 pref("extensions.webextOptionalPermissionPrompts", true);
 
 // Preferences for AMO integration
 pref("extensions.getAddons.cache.enabled", true);
-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");
--- a/mobile/android/app/mobile.js
+++ b/mobile/android/app/mobile.js
@@ -206,21 +206,17 @@ pref("extensions.update.url", "https://v
 pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
 
 pref("extensions.hotfix.id", "firefox-android-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");
 
 /* preferences for the Get Add-ons pane */
 pref("extensions.getAddons.cache.enabled", true);
-pref("extensions.getAddons.maxResults", 15);
-pref("extensions.getAddons.recommended.browseURL", "https://addons.mozilla.org/%LOCALE%/android/recommended/");
-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/list/featured/all/%MAX_RESULTS%/%OS%/%VERSION%");
 pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/android/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%");
 pref("extensions.getAddons.browseAddons", "https://addons.mozilla.org/%LOCALE%/android/");
 pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%");
 pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/android/api/%API_VERSION%/search/guid:%IDS%?src=mobile&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
 
 /* preference for the locale picker */
 pref("extensions.getLocales.get.url", "");
 pref("extensions.compatability.locales.buildid", "0");
 
--- a/testing/profiles/prefs_general.js
+++ b/testing/profiles/prefs_general.js
@@ -122,21 +122,19 @@ user_pref("extensions.blocklist.itemURL"
 user_pref("extensions.blocklist.url", "http://%(server)s/extensions-dummy/blocklistURL");
 user_pref("extensions.hotfix.url", "http://%(server)s/extensions-dummy/hotfixURL");
 user_pref("extensions.systemAddon.update.url", "http://%(server)s/dummy-system-addons.xml");
 // Turn off extension updates so they don't bother tests
 user_pref("extensions.update.enabled", false);
 // Make sure opening about:addons won't hit the network
 user_pref("extensions.webservice.discoverURL", "http://%(server)s/extensions-dummy/discoveryURL");
 // Make sure AddonRepository won't hit the network
-user_pref("extensions.getAddons.maxResults", 0);
 user_pref("extensions.getAddons.get.url", "http://%(server)s/extensions-dummy/repositoryGetURL");
 user_pref("extensions.getAddons.getWithPerformance.url", "http://%(server)s/extensions-dummy/repositoryGetWithPerformanceURL");
 user_pref("extensions.getAddons.search.browseURL", "http://%(server)s/extensions-dummy/repositoryBrowseURL");
-user_pref("extensions.getAddons.search.url", "http://%(server)s/extensions-dummy/repositorySearchURL");
 // Ensure blocklist updates don't hit the network
 user_pref("services.settings.server", "http://%(server)s/dummy-kinto/v1");
 // Make sure SNTP requests don't hit the network
 user_pref("network.sntp.pools", "%(server)s");
 // We know the SNTP request will fail, since localhost isn't listening on
 // port 135. The default number of retries (10) is excessive, but retrying
 // at least once will mean that codepath is still tested in automation.
 user_pref("network.sntp.maxRetryCount", 1);
--- a/testing/talos/talos/config.py
+++ b/testing/talos/talos/config.py
@@ -144,26 +144,23 @@ DEFAULTS = dict(
         'extensions.blocklist.enabled': False,
         'extensions.blocklist.url':
             'http://127.0.0.1/extensions-dummy/blocklistURL',
         'extensions.hotfix.url':
             'http://127.0.0.1/extensions-dummy/hotfixURL',
         'extensions.update.enabled': False,
         'extensions.webservice.discoverURL':
             'http://127.0.0.1/extensions-dummy/discoveryURL',
-        'extensions.getAddons.maxResults': 0,
         'extensions.getAddons.get.url':
             'http://127.0.0.1/extensions-dummy/repositoryGetURL',
         'extensions.getAddons.getWithPerformance.url':
             'http://127.0.0.1/extensions-dummy'
             '/repositoryGetWithPerformanceURL',
         'extensions.getAddons.search.browseURL':
             'http://127.0.0.1/extensions-dummy/repositoryBrowseURL',
-        'extensions.getAddons.search.url':
-            'http://127.0.0.1/extensions-dummy/repositorySearchURL',
         'media.gmp-manager.url':
             'http://127.0.0.1/gmpmanager-dummy/update.xml',
         'media.gmp-manager.updateEnabled': False,
         'extensions.systemAddon.update.url':
             'http://127.0.0.1/dummy-system-addons.xml',
         'extensions.shield-recipe-client.api_url':
             'https://127.0.0.1/selfsupport-dummy/',
         'browser.ping-centre.staging.endpoint':
--- a/testing/talos/talos/unittests/test_talosconfig_browser_config.json
+++ b/testing/talos/talos/unittests/test_talosconfig_browser_config.json
@@ -1,1 +1,1 @@
-{'deviceroot': '', 'dirs': {}, 'repository': 'http://hg.mozilla.org/releases/mozilla-release', 'buildid': '20131205075310', 'results_log': 'pathtoresults_log', 'symbols_path': None, 'bcontroller_config': 'pathtobcontroller', 'host': '', 'browser_name': 'Firefox', 'sourcestamp': '39faf812aaec', 'remote': False, 'child_process': 'plugin-container', 'branch_name': '', 'browser_version': '26.0', 'extra_args': '', 'develop': True, 'preferences': {'browser.display.overlaynavbuttons': False, 'extensions.getAddons.get.url': 'http://127.0.0.1/extensions-dummy/repositoryGetURL', 'dom.max_chrome_script_run_time': 0, 'network.proxy.type': 1, 'extensions.update.background.url': 'http://127.0.0.1/extensions-dummy/updateBackgroundURL', 'network.proxy.http': 'localhost', 'plugins.update.url': 'http://127.0.0.1/plugins-dummy/updateCheckURL', 'dom.max_script_run_time': 0, 'extensions.update.enabled': False, 'browser.safebrowsing.keyURL': 'http://127.0.0.1/safebrowsing-dummy/newkey', 'media.navigator.permission.disabled': True, 'app.update.enabled': False, 'extensions.blocklist.url': 'http://127.0.0.1/extensions-dummy/blocklistURL', 'browser.EULA.override': True, 'extensions.checkCompatibility': False, 'talos.logfile': 'pathtofile', 'browser.safebrowsing.gethashURL': 'http://127.0.0.1/safebrowsing-dummy/gethash', 'extensions.hotfix.url': 'http://127.0.0.1/extensions-dummy/hotfixURL', 'dom.disable_window_move_resize': True, 'network.proxy.http_port': 80, 'browser.dom.window.dump.enabled': True, 'extensions.update.url': 'http://127.0.0.1/extensions-dummy/updateURL', 'browser.chrome.dynamictoolbar': False,  'browser.link.open_newwindow': 2, 'extensions.getAddons.search.url': 'http://127.0.0.1/extensions-dummy/repositorySearchURL', 'browser.cache.disk.smart_size.first_run': False, 'security.turn_off_all_security_so_that_viruses_can_take_over_this_computer': True, 'dom.disable_open_during_load': False, 'extensions.getAddons.search.browseURL': 'http://127.0.0.1/extensions-dummy/repositoryBrowseURL', 'browser.cache.disk.smart_size.enabled': False, 'extensions.getAddons.getWithPerformance.url': 'http://127.0.0.1/extensions-dummy/repositoryGetWithPerformanceURL', 'hangmonitor.timeout': 0, 'extensions.getAddons.maxResults': 0, 'dom.send_after_paint_to_content': True, 'security.fileuri.strict_origin_policy': False, 'media.capturestream_hints.enabled': True, 'extensions.update.notifyUser': False, 'extensions.blocklist.enabled': False, 'browser.bookmarks.max_backups': 0, 'browser.shell.checkDefaultBrowser': False, 'media.peerconnection.enabled': True, 'dom.disable_window_flip': True, 'security.enable_java': False, 'browser.warnOnQuit': False, 'media.navigator.enabled': True, 'browser.safebrowsing.updateURL': 'http://127.0.0.1/safebrowsing-dummy/update', 'dom.allow_scripts_to_close_windows': True, 'extensions.webservice.discoverURL': 'http://127.0.0.1/extensions-dummy/discoveryURL'}, 'test_timeout': 1200, 'title': 'qm-pxp01', 'error_filename': 'pathtoerrorfile', 'webserver': 'localhost:15707', 'browser_path':ffox_path, 'port': 20701, 'browser_log': 'browser_output.txt', 'process': 'firefox.exe', 'xperf_path': 'C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe', 'extensions': ['pathtopageloader'], 'fennecIDs': '', 'env': {'NO_EM_RESTART': '1'}, 'init_url': 'http://localhost:15707/getInfo.html', 'browser_wait': 5}
\ No newline at end of file
+{'deviceroot': '', 'dirs': {}, 'repository': 'http://hg.mozilla.org/releases/mozilla-release', 'buildid': '20131205075310', 'results_log': 'pathtoresults_log', 'symbols_path': None, 'bcontroller_config': 'pathtobcontroller', 'host': '', 'browser_name': 'Firefox', 'sourcestamp': '39faf812aaec', 'remote': False, 'child_process': 'plugin-container', 'branch_name': '', 'browser_version': '26.0', 'extra_args': '', 'develop': True, 'preferences': {'browser.display.overlaynavbuttons': False, 'extensions.getAddons.get.url': 'http://127.0.0.1/extensions-dummy/repositoryGetURL', 'dom.max_chrome_script_run_time': 0, 'network.proxy.type': 1, 'extensions.update.background.url': 'http://127.0.0.1/extensions-dummy/updateBackgroundURL', 'network.proxy.http': 'localhost', 'plugins.update.url': 'http://127.0.0.1/plugins-dummy/updateCheckURL', 'dom.max_script_run_time': 0, 'extensions.update.enabled': False, 'browser.safebrowsing.keyURL': 'http://127.0.0.1/safebrowsing-dummy/newkey', 'media.navigator.permission.disabled': True, 'app.update.enabled': False, 'extensions.blocklist.url': 'http://127.0.0.1/extensions-dummy/blocklistURL', 'browser.EULA.override': True, 'extensions.checkCompatibility': False, 'talos.logfile': 'pathtofile', 'browser.safebrowsing.gethashURL': 'http://127.0.0.1/safebrowsing-dummy/gethash', 'extensions.hotfix.url': 'http://127.0.0.1/extensions-dummy/hotfixURL', 'dom.disable_window_move_resize': True, 'network.proxy.http_port': 80, 'browser.dom.window.dump.enabled': True, 'extensions.update.url': 'http://127.0.0.1/extensions-dummy/updateURL', 'browser.chrome.dynamictoolbar': False,  'browser.link.open_newwindow': 2, 'browser.cache.disk.smart_size.first_run': False, 'security.turn_off_all_security_so_that_viruses_can_take_over_this_computer': True, 'dom.disable_open_during_load': False, 'extensions.getAddons.search.browseURL': 'http://127.0.0.1/extensions-dummy/repositoryBrowseURL', 'browser.cache.disk.smart_size.enabled': False, 'extensions.getAddons.getWithPerformance.url': 'http://127.0.0.1/extensions-dummy/repositoryGetWithPerformanceURL', 'hangmonitor.timeout': 0, 'dom.send_after_paint_to_content': True, 'security.fileuri.strict_origin_policy': False, 'media.capturestream_hints.enabled': True, 'extensions.update.notifyUser': False, 'extensions.blocklist.enabled': False, 'browser.bookmarks.max_backups': 0, 'browser.shell.checkDefaultBrowser': False, 'media.peerconnection.enabled': True, 'dom.disable_window_flip': True, 'security.enable_java': False, 'browser.warnOnQuit': False, 'media.navigator.enabled': True, 'browser.safebrowsing.updateURL': 'http://127.0.0.1/safebrowsing-dummy/update', 'dom.allow_scripts_to_close_windows': True, 'extensions.webservice.discoverURL': 'http://127.0.0.1/extensions-dummy/discoveryURL'}, 'test_timeout': 1200, 'title': 'qm-pxp01', 'error_filename': 'pathtoerrorfile', 'webserver': 'localhost:15707', 'browser_path':ffox_path, 'port': 20701, 'browser_log': 'browser_output.txt', 'process': 'firefox.exe', 'xperf_path': 'C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe', 'extensions': ['pathtopageloader'], 'fennecIDs': '', 'env': {'NO_EM_RESTART': '1'}, 'init_url': 'http://localhost:15707/getInfo.html', 'browser_wait': 5}
--- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
+++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
@@ -9,17 +9,16 @@
      The search command key should match findOnCmd.commandkey from browser.dtd -->
 <!ENTITY search.commandkey                    "f">
 
 <!ENTITY loading.label                        "Loading…">
 <!ENTITY listEmpty.installed.label            "You don’t have any add-ons of this type installed">
 <!ENTITY listEmpty.availableUpdates.label     "No updates found">
 <!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.">
 
@@ -34,17 +33,16 @@
 <!ENTITY warning.checkcompatibility.label          "Add-on compatibility checking is disabled. You may have incompatible add-ons.">
 <!ENTITY warning.checkcompatibility.enable.label   "Enable">
 <!ENTITY warning.checkcompatibility.enable.tooltip "Enable add-on compatibility checking">
 <!ENTITY warning.updatesecurity.label              "Add-on update security checking is disabled. You may be compromised by updates.">
 <!ENTITY warning.updatesecurity.enable.label       "Enable">
 <!ENTITY warning.updatesecurity.enable.tooltip     "Enable add-on update security checking">
 
 <!-- categories / views -->
-<!ENTITY view.search.label                    "Search">
 <!ENTITY view.discover.label                  "Get Add-ons">
 <!ENTITY view.recentUpdates.label             "Recent Updates">
 <!ENTITY view.availableUpdates.label          "Available Updates">
 
 <!-- addon updates -->
 <!ENTITY updates.checkForUpdates.label        "Check for Updates">
 <!ENTITY updates.checkForUpdates.accesskey    "C">
 <!ENTITY updates.viewUpdates.label            "View Recent Updates">
@@ -167,26 +165,16 @@
 <!ENTITY progress.cancel.tooltip              "Cancel">
 
 
 <!-- list sorting -->
 <!ENTITY sort.name.label                      "Name">
 <!ENTITY sort.name.tooltip                    "Sort by name">
 <!ENTITY sort.dateUpdated.label               "Last Updated">
 <!ENTITY sort.dateUpdated.tooltip             "Sort by date updated">
-<!ENTITY sort.relevance.label                 "Best match">
-<!ENTITY sort.relevance.tooltip               "Sort by relevance">
-<!ENTITY sort.price.label                     "Price">
-<!ENTITY sort.price.tooltip                   "Sort by price">
-
-<!ENTITY search.filter2.label                 "Search:">
-<!ENTITY search.filter2.installed.label       "My Add-ons">
-<!ENTITY search.filter2.installed.tooltip     "Show installed add-ons">
-<!ENTITY search.filter2.available.label       "Available Add-ons">
-<!ENTITY search.filter2.available.tooltip     "Show add-ons available to install">
 
 <!ENTITY addon.homepage                       "Homepage">
 <!ENTITY addon.details.label                  "More">
 <!ENTITY addon.details.tooltip                "Show more details about this add-on">
 <!ENTITY addon.unknownDate                    "Unknown">
 <!-- LOCALIZATION NOTE (addon.legacy.label): This appears in a badge next
      to the add-on name for extensions that are not webextensions, which
      will stop working in Firefox 57. -->
--- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
+++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
@@ -159,30 +159,16 @@ installFromFile.filterName=Add-ons
 
 uninstallAddonTooltip=Uninstall this add-on
 uninstallAddonRestartRequiredTooltip=Uninstall this add-on (restart required)
 enableAddonTooltip=Enable this add-on
 enableAddonRestartRequiredTooltip=Enable this add-on (restart required)
 disableAddonTooltip=Disable this add-on
 disableAddonRestartRequiredTooltip=Disable this add-on (restart required)
 
-#LOCALIZATION NOTE (showAllSearchResults): Semicolon-separated list of plural forms.
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #1 is the total number of search results
-showAllSearchResults=See one result;See all #1 results
-
-#LOCALIZATION NOTE (addon.purchase.label) displayed on a button in the list
-# view, %S is the price of the add-on including currency symbol
-addon.purchase.label=Purchase for %S…
-addon.purchase.tooltip=Visit the add-ons gallery to purchase this add-on
-#LOCALIZATION NOTE (cmd.purchaseAddon.label) displayed on a button in the detail
-# view, %S is the price of the add-on including currency symbol
-cmd.purchaseAddon.label=Purchase for %S…
-cmd.purchaseAddon.accesskey=u
-
 #LOCALIZATION NOTE (eulaHeader) %S is name of the add-on asking the user to agree to the EULA
 eulaHeader=%S requires that you accept the following End User License Agreement before installation can proceed:
 
 type.extension.name=Extensions
 type.themes.name=Themes
 type.locale.name=Languages
 type.plugin.name=Plugins
 type.dictionary.name=Dictionaries
--- a/toolkit/mozapps/extensions/content/extensions.css
+++ b/toolkit/mozapps/extensions/content/extensions.css
@@ -79,21 +79,16 @@ row[unsupported="true"] {
   margin-inline-start: 3px !important;
   margin-inline-end: 2px !important;
 }
 
 #header-searching:not([active]) {
   visibility: hidden;
 }
 
-#search-list[local="false"]  > .addon[remote="false"],
-#search-list[remote="false"] > .addon[remote="true"] {
-  visibility: collapse;
-}
-
 #detail-view {
   overflow: auto;
 }
 
 .addon:not([notification="warning"]) .warning,
 .addon:not([notification="error"]) .error,
 .addon:not([notification="info"]) .info,
 .addon:not([pending]) .pending,
@@ -107,17 +102,16 @@ row[unsupported="true"] {
 #detail-view:not([notification="info"]) .info,
 #detail-view:not([pending]) .pending,
 #detail-view:not([upgrade="true"]) .update-postfix,
 #detail-view[active="true"] .disabled-postfix,
 #detail-view[legacy="false"] .legacy-warning,
 #detail-view[loading] .detail-view-container,
 #detail-view:not([loading]) .alert-container,
 .detail-row:not([value]),
-#search-list[remote="false"] #search-allresults-link,
 #legacy-list .addon .disabled-postfix {
   display: none;
 }
 
 #addons-page:not([warning]) #list-view > .global-warning-container {
   display: none;
 }
 #addon-list .date-updated,
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -45,34 +45,25 @@ XPCOMUtils.defineLazyPreferenceGetter(th
                                       "extensions.allow-non-mpc-extensions", true);
 
 XPCOMUtils.defineLazyPreferenceGetter(this, "SUPPORT_URL", "app.support.baseURL",
                                       "", null, val => Services.urlFormatter.formatURL(val));
 
 const PREF_DISCOVERURL = "extensions.webservice.discoverURL";
 const PREF_DISCOVER_ENABLED = "extensions.getAddons.showPane";
 const PREF_XPI_ENABLED = "xpinstall.enabled";
-const PREF_MAXRESULTS = "extensions.getAddons.maxResults";
 const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled";
 const PREF_GETADDONS_CACHE_ID_ENABLED = "extensions.%ID%.getAddons.cache.enabled";
 const PREF_UI_TYPE_HIDDEN = "extensions.ui.%TYPE%.hidden";
 const PREF_UI_LASTCATEGORY = "extensions.ui.lastCategory";
 const PREF_LEGACY_EXCEPTIONS = "extensions.legacy.exceptions";
 const PREF_LEGACY_ENABLED = "extensions.legacy.enabled";
 
 const LOADING_MSG_DELAY = 100;
 
-const SEARCH_SCORE_MULTIPLIER_NAME = 2;
-const SEARCH_SCORE_MULTIPLIER_DESCRIPTION = 2;
-
-// Use integers so search scores are sortable by nsIXULSortService
-const SEARCH_SCORE_MATCH_WHOLEWORD = 10;
-const SEARCH_SCORE_MATCH_WORDBOUNDRY = 6;
-const SEARCH_SCORE_MATCH_SUBSTRING = 3;
-
 const UPDATES_RECENT_TIMESPAN = 2 * 24 * 3600000; // 2 days (in milliseconds)
 const UPDATES_RELEASENOTES_TRANSFORMFILE = "chrome://mozapps/content/extensions/updateinfo.xsl";
 
 const XMLURI_PARSE_ERROR = "http://www.mozilla.org/newlayout/xml/parsererror.xml";
 
 var gViewDefault = "addons://discover/";
 
 XPCOMUtils.defineLazyGetter(this, "extensionStylesheets", () => {
@@ -210,17 +201,16 @@ function notifyInitialized() {
     var event = document.createEvent("Events");
     event.initEvent("Initialized", true, true);
     document.dispatchEvent(event);
   }
 }
 
 function shutdown() {
   gCategories.shutdown();
-  gSearchView.shutdown();
   gEventManager.shutdown();
   gViewController.shutdown();
   Services.obs.removeObserver(sendEMPong, "EM-ping");
 }
 
 function sendEMPong(aSubject, aTopic, aData) {
   Services.obs.notifyObservers(window, "EM-pong");
 }
@@ -723,17 +713,16 @@ var gViewController = {
   initialViewSelected: false,
   lastHistoryIndex: -1,
 
   initialize() {
     this.viewPort = document.getElementById("view-port");
     this.headeredViews = document.getElementById("headered-views");
     this.headeredViewsDeck = document.getElementById("headered-views-content");
 
-    this.viewObjects.search = gSearchView;
     this.viewObjects.discover = gDiscoverView;
     this.viewObjects.list = gListView;
     this.viewObjects.legacy = gLegacyView;
     this.viewObjects.detail = gDetailView;
     this.viewObjects.updates = gUpdatesView;
 
     for (let type in this.viewObjects) {
       let view = this.viewObjects[type];
@@ -1288,27 +1277,16 @@ var gViewController = {
 
         if (gViewController.currentViewObj == gDetailView)
           gViewController.popState(doInstall);
         else
           doInstall();
       }
     },
 
-    cmd_purchaseItem: {
-      isEnabled(aAddon) {
-        if (!aAddon)
-          return false;
-        return !!aAddon.purchaseURL;
-      },
-      doCommand(aAddon) {
-        openURL(aAddon.purchaseURL);
-      }
-    },
-
     cmd_uninstallItem: {
       isEnabled(aAddon) {
         if (!aAddon)
           return false;
         return hasPermission(aAddon, "uninstall");
       },
       doCommand(aAddon) {
         if (gViewController.currentViewObj != gDetailView) {
@@ -1595,23 +1573,22 @@ function shouldShowVersionNumber(aAddon)
 
   // The version number is hidden for lightweight themes.
   if (aAddon.type == "theme")
     return !/@personas\.mozilla\.org$/.test(aAddon.id);
 
   return true;
 }
 
-function createItem(aObj, aIsInstall, aIsRemote) {
+function createItem(aObj, aIsInstall) {
   let item = document.createElement("richlistitem");
 
   item.setAttribute("class", "addon addon-view");
   item.setAttribute("name", aObj.name);
   item.setAttribute("type", aObj.type);
-  item.setAttribute("remote", !!aIsRemote);
 
   if (aIsInstall) {
     item.mInstall = aObj;
 
     if (aObj.state != AddonManager.STATE_INSTALLED) {
       item.setAttribute("status", "installing");
       return item;
     }
@@ -1633,17 +1610,17 @@ function createItem(aObj, aIsInstall, aI
   return item;
 }
 
 function sortElements(aElements, aSortBy, aAscending) {
   // aSortBy is an Array of attributes to sort by, in decending
   // order of priority.
 
   const DATE_FIELDS = ["updateDate"];
-  const NUMERIC_FIELDS = ["size", "relevancescore", "purchaseAmount"];
+  const NUMERIC_FIELDS = ["size", "relevancescore"];
 
   // We're going to group add-ons into the following buckets:
   //
   //  enabledInstalled
   //    * Enabled
   //    * Incompatible but enabled because compatibility checking is off
   //    * Waiting to be installed
   //    * Waiting to be enabled
@@ -1814,54 +1791,47 @@ function doPendingUninstalls(aListBox) {
   }
 
   for (let addon of items)
     addon.uninstall();
 }
 
 var gCategories = {
   node: null,
-  _search: null,
 
   initialize() {
     this.node = document.getElementById("categories");
-    this._search = this.get("addons://search/");
 
     var types = AddonManager.addonTypes;
     for (var type in types)
       this.onTypeAdded(types[type]);
 
     AddonManager.addTypeListener(this);
 
     // eslint-disable-next-line mozilla/use-default-preference-values
     try {
       this.node.value = Services.prefs.getCharPref(PREF_UI_LASTCATEGORY);
     } catch (e) { }
 
     // If there was no last view or no existing category matched the last view
-    // then the list will default to selecting the search category and we never
-    // want to show that as the first view so switch to the default category
-    if (!this.node.selectedItem || this.node.selectedItem == this._search)
+    // then switch to the default category
+    if (!this.node.selectedItem) {
       this.node.value = gViewDefault;
+    }
 
     this.node.addEventListener("select", () => {
-      this.maybeHideSearch();
       gViewController.loadView(this.node.selectedItem.value);
     });
 
     this.node.addEventListener("click", (aEvent) => {
       var selectedItem = this.node.selectedItem;
       if (aEvent.target.localName == "richlistitem" &&
           aEvent.target == selectedItem) {
         var viewId = selectedItem.value;
 
-        if (gViewController.parseViewId(viewId).type == "search") {
-          viewId += encodeURIComponent(gHeader.searchQuery);
-        }
-
         gViewController.loadView(viewId);
       }
     });
   },
 
   shutdown() {
     AddonManager.removeTypeListener(this);
   },
@@ -1995,51 +1965,40 @@ var gCategories = {
 
     if (this.node.selectedItem &&
         this.node.selectedItem.value == aId) {
       this.node.selectedItem.hidden = false;
       this.node.selectedItem.disabled = false;
       return;
     }
 
-    var item;
-    if (view.type == "search")
-      item = this._search;
-    else
-      item = this.get(aId);
+    var item = this.get(aId);
 
     if (item) {
       item.hidden = false;
       item.disabled = false;
       this.node.suppressOnSelect = true;
       this.node.selectedItem = item;
       this.node.suppressOnSelect = false;
       this.node.ensureElementIsVisible(item);
-
-      this.maybeHideSearch();
     }
   },
 
   get(aId) {
     var items = document.getElementsByAttribute("value", aId);
     if (items.length)
       return items[0];
     return null;
   },
 
   setBadge(aId, aCount) {
     let item = this.get(aId);
     if (item)
       item.badgeCount = aCount;
   },
-
-  maybeHideSearch() {
-    var view = gViewController.parseViewId(this.node.selectedItem.value);
-    this._search.disabled = view.type != "search";
-  }
 };
 
 
 var gHeader = {
   _search: null,
   _dest: "",
 
   initialize() {
@@ -2367,364 +2326,16 @@ var gDiscoverView = {
                                          Ci.nsISupportsWeakReference]),
 
   getSelectedAddon() {
     return null;
   }
 };
 
 
-var gCachedAddons = {};
-
-var gSearchView = {
-  node: null,
-  _filter: null,
-  _sorters: null,
-  _loading: null,
-  _listBox: null,
-  _emptyNotice: null,
-  _allResultsLink: null,
-  _lastQuery: null,
-  _lastRemoteTotal: 0,
-  _pendingSearches: 0,
-
-  initialize() {
-    this.node = document.getElementById("search-view");
-    this._filter = document.getElementById("search-filter-radiogroup");
-    this._sorters = document.getElementById("search-sorters");
-    this._sorters.handler = this;
-    this._loading = document.getElementById("search-loading");
-    this._listBox = document.getElementById("search-list");
-    this._emptyNotice = document.getElementById("search-list-empty");
-    this._allResultsLink = document.getElementById("search-allresults-link");
-
-    if (!AddonManager.isInstallEnabled("application/x-xpinstall"))
-      this._filter.hidden = true;
-
-    this._listBox.addEventListener("keydown", aEvent => {
-      if (aEvent.keyCode == aEvent.DOM_VK_RETURN) {
-        var item = this._listBox.selectedItem;
-        if (item)
-          item.showInDetailView();
-      }
-    });
-
-    this._filter.addEventListener("command", () => this.updateView());
-  },
-
-  shutdown() {
-    if (AddonRepository.isSearching)
-      AddonRepository.cancelSearch();
-  },
-
-  get isSearching() {
-    return this._pendingSearches > 0;
-  },
-
-  show(aQuery, aRequest) {
-    gEventManager.registerInstallListener(this);
-
-    this.showEmptyNotice(false);
-    this.showAllResultsLink(0);
-    this.showLoading(true);
-    this._sorters.showprice = false;
-
-    gHeader.searchQuery = aQuery;
-    aQuery = aQuery.trim().toLocaleLowerCase();
-    if (this._lastQuery == aQuery) {
-      this.updateView();
-      gViewController.notifyViewChanged();
-      return;
-    }
-    this._lastQuery = aQuery;
-
-    if (AddonRepository.isSearching)
-      AddonRepository.cancelSearch();
-
-    while (this._listBox.firstChild.localName == "richlistitem")
-      this._listBox.firstChild.remove();
-
-    gCachedAddons = {};
-    this._pendingSearches = 2;
-    this._sorters.setSort("relevancescore", false);
-
-    var elements = [];
-
-    let createSearchResults = (aObjsList, aIsInstall, aIsRemote) => {
-      for (let index in aObjsList) {
-        let obj = aObjsList[index];
-        let score = aObjsList.length - index;
-        if (!aIsRemote && aQuery.length > 0) {
-          score = this.getMatchScore(obj, aQuery);
-          if (score == 0)
-            continue;
-        }
-
-        let item = createItem(obj, aIsInstall, aIsRemote);
-        item.setAttribute("relevancescore", score);
-        if (aIsRemote) {
-          gCachedAddons[obj.id] = obj;
-          if (obj.purchaseURL)
-            this._sorters.showprice = true;
-        }
-
-        elements.push(item);
-      }
-    };
-
-    let finishSearch = (createdCount) => {
-      if (elements.length > 0) {
-        sortElements(elements, [this._sorters.sortBy], this._sorters.ascending);
-        for (let element of elements)
-          this._listBox.insertBefore(element, this._listBox.lastChild);
-        this.updateListAttributes();
-      }
-
-      this._pendingSearches--;
-      this.updateView();
-
-      if (!this.isSearching)
-        gViewController.notifyViewChanged();
-    };
-
-    getAddonsAndInstalls(null, function(aAddons, aInstalls) {
-      if (gViewController && aRequest != gViewController.currentViewRequest)
-        return;
-
-      createSearchResults(aAddons, false, false);
-      createSearchResults(aInstalls, true, false);
-      finishSearch();
-    });
-
-    var maxRemoteResults = Services.prefs.getIntPref(PREF_MAXRESULTS, 0);
-
-    if (maxRemoteResults <= 0) {
-      finishSearch(0);
-      return;
-    }
-
-    AddonRepository.searchAddons(aQuery, maxRemoteResults, {
-      searchFailed: () => {
-        if (gViewController && aRequest != gViewController.currentViewRequest)
-          return;
-
-        this._lastRemoteTotal = 0;
-
-        // XXXunf Better handling of AMO search failure. See bug 579502
-        finishSearch(0); // Silently fail
-      },
-
-      searchSucceeded: (aAddonsList, aAddonCount, aTotalResults) => {
-        if (gViewController && aRequest != gViewController.currentViewRequest)
-          return;
-
-        if (aTotalResults > maxRemoteResults)
-          this._lastRemoteTotal = aTotalResults;
-        else
-          this._lastRemoteTotal = 0;
-
-        var createdCount = createSearchResults(aAddonsList, false, true);
-        finishSearch(createdCount);
-      }
-    });
-  },
-
-  showLoading(aLoading) {
-    this._loading.hidden = !aLoading;
-    this._listBox.hidden = aLoading;
-  },
-
-  updateView() {
-    var showLocal = this._filter.value == "local";
-
-    if (!showLocal && !AddonManager.isInstallEnabled("application/x-xpinstall"))
-      showLocal = true;
-
-    this._listBox.setAttribute("local", showLocal);
-    this._listBox.setAttribute("remote", !showLocal);
-
-    this.showLoading(this.isSearching && !showLocal);
-    if (!this.isSearching) {
-      var isEmpty = true;
-      var results = this._listBox.getElementsByTagName("richlistitem");
-      for (let result of results) {
-        var isRemote = (result.getAttribute("remote") == "true");
-        if ((isRemote && !showLocal) || (!isRemote && showLocal)) {
-          isEmpty = false;
-          break;
-        }
-      }
-
-      this.showEmptyNotice(isEmpty);
-      this.showAllResultsLink(this._lastRemoteTotal);
-    }
-
-    gViewController.updateCommands();
-  },
-
-  hide() {
-    gEventManager.unregisterInstallListener(this);
-    doPendingUninstalls(this._listBox);
-  },
-
-  getMatchScore(aObj, aQuery) {
-    var score = 0;
-    score += this.calculateMatchScore(aObj.name, aQuery,
-                                      SEARCH_SCORE_MULTIPLIER_NAME);
-    score += this.calculateMatchScore(aObj.description, aQuery,
-                                      SEARCH_SCORE_MULTIPLIER_DESCRIPTION);
-    return score;
-  },
-
-  calculateMatchScore(aStr, aQuery, aMultiplier) {
-    var score = 0;
-    if (!aStr || aQuery.length == 0)
-      return score;
-
-    aStr = aStr.trim().toLocaleLowerCase();
-    var haystack = aStr.split(/\s+/);
-    var needles = aQuery.split(/\s+/);
-
-    for (let needle of needles) {
-      for (let hay of haystack) {
-        if (hay == needle) {
-          // matching whole words is best
-          score += SEARCH_SCORE_MATCH_WHOLEWORD;
-        } else {
-          let i = hay.indexOf(needle);
-          if (i == 0) // matching on word boundries is also good
-            score += SEARCH_SCORE_MATCH_WORDBOUNDRY;
-          else if (i > 0) // substring matches not so good
-            score += SEARCH_SCORE_MATCH_SUBSTRING;
-        }
-      }
-    }
-
-    // give progressively higher score for longer queries, since longer queries
-    // are more likely to be unique and therefore more relevant.
-    if (needles.length > 1 && aStr.indexOf(aQuery) != -1)
-      score += needles.length;
-
-    return score * aMultiplier;
-  },
-
-  showEmptyNotice(aShow) {
-    this._emptyNotice.hidden = !aShow;
-    this._listBox.hidden = aShow;
-  },
-
-  showAllResultsLink(aTotalResults) {
-    if (aTotalResults == 0) {
-      this._allResultsLink.hidden = true;
-      return;
-    }
-
-    var linkStr = gStrings.ext.GetStringFromName("showAllSearchResults");
-    linkStr = PluralForm.get(aTotalResults, linkStr);
-    linkStr = linkStr.replace("#1", aTotalResults);
-    this._allResultsLink.setAttribute("value", linkStr);
-
-    this._allResultsLink.setAttribute("href",
-                                      AddonRepository.getSearchURL(this._lastQuery));
-    this._allResultsLink.hidden = false;
- },
-
-  updateListAttributes() {
-    var item = this._listBox.querySelector("richlistitem[remote='true'][first]");
-    if (item)
-      item.removeAttribute("first");
-    item = this._listBox.querySelector("richlistitem[remote='true'][last]");
-    if (item)
-      item.removeAttribute("last");
-    var items = this._listBox.querySelectorAll("richlistitem[remote='true']");
-    if (items.length > 0) {
-      items[0].setAttribute("first", true);
-      items[items.length - 1].setAttribute("last", true);
-    }
-
-    item = this._listBox.querySelector("richlistitem:not([remote='true'])[first]");
-    if (item)
-      item.removeAttribute("first");
-    item = this._listBox.querySelector("richlistitem:not([remote='true'])[last]");
-    if (item)
-      item.removeAttribute("last");
-    items = this._listBox.querySelectorAll("richlistitem:not([remote='true'])");
-    if (items.length > 0) {
-      items[0].setAttribute("first", true);
-      items[items.length - 1].setAttribute("last", true);
-    }
-
-  },
-
-  onSortChanged(aSortBy, aAscending) {
-    var footer = this._listBox.lastChild;
-    this._listBox.removeChild(footer);
-
-    sortList(this._listBox, aSortBy, aAscending);
-    this.updateListAttributes();
-
-    this._listBox.appendChild(footer);
-  },
-
-  onDownloadCancelled(aInstall) {
-    this.removeInstall(aInstall);
-  },
-
-  onInstallCancelled(aInstall) {
-    this.removeInstall(aInstall);
-  },
-
-  onInstallEnded(aInstall) {
-    // If this is a webextension that was installed from this page,
-    // display the post-install notification.
-    if (!WEBEXT_PERMISSION_PROMPTS || !aInstall.addon.isWebExtension) {
-      return;
-    }
-
-    for (let item of this._listBox.childNodes) {
-      if (item.mInstall == aInstall) {
-        let subject = {
-          wrappedJSObject: {
-            target: getBrowserElement(),
-            addon: aInstall.addon,
-          },
-        };
-        Services.obs.notifyObservers(subject, "webextension-install-notify");
-        return;
-      }
-    }
-  },
-
-  removeInstall(aInstall) {
-    for (let item of this._listBox.childNodes) {
-      if (item.mInstall == aInstall) {
-        this._listBox.removeChild(item);
-        return;
-      }
-    }
-  },
-
-  getSelectedAddon() {
-    var item = this._listBox.selectedItem;
-    if (item)
-      return item.mAddon;
-    return null;
-  },
-
-  getListItemForID(aId) {
-    var listitem = this._listBox.firstChild;
-    while (listitem) {
-      if (listitem.getAttribute("status") == "installed" && listitem.mAddon.id == aId)
-        return listitem;
-      listitem = listitem.nextSibling;
-    }
-    return null;
-  }
-};
-
 var gLegacyView = {
   node: null,
   _listBox: null,
   _categoryItem: null,
 
   initialize() {
     this.node = document.getElementById("legacy-view");
     this._listBox = document.getElementById("legacy-list");
@@ -3124,23 +2735,20 @@ var gDetailView = {
       // test pilot addons until we get SIGNEDSTATE_PRIVILEGED deployed.
       if (legacy && legacyWarningExceptions.includes(aAddon.id)) {
         legacy = false;
       }
     }
     this.node.setAttribute("legacy", legacy);
     document.getElementById("detail-legacy-warning").href = SUPPORT_URL + "webextensions";
 
-    // If the search category isn't selected then make sure to select the
-    // correct category
-    if (gCategories.selected != "addons://search/") {
-      let category = (isDisabledLegacy(aAddon) || isDisabledUnsigned(aAddon)) ?
-                     "addons://legacy" : `addons://list/${aAddon.type}`;
-      gCategories.select(category);
-    }
+    // Make sure to select the correct category
+    let category = (isDisabledLegacy(aAddon) || isDisabledUnsigned(aAddon)) ?
+                   "addons://legacy" : `addons://list/${aAddon.type}`;
+    gCategories.select(category);
 
     document.getElementById("detail-name").textContent = aAddon.name;
     var icon = AddonManager.getPreferredIconURL(aAddon, 64, window);
     document.getElementById("detail-icon").src = icon ? icon : "";
     document.getElementById("detail-creator").setCreator(aAddon.creator, aAddon.homepageURL);
 
     var version = document.getElementById("detail-version");
     if (shouldShowVersionNumber(aAddon)) {
@@ -3199,24 +2807,16 @@ var gDetailView = {
         amount.hidden = false;
       } else {
         amount.hidden = true;
       }
     } else {
       contributions.hidden = true;
     }
 
-    if ("purchaseURL" in aAddon && aAddon.purchaseURL) {
-      var purchase = document.getElementById("detail-purchase-btn");
-      purchase.label = gStrings.ext.formatStringFromName("cmd.purchaseAddon.label",
-                                                         [aAddon.purchaseDisplayAmount],
-                                                         1);
-      purchase.accesskey = gStrings.ext.GetStringFromName("cmd.purchaseAddon.accesskey");
-    }
-
     var updateDateRow = document.getElementById("detail-dateUpdated");
     if (aAddon.updateDate) {
       var date = formatDate(aAddon.updateDate);
       updateDateRow.value = date;
     } else {
       updateDateRow.value = null;
     }
 
@@ -3366,21 +2966,16 @@ var gDetailView = {
         for (let install of aInstalls) {
           if (install.state == AddonManager.STATE_INSTALLED &&
               install.addon.id == aAddonId) {
             this._updateView(install.addon, false);
             return;
           }
         }
 
-        if (aAddonId in gCachedAddons) {
-          this._updateView(gCachedAddons[aAddonId], true);
-          return;
-        }
-
         // This might happen due to session restore restoring us back to an
         // add-on that doesn't exist but otherwise shouldn't normally happen.
         // Either way just revert to the default view.
         gViewController.replaceView(gViewDefault);
       });
     });
   },
 
--- a/toolkit/mozapps/extensions/content/extensions.xml
+++ b/toolkit/mozapps/extensions/content/extensions.xml
@@ -213,53 +213,33 @@
     <content orient="horizontal">
       <xul:button anonid="name-btn" class="sorter"
                   label="&sort.name.label;" tooltiptext="&sort.name.tooltip;"
                   oncommand="this.parentNode._handleChange('name');"/>
       <xul:button anonid="date-btn" class="sorter"
                   label="&sort.dateUpdated.label;"
                   tooltiptext="&sort.dateUpdated.tooltip;"
                   oncommand="this.parentNode._handleChange('updateDate');"/>
-      <xul:button anonid="price-btn" class="sorter" hidden="true"
-                  label="&sort.price.label;"
-                  tooltiptext="&sort.price.tooltip;"
-                  oncommand="this.parentNode._handleChange('purchaseAmount');"/>
-      <xul:button anonid="relevance-btn" class="sorter" hidden="true"
-                  label="&sort.relevance.label;"
-                  tooltiptext="&sort.relevance.tooltip;"
-                  oncommand="this.parentNode._handleChange('relevancescore');"/>
     </content>
 
     <implementation>
       <constructor><![CDATA[
         if (!this.hasAttribute("sortby"))
           this.setAttribute("sortby", "name");
 
-        if (this.getAttribute("showrelevance") == "true")
-          this._btnRelevance.hidden = false;
-
-        if (this.getAttribute("showprice") == "true")
-          this._btnPrice.hidden = false;
-
         this._refreshState();
       ]]></constructor>
 
       <field name="handler">null</field>
       <field name="_btnName">
         document.getAnonymousElementByAttribute(this, "anonid", "name-btn");
       </field>
       <field name="_btnDate">
         document.getAnonymousElementByAttribute(this, "anonid", "date-btn");
       </field>
-      <field name="_btnPrice">
-        document.getAnonymousElementByAttribute(this, "anonid", "price-btn");
-      </field>
-      <field name="_btnRelevance">
-        document.getAnonymousElementByAttribute(this, "anonid", "relevance-btn");
-      </field>
 
       <property name="sortBy">
         <getter><![CDATA[
           return this.getAttribute("sortby");
         ]]></getter>
         <setter><![CDATA[
           if (val != this.sortBy) {
             this.setAttribute("sortBy", val);
@@ -276,38 +256,16 @@
           val = !!val;
           if (val != this.ascending) {
             this.setAttribute("ascending", val);
             this._refreshState();
           }
         ]]></setter>
       </property>
 
-      <property name="showrelevance">
-        <getter><![CDATA[
-          return (this.getAttribute("showrelevance") == "true");
-        ]]></getter>
-        <setter><![CDATA[
-          val = !!val;
-          this.setAttribute("showrelevance", val);
-          this._btnRelevance.hidden = !val;
-        ]]></setter>
-      </property>
-
-      <property name="showprice">
-        <getter><![CDATA[
-          return (this.getAttribute("showprice") == "true");
-        ]]></getter>
-        <setter><![CDATA[
-          val = !!val;
-          this.setAttribute("showprice", val);
-          this._btnPrice.hidden = !val;
-        ]]></setter>
-      </property>
-
       <method name="setSort">
         <parameter name="aSort"/>
         <parameter name="aAscending"/>
         <body><![CDATA[
           var sortChanged = false;
           if (aSort != this.sortBy) {
             this.setAttribute("sortby", aSort);
             sortChanged = true;
@@ -322,17 +280,17 @@
           if (sortChanged)
             this._refreshState();
         ]]></body>
       </method>
 
       <method name="_handleChange">
         <parameter name="aSort"/>
         <body><![CDATA[
-          const ASCENDING_SORT_FIELDS = ["name", "purchaseAmount"];
+          const ASCENDING_SORT_FIELDS = ["name"];
 
           // Toggle ascending if sort by is not changing, otherwise
           // name sorting defaults to ascending, others to descending
           if (aSort == this.sortBy)
             this.ascending = !this.ascending;
           else
             this.setSort(aSort, ASCENDING_SORT_FIELDS.indexOf(aSort) >= 0);
         ]]></body>
@@ -354,32 +312,16 @@
           if (sortBy == "updateDate") {
             this._btnDate.checkState = checkState;
             this._btnDate.checked = true;
           } else {
             this._btnDate.checkState = 0;
             this._btnDate.checked = false;
           }
 
-          if (sortBy == "purchaseAmount") {
-            this._btnPrice.checkState = checkState;
-            this._btnPrice.checked = true;
-          } else {
-            this._btnPrice.checkState = 0;
-            this._btnPrice.checked = false;
-          }
-
-          if (sortBy == "relevancescore") {
-            this._btnRelevance.checkState = checkState;
-            this._btnRelevance.checked = true;
-          } else {
-            this._btnRelevance.checkState = 0;
-            this._btnRelevance.checked = false;
-          }
-
           if (this.handler && "onSortChanged" in this.handler)
             this.handler.onSortChanged(sortBy, this.ascending);
         ]]></body>
       </method>
     </implementation>
   </binding>
 
 
@@ -489,19 +431,17 @@
   </binding>
 
 
   <!-- Install status - Displays the status of an install/upgrade. -->
   <binding id="install-status">
     <content>
       <xul:label anonid="message"/>
       <xul:progressmeter anonid="progress" class="download-progress"/>
-      <xul:button anonid="purchase-remote-btn" hidden="true"
-                  class="addon-control"
-                  oncommand="document.getBindingParent(this).purchaseRemote();"/>
+>
       <xul:button anonid="install-remote-btn" hidden="true"
                   class="addon-control install" label="&addon.install.label;"
                   tooltiptext="&addon.install.tooltip;"
                   oncommand="document.getBindingParent(this).installRemote();"/>
     </content>
 
     <implementation>
       <constructor><![CDATA[
@@ -519,20 +459,16 @@
       ]]></destructor>
 
       <field name="_message">
         document.getAnonymousElementByAttribute(this, "anonid", "message");
       </field>
       <field name="_progress">
         document.getAnonymousElementByAttribute(this, "anonid", "progress");
       </field>
-      <field name="_purchaseRemote">
-        document.getAnonymousElementByAttribute(this, "anonid",
-                                                "purchase-remote-btn");
-      </field>
       <field name="_installRemote">
         document.getAnonymousElementByAttribute(this, "anonid",
                                                 "install-remote-btn");
       </field>
       <field name="_restartNeeded">
         document.getAnonymousElementByAttribute(this, "anonid",
                                                 "restart-needed");
       </field>
@@ -553,17 +489,16 @@
           this.refreshState();
           this.mInstall.addListener(this);
         ]]></body>
       </method>
 
       <method name="refreshState">
         <body><![CDATA[
           var showInstallRemote = false;
-          var showPurchase = false;
 
           if (this.mInstall) {
 
             switch (this.mInstall.state) {
               case AddonManager.STATE_AVAILABLE:
                 if (this.mControl.getAttribute("remote") != "true")
                   break;
 
@@ -590,27 +525,18 @@
                 // XXXunf expose what error occured (bug 553487)
                 this.showMessage("installFailed", true);
                 break;
               case AddonManager.STATE_CANCELLED:
                 this.showMessage("installCancelled", true);
                 break;
             }
 
-          } else if (this.mControl.mAddon.purchaseURL) {
-            this._progress.hidden = true;
-            showPurchase = true;
-            this._purchaseRemote.label =
-              gStrings.ext.formatStringFromName("addon.purchase.label",
-                [this.mControl.mAddon.purchaseDisplayAmount], 1);
-            this._purchaseRemote.tooltiptext =
-              gStrings.ext.GetStringFromName("addon.purchase.tooltip");
           }
 
-          this._purchaseRemote.hidden = !showPurchase;
           this._installRemote.hidden = !showInstallRemote;
 
           if ("refreshInfo" in this.mControl)
             this.mControl.refreshInfo();
         ]]></body>
       </method>
 
       <method name="showMessage">
@@ -623,22 +549,16 @@
           var msg = gStrings.ext.GetStringFromName(aMsgId);
           if (aHideProgress)
             this._message.value = msg;
           else
             this._progress.status = msg;
         ]]></body>
       </method>
 
-      <method name="purchaseRemote">
-        <body><![CDATA[
-          openURL(this.mControl.mAddon.purchaseURL);
-        ]]></body>
-      </method>
-
       <method name="installRemote">
         <body><![CDATA[
           if (this.mControl.getAttribute("remote") != "true")
             return;
 
           if (this.mControl.mAddon.eula) {
             var data = {
               addon: this.mControl.mAddon,
--- a/toolkit/mozapps/extensions/content/extensions.xul
+++ b/toolkit/mozapps/extensions/content/extensions.xul
@@ -129,20 +129,16 @@
   <keyset>
     <key id="focusSearch" key="&search.commandkey;" modifiers="accel"
          command="cmd_focusSearch"/>
   </keyset>
   <hbox flex="1">
     <vbox id="category-box">
       <!-- category list -->
       <richlistbox id="categories" flex="1">
-        <richlistitem id="category-search" value="addons://search/"
-                      class="category"
-                      name="&view.search.label;" priority="0"
-                      tooltiptext="&view.search.label;" disabled="true"/>
         <richlistitem id="category-discover" value="addons://discover/"
                       class="category"
                       name="&view.discover.label;" priority="1000"
                       tooltiptext="&view.discover.label;"/>
         <richlistitem id="category-legacy" value="addons://legacy/"
                       class="category" priority="20000"
                       disabled="true"/>
         <richlistitem id="category-availableUpdates" value="addons://updates/available"
@@ -255,93 +251,16 @@
               </menupopup>
             </toolbarbutton>
             <textbox id="header-search" type="search" searchbutton="true"
                      searchbuttonlabel="&search.buttonlabel;"
                      placeholder="&search.placeholder2;"/>
           </hbox>
 
           <deck id="headered-views-content" flex="1" selectedIndex="0">
-            <!-- search view -->
-            <vbox id="search-view" flex="1" class="view-pane" tabindex="0">
-              <hbox class="view-header global-warning-container" align="center">
-                <!-- 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;"/>
-                  </hbox>
-                  <hbox class="global-warning-checkcompatibility" flex="1" align="center"
-                        tooltiptext="&warning.checkcompatibility.label;">
-                    <image class="warning-icon"/>
-                    <label class="global-warning-text" flex="1" crop="end"
-                           value="&warning.checkcompatibility.label;"/>
-                  </hbox>
-                  <button class="button-link global-warning-checkcompatibility"
-                          label="&warning.checkcompatibility.enable.label;"
-                          tooltiptext="&warning.checkcompatibility.enable.tooltip;"
-                          command="cmd_enableCheckCompatibility"/>
-                  <hbox class="global-warning-updatesecurity" flex="1" align="center"
-                        tooltiptext="&warning.updatesecurity.label;">
-                    <image class="warning-icon"/>
-                    <label class="global-warning-text" flex="1" crop="end"
-                           value="&warning.updatesecurity.label;"/>
-                  </hbox>
-                  <button class="button-link global-warning-updatesecurity"
-                          label="&warning.updatesecurity.enable.label;"
-                          tooltiptext="&warning.updatesecurity.enable.tooltip;"
-                          command="cmd_enableUpdateSecurity"/>
-                  <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
-                </hbox>
-                <spacer flex="1"/>
-                <hbox id="search-sorters" class="sort-controls"
-                      showrelevance="true" sortby="relevancescore" ascending="false"/>
-              </hbox>
-              <hbox id="search-filter" align="center">
-                <label id="search-filter-label" value="&search.filter2.label;"/>
-                <radiogroup id="search-filter-radiogroup" orient="horizontal"
-                            align="center" persist="value" value="remote">
-                  <radio id="search-filter-local" class="search-filter-radio"
-                         label="&search.filter2.installed.label;" value="local"
-                         tooltiptext="&search.filter2.installed.tooltip;"/>
-                  <radio id="search-filter-remote" class="search-filter-radio"
-                         label="&search.filter2.available.label;" value="remote"
-                         tooltiptext="&search.filter2.available.tooltip;"/>
-                </radiogroup>
-              </hbox>
-              <vbox id="search-loading" class="alert-container"
-                    flex="1" hidden="true">
-                <spacer class="alert-spacer-before"/>
-                <hbox class="alert loading" align="center">
-                  <image/>
-                  <label value="&loading.label;"/>
-                </hbox>
-                <spacer class="alert-spacer-after"/>
-              </vbox>
-              <vbox id="search-list-empty" class="alert-container"
-                    flex="1" hidden="true">
-                <spacer class="alert-spacer-before"/>
-                <vbox class="alert">
-                  <label value="&listEmpty.search.label;"/>
-                  <button class="discover-button"
-                          id="discover-button-search"
-                          label="&listEmpty.button.label;"
-                          command="cmd_goToDiscoverPane"/>
-                </vbox>
-                <spacer class="alert-spacer-after"/>
-              </vbox>
-              <richlistbox id="search-list" class="list" flex="1">
-                <hbox pack="center">
-                  <label id="search-allresults-link" class="text-link"/>
-                </hbox>
-              </richlistbox>
-            </vbox>
-
             <!-- list view -->
             <vbox id="list-view" flex="1" class="view-pane" align="stretch" tabindex="0">
               <!-- info UI for add-ons that have been disabled for being unsigned -->
               <vbox id="disabled-unsigned-addons-info" hidden="true">
                 <label id="disabled-unsigned-addons-heading" value="&disabledUnsigned.heading;"/>
                 <description>
                   &disabledUnsigned.description.start;<label class="text-link plain" id="find-alternative-addons">&disabledUnsigned.description.findAddonsLink;</label>&disabledUnsigned.description.end;
                 </description>
--- a/toolkit/mozapps/extensions/internal/AddonRepository.jsm
+++ b/toolkit/mozapps/extensions/internal/AddonRepository.jsm
@@ -26,20 +26,17 @@ XPCOMUtils.defineLazyModuleGetters(this,
 this.EXPORTED_SYMBOLS = [ "AddonRepository" ];
 
 const PREF_GETADDONS_CACHE_ENABLED       = "extensions.getAddons.cache.enabled";
 const PREF_GETADDONS_CACHE_TYPES         = "extensions.getAddons.cache.types";
 const PREF_GETADDONS_CACHE_ID_ENABLED    = "extensions.%ID%.getAddons.cache.enabled";
 const PREF_GETADDONS_BROWSEADDONS        = "extensions.getAddons.browseAddons";
 const PREF_GETADDONS_BYIDS               = "extensions.getAddons.get.url";
 const PREF_GETADDONS_BYIDS_PERFORMANCE   = "extensions.getAddons.getWithPerformance.url";
-const PREF_GETADDONS_BROWSERECOMMENDED   = "extensions.getAddons.recommended.browseURL";
-const PREF_GETADDONS_GETRECOMMENDED      = "extensions.getAddons.recommended.url";
 const PREF_GETADDONS_BROWSESEARCHRESULTS = "extensions.getAddons.search.browseURL";
-const PREF_GETADDONS_GETSEARCHRESULTS    = "extensions.getAddons.search.url";
 const PREF_GETADDONS_DB_SCHEMA           = "extensions.getAddons.databaseSchema";
 
 const PREF_METADATA_LASTUPDATE           = "extensions.getAddons.cache.lastUpdate";
 const PREF_METADATA_UPDATETHRESHOLD_SEC  = "extensions.getAddons.cache.updateThreshold";
 const DEFAULT_METADATA_UPDATETHRESHOLD_SEC = 172800; // two days
 
 const XMLURI_PARSE_ERROR  = "http://www.mozilla.org/newlayout/xml/parsererror.xml";
 
@@ -689,25 +686,16 @@ this.AddonRepository = {
    * Returns whether this instance is currently performing a search. New
    * searches will not be performed while this is the case.
    */
   get isSearching() {
     return this._searching;
   },
 
   /**
-   * The url that can be visited to see recommended add-ons in this repository.
-   * If the corresponding preference is not defined, defaults to about:blank.
-   */
-  getRecommendedURL() {
-    let url = this._formatURLPref(PREF_GETADDONS_BROWSERECOMMENDED, {});
-    return (url != null) ? url : "about:blank";
-  },
-
-  /**
    * Retrieves the url that can be visited to see search results for the given
    * terms. If the corresponding preference is not defined, defaults to
    * about:blank.
    *
    * @param  aSearchTerms
    *         Search terms used to search the repository
    */
   getSearchURL(aSearchTerms) {
@@ -853,80 +841,16 @@ this.AddonRepository = {
    * not be used for any other purpose. Use repopulateCache instead.
    *
    * @return Promise{null} Resolves when the metadata update is complete.
    */
   backgroundUpdateCheck() {
     return this._repopulateCacheInternal(true);
   },
 
-  /**
-   * Begins a search for recommended add-ons in this repository. Results will
-   * be passed to the given callback.
-   *
-   * @param  aMaxResults
-   *         The maximum number of results to return
-   * @param  aCallback
-   *         The callback to pass results to
-   */
-  retrieveRecommendedAddons(aMaxResults, aCallback) {
-    let url = this._formatURLPref(PREF_GETADDONS_GETRECOMMENDED, {
-      API_VERSION,
-
-      // Get twice as many results to account for potential filtering
-      MAX_RESULTS: 2 * aMaxResults
-    });
-
-    let handleResults = (aElements, aTotalResults) => {
-      this._getLocalAddonIds(aLocalAddonIds => {
-        // aTotalResults irrelevant
-        this._parseAddons(aElements, -1, aLocalAddonIds);
-      });
-    };
-
-    this._beginSearch(url, aMaxResults, aCallback, handleResults);
-  },
-
-  /**
-   * Begins a search for add-ons in this repository. Results will be passed to
-   * the given callback.
-   *
-   * @param  aSearchTerms
-   *         The terms to search for
-   * @param  aMaxResults
-   *         The maximum number of results to return
-   * @param  aCallback
-   *         The callback to pass results to
-   */
-  searchAddons(aSearchTerms, aMaxResults, aCallback) {
-    let compatMode = "normal";
-    if (!AddonManager.checkCompatibility)
-      compatMode = "ignore";
-    else if (AddonManager.strictCompatibility)
-      compatMode = "strict";
-
-    let substitutions = {
-      API_VERSION,
-      TERMS: encodeURIComponent(aSearchTerms),
-      // Get twice as many results to account for potential filtering
-      MAX_RESULTS: 2 * aMaxResults,
-      COMPATIBILITY_MODE: compatMode,
-    };
-
-    let url = this._formatURLPref(PREF_GETADDONS_GETSEARCHRESULTS, substitutions);
-
-    let handleResults = (aElements, aTotalResults) => {
-      this._getLocalAddonIds(aLocalAddonIds => {
-        this._parseAddons(aElements, aTotalResults, aLocalAddonIds);
-      });
-    };
-
-    this._beginSearch(url, aMaxResults, aCallback, handleResults);
-  },
-
   // Posts results to the callback
   _reportSuccess(aResults, aTotalResults) {
     this._searching = false;
     this._request = null;
     // The callback may want to trigger a new search so clear references early
     let addons = aResults.map(result => result.addon);
     let callback = this._callback;
     this._callback = null;
@@ -1448,39 +1372,16 @@ this.AddonRepository = {
       let compatElements = documentElement.getElementsByTagName("addon_compatibility");
       let compatData = this._parseAddonCompatData(compatElements);
 
       aHandleResults(elements, totalResults, compatData);
     });
     this._request.send(null);
   },
 
-  // Gets the id's of local add-ons, and the sourceURI's of local installs,
-  // passing the results to aCallback
-  _getLocalAddonIds(aCallback) {
-    let localAddonIds = {ids: null, sourceURIs: null};
-
-    AddonManager.getAllAddons(function(aAddons) {
-      localAddonIds.ids = aAddons.map(a => a.id);
-      if (localAddonIds.sourceURIs)
-        aCallback(localAddonIds);
-    });
-
-    AddonManager.getAllInstalls(function(aInstalls) {
-      localAddonIds.sourceURIs = [];
-      for (let install of aInstalls) {
-        if (install.state != AddonManager.STATE_AVAILABLE)
-          localAddonIds.sourceURIs.push(install.sourceURI.spec);
-      }
-
-      if (localAddonIds.ids)
-        aCallback(localAddonIds);
-    });
-  },
-
   // Create url from preference, returning null if preference does not exist
   _formatURLPref(aPreference, aSubstitutions) {
     let url = Services.prefs.getCharPref(aPreference, "");
     if (!url) {
       logger.warn("_formatURLPref: Couldn't get pref: " + aPreference);
       return null;
     }
 
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/data/test_AddonRepository_compatmode_ignore.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<searchresults total_results="123">
-  <addon>
-    <name>Test Repo Add-on - ignore</name>
-    <type id="1">Extension</type>
-    <guid>compatmode-ignore@tests.mozilla.org</guid>
-    <version>1.1</version>
-    <authors>
-      <author>
-        <name>Test Creator 1</name>
-        <link>http://localhost:%PORT%/creator1.html</link>
-      </author>
-    </authors>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test1.xpi</install>
-  </addon>
-</searchresults>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/data/test_AddonRepository_compatmode_normal.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<searchresults total_results="123">
-  <addon>
-    <name>Test Repo Add-on - normal</name>
-    <type id="1">Extension</type>
-    <guid>compatmode-normal@tests.mozilla.org</guid>
-    <version>1.1</version>
-    <authors>
-      <author>
-        <name>Test Creator 1</name>
-        <link>http://localhost:%PORT%/creator1.html</link>
-      </author>
-    </authors>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test1.xpi</install>
-  </addon>
-</searchresults>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/data/test_AddonRepository_compatmode_strict.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<searchresults total_results="123">
-  <addon>
-    <name>Test Repo Add-on - strict</name>
-    <type id="1">Extension</type>
-    <guid>compatmode-strict@tests.mozilla.org</guid>
-    <version>1.1</version>
-    <authors>
-      <author>
-        <name>Test Creator 1</name>
-        <link>http://localhost:%PORT%/creator1.html</link>
-      </author>
-    </authors>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test1.xpi</install>
-  </addon>
-</searchresults>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/data/test_bug424262.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<searchresults total_results="100">
-  <addon>
-    <name>TEST</name>
-    <type id='1'>Extension</type>
-    <guid>test1@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>TEST</name>
-    <rating>-5</rating>
-    <type id='1'>Extension</type>
-    <guid>test2@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>TEST</name>
-    <rating>0</rating>
-    <type id='1'>Extension</type>
-    <guid>test3@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>TEST</name>
-    <rating>2</rating>
-    <type id='1'>Extension</type>
-    <guid>test4@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>TEST</name>
-    <rating>4</rating>
-    <type id='1'>Extension</type>
-    <guid>test5@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>TEST</name>
-    <rating>5</rating>
-    <type id='1'>Extension</type>
-    <guid>test6@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>TEST</name>
-    <rating>10</rating>
-    <type id='1'>Extension</type>
-    <guid>test7@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>TEST</name>
-    <rating>100</rating>
-    <type id='1'>Extension</type>
-    <guid>test8@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-</searchresults>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/data/test_bug554133.xml
+++ /dev/null
@@ -1,292 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<searchresults total_results="100">
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test1@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>FAIL</name>
-    <type id='1'>Extension</type>
-    <guid>test2@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <summary>Should not return an incompatible add-on</summary>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>2</min_version>
-        <max_version>2</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test3@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>FAIL</name>
-    <type id='1'>Extension</type>
-    <guid>test4@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <summary>Should not return an add-on for a different OS</summary>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install os="UNKNOWN">http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test5@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>FAIL</name>
-    <type id='1'>Extension</type>
-    <guid>test5@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <summary>Should not include the same result twice</summary>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test6@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test7@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test8@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test9@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test10@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test11@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-
-  <addon>
-    <name>PASS</name>
-    <type id='1'>Extension</type>
-    <guid>test12@tests.mozilla.org</guid>
-    <version>1.0</version>
-    <authors>
-      <author>
-        <name>Test Creator</name>
-        <link>http://localhost:%PORT%/creator.html</link>
-      </author>
-    </authors>
-    <status id='4'>Public</status>
-    <compatible_applications>
-      <application>
-        <appID>xpcshell@tests.mozilla.org</appID>
-        <min_version>1</min_version>
-        <max_version>1</max_version>
-      </application>
-    </compatible_applications>
-    <install>http://localhost:%PORT%/test.xpi</install>
-  </addon>
-</searchresults>
-
--- a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
@@ -6,20 +6,17 @@
 
 Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm");
 
 Components.utils.import("resource://testing-common/httpd.js");
 var gServer = new HttpServer();
 gServer.start(-1);
 
 const PREF_GETADDONS_BROWSEADDONS        = "extensions.getAddons.browseAddons";
-const PREF_GETADDONS_BROWSERECOMMENDED   = "extensions.getAddons.recommended.browseURL";
-const PREF_GETADDONS_GETRECOMMENDED      = "extensions.getAddons.recommended.url";
 const PREF_GETADDONS_BROWSESEARCHRESULTS = "extensions.getAddons.search.browseURL";
-const PREF_GETADDONS_GETSEARCHRESULTS    = "extensions.getAddons.search.url";
 
 const PORT          = gServer.identity.primaryPort;
 const BASE_URL      = "http://localhost:" + PORT;
 const DEFAULT_URL   = "about:blank";
 
 gPort = PORT;
 
 // Path to source URI of installing add-on
@@ -104,199 +101,31 @@ var GET_RESULTS = [{
 }, {
   id:                     "test_AddonRepository_1@tests.mozilla.org",
   type:                   "theme",
   version:                "1.4",
   repositoryStatus:       9999,
   icons:                  {}
 }];
 
-// Results of retrieveRecommendedAddons and searchAddons
-var SEARCH_RESULTS = [{
-  id:                     "test1@tests.mozilla.org",
-  type:                   "extension",
-  version:                "1.1",
-  creator:                {
-                            name: "Test Creator 1",
-                            url:  BASE_URL + "/creator1.html"
-                          },
-  repositoryStatus:       8,
-  sourceURI:              BASE_URL + "/test1.xpi",
-  icons:                  {}
-}, {
-  id:                     "test2@tests.mozilla.org",
-  type:                   "extension",
-  version:                "1.2",
-  creator:                {
-                            name: "Test Creator 2",
-                            url:  BASE_URL + "/creator2.html"
-                          },
-  developers:             [{
-                            name: "Test Developer 2",
-                            url:  BASE_URL + "/developer2.html"
-                          }],
-  description:            "Test Summary 2\n\nparagraph",
-  fullDescription:        "Test Description 2\nnewline",
-  developerComments:      "Test Developer\nComments 2",
-  eula:                   "Test EULA 2",
-  iconURL:                BASE_URL + "/icon2-32.png",
-  icons:                  {
-                            "32": BASE_URL + "/icon2-32.png",
-                            "48": BASE_URL + "/icon2-48.png",
-                            "64": BASE_URL + "/icon2-64.png"
-                          },
-  screenshots:            [{
-                            url:          BASE_URL + "/full1-2.png",
-                            thumbnailURL: BASE_URL + "/thumbnail1-2.png"
-                          }, {
-                            url:          BASE_URL + "/full2-2.png",
-                            thumbnailURL: BASE_URL + "/thumbnail2-2.png",
-                            caption:      "Caption 2"
-                          }],
-  homepageURL:            BASE_URL + "/learnmore2.html",
-  supportURL:             BASE_URL + "/support2.html",
-  learnmoreURL:           BASE_URL + "/learnmore2.html",
-  contributionURL:        BASE_URL + "/meetDevelopers2.html",
-  contributionAmount:     null,
-  repositoryStatus:       4,
-  sourceURI:              BASE_URL + "/test2.xpi"
-}, {
-  id:                     "test3@tests.mozilla.org",
-  type:                   "theme",
-  version:                "1.3",
-  creator:                {
-                            name: "Test Creator 3",
-                            url:  BASE_URL + "/creator3.html"
-                          },
-  developers:             [{
-                            name: "First Test Developer 3",
-                            url:  BASE_URL + "/developer1-3.html"
-                          }, {
-                            name: "Second Test Developer 3",
-                            url:  BASE_URL + "/developer2-3.html"
-                          }],
-  description:            "Test Summary 3",
-  fullDescription:        "Test Description 3\n\n    List item 1\n    List item 2",
-  developerComments:      "Test Developer Comments 3",
-  eula:                   "Test EULA 3",
-  iconURL:                BASE_URL + "/icon3.png",
-  icons:                  { "32": BASE_URL + "/icon3.png" },
-  screenshots:            [{
-                            url:          BASE_URL + "/full1-3.png",
-                            thumbnailURL: BASE_URL + "/thumbnail1-3.png",
-                            caption:      "Caption 1 - 3"
-                          }, {
-                            url:          BASE_URL + "/full2-3.png",
-                            caption:      "Caption 2 - 3"
-                          }, {
-                            url:          BASE_URL + "/full3-3.png",
-                            thumbnailURL: BASE_URL + "/thumbnail3-3.png",
-                            caption:      "Caption 3 - 3"
-                          }],
-  homepageURL:            BASE_URL + "/homepage3.html",
-  supportURL:             BASE_URL + "/support3.html",
-  learnmoreURL:           BASE_URL + "/learnmore3.html",
-  contributionURL:        BASE_URL + "/meetDevelopers3.html",
-  contributionAmount:     "$11.11",
-  averageRating:          2,
-  reviewCount:            1111,
-  reviewURL:              BASE_URL + "/review3.html",
-  totalDownloads:         2222,
-  weeklyDownloads:        3333,
-  dailyUsers:             4444,
-  sourceURI:              BASE_URL + "/test3.xpi",
-  repositoryStatus:       8,
-  size:                   5555,
-  updateDate:             new Date(1265033045000),
-
-}, {
-  id:                     "purchase1@tests.mozilla.org",
-  type:                   "extension",
-  version:                "2.0",
-  creator:                {
-                            name: "Test Creator - Last Passing",
-                            url:  BASE_URL + "/creatorLastPassing.html"
-                          },
-  averageRating:          5,
-  repositoryStatus:       4,
-  purchaseURL:            "http://localhost:" + PORT + "/purchaseURL1",
-  purchaseAmount:         5,
-  purchaseDisplayAmount:  "$5",
-  icons:                  {}
-}, {
-  id:                     "purchase2@tests.mozilla.org",
-  type:                   "extension",
-  version:                "2.0",
-  creator:                {
-                            name: "Test Creator - Last Passing",
-                            url:  BASE_URL + "/creatorLastPassing.html"
-                          },
-  averageRating:          5,
-  repositoryStatus:       4,
-  purchaseURL:            "http://localhost:" + PORT + "/purchaseURL2",
-  purchaseAmount:         10,
-  purchaseDisplayAmount:  "$10",
-  icons:                  {}
-}, {
-  id:                     "test-lastPassing@tests.mozilla.org",
-  type:                   "extension",
-  version:                "2.0",
-  creator:                {
-                            name: "Test Creator - Last Passing",
-                            url:  BASE_URL + "/creatorLastPassing.html"
-                          },
-  averageRating:          5,
-  repositoryStatus:       4,
-  sourceURI:              BASE_URL + "/addons/test_AddonRepository_3.xpi",
-  icons:                  {}
-}];
-
-const TOTAL_RESULTS = 1111;
-const MAX_RESULTS = SEARCH_RESULTS.length;
-
-// Used to differentiate between testing that a search success
-// or a search failure for retrieveRecommendedAddons and searchAddons
-const FAILED_MAX_RESULTS  = 9999;
-
 // Values for testing AddonRepository.getAddonsByIDs()
 var GET_TEST = {
   preference:       PREF_GETADDONS_BYIDS,
   preferenceValue:  BASE_URL + "/%OS%/%VERSION%/%API_VERSION%/" +
                     "%API_VERSION%/%IDS%",
   failedIDs:      ["test1@tests.mozilla.org"],
   failedURL:        "/XPCShell/1/1.5/1.5/test1%40tests.mozilla.org",
   successfulIDs:  ["test1@tests.mozilla.org",
                      "{00000000-1111-2222-3333-444444444444}",
                      "test_AddonRepository_1@tests.mozilla.org"],
   successfulURL:    "/XPCShell/1/1.5/1.5/test1%40tests.mozilla.org," +
                     "%7B00000000-1111-2222-3333-444444444444%7D," +
                     "test_AddonRepository_1%40tests.mozilla.org"
 };
 
-// Values for testing AddonRepository.retrieveRecommendedAddons()
-var RECOMMENDED_TEST = {
-  preference:       PREF_GETADDONS_GETRECOMMENDED,
-  preferenceValue:  BASE_URL + "/%OS%/%VERSION%/%API_VERSION%/" +
-                    "%API_VERSION%/%MAX_RESULTS%",
-  failedURL:        "/XPCShell/1/1.5/1.5/" + (2 * FAILED_MAX_RESULTS),
-  successfulURL:    "/XPCShell/1/1.5/1.5/" + (2 * MAX_RESULTS)
-};
-
-// Values for testing AddonRepository.searchAddons()
-var SEARCH_TEST = {
-  searchTerms:      "odd=search:with&weird\"characters",
-  preference:       PREF_GETADDONS_GETSEARCHRESULTS,
-  preferenceValue:  BASE_URL + "/%OS%/%VERSION%/%API_VERSION%/" +
-                    "%API_VERSION%/%MAX_RESULTS%/%TERMS%",
-  failedURL:        "/XPCShell/1/1.5/1.5/" + (2 * FAILED_MAX_RESULTS) +
-                    "/odd%3Dsearch%3Awith%26weird%22characters",
-  successfulURL:    "/XPCShell/1/1.5/1.5/" + (2 * MAX_RESULTS) +
-                    "/odd%3Dsearch%3Awith%26weird%22characters"
-};
-
 // Test that actual results and expected results are equal
 function check_results(aActualAddons, aExpectedAddons, aAddonCount, aInstallNull) {
   do_check_false(AddonRepository.isSearching);
 
   do_check_eq(aActualAddons.length, aAddonCount);
   do_check_addons(aActualAddons, aExpectedAddons, ADDON_PROPERTIES);
 
   // Additional tests
@@ -373,33 +202,21 @@ function run_test() {
                         do_get_addon("test_AddonRepository_2"));
     gServer.registerFile(INSTALL_URL3,
                         do_get_addon("test_AddonRepository_3"));
 
     // Register files used to test search failure
     mapUrlToFile(GET_TEST.failedURL,
                  do_get_file("data/test_AddonRepository_failed.xml"),
                  gServer);
-    mapUrlToFile(RECOMMENDED_TEST.failedURL,
-                 do_get_file("data/test_AddonRepository_failed.xml"),
-                 gServer);
-    mapUrlToFile(SEARCH_TEST.failedURL,
-                 do_get_file("data/test_AddonRepository_failed.xml"),
-                 gServer);
 
     // Register files used to test search success
     mapUrlToFile(GET_TEST.successfulURL,
                  do_get_file("data/test_AddonRepository_getAddonsByIDs.xml"),
                  gServer);
-    mapUrlToFile(RECOMMENDED_TEST.successfulURL,
-                 do_get_file("data/test_AddonRepository.xml"),
-                 gServer);
-    mapUrlToFile(SEARCH_TEST.successfulURL,
-                 do_get_file("data/test_AddonRepository.xml"),
-                 gServer);
 
     // Create an active AddonInstall so can check that it isn't returned in the results
     AddonManager.getInstallForURL(BASE_URL + INSTALL_URL2, function addon_2_get(aInstall) {
       try {
         aInstall.install();
       } catch (e) {
         do_print("Failed to install add-on " + aInstall.sourceURI.spec);
         do_report_unexpected_exception(e);
@@ -424,17 +241,17 @@ function end_test() {
       }
       do_print("Waiting 1 second until cleanup is complete");
       do_timeout(1000, loop);
     }
     loop();
   });
 }
 
-// Tests homepageURL, getRecommendedURL() and getSearchURL()
+// Tests homepageURL and getSearchURL()
 function run_test_1() {
   function check_urls(aPreference, aGetURL, aTests) {
     aTests.forEach(function(aTest) {
       Services.prefs.setCharPref(aPreference, aTest.preferenceValue);
       do_check_eq(aGetURL(aTest), aTest.expectedURL);
     });
   }
 
@@ -456,28 +273,23 @@ function run_test_1() {
     preferenceValue:  BASE_URL + "/%TERMS%",
     expectedURL:      BASE_URL + "/test%20search"
   }, {
     searchTerms:      "odd=search:with&weird\"characters",
     preferenceValue:  BASE_URL + "/%TERMS%",
     expectedURL:      BASE_URL + "/odd%3Dsearch%3Awith%26weird%22characters"
   }];
 
-  // Setup tests for homepageURL, getRecommendedURL() and getSearchURL()
+  // Setup tests for homepageURL and getSearchURL()
   var tests = [{
     initiallyUndefined: true,
     preference:         PREF_GETADDONS_BROWSEADDONS,
     urlTests,
     getURL:             () => AddonRepository.homepageURL
   }, {
-    initiallyUndefined: true,
-    preference:         PREF_GETADDONS_BROWSERECOMMENDED,
-    urlTests,
-    getURL:             () => AddonRepository.getRecommendedURL()
-  }, {
     initiallyUndefined: false,
     preference:         PREF_GETADDONS_BROWSESEARCHRESULTS,
     urlTests:           urlTests.concat(searchURLTests),
     getURL:             function getSearchURL(aTest) {
                           var searchTerms = aTest && aTest.searchTerms ? aTest.searchTerms
                                                                        : "unused terms";
                           return AddonRepository.getSearchURL(searchTerms);
                         }
@@ -518,105 +330,21 @@ function run_test_getAddonsByID_fails() 
 }
 
 // Tests success of AddonRepository.getAddonsByIDs()
 function run_test_getAddonsByID_succeeds() {
   var callback = {
     searchSucceeded(aAddonsList, aAddonCount, aTotalResults) {
       do_check_eq(aTotalResults, -1);
       check_results(aAddonsList, GET_RESULTS, aAddonCount, true);
-      run_test_retrieveRecommended_fails();
+      end_test();
     },
 
     searchFailed() {
       do_throw("searchAddons should not have failed");
       end_test();
     }
   };
 
   complete_search(function complete_search_succeed_callback(aCallback) {
     AddonRepository.getAddonsByIDs(GET_TEST.successfulIDs, aCallback);
   }, callback);
 }
-
-// Tests failure of AddonRepository.retrieveRecommendedAddons()
-function run_test_retrieveRecommended_fails() {
-  Services.prefs.setCharPref(RECOMMENDED_TEST.preference,
-                             RECOMMENDED_TEST.preferenceValue);
-  var callback = {
-    searchSucceeded(aAddonsList, aAddonCount, aTotalResults) {
-      do_throw("retrieveRecommendedAddons should not have succeeded");
-      end_test();
-    },
-
-    searchFailed() {
-      do_check_false(AddonRepository.isSearching);
-      run_test_retrieveRecommended_succeed();
-    }
-  };
-
-  complete_search(function retrieveRecommended_failing_callback(aCallback) {
-    AddonRepository.retrieveRecommendedAddons(FAILED_MAX_RESULTS, aCallback);
-  }, callback);
-}
-
-// Tests success of AddonRepository.retrieveRecommendedAddons()
-function run_test_retrieveRecommended_succeed() {
-  var callback = {
-    searchSucceeded(aAddonsList, aAddonCount, aTotalResults) {
-      do_check_eq(aTotalResults, -1);
-      check_results(aAddonsList, SEARCH_RESULTS, aAddonCount);
-      run_test_searchAddons_fails();
-    },
-
-    searchFailed() {
-      do_throw("retrieveRecommendedAddons should not have failed");
-      end_test();
-    }
-  };
-
-  complete_search(function retrieveRecommended_succeed_callback(aCallback) {
-    AddonRepository.retrieveRecommendedAddons(MAX_RESULTS, aCallback);
-  }, callback);
-}
-
-// Tests failure of AddonRepository.searchAddons()
-function run_test_searchAddons_fails() {
-  Services.prefs.setCharPref(SEARCH_TEST.preference, SEARCH_TEST.preferenceValue);
-  var callback = {
-    searchSucceeded(aAddonsList, aAddonCount, aTotalResults) {
-      do_throw("searchAddons should not have succeeded");
-      end_test();
-    },
-
-    searchFailed() {
-      do_check_false(AddonRepository.isSearching);
-      run_test_searchAddons_succeeds();
-    }
-  };
-
-  complete_search(function(aCallback) {
-    var searchTerms = SEARCH_TEST.searchTerms;
-    AddonRepository.searchAddons(searchTerms, FAILED_MAX_RESULTS, aCallback);
-  }, callback);
-}
-
-// Tests success of AddonRepository.searchAddons()
-function run_test_searchAddons_succeeds() {
-  var callback = {
-    searchSucceeded(aAddonsList, aAddonCount, aTotalResults) {
-      do_check_eq(aTotalResults, TOTAL_RESULTS);
-      check_results(aAddonsList, SEARCH_RESULTS, aAddonCount);
-      end_test();
-    },
-
-    searchFailed() {
-      do_throw("searchAddons should not have failed");
-      end_test();
-    }
-  };
-
-  complete_search(function(aCallback) {
-    var searchTerms = SEARCH_TEST.searchTerms;
-    AddonRepository.searchAddons(searchTerms, MAX_RESULTS, aCallback);
-  }, callback);
-}
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_compatmode.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// This verifies that AddonRepository correctly fills in the
-// %COMPATIBILITY_MODE% token in the Search API URL.
-
-const PREF_GETADDONS_GETSEARCHRESULTS    = "extensions.getAddons.search.url";
-
-Components.utils.import("resource://testing-common/httpd.js");
-var gServer = new HttpServer();
-gServer.start(-1);
-gPort = gServer.identity.primaryPort;
-
-// register static files with server and interpolate port numbers in them
-mapFile("/data/test_AddonRepository_compatmode_ignore.xml", gServer);
-mapFile("/data/test_AddonRepository_compatmode_normal.xml", gServer);
-mapFile("/data/test_AddonRepository_compatmode_strict.xml", gServer);
-
-function run_test() {
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
-
-  Services.prefs.setCharPref(PREF_GETADDONS_GETSEARCHRESULTS,
-                             "http://localhost:" + gPort + "/data/test_AddonRepository_compatmode_%COMPATIBILITY_MODE%.xml");
-  startupManager();
-  run_test_1();
-}
-
-function end_test() {
-  gServer.stop(do_test_finished);
-}
-
-// Strict compatibility checking disabled.
-function run_test_1() {
-  do_print("Testing with strict compatibility checking disabled");
-  Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, false);
-
-  AddonRepository.searchAddons("test", 6, {
-    searchSucceeded(aAddons) {
-      do_check_neq(aAddons, null);
-      do_check_eq(aAddons.length, 1);
-      do_check_eq(aAddons[0].id, "compatmode-normal@tests.mozilla.org");
-
-      run_test_2();
-    },
-    searchFailed() {
-      do_throw("Search should not have failed");
-    }
-  });
-}
-
-// Strict compatibility checking enabled.
-function run_test_2() {
-  do_print("Testing with strict compatibility checking enabled");
-  Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, true);
-
-  AddonRepository.searchAddons("test", 6, {
-    searchSucceeded(aAddons) {
-      do_check_neq(aAddons, null);
-      do_check_eq(aAddons.length, 1);
-      do_check_eq(aAddons[0].id, "compatmode-strict@tests.mozilla.org");
-
-      run_test_3();
-    },
-    searchFailed() {
-      do_throw("Search should not have failed");
-    }
-  });
-}
-
-// Compatibility checking disabled.
-function run_test_3() {
-  do_print("Testing with all compatibility checking disabled");
-  AddonManager.checkCompatibility = false;
-
-  AddonRepository.searchAddons("test", 6, {
-    searchSucceeded(aAddons) {
-      do_check_neq(aAddons, null);
-      do_check_eq(aAddons.length, 1);
-      do_check_eq(aAddons[0].id, "compatmode-ignore@tests.mozilla.org");
-
-      end_test();
-    },
-    searchFailed() {
-      do_throw("Search should not have failed");
-    }
-  });
-}
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug424262.js
+++ /dev/null
@@ -1,61 +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/.
- */
-Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm");
-
-const PREF_GETADDONS_GETRECOMMENDED = "extensions.getAddons.recommended.url";
-
-Components.utils.import("resource://testing-common/httpd.js");
-var server;
-var RESULTS = [
-  null,
-  null,
-  0,
-  2,
-  4,
-  5,
-  5,
-  5
-];
-
-var RecommendedCallback = {
-  searchSucceeded(addons, length, total) {
-    dump("loaded");
-    // Search is complete
-    do_check_eq(length, RESULTS.length);
-
-    for (var i = 0; i < length; i++) {
-      if (addons[i].averageRating != RESULTS[i])
-        do_throw("Rating for " + addons[i].id + " was " + addons[i].averageRating + ", should have been " + RESULTS[i]);
-    }
-    server.stop(do_test_finished);
-  },
-
-  searchFailed() {
-    server.stop(do_test_finished);
-    do_throw("Recommended results failed");
-  }
-};
-
-function run_test() {
-  // EM needs to be running.
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
-  startupManager();
-
-  server = new HttpServer();
-  server.start(-1);
-  gPort = server.identity.primaryPort;
-  mapFile("/data/test_bug424262.xml", server);
-
-  // Point the addons repository to the test server
-  Services.prefs.setCharPref(PREF_GETADDONS_GETRECOMMENDED, "http://localhost:" +
-                             gPort + "/data/test_bug424262.xml");
-
-  do_check_neq(AddonRepository, null);
-
-  do_test_pending();
-  // Pull some results.
-  AddonRepository.retrieveRecommendedAddons(RESULTS.length, RecommendedCallback);
-}
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug554133.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// This verifies that if the AMO response provides total_results,
-// searchSucceeded is called with the correct number of total results
-
-Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm");
-
-const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url";
-
-Components.utils.import("resource://testing-common/httpd.js");
-var server;
-
-var TESTS = [
-{
-  query:      "bug554133",
-  maxResults: 2,
-  length:     2,
-  total:      100
-},
-{
-  query:      "bug554133",
-  maxResults: 10,
-  length:     10,
-  total:      100
-},
-{
-  query:      "bug554133",
-  maxResults: 100,
-  length:     10,
-  total:      100
-}
-];
-
-var gCurrentTest = 0;
-var SearchCallback = {
-  searchSucceeded(addons, length, total) {
-    do_check_false(AddonRepository.isSearching);
-    do_check_eq(addons.length, length);
-    do_check_eq(length, TESTS[gCurrentTest].length);
-    do_check_eq(total, TESTS[gCurrentTest].total);
-
-    gCurrentTest++;
-    run_current_test();
-  },
-
-  searchFailed() {
-    server.stop(do_test_finished);
-    do_throw("Search results failed");
-  }
-};
-
-function run_current_test() {
-  if (gCurrentTest < TESTS.length) {
-    var query = TESTS[gCurrentTest].query;
-    var maxResults = TESTS[gCurrentTest].maxResults;
-    AddonRepository.searchAddons(query, maxResults, SearchCallback);
-  } else
-    server.stop(do_test_finished);
-}
-
-function run_test() {
-  // Setup for test
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
-
-  startupManager();
-
-  server = new HttpServer();
-  server.registerDirectory("/", do_get_file("data"));
-  mapFile("/data/test_bug554133.xml", server);
-  server.start(-1);
-  gPort = server.identity.primaryPort;
-
-  // Point search to the test server
-  Services.prefs.setCharPref(PREF_GETADDONS_GETSEARCHRESULTS,
-                             "http://localhost:" + gPort + "/data/test_%TERMS%.xml");
-
-  do_check_neq(AddonRepository, null);
-  gCurrentTest = 0;
-  run_current_test();
-}
-
--- a/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
+++ b/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
@@ -9,19 +9,16 @@ tags = addons
 # There's a problem removing a temp file without manually clearing the cache on Windows
 skip-if = os == "android" || os == "win"
 tags = webextensions
 [test_AddonRepository_cache.js]
 # Bug 676992: test consistently hangs on Android
 # Bug 1026805: frequent hangs on OSX 10.8
 skip-if = os == "android" || os == "mac"
 run-sequentially = Uses hardcoded ports in xpi files.
-[test_AddonRepository_compatmode.js]
-# Bug 676992: test consistently hangs on Android
-skip-if = os == "android"
 [test_LightweightThemeManager.js]
 [test_backgroundupdate.js]
 [test_bad_json.js]
 [test_badschema.js]
 [test_blocklistchange.js]
 # Times out during parallel runs on desktop
 requesttimeoutfactor = 2
 tags = blocklist
@@ -74,19 +71,16 @@ skip-if = os == "android" || os == "mac"
 run-sequentially = Uses hardcoded ports in xpi files.
 [test_bug397778.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 [test_bug406118.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 tags = blocklist
-[test_bug424262.js]
-# Bug 676992: test consistently hangs on Android
-skip-if = os == "android"
 [test_bug425657.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 [test_bug430120.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 tags = blocklist
 [test_bug449027.js]
@@ -132,17 +126,16 @@ skip-if = os == "android"
 tags = blocklist
 [test_bug514327_3.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 tags = blocklist
 [test_bug521905.js]
 [test_bug526598.js]
 [test_bug541420.js]
-[test_bug554133.js]
 [test_bug559800.js]
 [test_bug564030.js]
 [test_bug566626.js]
 [test_bug567184.js]
 [test_bug569138.js]
 [test_bug570173.js]
 [test_bug576735.js]
 [test_bug587088.js]
deleted file mode 100644
--- a/toolkit/themes/shared/extensions/category-search.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity" width="32" height="32">
-  <path d="M15.71 14.29l-4.82-4.82a6 6 0 1 0-1.41 1.41l4.82 4.82a1 1 0 0 0 1.41-1.41zM6 10a4 4 0 1 1 4-4 4 4 0 0 1-4 4z"/>
-</svg>
--- a/toolkit/themes/shared/extensions/extensions.inc.css
+++ b/toolkit/themes/shared/extensions/extensions.inc.css
@@ -190,19 +190,16 @@ button.warning {
   font-weight: bold;
   text-align: center;
 }
 
 .category-badge[value="0"] {
   display: none;
 }
 
-#category-search > .category-icon {
-  list-style-image: url("chrome://mozapps/skin/extensions/category-search.svg");
-}
 #category-discover > .category-icon {
   list-style-image: url("chrome://mozapps/skin/extensions/category-discover.svg");
 }
 #category-locale > .category-icon {
   list-style-image: url("chrome://mozapps/skin/extensions/category-languages.svg");
 }
 #category-extension > .category-icon {
   list-style-image: url("chrome://mozapps/skin/extensions/category-extensions.svg");
@@ -630,39 +627,16 @@ button.warning {
   font-size: 120%;
 }
 
 .addon[status="uninstalled"][selected] {
   background-color: transparent;
 }
 
 
-/*** search view ***/
-
-#search-filter {
-  padding: 5px 20px;
-  margin-right: 48px;
-  margin-left: 48px;
-  font-size: 120%;
-  border-bottom: 1px solid #c1c1c1;
-  overflow-x: hidden;
-}
-
-#search-filter-label {
-  font-weight: bold;
-  color: grey;
-  margin-inline-end: 10px;
-}
-
-#search-allresults-link {
-  margin-top: 1em;
-  margin-bottom: 2em;
-}
-
-
 /*** detail view ***/
 
 #detail-view .scrollbox-innerbox {
   margin-right: 48px;
   margin-left: 48px;
 }
 
 #detail-view .loading {
--- a/toolkit/themes/shared/mozapps.inc.mn
+++ b/toolkit/themes/shared/mozapps.inc.mn
@@ -6,17 +6,16 @@
 # actual theme-specific manifests, so that shared resources need only
 # be specified once. As a result, the source file paths are relative
 # to the location of the actual manifest.
 
   skin/classic/mozapps/extensions/experimentGeneric.svg      (../../shared/extensions/category-experiments.svg)
   skin/classic/mozapps/extensions/dictionaryGeneric.svg      (../../shared/extensions/category-dictionaries.svg)
   skin/classic/mozapps/extensions/extensionGeneric.svg       (../../shared/extensions/category-extensions.svg)
   skin/classic/mozapps/extensions/themeGeneric.svg           (../../shared/extensions/category-themes.svg)
-  skin/classic/mozapps/extensions/category-search.svg        (../../shared/extensions/category-search.svg)
   skin/classic/mozapps/extensions/category-discover.svg      (../../shared/extensions/category-discover.svg)
   skin/classic/mozapps/extensions/category-service.svg       (../../shared/extensions/category-service.svg)
   skin/classic/mozapps/extensions/category-recent.svg        (../../shared/extensions/category-recent.svg)
   skin/classic/mozapps/extensions/category-available.svg     (../../shared/extensions/category-available.svg)
 
   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/alerticon-warning.svg      (../../shared/extensions/alerticon-warning.svg)