merge m-c to fx-team
authorTim Taubert <tim.taubert@gmx.de>
Thu, 19 Jan 2012 12:10:03 +0100
changeset 86075 78f821cb89749b065b738a6520ee22b97a83e01c
parent 86066 f76b576a9e28264cda0df1e782ac48d8c04f0ff8 (current diff)
parent 86074 3698bfa55a72a2c46dd1e1706f638d3241f0f592 (diff)
child 86122 e5e66f40c35b6ccfe4a1c59f977fdbaca5dd6ecb
child 86123 9883a9f66cf04ebe9b2c1b885954d02f97612278
child 86127 360620a4257564971ad0d0fa036dc8e7220d32af
push id805
push userakeybl@mozilla.com
push dateWed, 01 Feb 2012 18:17:35 +0000
treeherdermozilla-aurora@6fb3bf232436 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone12.0a1
merge m-c to fx-team
browser/base/content/test/Makefile.in
toolkit/mozapps/extensions/XPIProvider.jsm
toolkit/mozapps/update/test/unit/data/complete_cc_log_success
toolkit/mozapps/update/test/unit/test_0120_channelChange_complete.js
toolkit/mozapps/update/test_svc/unit/test_0120_channelChange_complete_svc.js
toolkit/mozapps/update/updater/updater.cpp
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -8867,18 +8867,18 @@ function restoreLastSession() {
   let ss = Cc["@mozilla.org/browser/sessionstore;1"].
            getService(Ci.nsISessionStore);
   ss.restoreLastSession();
 }
 
 var TabContextMenu = {
   contextTab: null,
   updateContextMenu: function updateContextMenu(aPopupMenu) {
-    this.contextTab = document.popupNode.localName == "tab" ?
-                      document.popupNode : gBrowser.selectedTab;
+    this.contextTab = aPopupMenu.triggerNode.localName == "tab" ?
+                      aPopupMenu.triggerNode : gBrowser.selectedTab;
     let disabled = gBrowser.tabs.length == 1;
 
     // Enable the "Close Tab" menuitem when the window doesn't close with the last tab.
     document.getElementById("context_closeTab").disabled =
       disabled && gBrowser.tabContainer._closeWindowWithLastTab;
 
     var menuItems = aPopupMenu.getElementsByAttribute("tbattr", "tabbrowser-multiple");
     for (var i = 0; i < menuItems.length; i++)
--- a/browser/base/content/test/Makefile.in
+++ b/browser/base/content/test/Makefile.in
@@ -78,24 +78,25 @@ ifneq (gtk2,$(MOZ_WIDGET_TOOLKIT))
 		$(NULL)
 endif
 
 # The following tests are disabled because they are unreliable:
 #   browser_bug423833.js is bug 428712
 #   browser_sanitize-download-history.js is bug 432425
 #
 # browser_sanitizeDialog_treeView.js is disabled until the tree view is added
-# back to the clear recent history dialog (santize.xul), if it ever is (bug
+# back to the clear recent history dialog (sanitize.xul), if it ever is (bug
 # 480169)
 
 # browser_drag.js is disabled, as it needs to be updated for the new behavior from bug 320638.
 
 # browser_bug321000.js is disabled because newline handling is shaky (bug 592528)
 
 _BROWSER_FILES = \
+                 head.js \
                  browser_typeAheadFind.js \
                  browser_keywordSearch.js \
                  browser_allTabsPanel.js \
                  browser_alltabslistener.js \
                  browser_bug304198.js \
                  title_test.svg \
                  browser_bug329212.js \
                  browser_bug356571.js \
--- a/browser/base/content/test/browser_bug580956.js
+++ b/browser/base/content/test/browser_bug580956.js
@@ -1,17 +1,15 @@
 function numClosedTabs()
   Cc["@mozilla.org/browser/sessionstore;1"].
     getService(Ci.nsISessionStore).
     getClosedTabCount(window);
 
 function isUndoCloseEnabled() {
-  document.popupNode = gBrowser.tabs[0];
-  TabContextMenu.updateContextMenu(document.getElementById("tabContextMenu"));
-  TabContextMenu.contextTab = null;
+  updateTabContextMenu();
   return !document.getElementById("context_undoCloseTab").disabled;
 }
 
 function test() {
   waitForExplicitFinish();
 
   gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", 0);
   gPrefService.clearUserPref("browser.sessionstore.max_tabs_undo");
--- a/browser/base/content/test/browser_visibleTabs_bookmarkAllTabs.js
+++ b/browser/base/content/test/browser_visibleTabs_bookmarkAllTabs.js
@@ -84,20 +84,16 @@ function test() {
     is(Disabled(), true, "Bookmark All Tabs should be hidden");
     is(gBrowser.selectedTab, origTab, "got the orig tab");
     is(origTab.hidden, false, "and it's not hidden -- visible!");
     finish();
   }, true);
 }
 
 function Disabled() {
-  document.popupNode = gBrowser.selectedTab;
-  TabContextMenu.updateContextMenu(document.getElementById("tabContextMenu"));
-  TabContextMenu.contextTab = null;
+  updateTabContextMenu();
   return document.getElementById("Browser:BookmarkAllTabs").getAttribute("disabled") == "true";
 }
 
 function Hidden() {
-  document.popupNode = gBrowser.selectedTab;
-  TabContextMenu.updateContextMenu(document.getElementById("tabContextMenu"));
-  TabContextMenu.contextTab = null;
+  updateTabContextMenu();
   return document.getElementById("context_bookmarkAllTabs").hidden;
 }
--- a/browser/base/content/test/browser_visibleTabs_contextMenu.js
+++ b/browser/base/content/test/browser_visibleTabs_contextMenu.js
@@ -38,50 +38,43 @@
 function test() {
   // There should be one tab when we start the test
   let [origTab] = gBrowser.visibleTabs;
   is(gBrowser.visibleTabs.length, 1, "there is one visible tab");
   let testTab = gBrowser.addTab();
   is(gBrowser.visibleTabs.length, 2, "there are now two visible tabs");
 
   // Check the context menu with two tabs
-  popup(origTab);
+  updateTabContextMenu(origTab);
   is(document.getElementById("context_closeTab").disabled, false, "Close Tab is enabled");
   is(document.getElementById("context_reloadAllTabs").disabled, false, "Reload All Tabs is enabled");
 
   // Hide the original tab.
   gBrowser.selectedTab = testTab;
   gBrowser.showOnlyTheseTabs([testTab]);
   is(gBrowser.visibleTabs.length, 1, "now there is only one visible tab");
   
   // Check the context menu with one tab.
-  popup(testTab);
+  updateTabContextMenu(testTab);
   is(document.getElementById("context_closeTab").disabled, false, "Close Tab is enabled when more than one tab exists");
   is(document.getElementById("context_reloadAllTabs").disabled, true, "Reload All Tabs is disabled");
   
   // Add a tab that will get pinned
   // So now there's one pinned tab, one visible unpinned tab, and one hidden tab
   let pinned = gBrowser.addTab();
   gBrowser.pinTab(pinned);
   is(gBrowser.visibleTabs.length, 2, "now there are two visible tabs");
 
   // Check the context menu on the unpinned visible tab
-  popup(testTab);
+  updateTabContextMenu(testTab);
   is(document.getElementById("context_closeOtherTabs").disabled, true, "Close Other Tabs is disabled");
 
   // Show all tabs
   let allTabs = [tab for each (tab in gBrowser.tabs)];
   gBrowser.showOnlyTheseTabs(allTabs);
 
   // Check the context menu now
-  popup(testTab);
+  updateTabContextMenu(testTab);
   is(document.getElementById("context_closeOtherTabs").disabled, false, "Close Other Tabs is enabled");
   
   gBrowser.removeTab(testTab);
   gBrowser.removeTab(pinned);
 }
-
-function popup(tab) {
-  document.popupNode = tab;
-  TabContextMenu.updateContextMenu(document.getElementById("tabContextMenu"));
-  is(TabContextMenu.contextTab, tab, "TabContextMenu context is the expected tab");
-  TabContextMenu.contextTab = null;
-}
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/head.js
@@ -0,0 +1,8 @@
+function updateTabContextMenu(tab) {
+  let menu = document.getElementById("tabContextMenu");
+  if (!tab)
+    tab = gBrowser.selectedTab;
+  menu.openPopup(tab, "end_after", 0, 0, true, false, {target: tab});
+  is(TabContextMenu.contextTab, tab, "TabContextMenu context is the expected tab");
+  menu.hidePopup();
+}
--- a/browser/components/tabview/test/browser_tabview_bug625195.js
+++ b/browser/components/tabview/test/browser_tabview_bug625195.js
@@ -42,14 +42,15 @@ function test() {
       finish();
     });
     let newGroup = contentWindow.GroupItems.newGroup();
     newGroup.newTab();
   });
 }
 
 function popup(tab) {
-  document.popupNode = tab;
-  TabContextMenu.updateContextMenu(document.getElementById("tabContextMenu"));
+  let menu = document.getElementById("tabContextMenu");
+  menu.openPopup(tab, "end_after", 0, 0, true, false, {target: tab});
+  TabContextMenu.updateContextMenu(menu);
   is(TabContextMenu.contextTab, tab, "TabContextMenu context is the expected tab");
-  TabContextMenu.contextTab = null;
+  menu.hidePopup();
 }
 
--- a/browser/components/tabview/test/browser_tabview_bug626525.js
+++ b/browser/components/tabview/test/browser_tabview_bug626525.js
@@ -133,19 +133,18 @@ function test3(win) {
   win.document.getElementById("context_tabViewNewGroup").doCommand();
 
   // close popups
   win.document.getElementById("context_tabViewMenuPopup").hidePopup();
   closeTabContextPopup(win);
 }
 
 function openTabContextPopup(win, tab) {
-  win.document.popupNode = tab;
   win.document.getElementById("tabContextMenu").openPopup(
-    tab, "end_after", 0, 0, true, false);
+    tab, "end_after", 0, 0, true, false, {target: tab});
 }
 
 function closeTabContextPopup(win) {
   win.document.getElementById("tabContextMenu").hidePopup();
 }
 
 function goToNextGroup(win) {
   let utils =
--- a/browser/components/tabview/test/browser_tabview_bug641802.js
+++ b/browser/components/tabview/test/browser_tabview_bug641802.js
@@ -1,16 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
   let openMoveToGroupPopup = function () {
     let tab = gBrowser.selectedTab;
-    document.popupNode = tab;
-    contextMenu.openPopup(tab, "end_after", 0, 0, true, false);
+    contextMenu.openPopup(tab, "end_after", 0, 0, true, false, {target: tab});
     tvMenuPopup.openPopup(tvMenu, "end_after", 0, 0, true, false);
   }
 
   let hideMoveToGroupPopup = function () {
     tvMenuPopup.hidePopup();
     contextMenu.hidePopup();
   }
 
--- a/config/createprecomplete.py
+++ b/config/createprecomplete.py
@@ -1,32 +1,34 @@
 # Any copyright is dedicated to the Public Domain.
 # http://creativecommons.org/publicdomain/zero/1.0/
 
-# Creates the precomplete file containing the remove, remove-cc, and rmdir
-# application update instructions which is used to remove files and directories
-# that are no longer present in a complete update. The current working directory
-# is used for the location to enumerate and to create the precomplete file.
+# Creates the precomplete file containing the remove and rmdir application
+# update instructions which is used to remove files and directories that are no
+# longer present in a complete update. The current working directory is used for
+# the location to enumerate and to create the precomplete file.
 
 import sys
 import os
 
 def get_build_entries(root_path):
     """ Iterates through the root_path, creating a list for each file and
-        directory. Excludes any path starting with extensions or distribution.
+        directory. Excludes any path starting with extensions or distribution
+        and paths ending with channel-prefs.js.
     """
     rel_file_path_set = set()
     rel_dir_path_set = set()
     for root, dirs, files in os.walk(root_path):
         for file_name in files:
             parent_dir_rel_path = root[len(root_path)+1:]
             rel_path_file = os.path.join(parent_dir_rel_path, file_name)
             rel_path_file = rel_path_file.replace("\\", "/")
             if not (rel_path_file.startswith("distribution/") or
-                    rel_path_file.startswith("extensions/")):
+                    rel_path_file.startswith("extensions/") or
+                    rel_path_file.endswith("channel-prefs.js")):
                 rel_file_path_set.add(rel_path_file)
 
         for dir_name in dirs:
             parent_dir_rel_path = root[len(root_path)+1:]
             rel_path_dir = os.path.join(parent_dir_rel_path, dir_name)
             rel_path_dir = rel_path_dir.replace("\\", "/")+"/"
             if not (rel_path_dir.startswith("distribution/") or
                     rel_path_dir.startswith("extensions/")):
@@ -35,34 +37,31 @@ def get_build_entries(root_path):
     rel_file_path_list = list(rel_file_path_set)
     rel_file_path_list.sort(reverse=True)
     rel_dir_path_list = list(rel_dir_path_set)
     rel_dir_path_list.sort(reverse=True)
 
     return rel_file_path_list, rel_dir_path_list
 
 def generate_precomplete():
-    """ Creates the precomplete file containing the remove, remove-cc, and rmdir
+    """ Creates the precomplete file containing the remove and rmdir
         application update instructions. The current working directory is used
         for the location to enumerate and to create the precomplete file.
     """
     root_path = os.getcwd()
     # If inside a Mac bundle use the root of the bundle for the path.
     if os.path.basename(root_path) == "MacOS":
         root_path = os.path.abspath(os.path.join(root_path, '../../'))
 
     rel_file_path_list, rel_dir_path_list = get_build_entries(root_path)
     precomplete_file_path = os.path.join(root_path,"precomplete")
     # open in binary mode to prevent OS specific line endings.
     precomplete_file = open(precomplete_file_path, "wb")
     for rel_file_path in rel_file_path_list:
-        if rel_file_path.endswith("channel-prefs.js"):
-            precomplete_file.writelines("remove-cc \""+rel_file_path+"\"\n")
-        else:
-            precomplete_file.writelines("remove \""+rel_file_path+"\"\n")
+        precomplete_file.writelines("remove \""+rel_file_path+"\"\n")
 
     for rel_dir_path in rel_dir_path_list:
         precomplete_file.writelines("rmdir \""+rel_dir_path+"\"\n")
 
     precomplete_file.close()
 
 if __name__ == "__main__":
     generate_precomplete()
--- a/toolkit/mozapps/extensions/AddonUpdateChecker.jsm
+++ b/toolkit/mozapps/extensions/AddonUpdateChecker.jsm
@@ -704,17 +704,17 @@ var AddonUpdateChecker = {
    * @param  aUpdates
    *         An array of update objects
    * @param  aAppVersion
    *         The version of the application or null to use the current version
    * @param  aPlatformVersion
    *         The version of the platform or null to use the current version
    * @param  aIgnoreMaxVersion
    *         When determining compatible updates, ignore maxVersion. Optional.
-   * @param  aIgnoreMaxVersion
+   * @param  aIgnoreStrictCompat
    *         When determining compatible updates, ignore strictCompatibility. Optional.
    * @param  aCompatOverrides
    *         Array of AddonCompatibilityOverride to take into account. Optional.
    * @return an update object if one matches or null if not
    */
   getNewestCompatibleUpdate: function AUC_getNewestCompatibleUpdate(aUpdates,
                                                                     aAppVersion,
                                                                     aPlatformVersion,
--- a/toolkit/mozapps/update/nsUpdateService.js
+++ b/toolkit/mozapps/update/nsUpdateService.js
@@ -62,17 +62,16 @@ const PREF_APP_UPDATE_BACKGROUND_INTERVA
 const PREF_APP_UPDATE_BACKGROUNDERRORS    = "app.update.backgroundErrors";
 const PREF_APP_UPDATE_BACKGROUNDMAXERRORS = "app.update.backgroundMaxErrors";
 const PREF_APP_UPDATE_CERTS_BRANCH        = "app.update.certs.";
 const PREF_APP_UPDATE_CERT_CHECKATTRS     = "app.update.cert.checkAttributes";
 const PREF_APP_UPDATE_CERT_ERRORS         = "app.update.cert.errors";
 const PREF_APP_UPDATE_CERT_MAXERRORS      = "app.update.cert.maxErrors";
 const PREF_APP_UPDATE_CERT_REQUIREBUILTIN = "app.update.cert.requireBuiltIn";
 const PREF_APP_UPDATE_CHANNEL             = "app.update.channel";
-const PREF_APP_UPDATE_DESIREDCHANNEL      = "app.update.desiredChannel";
 const PREF_APP_UPDATE_ENABLED             = "app.update.enabled";
 const PREF_APP_UPDATE_IDLETIME            = "app.update.idletime";
 const PREF_APP_UPDATE_INCOMPATIBLE_MODE   = "app.update.incompatible.mode";
 const PREF_APP_UPDATE_INTERVAL            = "app.update.interval";
 const PREF_APP_UPDATE_LOG                 = "app.update.log";
 const PREF_APP_UPDATE_MODE                = "app.update.mode";
 const PREF_APP_UPDATE_NEVER_BRANCH        = "app.update.never.";
 const PREF_APP_UPDATE_POSTUPDATE          = "app.update.postupdate";
@@ -109,17 +108,16 @@ const KEY_GRED            = "GreD";
 #define USE_UPDROOT
 #endif
 
 #ifdef USE_UPDROOT
 const KEY_UPDROOT         = "UpdRootD";
 #endif
 
 const DIR_UPDATES         = "updates";
-const FILE_CHANNELCHANGE  = "channelchange";
 const FILE_UPDATE_STATUS  = "update.status";
 const FILE_UPDATE_VERSION = "update.version";
 #ifdef ANDROID
 const FILE_UPDATE_ARCHIVE = "update.apk";
 #else
 const FILE_UPDATE_ARCHIVE = "update.mar";
 #endif
 const FILE_UPDATE_LOG     = "update.log"
@@ -637,25 +635,16 @@ function shouldUseService() {
 #           update doesn't provide the appVersion attribute in the update xml.
  */
 function writeVersionFile(dir, version) {
   var versionFile = dir.clone();
   versionFile.append(FILE_UPDATE_VERSION);
   writeStringToFile(versionFile, version);
 }
 
-function createChannelChangeFile(dir) {
-  var channelChangeFile = dir.clone();
-  channelChangeFile.append(FILE_CHANNELCHANGE);
-  if (!channelChangeFile.exists()) {
-    channelChangeFile.create(Ci.nsILocalFile.NORMAL_FILE_TYPE,
-                             FileUtils.PERMS_FILE);
-  }
-}
-
 /**
  * Removes the contents of the Updates Directory
  */
 function cleanUpUpdatesDir() {
   // Bail out if we don't have appropriate permissions
   try {
     var updateDir = getUpdatesDir();
   }
@@ -776,29 +765,16 @@ function getUpdateChannel() {
   }
   catch (e) {
     Components.utils.reportError(e);
   }
 
   return channel;
 }
 
-function getDesiredChannel() {
-  let desiredChannel = getPref("getCharPref", PREF_APP_UPDATE_DESIREDCHANNEL, null);
-  if (!desiredChannel)
-    return null;
-  
-  if (desiredChannel == getUpdateChannel()) {
-    Services.prefs.clearUserPref(PREF_APP_UPDATE_DESIREDCHANNEL);
-    return null;
-  }
-  LOG("getDesiredChannel - channel set to: " + desiredChannel);
-  return desiredChannel;
-}
-
 /* Get the distribution pref values, from defaults only */
 function getDistributionPrefValue(aPrefName) {
   var prefValue = "default";
 
   try {
     prefValue = Services.prefs.getDefaultBranch(null).getCharPref(aPrefName);
   } catch (e) {
     // use default when pref not found
@@ -1297,19 +1273,16 @@ const UpdateServiceFactory = {
 
 /**
  * UpdateService
  * A Service for managing the discovery and installation of software updates.
  * @constructor
  */
 function UpdateService() {
   Services.obs.addObserver(this, "xpcom-shutdown", false);
-  // This will clear the preference if the channel is the same as the
-  // application's channel.
-  getDesiredChannel();
 }
 
 UpdateService.prototype = {
   /**
    * The downloader we are using to download updates. There is only ever one of
    * these.
    */
   _downloader: null,
@@ -1404,19 +1377,16 @@ UpdateService.prototype = {
 
       // Update the patch's metadata.
       um.activeUpdate = update;
       Services.prefs.setBoolPref(PREF_APP_UPDATE_POSTUPDATE, true);
       prompter.showUpdateInstalled();
 
       // Done with this update. Clean it up.
       cleanupActiveUpdate();
-
-      if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_DESIREDCHANNEL))      
-        Services.prefs.clearUserPref(PREF_APP_UPDATE_DESIREDCHANNEL);
     }
     else {
       // If we hit an error, then the error code will be included in the status
       // string following a colon and a space. If we had an I/O error, then we
       // assume that the patch is not invalid, and we re-stage the patch so that
       // it can be attempted again the next time we restart. This will leave a
       // space at the beginning of the error code when there is a failure which
       // will be removed by using parseInt below. This prevents panic which has
@@ -1585,22 +1555,16 @@ UpdateService.prototype = {
    * @param   updates
    *          An array of available nsIUpdate items
    * @return  The nsIUpdate to offer.
    */
   selectUpdate: function AUS_selectUpdate(updates) {
     if (updates.length == 0)
       return null;
 
-    if (getDesiredChannel()) {
-      LOG("UpdateService:selectUpdate - skipping version checks for channel " +
-          "change request");
-      return updates[0];
-    }
-
     // Choose the newest of the available minor and major updates.
     var majorUpdate = null;
     var minorUpdate = null;
     var vc = Services.vc;
 
     updates.forEach(function(aUpdate) {
       // Ignore updates for older versions of the application and updates for
       // the same version of the application with the same build ID.
@@ -1949,17 +1913,17 @@ UpdateService.prototype = {
   downloadUpdate: function AUS_downloadUpdate(update, background) {
     if (!update)
       throw Cr.NS_ERROR_NULL_POINTER;
 
     // Don't download the update if the update's version is less than the
     // current application's version or the update's version is the same as the
     // application's version and the build ID is the same as the application's
     // build ID.
-    if (!getDesiredChannel() && update.appVersion &&
+    if (update.appVersion &&
         (Services.vc.compare(update.appVersion, Services.appinfo.version) < 0 ||
          update.buildID && update.buildID == Services.appinfo.appBuildID &&
          update.appVersion == Services.appinfo.version)) {
       LOG("UpdateService:downloadUpdate - canceling download of update since " +
           "it is for an earlier or same application version and build ID.\n" +
           "current application version: " + Services.appinfo.version + "\n" +
           "update application version : " + update.appVersion + "\n" +
           "current build ID: " + Services.appinfo.appBuildID + "\n" +
@@ -2146,19 +2110,18 @@ UpdateManager.prototype = {
     this._ensureUpdates();
     return this._updates.length;
   },
 
   /**
    * See nsIUpdateService.idl
    */
   get activeUpdate() {
-    let currentChannel = getDesiredChannel() || getUpdateChannel();
     if (this._activeUpdate &&
-        this._activeUpdate.channel != currentChannel) {
+        this._activeUpdate.channel != getUpdateChannel()) {
       // User switched channels, clear out any old active updates and remove
       // partial downloads
       this._activeUpdate = null;
       this.saveUpdates();
 
       // Destroy the updates directory, since we're done with it.
       cleanUpUpdatesDir();
     }
@@ -2323,20 +2286,16 @@ Checker.prototype = {
     url = url.replace(/%CHANNEL%/g, getUpdateChannel());
     url = url.replace(/%PLATFORM_VERSION%/g, Services.appinfo.platformVersion);
     url = url.replace(/%DISTRIBUTION%/g,
                       getDistributionPrefValue(PREF_APP_DISTRIBUTION));
     url = url.replace(/%DISTRIBUTION_VERSION%/g,
                       getDistributionPrefValue(PREF_APP_DISTRIBUTION_VERSION));
     url = url.replace(/\+/g, "%2B");
 
-    let desiredChannel = getDesiredChannel();
-    if (desiredChannel)
-      url += (url.indexOf("?") != -1 ? "&" : "?") + "newchannel=" + desiredChannel;
-
     if (force)
       url += (url.indexOf("?") != -1 ? "&" : "?") + "force=1";
 
     LOG("Checker:getUpdateURL - update URL: " + url);
     return url;
   },
 
   /**
@@ -2345,21 +2304,16 @@ Checker.prototype = {
   checkForUpdates: function UC_checkForUpdates(listener, force) {
     if (!listener)
       throw Cr.NS_ERROR_NULL_POINTER;
 
     var url = this.getUpdateURL(force);
     if (!url || (!this.enabled && !force))
       return;
 
-    // If the user changes the update channel there can be leftover files from
-    // a previous download so clean the updates directory for manual checks.
-    if (force)
-      cleanUpUpdatesDir();
-
     this._request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].
                     createInstance(Ci.nsISupports);
     // This is here to let unit test code override XHR
     if (this._request.wrappedJSObject) {
       this._request = this._request.wrappedJSObject;
     }
     this._request.open("GET", url, true);
     var allowNonBuiltIn = !getPref("getBoolPref",
@@ -2417,17 +2371,17 @@ Checker.prototype = {
       updateElement.QueryInterface(Ci.nsIDOMElement);
       try {
         var update = new Update(updateElement);
       } catch (e) {
         LOG("Checker:updates get - invalid <update/>, ignoring...");
         continue;
       }
       update.serviceURL = this.getUpdateURL(this._forced);
-      update.channel = getDesiredChannel() || getUpdateChannel();
+      update.channel = getUpdateChannel();
       updates.push(update);
     }
 
     return updates;
   },
 
   /**
    * Returns the status code for the XMLHttpRequest
@@ -2670,17 +2624,17 @@ Downloader.prototype = {
     // pre-selected for download, otherwise we must figure out which one
     // to select ourselves.
     var selectedPatch = update.selectedPatch;
 
     var state = readStatusFile(updateDir);
 
     // If this is a patch that we know about, then select it.  If it is a patch
     // that we do not know about, then remove it and use our default logic.
-    var useComplete = getDesiredChannel() ? true : false;
+    var useComplete = false;
     if (selectedPatch) {
       LOG("Downloader:_selectPatch - found existing patch with state: " +
           state);
       switch (state) {
       case STATE_DOWNLOADING:
         LOG("Downloader:_selectPatch - resuming download");
         return selectedPatch;
       case STATE_PENDING_SVC:
@@ -2917,18 +2871,16 @@ Downloader.prototype = {
         // download, since otherwise some kind of UI is already visible and
         // that UI will notify.
         if (this.background)
           shouldShowPrompt = true;
 
         // Tell the updater.exe we're ready to apply.
         writeStatusFile(getUpdatesDir(), state);
         writeVersionFile(getUpdatesDir(), this._update.appVersion);
-        if (getDesiredChannel())
-          createChannelChangeFile(getUpdatesDir());
         this._update.installDate = (new Date()).getTime();
         this._update.statusText = gUpdateBundle.GetStringFromName("installPending");
       }
       else {
         LOG("Downloader:onStopRequest - download verification failed");
         state = STATE_DOWNLOAD_FAILED;
 
         // TODO: use more informative error code here
--- a/toolkit/mozapps/update/test/shared.js
+++ b/toolkit/mozapps/update/test/shared.js
@@ -48,17 +48,16 @@ const PREF_APP_UPDATE_AUTO              
 const PREF_APP_UPDATE_BACKGROUNDERRORS    = "app.update.backgroundErrors";
 const PREF_APP_UPDATE_BACKGROUNDMAXERRORS = "app.update.backgroundMaxErrors";
 const PREF_APP_UPDATE_CERTS_BRANCH        = "app.update.certs.";
 const PREF_APP_UPDATE_CERT_CHECKATTRS     = "app.update.cert.checkAttributes";
 const PREF_APP_UPDATE_CERT_ERRORS         = "app.update.cert.errors";
 const PREF_APP_UPDATE_CERT_MAXERRORS      = "app.update.cert.maxErrors";
 const PREF_APP_UPDATE_CERT_REQUIREBUILTIN = "app.update.cert.requireBuiltIn";
 const PREF_APP_UPDATE_CHANNEL             = "app.update.channel";
-const PREF_APP_UPDATE_DESIREDCHANNEL      = "app.update.desiredChannel";
 const PREF_APP_UPDATE_ENABLED             = "app.update.enabled";
 const PREF_APP_UPDATE_IDLETIME            = "app.update.idletime";
 const PREF_APP_UPDATE_LOG                 = "app.update.log";
 const PREF_APP_UPDATE_NEVER_BRANCH        = "app.update.never.";
 const PREF_APP_UPDATE_PROMPTWAITTIME      = "app.update.promptWaitTime";
 const PREF_APP_UPDATE_SHOW_INSTALLED_UI   = "app.update.showInstalledUI";
 const PREF_APP_UPDATE_SILENT              = "app.update.silent";
 const PREF_APP_UPDATE_URL                 = "app.update.url";
@@ -105,16 +104,18 @@ const PR_CREATE_FILE = 0x08;
 const PR_APPEND      = 0x10;
 const PR_TRUNCATE    = 0x20;
 const PR_SYNC        = 0x40;
 const PR_EXCL        = 0x80;
 
 const PERMS_FILE      = 0644;
 const PERMS_DIRECTORY = 0755;
 
+const DEFAULT_UPDATE_VERSION = "999999.0";
+
 #include sharedUpdateXML.js
 
 AUS_Cu.import("resource://gre/modules/Services.jsm");
 AUS_Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 const URI_UPDATES_PROPERTIES = "chrome://mozapps/locale/update/updates.properties";
 const gUpdateBundle = Services.strings.createBundle(URI_UPDATES_PROPERTIES);
 
--- a/toolkit/mozapps/update/test/sharedUpdateXML.js
+++ b/toolkit/mozapps/update/test/sharedUpdateXML.js
@@ -188,23 +188,26 @@ function getLocalPatchString(aType, aURL
  * @param  aType (optional)
  *         The update's type which should be major or minor. If not specified it
  *         will default to 'major'.
  * @param  aName (optional)
  *         The update's name.
  *         If not specified it will default to 'App Update Test'.
  * @param  aDisplayVersion (optional)
  *         The update's display version.
- *         If not specified it will default to 'version 99.0'.
+ *         If not specified it will default to 'version #' where # is the value
+ *         of DEFAULT_UPDATE_VERSION.
  * @param  aAppVersion (optional)
  *         The update's application version.
- *         If not specified it will default to '99.0'.
+ *         If not specified it will default to the value of
+ *         DEFAULT_UPDATE_VERSION.
  * @param  aPlatformVersion (optional)
  *         The update's platform version.
- *         If not specified it will default to '99.0'.
+ *         If not specified it will default to the value of
+ *         DEFAULT_UPDATE_VERSION.
  * @param  aBuildID (optional)
  *         The update's build id.
  *         If not specified it will default to '20080811053724'.
  * @param  aDetailsURL (optional)
  *         The update's details url.
  *         If not specified it will default to 'http://test_details/' due to due
  *         to bug 470244.
  * @param  aBillboardURL (optional)
@@ -248,34 +251,38 @@ function getUpdateString(aType, aName, a
                          aShowSurvey, aVersion, aExtensionVersion, aCustom1,
                          aCustom2) {
   let type = aType ? aType : "major";
   let name = aName ? aName : "App Update Test";
   let displayVersion = "";
   if (aDisplayVersion || !aVersion) {
     displayVersion = "displayVersion=\"" +
                      (aDisplayVersion ? aDisplayVersion
-                                      : "version 99.0") + "\" ";
+                                      : "version " + DEFAULT_UPDATE_VERSION) +
+                     "\" ";
   }
   // version has been deprecated in favor of displayVersion but it still needs
   // to be tested for forward compatibility.
   let version = aVersion ? "version=\"" + aVersion + "\" " : "";
   let appVersion = "";
   if (aAppVersion || !aExtensionVersion) {
-    appVersion = "appVersion=\"" + (aAppVersion ? aAppVersion : "99.0") + "\" ";
+    appVersion = "appVersion=\"" +
+                 (aAppVersion ? aAppVersion : DEFAULT_UPDATE_VERSION) +
+                 "\" ";
   }
   // extensionVersion has been deprecated in favor of appVersion but it still
   // needs to be tested for forward compatibility.
   let extensionVersion = aExtensionVersion ? "extensionVersion=\"" +
                                              aExtensionVersion + "\" "
                                            : "";
   let platformVersion = "";
   if (aPlatformVersion) {
     platformVersion = "platformVersion=\"" +
-                      (aPlatformVersion ? aPlatformVersion : "99.0") + "\" ";
+                      (aPlatformVersion ? aPlatformVersion
+                                        : DEFAULT_UPDATE_VERSION) + "\" ";
   }
   let buildID = aBuildID ? aBuildID : "20080811053724";
   // XXXrstrong - not specifying a detailsURL will cause a leak due to bug 470244
 //   let detailsURL = aDetailsURL ? "detailsURL=\"" + aDetailsURL + "\" " : "";
   let detailsURL = "detailsURL=\"" +
                    (aDetailsURL ? aDetailsURL
                                 : "http://test_details/") + "\" ";
   let billboardURL = aBillboardURL ? "billboardURL=\"" +
deleted file mode 100644
--- a/toolkit/mozapps/update/test/unit/data/complete_cc_log_success
+++ /dev/null
@@ -1,347 +0,0 @@
-DoUpdate: changing update channel
-UPDATE TYPE complete
-PREPARE REMOVEFILE precomplete
-PREPARE REMOVEFILE a/b/searchplugins/searchpluginstext0
-PREPARE REMOVEFILE a/b/searchplugins/searchpluginspng0.png
-PREPARE REMOVEFILE a/b/removed-files
-PREPARE REMOVEFILE a/b/extensions/extensions1/extensions1png1.png
-PREPARE REMOVEFILE a/b/extensions/extensions0/extensions0text0
-PREPARE REMOVEFILE a/b/exe0.exe
-PREPARE REMOVEFILE a/b/defaults/pref/channel-prefs.js
-PREPARE REMOVEFILE a/b/2/20/20text0
-PREPARE REMOVEFILE a/b/2/20/20png0.png
-PREPARE REMOVEFILE a/b/0/0exe0.exe
-PREPARE REMOVEFILE a/b/0/00/00text0
-PREPARE REMOVEDIR a/b/searchplugins/
-PREPARE REMOVEDIR a/b/extensions/extensions1/
-PREPARE REMOVEDIR a/b/extensions/extensions0/
-PREPARE REMOVEDIR a/b/extensions/
-PREPARE REMOVEDIR a/b/defaults/pref/
-PREPARE REMOVEDIR a/b/defaults/
-PREPARE REMOVEDIR a/b/2/20/
-PREPARE REMOVEDIR a/b/2/
-PREPARE REMOVEDIR a/b/0/00/
-PREPARE REMOVEDIR a/b/0/
-PREPARE REMOVEDIR a/b/
-PREPARE REMOVEDIR a/
-PREPARE ADD a/b/defaults/pref/channel-prefs.js
-PREPARE ADD precomplete
-PREPARE ADD a/b/searchplugins/searchpluginstext0
-PREPARE ADD a/b/searchplugins/searchpluginspng1.png
-PREPARE ADD a/b/searchplugins/searchpluginspng0.png
-PREPARE ADD a/b/removed-files
-PREPARE ADD a/b/extensions/extensions1/extensions1text0
-PREPARE ADD a/b/extensions/extensions1/extensions1png1.png
-PREPARE ADD a/b/extensions/extensions1/extensions1png0.png
-PREPARE ADD a/b/extensions/extensions0/extensions0text0
-PREPARE ADD a/b/extensions/extensions0/extensions0png1.png
-PREPARE ADD a/b/extensions/extensions0/extensions0png0.png
-PREPARE ADD a/b/exe0.exe
-PREPARE ADD a/b/1/10/10text0
-PREPARE ADD a/b/0/0exe0.exe
-PREPARE ADD a/b/0/00/00text1
-PREPARE ADD a/b/0/00/00text0
-PREPARE ADD a/b/0/00/00png0.png
-PREPARE REMOVEDIR a/b/9/99/
-PREPARE REMOVEDIR a/b/9/99/
-PREPARE REMOVEDIR a/b/9/98/
-PREPARE REMOVEFILE a/b/9/97/970/97xtext0
-PREPARE REMOVEFILE a/b/9/97/970/97xtext1
-PREPARE REMOVEDIR a/b/9/97/970/
-PREPARE REMOVEFILE a/b/9/97/971/97xtext0
-PREPARE REMOVEFILE a/b/9/97/971/97xtext1
-PREPARE REMOVEDIR a/b/9/97/971/
-PREPARE REMOVEDIR a/b/9/97/
-PREPARE REMOVEFILE a/b/9/96/96text0
-PREPARE REMOVEFILE a/b/9/96/96text1
-PREPARE REMOVEDIR a/b/9/96/
-PREPARE REMOVEDIR a/b/9/95/
-PREPARE REMOVEDIR a/b/9/95/
-PREPARE REMOVEDIR a/b/9/94/
-PREPARE REMOVEDIR a/b/9/94/
-PREPARE REMOVEDIR a/b/9/93/
-PREPARE REMOVEDIR a/b/9/92/
-PREPARE REMOVEDIR a/b/9/91/
-PREPARE REMOVEDIR a/b/9/90/
-PREPARE REMOVEDIR a/b/9/90/
-PREPARE REMOVEDIR a/b/8/89/
-PREPARE REMOVEDIR a/b/8/89/
-PREPARE REMOVEDIR a/b/8/88/
-PREPARE REMOVEFILE a/b/8/87/870/87xtext0
-PREPARE REMOVEFILE a/b/8/87/870/87xtext1
-PREPARE REMOVEDIR a/b/8/87/870/
-PREPARE REMOVEFILE a/b/8/87/871/87xtext0
-PREPARE REMOVEFILE a/b/8/87/871/87xtext1
-PREPARE REMOVEDIR a/b/8/87/871/
-PREPARE REMOVEDIR a/b/8/87/
-PREPARE REMOVEFILE a/b/8/86/86text0
-PREPARE REMOVEFILE a/b/8/86/86text1
-PREPARE REMOVEDIR a/b/8/86/
-PREPARE REMOVEDIR a/b/8/85/
-PREPARE REMOVEDIR a/b/8/85/
-PREPARE REMOVEDIR a/b/8/84/
-PREPARE REMOVEDIR a/b/8/84/
-PREPARE REMOVEDIR a/b/8/83/
-PREPARE REMOVEDIR a/b/8/82/
-PREPARE REMOVEDIR a/b/8/81/
-PREPARE REMOVEDIR a/b/8/80/
-PREPARE REMOVEDIR a/b/8/80/
-PREPARE REMOVEFILE a/b/7/70/7xtest.exe
-PREPARE REMOVEFILE a/b/7/70/7xtext0
-PREPARE REMOVEFILE a/b/7/70/7xtext1
-PREPARE REMOVEDIR a/b/7/70/
-PREPARE REMOVEFILE a/b/7/71/7xtest.exe
-PREPARE REMOVEFILE a/b/7/71/7xtext0
-PREPARE REMOVEFILE a/b/7/71/7xtext1
-PREPARE REMOVEDIR a/b/7/71/
-PREPARE REMOVEDIR a/b/7/
-PREPARE REMOVEDIR a/b/6/
-PREPARE REMOVEFILE a/b/5/5text1
-PREPARE REMOVEFILE a/b/5/5text0
-PREPARE REMOVEFILE a/b/5/5test.exe
-PREPARE REMOVEFILE a/b/5/5text0
-PREPARE REMOVEFILE a/b/5/5text1
-PREPARE REMOVEDIR a/b/5/
-PREPARE REMOVEFILE a/b/4/4text1
-PREPARE REMOVEFILE a/b/4/4text0
-PREPARE REMOVEDIR a/b/4/
-PREPARE REMOVEFILE a/b/3/3text1
-PREPARE REMOVEFILE a/b/3/3text0
-EXECUTE REMOVEFILE precomplete
-EXECUTE REMOVEFILE a/b/searchplugins/searchpluginstext0
-EXECUTE REMOVEFILE a/b/searchplugins/searchpluginspng0.png
-EXECUTE REMOVEFILE a/b/removed-files
-EXECUTE REMOVEFILE a/b/extensions/extensions1/extensions1png1.png
-EXECUTE REMOVEFILE a/b/extensions/extensions0/extensions0text0
-EXECUTE REMOVEFILE a/b/exe0.exe
-EXECUTE REMOVEFILE a/b/defaults/pref/channel-prefs.js
-EXECUTE REMOVEFILE a/b/2/20/20text0
-EXECUTE REMOVEFILE a/b/2/20/20png0.png
-EXECUTE REMOVEFILE a/b/0/0exe0.exe
-EXECUTE REMOVEFILE a/b/0/00/00text0
-EXECUTE REMOVEDIR a/b/searchplugins/
-EXECUTE REMOVEDIR a/b/extensions/extensions1/
-EXECUTE REMOVEDIR a/b/extensions/extensions0/
-EXECUTE REMOVEDIR a/b/extensions/
-EXECUTE REMOVEDIR a/b/defaults/pref/
-EXECUTE REMOVEDIR a/b/defaults/
-EXECUTE REMOVEDIR a/b/2/20/
-EXECUTE REMOVEDIR a/b/2/
-EXECUTE REMOVEDIR a/b/0/00/
-EXECUTE REMOVEDIR a/b/0/
-EXECUTE REMOVEDIR a/b/
-EXECUTE REMOVEDIR a/
-EXECUTE ADD a/b/defaults/pref/channel-prefs.js
-EXECUTE ADD precomplete
-EXECUTE ADD a/b/searchplugins/searchpluginstext0
-EXECUTE ADD a/b/searchplugins/searchpluginspng1.png
-EXECUTE ADD a/b/searchplugins/searchpluginspng0.png
-EXECUTE ADD a/b/removed-files
-EXECUTE ADD a/b/extensions/extensions1/extensions1text0
-EXECUTE ADD a/b/extensions/extensions1/extensions1png1.png
-EXECUTE ADD a/b/extensions/extensions1/extensions1png0.png
-EXECUTE ADD a/b/extensions/extensions0/extensions0text0
-EXECUTE ADD a/b/extensions/extensions0/extensions0png1.png
-EXECUTE ADD a/b/extensions/extensions0/extensions0png0.png
-EXECUTE ADD a/b/exe0.exe
-EXECUTE ADD a/b/1/10/10text0
-EXECUTE ADD a/b/0/0exe0.exe
-EXECUTE ADD a/b/0/00/00text1
-EXECUTE ADD a/b/0/00/00text0
-EXECUTE ADD a/b/0/00/00png0.png
-EXECUTE REMOVEDIR a/b/9/99/
-EXECUTE REMOVEDIR a/b/9/99/
-EXECUTE REMOVEDIR a/b/9/98/
-EXECUTE REMOVEFILE a/b/9/97/970/97xtext0
-EXECUTE REMOVEFILE a/b/9/97/970/97xtext1
-EXECUTE REMOVEDIR a/b/9/97/970/
-EXECUTE REMOVEFILE a/b/9/97/971/97xtext0
-EXECUTE REMOVEFILE a/b/9/97/971/97xtext1
-EXECUTE REMOVEDIR a/b/9/97/971/
-EXECUTE REMOVEDIR a/b/9/97/
-EXECUTE REMOVEFILE a/b/9/96/96text0
-EXECUTE REMOVEFILE a/b/9/96/96text1
-EXECUTE REMOVEDIR a/b/9/96/
-EXECUTE REMOVEDIR a/b/9/95/
-EXECUTE REMOVEDIR a/b/9/95/
-EXECUTE REMOVEDIR a/b/9/94/
-EXECUTE REMOVEDIR a/b/9/94/
-EXECUTE REMOVEDIR a/b/9/93/
-EXECUTE REMOVEDIR a/b/9/92/
-EXECUTE REMOVEDIR a/b/9/91/
-EXECUTE REMOVEDIR a/b/9/90/
-EXECUTE REMOVEDIR a/b/9/90/
-EXECUTE REMOVEDIR a/b/8/89/
-EXECUTE REMOVEDIR a/b/8/89/
-EXECUTE REMOVEDIR a/b/8/88/
-EXECUTE REMOVEFILE a/b/8/87/870/87xtext0
-EXECUTE REMOVEFILE a/b/8/87/870/87xtext1
-EXECUTE REMOVEDIR a/b/8/87/870/
-EXECUTE REMOVEFILE a/b/8/87/871/87xtext0
-EXECUTE REMOVEFILE a/b/8/87/871/87xtext1
-EXECUTE REMOVEDIR a/b/8/87/871/
-EXECUTE REMOVEDIR a/b/8/87/
-EXECUTE REMOVEFILE a/b/8/86/86text0
-EXECUTE REMOVEFILE a/b/8/86/86text1
-EXECUTE REMOVEDIR a/b/8/86/
-EXECUTE REMOVEDIR a/b/8/85/
-EXECUTE REMOVEDIR a/b/8/85/
-EXECUTE REMOVEDIR a/b/8/84/
-EXECUTE REMOVEDIR a/b/8/84/
-EXECUTE REMOVEDIR a/b/8/83/
-EXECUTE REMOVEDIR a/b/8/82/
-EXECUTE REMOVEDIR a/b/8/81/
-EXECUTE REMOVEDIR a/b/8/80/
-EXECUTE REMOVEDIR a/b/8/80/
-EXECUTE REMOVEFILE a/b/7/70/7xtest.exe
-EXECUTE REMOVEFILE a/b/7/70/7xtext0
-EXECUTE REMOVEFILE a/b/7/70/7xtext1
-EXECUTE REMOVEDIR a/b/7/70/
-EXECUTE REMOVEFILE a/b/7/71/7xtest.exe
-EXECUTE REMOVEFILE a/b/7/71/7xtext0
-EXECUTE REMOVEFILE a/b/7/71/7xtext1
-EXECUTE REMOVEDIR a/b/7/71/
-EXECUTE REMOVEDIR a/b/7/
-EXECUTE REMOVEDIR a/b/6/
-EXECUTE REMOVEFILE a/b/5/5text1
-EXECUTE REMOVEFILE a/b/5/5text0
-EXECUTE REMOVEFILE a/b/5/5test.exe
-EXECUTE REMOVEFILE a/b/5/5text0
-file cannot be removed because it does not exist; skipping
-EXECUTE REMOVEFILE a/b/5/5text1
-file cannot be removed because it does not exist; skipping
-EXECUTE REMOVEDIR a/b/5/
-EXECUTE REMOVEFILE a/b/4/4text1
-EXECUTE REMOVEFILE a/b/4/4text0
-EXECUTE REMOVEDIR a/b/4/
-EXECUTE REMOVEFILE a/b/3/3text1
-EXECUTE REMOVEFILE a/b/3/3text0
-FINISH REMOVEFILE precomplete
-FINISH REMOVEFILE a/b/searchplugins/searchpluginstext0
-FINISH REMOVEFILE a/b/searchplugins/searchpluginspng0.png
-FINISH REMOVEFILE a/b/removed-files
-FINISH REMOVEFILE a/b/extensions/extensions1/extensions1png1.png
-FINISH REMOVEFILE a/b/extensions/extensions0/extensions0text0
-FINISH REMOVEFILE a/b/exe0.exe
-FINISH REMOVEFILE a/b/defaults/pref/channel-prefs.js
-FINISH REMOVEFILE a/b/2/20/20text0
-FINISH REMOVEFILE a/b/2/20/20png0.png
-FINISH REMOVEFILE a/b/0/0exe0.exe
-FINISH REMOVEFILE a/b/0/00/00text0
-FINISH REMOVEDIR a/b/searchplugins/
-removing directory: a/b/searchplugins/, rv: 0
-FINISH REMOVEDIR a/b/extensions/extensions1/
-removing directory: a/b/extensions/extensions1/, rv: 0
-FINISH REMOVEDIR a/b/extensions/extensions0/
-removing directory: a/b/extensions/extensions0/, rv: 0
-FINISH REMOVEDIR a/b/extensions/
-removing directory: a/b/extensions/, rv: 0
-FINISH REMOVEDIR a/b/defaults/pref/
-removing directory: a/b/defaults/pref/, rv: 0
-FINISH REMOVEDIR a/b/defaults/
-removing directory: a/b/defaults/, rv: 0
-FINISH REMOVEDIR a/b/2/20/
-FINISH REMOVEDIR a/b/2/
-FINISH REMOVEDIR a/b/0/00/
-removing directory: a/b/0/00/, rv: 0
-FINISH REMOVEDIR a/b/0/
-removing directory: a/b/0/, rv: 0
-FINISH REMOVEDIR a/b/
-removing directory: a/b/, rv: 0
-FINISH REMOVEDIR a/
-removing directory: a/, rv: 0
-FINISH ADD a/b/defaults/pref/channel-prefs.js
-FINISH ADD precomplete
-FINISH ADD a/b/searchplugins/searchpluginstext0
-FINISH ADD a/b/searchplugins/searchpluginspng1.png
-FINISH ADD a/b/searchplugins/searchpluginspng0.png
-FINISH ADD a/b/removed-files
-FINISH ADD a/b/extensions/extensions1/extensions1text0
-FINISH ADD a/b/extensions/extensions1/extensions1png1.png
-FINISH ADD a/b/extensions/extensions1/extensions1png0.png
-FINISH ADD a/b/extensions/extensions0/extensions0text0
-FINISH ADD a/b/extensions/extensions0/extensions0png1.png
-FINISH ADD a/b/extensions/extensions0/extensions0png0.png
-FINISH ADD a/b/exe0.exe
-FINISH ADD a/b/1/10/10text0
-FINISH ADD a/b/0/0exe0.exe
-FINISH ADD a/b/0/00/00text1
-FINISH ADD a/b/0/00/00text0
-FINISH ADD a/b/0/00/00png0.png
-FINISH REMOVEDIR a/b/9/99/
-FINISH REMOVEDIR a/b/9/99/
-directory no longer exists; skipping
-FINISH REMOVEDIR a/b/9/98/
-FINISH REMOVEFILE a/b/9/97/970/97xtext0
-FINISH REMOVEFILE a/b/9/97/970/97xtext1
-FINISH REMOVEDIR a/b/9/97/970/
-FINISH REMOVEFILE a/b/9/97/971/97xtext0
-FINISH REMOVEFILE a/b/9/97/971/97xtext1
-FINISH REMOVEDIR a/b/9/97/971/
-FINISH REMOVEDIR a/b/9/97/
-FINISH REMOVEFILE a/b/9/96/96text0
-FINISH REMOVEFILE a/b/9/96/96text1
-FINISH REMOVEDIR a/b/9/96/
-FINISH REMOVEDIR a/b/9/95/
-FINISH REMOVEDIR a/b/9/95/
-directory no longer exists; skipping
-FINISH REMOVEDIR a/b/9/94/
-FINISH REMOVEDIR a/b/9/94/
-directory no longer exists; skipping
-FINISH REMOVEDIR a/b/9/93/
-FINISH REMOVEDIR a/b/9/92/
-removing directory: a/b/9/92/, rv: 0
-FINISH REMOVEDIR a/b/9/91/
-removing directory: a/b/9/91/, rv: 0
-FINISH REMOVEDIR a/b/9/90/
-FINISH REMOVEDIR a/b/9/90/
-directory no longer exists; skipping
-FINISH REMOVEDIR a/b/8/89/
-FINISH REMOVEDIR a/b/8/89/
-directory no longer exists; skipping
-FINISH REMOVEDIR a/b/8/88/
-FINISH REMOVEFILE a/b/8/87/870/87xtext0
-FINISH REMOVEFILE a/b/8/87/870/87xtext1
-FINISH REMOVEDIR a/b/8/87/870/
-FINISH REMOVEFILE a/b/8/87/871/87xtext0
-FINISH REMOVEFILE a/b/8/87/871/87xtext1
-FINISH REMOVEDIR a/b/8/87/871/
-FINISH REMOVEDIR a/b/8/87/
-FINISH REMOVEFILE a/b/8/86/86text0
-FINISH REMOVEFILE a/b/8/86/86text1
-FINISH REMOVEDIR a/b/8/86/
-FINISH REMOVEDIR a/b/8/85/
-FINISH REMOVEDIR a/b/8/85/
-directory no longer exists; skipping
-FINISH REMOVEDIR a/b/8/84/
-FINISH REMOVEDIR a/b/8/84/
-directory no longer exists; skipping
-FINISH REMOVEDIR a/b/8/83/
-FINISH REMOVEDIR a/b/8/82/
-removing directory: a/b/8/82/, rv: 0
-FINISH REMOVEDIR a/b/8/81/
-removing directory: a/b/8/81/, rv: 0
-FINISH REMOVEDIR a/b/8/80/
-FINISH REMOVEDIR a/b/8/80/
-directory no longer exists; skipping
-FINISH REMOVEFILE a/b/7/70/7xtest.exe
-FINISH REMOVEFILE a/b/7/70/7xtext0
-FINISH REMOVEFILE a/b/7/70/7xtext1
-FINISH REMOVEDIR a/b/7/70/
-FINISH REMOVEFILE a/b/7/71/7xtest.exe
-FINISH REMOVEFILE a/b/7/71/7xtext0
-FINISH REMOVEFILE a/b/7/71/7xtext1
-FINISH REMOVEDIR a/b/7/71/
-FINISH REMOVEDIR a/b/7/
-FINISH REMOVEDIR a/b/6/
-FINISH REMOVEFILE a/b/5/5text1
-FINISH REMOVEFILE a/b/5/5text0
-FINISH REMOVEFILE a/b/5/5test.exe
-FINISH REMOVEDIR a/b/5/
-FINISH REMOVEFILE a/b/4/4text1
-FINISH REMOVEFILE a/b/4/4text0
-FINISH REMOVEDIR a/b/4/
-FINISH REMOVEFILE a/b/3/3text1
-FINISH REMOVEFILE a/b/3/3text0
-succeeded
-calling QuitProgressUI
--- a/toolkit/mozapps/update/test/unit/data/partial_log_failure
+++ b/toolkit/mozapps/update/test/unit/data/partial_log_failure
@@ -1,11 +1,9 @@
-DoUpdate: changing update channel
 UPDATE TYPE partial
-DoUpdate: unable to change channel with a partial update
 PREPARE ADD precomplete
 PREPARE ADD a/b/searchplugins/searchpluginstext0
 PREPARE PATCH a/b/searchplugins/searchpluginspng1.png
 PREPARE PATCH a/b/searchplugins/searchpluginspng0.png
 PREPARE ADD a/b/extensions/extensions1/extensions1text0
 PREPARE PATCH a/b/extensions/extensions1/extensions1png1.png
 PREPARE PATCH a/b/extensions/extensions1/extensions1png0.png
 PREPARE ADD a/b/extensions/extensions0/extensions0text0
--- a/toolkit/mozapps/update/test/unit/data/partial_log_success
+++ b/toolkit/mozapps/update/test/unit/data/partial_log_success
@@ -1,11 +1,9 @@
-DoUpdate: changing update channel
 UPDATE TYPE partial
-DoUpdate: unable to change channel with a partial update
 PREPARE ADD precomplete
 PREPARE ADD a/b/searchplugins/searchpluginstext0
 PREPARE PATCH a/b/searchplugins/searchpluginspng1.png
 PREPARE PATCH a/b/searchplugins/searchpluginspng0.png
 PREPARE ADD a/b/extensions/extensions1/extensions1text0
 PREPARE PATCH a/b/extensions/extensions1/extensions1png1.png
 PREPARE PATCH a/b/extensions/extensions1/extensions1png0.png
 PREPARE ADD a/b/extensions/extensions0/extensions0text0
--- a/toolkit/mozapps/update/test/unit/head_update.js.in
+++ b/toolkit/mozapps/update/test/unit/head_update.js.in
@@ -86,17 +86,16 @@ const URL_PATH = "data";
 const APPLY_TO_DIR_SUFFIX = "_applyToDir/";
 const HELPER_BIN_FILE = "TestAUSHelper" + BIN_SUFFIX;
 const MAR_COMPLETE_FILE = "data/complete.mar";
 const MAR_PARTIAL_FILE = "data/partial.mar";
 const UPDATER_BIN_FILE = "updater" + BIN_SUFFIX;
 const MAINTENANCE_SERVICE_BIN_FILE = "maintenanceservice.exe";
 const MAINTENANCE_SERVICE_INSTALLER_BIN_FILE = "maintenanceservice_installer.exe";
 const UPDATES_DIR_SUFFIX = "_mar";
-const CHANNEL_CHANGE_FILE = "channelchange";
 
 const LOG_COMPLETE_SUCCESS = "data/complete_log_success";
 const LOG_COMPLETE_CC_SUCCESS = "data/complete_cc_log_success";
 
 const LOG_PARTIAL_SUCCESS = "data/partial_log_success";
 const LOG_PARTIAL_FAILURE = "data/partial_log_failure";
 
 const ERR_CALLBACK_FILE_IN_USE = "NS_main: file in use - failed to " +
@@ -708,16 +707,20 @@ function runUpdateUsingService(aInitialS
   let updatesDir = aUpdatesDir || do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
   let file = updatesDir.clone();
   file.append(FILE_UPDATE_STATUS);
   writeFile(file, aInitialStatus + "\n");
 
   // sanity check
   do_check_eq(readStatusFile(updatesDir), aInitialStatus);
 
+  file = updatesDir.clone();
+  file.append(FILE_UPDATE_VERSION);
+  writeFile(file, DEFAULT_UPDATE_VERSION + "\n");
+
   gServiceLaunchedCallbackArgs = [
     "-no-remote",
     "-process-updates",
     "-dump-args",
     appArgsLogPath
   ];
 
   let launchBin = getLaunchBin();
--- a/toolkit/mozapps/update/test/unit/test_0030_general.js
+++ b/toolkit/mozapps/update/test/unit/test_0030_general.js
@@ -90,27 +90,22 @@ function run_test_helper_pt1(aMsg, aExpe
   gNextRunFunc = aNextRunFunc;
   gExpectedStatusResult = aExpectedStatusResult;
   logTestInfo(aMsg, Components.stack.caller);
   gUpdateChecker.checkForUpdates(updateCheckListener, true);
 }
 
 function check_test_helper_pt1_1() {
   do_check_eq(gUpdateCount, 1);
-  let channelchange = getUpdatesDir();
-  channelchange.append("0");
-  channelchange.append(CHANNEL_CHANGE_FILE);
-  do_check_false(channelchange.exists());
   gCheckFunc = check_test_helper_pt1_2;
   var bestUpdate = gAUS.selectUpdate(gUpdates, gUpdateCount);
   var state = gAUS.downloadUpdate(bestUpdate, false);
   if (state == STATE_NONE || state == STATE_FAILED)
     do_throw("nsIApplicationUpdateService:downloadUpdate returned " + state);
   gAUS.addDownloadListener(downloadListener);
-  channelchange.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
 }
 
 function check_test_helper_pt1_2() {
   do_check_eq(gStatusResult, gExpectedStatusResult);
   gAUS.removeDownloadListener(downloadListener);
   gNextRunFunc();
 }
 
--- a/toolkit/mozapps/update/test/unit/test_0040_general.js
+++ b/toolkit/mozapps/update/test/unit/test_0040_general.js
@@ -423,57 +423,10 @@ function run_test_pt13() {
   logTestInfo("testing url with force param that already has a param - " + url);
   logTestInfo("testing url constructed that has a parameter - " + url);
   setUpdateURLOverride(url);
   gUpdateChecker.checkForUpdates(updateCheckListener, true);
 }
 
 function check_test_pt13() {
   do_check_eq(getResult(gRequestURL), "?extra=param&force=1");
-  run_test_pt14();
-}
-
-// url with newchannel param that doesn't already have a param
-function run_test_pt14() {
-  gCheckFunc = check_test_pt14;
-  Services.prefs.setCharPref(PREF_APP_UPDATE_DESIREDCHANNEL, "testchannel");
-  var url = URL_PREFIX;
-  logTestInfo("testing url with newchannel param that doesn't already have a " +
-              "param - " + url);
-  setUpdateURLOverride(url);
-  gUpdateChecker.checkForUpdates(updateCheckListener, false);
-}
-
-function check_test_pt14() {
-  do_check_eq(getResult(gRequestURL), "?newchannel=testchannel");
-  run_test_pt15();
-}
-
-// url with newchannel param that already has a param
-function run_test_pt15() {
-  gCheckFunc = check_test_pt15;
-  Services.prefs.setCharPref(PREF_APP_UPDATE_DESIREDCHANNEL, "testchannel");
-  var url = URL_PREFIX + "?extra=param";
-  logTestInfo("testing url with newchannel param that already has a " +
-              "param - " + url);
-  setUpdateURLOverride(url);
-  gUpdateChecker.checkForUpdates(updateCheckListener, false);
-}
-
-function check_test_pt15() {
-  do_check_eq(getResult(gRequestURL), "?extra=param&newchannel=testchannel");
-  run_test_pt16();
-}
-
-// url with force and newchannel params
-function run_test_pt16() {
-  gCheckFunc = check_test_pt16;
-  Services.prefs.setCharPref(PREF_APP_UPDATE_DESIREDCHANNEL, "testchannel");
-  var url = URL_PREFIX;
-  logTestInfo("testing url with force and newchannel params - " + url);
-  setUpdateURLOverride(url);
-  gUpdateChecker.checkForUpdates(updateCheckListener, true);
-}
-
-function check_test_pt16() {
-  do_check_eq(getResult(gRequestURL), "?newchannel=testchannel&force=1");
   do_test_finished();
 }
--- a/toolkit/mozapps/update/test/unit/test_0070_update_dir_cleanup.js
+++ b/toolkit/mozapps/update/test/unit/test_0070_update_dir_cleanup.js
@@ -53,21 +53,16 @@ function run_test() {
   writeStatusFile(STATE_SUCCEEDED);
 
   var dir = getUpdatesDir();
   var log = dir.clone();
   log.append("0");
   log.append(FILE_UPDATE_LOG);
   writeFile(log, "Last Update Log");
 
-  let channelchange = dir.clone();
-  channelchange.append("0");
-  channelchange.append(CHANNEL_CHANGE_FILE);
-  channelchange.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
-
   standardInit();
 
   logTestInfo("testing " + log.path + " shouldn't exist");
   do_check_false(log.exists());
 
   log = dir.clone();
   log.append(FILE_LAST_LOG);
   logTestInfo("testing " + log.path + " should exist");
@@ -80,17 +75,14 @@ function run_test() {
   log.append(FILE_BACKUP_LOG);
   logTestInfo("testing " + log.path + " shouldn't exist");
   do_check_false(log.exists());
 
   dir.append("0");
   logTestInfo("testing " + dir.path + " should exist (bug 512994)");
   do_check_true(dir.exists());
 
-  logTestInfo("testing " + channelchange.path + " shouldn't exist");
-  do_check_false(channelchange.exists());
-
   do_test_finished();
 }
 
 function end_test() {
   cleanUp();
 }
--- a/toolkit/mozapps/update/test/unit/test_0110_general.js
+++ b/toolkit/mozapps/update/test/unit/test_0110_general.js
@@ -44,18 +44,17 @@ const TEST_ID = "0110";
 // difference in the last modified time.
 const MAX_TIME_DIFFERENCE = 60000;
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0767,
   comparePerms     : 0767
--- a/toolkit/mozapps/update/test/unit/test_0111_general.js
+++ b/toolkit/mozapps/update/test/unit/test_0111_general.js
@@ -44,18 +44,17 @@ const TEST_ID = "0111";
 // difference in the last modified time.
 const MAX_TIME_DIFFERENCE = 60000;
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0644,
   comparePerms     : null
@@ -274,22 +273,16 @@ function run_test() {
   do_test_pending();
   do_register_cleanup(cleanupUpdaterTest);
 
   setupUpdaterTest(MAR_PARTIAL_FILE);
 
   let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
   let applyToDir = getApplyDirFile();
 
-  // Check that trying to change channels for a partial update doesn't change
-  // the update channel (the channel-prefs.js file should not be updated).
-  let force = updatesDir.clone();
-  force.append(CHANNEL_CHANGE_FILE);
-  force.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
-
   // For Mac OS X set the last modified time for the root directory to a date in
   // the past to test that the last modified time is updated on all updates since
   // the precomplete file in the root of the bundle is renamed, etc. (bug 600098).
   if (IS_MACOSX) {
     let now = Date.now();
     let yesterday = now - (1000 * 60 * 60 * 24);
     applyToDir.lastModifiedTime = yesterday;
   }
--- a/toolkit/mozapps/update/test/unit/test_0112_general.js
+++ b/toolkit/mozapps/update/test/unit/test_0112_general.js
@@ -44,18 +44,17 @@ const TEST_ID = "0112";
 // difference in the last modified time.
 const MAX_TIME_DIFFERENCE = 60000;
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0767,
   comparePerms     : null
@@ -267,22 +266,16 @@ function run_test() {
   do_test_pending();
   do_register_cleanup(cleanupUpdaterTest);
 
   setupUpdaterTest(MAR_PARTIAL_FILE);
 
   let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
   let applyToDir = getApplyDirFile();
 
-  // Check that trying to change channels for a failed partial update doesn't
-  // change the update channel (the channel-prefs.js file should not be updated).
-  let force = updatesDir.clone();
-  force.append(CHANNEL_CHANGE_FILE);
-  force.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
-
   // For Mac OS X set the last modified time for the root directory to a date in
   // the past to test that the last modified time is updated on all updates since
   // the precomplete file in the root of the bundle is renamed, etc. (bug 600098).
   if (IS_MACOSX) {
     let now = Date.now();
     let yesterday = now - (1000 * 60 * 60 * 24);
     applyToDir.lastModifiedTime = yesterday;
   }
deleted file mode 100644
--- a/toolkit/mozapps/update/test/unit/test_0120_channelChange_complete.js
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-/* Channel change complete MAR file patch apply test */
-
-const TEST_ID = "0120";
-// All we care about is that the last modified time has changed so that Mac OS
-// X Launch Services invalidates its cache so the test allows up to one minute
-// difference in the last modified time.
-const MAX_TIME_DIFFERENCE = 60000;
-
-// The files are in the same order as they are applied from the mar
-const TEST_FILES = [
-{
-  description      : "Added by update.manifest (add-cc)",
-  fileName         : "channel-prefs.js",
-  relPathDir       : "a/b/defaults/pref/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0767,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "precomplete",
-  relPathDir       : "",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial_precomplete",
-  compareFile      : "data/complete_precomplete",
-  originalPerms    : 0755,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "searchpluginstext0",
-  relPathDir       : "a/b/searchplugins/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0775,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "searchpluginspng1.png",
-  relPathDir       : "a/b/searchplugins/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "searchpluginspng0.png",
-  relPathDir       : "a/b/searchplugins/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0666,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "removed-files",
-  relPathDir       : "a/b/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial_removed-files",
-  compareFile      : "data/complete_removed-files",
-  originalPerms    : 0666,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions1text0",
-  relPathDir       : "a/b/extensions/extensions1/",
-  originalContents : null,
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions1png1.png",
-  relPathDir       : "a/b/extensions/extensions1/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0666,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions1png0.png",
-  relPathDir       : "a/b/extensions/extensions1/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions0text0",
-  relPathDir       : "a/b/extensions/extensions0/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions0png1.png",
-  relPathDir       : "a/b/extensions/extensions0/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions0png0.png",
-  relPathDir       : "a/b/extensions/extensions0/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "exe0.exe",
-  relPathDir       : "a/b/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0777,
-  comparePerms     : 0755
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "10text0",
-  relPathDir       : "a/b/1/10/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0767,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "0exe0.exe",
-  relPathDir       : "a/b/0/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0777,
-  comparePerms     : 0755
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "00text1",
-  relPathDir       : "a/b/0/00/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0677,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "00text0",
-  relPathDir       : "a/b/0/00/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0775,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "00png0.png",
-  relPathDir       : "a/b/0/00/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : 0776,
-  comparePerms     : 0644
-}, {
-  description      : "Removed by precomplete (remove)",
-  fileName         : "20text0",
-  relPathDir       : "a/b/2/20/",
-  originalContents : "ToBeDeleted\n",
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : null
-}, {
-  description      : "Removed by precomplete (remove)",
-  fileName         : "20png0.png",
-  relPathDir       : "a/b/2/20/",
-  originalContents : "ToBeDeleted\n",
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : null
-}];
-
-ADDITIONAL_TEST_DIRS = [
-{
-  description  : "Removed by precomplete (rmdir)",
-  relPathDir   : "a/b/2/20/",
-  dirRemoved   : true
-}, {
-  description  : "Removed by precomplete (rmdir)",
-  relPathDir   : "a/b/2/",
-  dirRemoved   : true
-}];
-
-function run_test() {
-  do_test_pending();
-  do_register_cleanup(cleanupUpdaterTest);
-
-  setupUpdaterTest(MAR_COMPLETE_FILE);
-
-  let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
-  let applyToDir = getApplyDirFile();
-
-  // Check that trying to change channels for a complete update changes the
-  // update channel (the channel-prefs.js file should be updated).
-  let channelchange = updatesDir.clone();
-  channelchange.append(CHANNEL_CHANGE_FILE);
-  channelchange.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
-
-  // For Mac OS X set the last modified time for the root directory to a date in
-  // the past to test that the last modified time is updated on a successful
-  // update (bug 600098).
-  if (IS_MACOSX) {
-    let now = Date.now();
-    let yesterday = now - (1000 * 60 * 60 * 24);
-    applyToDir.lastModifiedTime = yesterday;
-  }
-
-  // apply the complete mar
-  let exitValue = runUpdate();
-  logTestInfo("testing updater binary process exitValue for success when " +
-              "applying a complete mar");
-  do_check_eq(exitValue, 0);
-
-  logTestInfo("testing update.status should be " + STATE_SUCCEEDED);
-  let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
-  do_check_eq(readStatusFile(updatesDir), STATE_SUCCEEDED);
-
-  // For Mac OS X check that the last modified time for a directory has been
-  // updated after a successful update (bug 600098).
-  if (IS_MACOSX) {
-    logTestInfo("testing last modified time on the apply to directory has " +
-                "changed after a successful update (bug 600098)");
-    let now = Date.now();
-    let timeDiff = Math.abs(applyToDir.lastModifiedTime - now);
-    do_check_true(timeDiff < MAX_TIME_DIFFERENCE);
-  }
-
-  checkFilesAfterUpdateSuccess();
-  // Sorting on Linux is different so skip this check for now.
-  if (!IS_UNIX) {
-    checkUpdateLogContents(LOG_COMPLETE_CC_SUCCESS);
-  }
-
-  logTestInfo("testing tobedeleted directory doesn't exist");
-  let toBeDeletedDir = getApplyDirFile("tobedeleted", true);
-  do_check_false(toBeDeletedDir.exists());
-
-  checkCallbackAppLog();
-}
--- a/toolkit/mozapps/update/test/unit/test_0150_appBinReplaced_xp_win_complete.js
+++ b/toolkit/mozapps/update/test/unit/test_0150_appBinReplaced_xp_win_complete.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0150";
 const MAR_COMPLETE_WIN_FILE = "data/complete_win.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test/unit/test_0151_appBinPatched_xp_win_partial.js
+++ b/toolkit/mozapps/update/test/unit/test_0151_appBinPatched_xp_win_partial.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0151";
 const MAR_IN_USE_WIN_FILE = "data/partial_win.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test/unit/test_0160_appInUse_xp_unix_complete.js
+++ b/toolkit/mozapps/update/test/unit/test_0160_appInUse_xp_unix_complete.js
@@ -10,18 +10,17 @@ const TEST_ID = "0160";
 // difference in the last modified time.
 const MAX_TIME_DIFFERENCE = 60000;
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0767,
   comparePerms     : 0767
--- a/toolkit/mozapps/update/test/unit/test_0160_appInUse_xp_win_complete.js
+++ b/toolkit/mozapps/update/test/unit/test_0160_appInUse_xp_win_complete.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0160";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Not added for failed update (add)",
--- a/toolkit/mozapps/update/test/unit/test_0170_fileLocked_xp_win_complete.js
+++ b/toolkit/mozapps/update/test/unit/test_0170_fileLocked_xp_win_complete.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0170";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Not added for failed update (add)",
--- a/toolkit/mozapps/update/test/unit/test_0171_fileLocked_xp_win_partial.js
+++ b/toolkit/mozapps/update/test/unit/test_0171_fileLocked_xp_win_partial.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0171";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Not added for failed update (add)",
--- a/toolkit/mozapps/update/test/unit/test_0180_fileInUse_xp_win_complete.js
+++ b/toolkit/mozapps/update/test/unit/test_0180_fileInUse_xp_win_complete.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0180";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test/unit/test_0181_fileInUse_xp_win_partial.js
+++ b/toolkit/mozapps/update/test/unit/test_0181_fileInUse_xp_win_partial.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0181";
 const MAR_IN_USE_WIN_FILE = "data/partial_win.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test/unit/test_0182_rmrfdirFileInUse_xp_win_complete.js
+++ b/toolkit/mozapps/update/test/unit/test_0182_rmrfdirFileInUse_xp_win_complete.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0182";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test/unit/test_0183_rmrfdirFileInUse_xp_win_partial.js
+++ b/toolkit/mozapps/update/test/unit/test_0183_rmrfdirFileInUse_xp_win_partial.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0183";
 const MAR_IN_USE_WIN_FILE = "data/partial.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0644,
   comparePerms     : null
--- a/toolkit/mozapps/update/test/unit/xpcshell_updater.ini
+++ b/toolkit/mozapps/update/test/unit/xpcshell_updater.ini
@@ -1,5 +1,4 @@
 [test_0110_general.js]
 [test_0111_general.js]
 [test_0112_general.js]
-[test_0120_channelChange_complete.js]
 [test_0200_app_launch_apply_update.js]
--- a/toolkit/mozapps/update/test_svc/unit/test_0110_general_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0110_general_svc.js
@@ -44,18 +44,17 @@ const TEST_ID = "0110_svc";
 // difference in the last modified time.
 const MAX_TIME_DIFFERENCE = 60000;
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0767,
   comparePerms     : 0767
--- a/toolkit/mozapps/update/test_svc/unit/test_0111_general_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0111_general_svc.js
@@ -44,18 +44,17 @@ const TEST_ID = "0111_svc";
 // difference in the last modified time.
 const MAX_TIME_DIFFERENCE = 60000;
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0644,
   comparePerms     : null
@@ -277,22 +276,16 @@ function run_test() {
 
   do_test_pending();
   do_register_cleanup(cleanupUpdaterTest);
 
   setupUpdaterTest(MAR_PARTIAL_FILE);
 
   let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
 
-  // Check that trying to change channels for a partial update doesn't change
-  // the update channel (the channel-prefs.js file should not be updated).
-  let force = updatesDir.clone();
-  force.append(CHANNEL_CHANGE_FILE);
-  force.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
-
   // apply the partial mar
   runUpdateUsingService(STATE_PENDING_SVC, STATE_SUCCEEDED, checkUpdateApplied);
 }
 
 function checkUpdateApplied() {
   let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
   logTestInfo("testing update.status should be " + STATE_SUCCEEDED);
   do_check_eq(readStatusFile(updatesDir), STATE_SUCCEEDED);
--- a/toolkit/mozapps/update/test_svc/unit/test_0112_general_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0112_general_svc.js
@@ -44,18 +44,17 @@ const TEST_ID = "0112_svc";
 // difference in the last modified time.
 const MAX_TIME_DIFFERENCE = 60000;
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0767,
   comparePerms     : null
@@ -270,22 +269,16 @@ function run_test() {
 
   do_test_pending();
   do_register_cleanup(cleanupUpdaterTest);
 
   setupUpdaterTest(MAR_PARTIAL_FILE);
 
   let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
 
-  // Check that trying to change channels for a failed partial update doesn't
-  // change the update channel (the channel-prefs.js file should not be updated).
-  let force = updatesDir.clone();
-  force.append(CHANNEL_CHANGE_FILE);
-  force.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
-
   // apply the partial mar
   runUpdateUsingService(STATE_PENDING_SVC, STATE_FAILED, checkUpdateApplied);
 }
 
 function checkUpdateApplied() {
   let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
   logTestInfo("testing update.status should be " + STATE_FAILED);
   // The update status format for a failure is failed: # where # is the error
deleted file mode 100644
--- a/toolkit/mozapps/update/test_svc/unit/test_0120_channelChange_complete_svc.js
+++ /dev/null
@@ -1,268 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-/* Channel change complete MAR file patch apply test */
-
-const TEST_ID = "0120_svc";
-// All we care about is that the last modified time has changed so that Mac OS
-// X Launch Services invalidates its cache so the test allows up to one minute
-// difference in the last modified time.
-const MAX_TIME_DIFFERENCE = 60000;
-
-// The files are in the same order as they are applied from the mar
-const TEST_FILES = [
-{
-  description      : "Added by update.manifest (add-cc)",
-  fileName         : "channel-prefs.js",
-  relPathDir       : "a/b/defaults/pref/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0767,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "precomplete",
-  relPathDir       : "",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial_precomplete",
-  compareFile      : "data/complete_precomplete",
-  originalPerms    : 0755,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "searchpluginstext0",
-  relPathDir       : "a/b/searchplugins/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0775,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "searchpluginspng1.png",
-  relPathDir       : "a/b/searchplugins/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "searchpluginspng0.png",
-  relPathDir       : "a/b/searchplugins/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0666,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "removed-files",
-  relPathDir       : "a/b/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial_removed-files",
-  compareFile      : "data/complete_removed-files",
-  originalPerms    : 0666,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions1text0",
-  relPathDir       : "a/b/extensions/extensions1/",
-  originalContents : null,
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions1png1.png",
-  relPathDir       : "a/b/extensions/extensions1/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0666,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions1png0.png",
-  relPathDir       : "a/b/extensions/extensions1/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions0text0",
-  relPathDir       : "a/b/extensions/extensions0/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions0png1.png",
-  relPathDir       : "a/b/extensions/extensions0/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest if the parent directory " +
-                     "exists (add-if)",
-  fileName         : "extensions0png0.png",
-  relPathDir       : "a/b/extensions/extensions0/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : null,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "exe0.exe",
-  relPathDir       : "a/b/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0777,
-  comparePerms     : 0755
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "10text0",
-  relPathDir       : "a/b/1/10/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0767,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "0exe0.exe",
-  relPathDir       : "a/b/0/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : "data/partial.png",
-  compareFile      : "data/complete.png",
-  originalPerms    : 0777,
-  comparePerms     : 0755
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "00text1",
-  relPathDir       : "a/b/0/00/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0677,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "00text0",
-  relPathDir       : "a/b/0/00/",
-  originalContents : "ToBeReplacedWithFromComplete\n",
-  compareContents  : "FromComplete\n",
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : 0775,
-  comparePerms     : 0644
-}, {
-  description      : "Added by update.manifest (add)",
-  fileName         : "00png0.png",
-  relPathDir       : "a/b/0/00/",
-  originalContents : null,
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : "data/complete.png",
-  originalPerms    : 0776,
-  comparePerms     : 0644
-}, {
-  description      : "Removed by precomplete (remove)",
-  fileName         : "20text0",
-  relPathDir       : "a/b/2/20/",
-  originalContents : "ToBeDeleted\n",
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : null
-}, {
-  description      : "Removed by precomplete (remove)",
-  fileName         : "20png0.png",
-  relPathDir       : "a/b/2/20/",
-  originalContents : "ToBeDeleted\n",
-  compareContents  : null,
-  originalFile     : null,
-  compareFile      : null,
-  originalPerms    : null,
-  comparePerms     : null
-}];
-
-ADDITIONAL_TEST_DIRS = [
-{
-  description  : "Removed by precomplete (rmdir)",
-  relPathDir   : "a/b/2/20/",
-  dirRemoved   : true
-}, {
-  description  : "Removed by precomplete (rmdir)",
-  relPathDir   : "a/b/2/",
-  dirRemoved   : true
-}];
-
-function run_test() {
-  if (!shouldRunServiceTest()) {
-    return;
-  }
-
-  do_test_pending();
-  do_register_cleanup(cleanupUpdaterTest);
-
-  setupUpdaterTest(MAR_COMPLETE_FILE);
-
-  let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
-
-  // Check that trying to change channels for a complete update changes the
-  // update channel (the channel-prefs.js file should be updated).
-  let channelchange = updatesDir.clone();
-  channelchange.append(CHANNEL_CHANGE_FILE);
-  channelchange.create(AUS_Ci.nsIFile.FILE_TYPE, PERMS_FILE);
-
-  runUpdateUsingService(STATE_PENDING_SVC, STATE_SUCCEEDED, checkUpdateApplied);
-}
-
-function checkUpdateApplied() {
-  logTestInfo("testing update.status should be " + STATE_SUCCEEDED);
-  let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
-  do_check_eq(readStatusFile(updatesDir), STATE_SUCCEEDED);
-
-  checkFilesAfterUpdateSuccess();
-  checkUpdateLogContents(LOG_COMPLETE_CC_SUCCESS);
-
-  logTestInfo("testing tobedeleted directory doesn't exist");
-  let toBeDeletedDir = getApplyDirFile("tobedeleted", true);
-  do_check_false(toBeDeletedDir.exists());
-
-  checkCallbackServiceLog();
-}
--- a/toolkit/mozapps/update/test_svc/unit/test_0150_appBinReplaced_xp_win_complete_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0150_appBinReplaced_xp_win_complete_svc.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0150_svc";
 const MAR_COMPLETE_WIN_FILE = "data/complete_win.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0151_appBinPatched_xp_win_partial_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0151_appBinPatched_xp_win_partial_svc.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0151_svc";
 const MAR_IN_USE_WIN_FILE = "data/partial_win.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0160_appInUse_xp_win_complete_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0160_appInUse_xp_win_complete_svc.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0160_svc";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0170_fileLocked_xp_win_complete_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0170_fileLocked_xp_win_complete_svc.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0170_svc";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Not added for failed update (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0171_fileLocked_xp_win_partial_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0171_fileLocked_xp_win_partial_svc.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0171_svc";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Not added for failed update (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0180_fileInUse_xp_win_complete_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0180_fileInUse_xp_win_complete_svc.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0180_svc";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0181_fileInUse_xp_win_partial_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0181_fileInUse_xp_win_partial_svc.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0181_svc";
 const MAR_IN_USE_WIN_FILE = "data/partial_win.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0182_rmrfdirFileInUse_xp_win_complete_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0182_rmrfdirFileInUse_xp_win_complete_svc.js
@@ -6,18 +6,17 @@
 
 const TEST_ID = "0182_svc";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null
 }, {
   description      : "Added by update.manifest (add)",
--- a/toolkit/mozapps/update/test_svc/unit/test_0183_rmrfdirFileInUse_xp_win_partial_svc.js
+++ b/toolkit/mozapps/update/test_svc/unit/test_0183_rmrfdirFileInUse_xp_win_partial_svc.js
@@ -7,18 +7,17 @@
 const TEST_ID = "0183_svc";
 const MAR_IN_USE_WIN_FILE = "data/partial.mar";
 
 // The files are listed in the same order as they are applied from the mar's
 // update.manifest. Complete updates have remove file and rmdir directory
 // operations located in the precomplete file performed first.
 const TEST_FILES = [
 {
-  description      : "Only added by update.manifest for complete updates " +
-                     "when there is a channel change (add-cc)",
+  description      : "Should never change",
   fileName         : "channel-prefs.js",
   relPathDir       : "a/b/defaults/pref/",
   originalContents : "ShouldNotBeReplaced\n",
   compareContents  : "ShouldNotBeReplaced\n",
   originalFile     : null,
   compareFile      : null,
   originalPerms    : 0644,
   comparePerms     : null
--- a/toolkit/mozapps/update/test_svc/unit/xpcshell.ini
+++ b/toolkit/mozapps/update/test_svc/unit/xpcshell.ini
@@ -1,17 +1,16 @@
 [DEFAULT]
 head = head_update.js
 tail = 
 
 [test_0000_bootstrap_svc.js]
 [test_0110_general_svc.js]
 [test_0111_general_svc.js]
 [test_0112_general_svc.js]
-[test_0120_channelChange_complete_svc.js]
 [test_0150_appBinReplaced_xp_win_complete_svc.js]
 [test_0151_appBinPatched_xp_win_partial_svc.js]
 [test_0160_appInUse_xp_win_complete_svc.js]
 [test_0170_fileLocked_xp_win_complete_svc.js]
 [test_0171_fileLocked_xp_win_partial_svc.js]
 [test_0180_fileInUse_xp_win_complete_svc.js]
 [test_0181_fileInUse_xp_win_partial_svc.js]
 [test_0182_rmrfdirFileInUse_xp_win_complete_svc.js]
--- a/toolkit/mozapps/update/updater/updater.cpp
+++ b/toolkit/mozapps/update/updater/updater.cpp
@@ -49,30 +49,26 @@
  *  Available methods for the different manifest files:
  *
  *  update.manifest
  *  ---------------
  *  method   = "add" | "add-if" | "patch" | "patch-if" | "remove"
  *
  *  updatev2.manifest
  *  -----------------
- *  method   = "add" | "add-cc" | "add-if" | "patch" | "patch-if" | "remove" |
+ *  method   = "add" | "add-if" | "patch" | "patch-if" | "remove" |
  *             "rmdir" | "rmrfdir" | type
  *
- * 'add-cc' is an add action to perform on channel change.
- *
  *  'type' is the update type (e.g. complete or partial) and when present MUST
  *  be the first entry in the update manifest. The type is used to support
  *  downgrades by causing the actions defined in precomplete to be performed.
  *
  *  precomplete
  *  -----------
- *  method   = "remove" | "rmdir" | "remove-cc"
- *
- * 'remove-cc' is a remove action to perform on channel change.
+ *  method   = "remove" | "rmdir"
  */
 #include "bspatch.h"
 #include "progressui.h"
 #include "archivereader.h"
 #include "errors.h"
 #include "bzlib.h"
 
 #include <stdio.h>
@@ -2435,23 +2431,22 @@ GetManifestContents(const NS_tchar *mani
     return NULL;
   }
   free(mbuf);
 
   return wrb;
 #endif
 }
 
-int AddPreCompleteActions(ActionList *list, bool &isChannelChange)
+int AddPreCompleteActions(ActionList *list)
 {
   NS_tchar *rb = GetManifestContents(NS_T("precomplete"));
   if (rb == NULL) {
     LOG(("AddPreCompleteActions: error getting contents of precomplete " \
          "manifest\n"));
-    isChannelChange = false;
     // Applications aren't required to have a precomplete manifest yet.
     return OK;
   }
 
   int rv;
   NS_tchar *line;
   while((line = mstrtok(kNL, &rb)) != 0) {
     // skip comments
@@ -2463,21 +2458,18 @@ int AddPreCompleteActions(ActionList *li
       LOG(("AddPreCompleteActions: token not found in manifest\n"));
       return PARSE_ERROR;
     }
 
     Action *action = NULL;
     if (NS_tstrcmp(token, NS_T("remove")) == 0) { // rm file
       action = new RemoveFile();
     }
-    else if (NS_tstrcmp(token, NS_T("remove-cc")) == 0) { // rm file
-      if (!isChannelChange)
-        continue;
-
-      action = new RemoveFile();
+    else if (NS_tstrcmp(token, NS_T("remove-cc")) == 0) { // no longer supported
+      continue;
     }
     else if (NS_tstrcmp(token, NS_T("rmdir")) == 0) { // rmdir if  empty
       action = new RemoveDir();
     }
     else {
       LOG(("AddPreCompleteActions: unknown token: " LOG_S "\n", token));
       return PARSE_ERROR;
     }
@@ -2492,34 +2484,23 @@ int AddPreCompleteActions(ActionList *li
     list->Append(action);
   }
 
   return OK;
 }
 
 int DoUpdate()
 {
-  bool isChannelChange = false;
-  NS_tchar ccfile[MAXPATHLEN];
-  NS_tsnprintf(ccfile, sizeof(ccfile)/sizeof(ccfile[0]),
-               NS_T("%s/channelchange"), gSourcePath);
-  if (!NS_taccess(ccfile, F_OK)) {
-    LOG(("DoUpdate: changing update channel\n"));
-    isChannelChange = true;
-  }
-
   NS_tchar manifest[MAXPATHLEN];
   NS_tsnprintf(manifest, sizeof(manifest)/sizeof(manifest[0]),
                NS_T("%s/update.manifest"), gSourcePath);
 
   // extract the manifest
   int rv = gArchiveReader.ExtractFile("updatev2.manifest", manifest);
   if (rv) {
-    // Don't allow changing the channel without a version 2 update manifest.
-    isChannelChange = false;
     rv = gArchiveReader.ExtractFile("update.manifest", manifest);
     if (rv) {
       LOG(("DoUpdate: error extracting manifest file\n"));
       return rv;
     }
   }
 
   NS_tchar *rb = GetManifestContents(manifest);
@@ -2545,24 +2526,20 @@ int DoUpdate()
       return PARSE_ERROR;
     }
 
     if (isFirstAction && NS_tstrcmp(token, NS_T("type")) == 0) {
       const NS_tchar *type = mstrtok(kQuote, &line);
       LOG(("UPDATE TYPE " LOG_S "\n", type));
       if (NS_tstrcmp(type, NS_T("complete")) == 0) {
         isComplete = true;
-        rv = AddPreCompleteActions(&list, isChannelChange);
+        rv = AddPreCompleteActions(&list);
         if (rv)
           return rv;
       }
-      else if (isChannelChange) {
-        LOG(("DoUpdate: unable to change channel with a partial update\n"));
-        isChannelChange = false;
-      }
       isFirstAction = false;
       continue;
     }
 
     isFirstAction = false;
 
     Action *action = NULL;
     if (NS_tstrcmp(token, NS_T("remove")) == 0) { // rm file
@@ -2592,29 +2569,18 @@ int DoUpdate()
       action = new PatchFile();
     }
     else if (NS_tstrcmp(token, NS_T("add-if")) == 0) { // Add if exists
       action = new AddIfFile();
     }
     else if (NS_tstrcmp(token, NS_T("patch-if")) == 0) { // Patch if exists
       action = new PatchIfFile();
     }
-    else if (NS_tstrcmp(token, NS_T("add-cc")) == 0) { // Add if channel change
-      // The channel should only be changed with a complete update and when the
-      // user requests a channel change to avoid overwriting the update channel
-      // when testing RC's.
-
-      // add-cc instructions should only be in complete update manifests.
-      if (!isComplete)
-        return PARSE_ERROR;
-      
-      if (!isChannelChange)
-        continue;
-
-      action = new AddFile();
+    else if (NS_tstrcmp(token, NS_T("add-cc")) == 0) { // no longer supported
+      continue;
     }
     else {
       LOG(("DoUpdate: unknown token: " LOG_S "\n", token));
       return PARSE_ERROR;
     }
 
     if (!action)
       return BAD_ACTION_ERROR;
--- a/toolkit/xre/nsUpdateDriver.cpp
+++ b/toolkit/xre/nsUpdateDriver.cpp
@@ -211,22 +211,16 @@ IsPending(nsILocalFile *statusFile)
 }
 
 static bool
 GetVersionFile(nsIFile *dir, nsCOMPtr<nsILocalFile> &result)
 {
   return GetFile(dir, NS_LITERAL_CSTRING("update.version"), result);
 }
 
-static bool
-GetChannelChangeFile(nsIFile *dir, nsCOMPtr<nsILocalFile> &result)
-{
-  return GetFile(dir, NS_LITERAL_CSTRING("channelchange"), result);
-}
-
 // Compares the current application version with the update's application
 // version.
 static bool
 IsOlderVersion(nsILocalFile *versionFile, const char *appVersion)
 {
   PRFileDesc *fd = nsnull;
   nsresult rv = versionFile->OpenNSPRFileDesc(PR_RDONLY, 0660, &fd);
   if (NS_FAILED(rv))
@@ -534,23 +528,21 @@ ProcessUpdates(nsIFile *greDir, nsIFile 
       NS_ADDREF(appDir = overrideDir);
     }
   }
 
   nsCOMPtr<nsILocalFile> statusFile;
   if (GetStatusFile(updatesDir, statusFile) && 
       IsPending(statusFile)) {
     nsCOMPtr<nsILocalFile> versionFile;
-    nsCOMPtr<nsILocalFile> channelChangeFile;
     // Remove the update if the update application version file doesn't exist
     // or if the update's application version is less than the current
     // application version.
-    if (!GetChannelChangeFile(updatesDir, channelChangeFile) &&
-        (!GetVersionFile(updatesDir, versionFile) ||
-         IsOlderVersion(versionFile, appVersion))) {
+    if (!GetVersionFile(updatesDir, versionFile) ||
+        IsOlderVersion(versionFile, appVersion)) {
       updatesDir->Remove(true);
     } else {
       ApplyUpdate(greDir, updatesDir, statusFile, appDir, 
                   argc, argv);
     }
   }
 
   return NS_OK;
--- a/tools/update-packaging/make_full_update.sh
+++ b/tools/update-packaging/make_full_update.sh
@@ -56,19 +56,16 @@ fi
 
 if [ ! -f "precomplete" ]; then
   notice "precomplete file is missing!"
   exit 1
 fi
 
 list_files files
 
-# Files that should be added on channel change
-ccfiles=$(find . -type f -name "channel-prefs.js" | sed 's/\.\/\(.*\)/\1/')
-
 popd
 
 notice ""
 notice "Adding file add instructions to file 'update.manifest'"
 > $updatemanifestv1
 
 num_files=${#files[*]}
 
@@ -89,29 +86,16 @@ done
 # 1 update manifest to the version 2 update manifest.
 > $updatemanifestv2
 notice ""
 notice "Adding type instruction to file 'updatev2.manifest'"
 notice "       type: complete"
 echo "type \"complete\"" >> $updatemanifestv2
 
 notice ""
-notice "Adding file ADD instructions for channel change to file 'updatev2.manifest'"
-for f in $ccfiles; do
-  notice "     add-cc: $f"
-  echo "add-cc \"$f\"" >> $updatemanifestv2
-  dir=$(dirname "$f")
-  mkdir -p "$workdir/$dir"
-  $BZIP2 -cz9 "$targetdir/$f" > "$workdir/$f"
-  copy_perm "$targetdir/$f" "$workdir/$f"
-
-  targetfiles="$targetfiles \"$f\""
-done
-
-notice ""
 notice "Concatenating file 'update.manifest' to file 'updatev2.manifest'"
 cat $updatemanifestv1 >> $updatemanifestv2
 
 # Append remove instructions for any dead files.
 notice ""
 notice "Adding file and directory remove instructions from file 'removed-files'"
 append_remove_instructions "$targetdir" "$updatemanifestv1" "$updatemanifestv2"
 
--- a/tools/update-packaging/make_incremental_update.sh
+++ b/tools/update-packaging/make_incremental_update.sh
@@ -110,19 +110,16 @@ fi
 if [ ! -f "precomplete" ]; then
   notice "precomplete file is missing!"
   exit 1
 fi
 
 list_dirs newdirs
 list_files newfiles
 
-# Files that should be added on channel change
-ccfiles=$(find . -type f -name "channel-prefs.js" | sed 's/\.\/\(.*\)/\1/')
-
 popd
 
 notice ""
 notice "Adding file patch and add instructions to file 'update.manifest'"
 > $updatemanifestv1
 
 num_oldfiles=${#oldfiles[*]}
 remove_array=
--- a/tools/update-packaging/test/make_full_update.sh
+++ b/tools/update-packaging/test/make_full_update.sh
@@ -57,19 +57,16 @@ fi
 
 if [ ! -f "precomplete" ]; then
   notice "precomplete file is missing!"
   exit 1
 fi
 
 list_files files
 
-# Files that should be added on channel change
-ccfiles=$(find . -type f -name "channel-prefs.js" | sed 's/\.\/\(.*\)/\1/')
-
 popd
 
 notice ""
 notice "Adding file add instructions to file 'update.manifest'"
 > $updatemanifestv1
 
 num_files=${#files[*]}
 
@@ -90,29 +87,16 @@ done
 # 1 update manifest to the version 2 update manifest.
 > $updatemanifestv2
 notice ""
 notice "Adding type instruction to file 'updatev2.manifest'"
 notice "       type: complete"
 echo "type \"complete\"" >> $updatemanifestv2
 
 notice ""
-notice "Adding file add on channel change instructions to file 'updatev2.manifest'"
-for f in $ccfiles; do
-  notice "     add-cc: $f"
-  echo "add-cc \"$f\"" >> $updatemanifestv2
-  dir=$(dirname "$f")
-  mkdir -p "$workdir/$dir"
-  $BZIP2 -cz9 "$targetdir/$f" > "$workdir/$f"
-  copy_perm "$targetdir/$f" "$workdir/$f"
-
-  targetfiles="$targetfiles \"$f\""
-done
-
-notice ""
 notice "Concatenating file 'update.manifest' to file 'updatev2.manifest'"
 cat $updatemanifestv1 >> $updatemanifestv2
 
 # Append remove instructions for any dead files.
 notice ""
 notice "Adding file and directory remove instructions from file 'removed-files'"
 append_remove_instructions "$targetdir" "$updatemanifestv1" "$updatemanifestv2"