Bug 1432614 - Remove now unnecessary updating and maintenance of Places' root folder titles. r=kitcambridge,mak
authorMark Banner <standard8@mozilla.com>
Thu, 04 Jan 2018 16:35:56 +0000
changeset 404260 8976a2e3a3b5683403febdcda896adb9a0d86a86
parent 404259 ed39a38f8647e094616752efd2a1f8f408b35ab8
child 404261 f066f679fb044cef576f467979808003a63e8de0
push id99968
push userrgurzau@mozilla.com
push dateFri, 16 Feb 2018 22:14:56 +0000
treeherdermozilla-inbound@2e16779c96cc [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerskitcambridge, mak
bugs1432614
milestone60.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1432614 - Remove now unnecessary updating and maintenance of Places' root folder titles. r=kitcambridge,mak The titles for the root bookmark folders in the database will now never get updated. This avoids doing maintenance and changing them if the locale changes. The UI is now responsible for displaying the correct title. WebExtensions API will get the UI visible names. MozReview-Commit-ID: ErPPJXxy2d3
browser/components/extensions/ext-bookmarks.js
browser/components/places/content/editBookmarkOverlay.js
browser/components/places/tests/browser/browser_bookmarkProperties_readOnlyRoot.js
browser/components/places/tests/browser/browser_library_left_pane_fixnames.js
services/sync/tests/unit/test_bookmark_duping.js
services/sync/tests/unit/test_bookmark_store.js
toolkit/components/places/BookmarkHTMLUtils.jsm
toolkit/components/places/Bookmarks.jsm
toolkit/components/places/Database.cpp
toolkit/components/places/PlacesDBUtils.jsm
toolkit/components/places/PlacesSyncUtils.jsm
toolkit/components/places/tests/sync/head_sync.js
toolkit/components/places/tests/sync/test_bookmark_corruption.js
toolkit/components/places/tests/sync/test_bookmark_deduping.js
toolkit/components/places/tests/sync/test_bookmark_deletion.js
toolkit/components/places/tests/sync/test_bookmark_kinds.js
toolkit/components/places/tests/sync/test_bookmark_structure_changes.js
toolkit/components/places/tests/sync/test_bookmark_value_changes.js
toolkit/components/places/tests/unit/test_1105208.js
toolkit/components/places/tests/unit/test_bookmarks_html_escape_entities.js
toolkit/components/places/tests/unit/test_preventive_maintenance.js
toolkit/components/places/tests/unit/test_sync_utils.js
--- a/browser/components/extensions/ext-bookmarks.js
+++ b/browser/components/extensions/ext-bookmarks.js
@@ -42,17 +42,17 @@ function getUrl(type, url) {
       return undefined;
   }
 }
 
 const getTree = (rootGuid, onlyChildren) => {
   function convert(node, parent) {
     let treenode = {
       id: node.guid,
-      title: node.title || "",
+      title: PlacesUtils.bookmarks.getLocalizedTitle(node) || "",
       index: node.index,
       dateAdded: node.dateAdded / 1000,
       type: BOOKMARKS_TYPES_TO_API_TYPES_MAP.get(node.typeCode),
       url: getUrl(node.typeCode, node.uri),
     };
 
     if (parent && node.guid != PlacesUtils.bookmarks.rootGuid) {
       treenode.parentId = parent.guid;
@@ -86,17 +86,17 @@ const getTree = (rootGuid, onlyChildren)
     // It seems like the array always just contains the root node.
     return [treenode];
   }).catch(e => Promise.reject({message: e.message}));
 };
 
 const convertBookmarks = result => {
   let node = {
     id: result.guid,
-    title: result.title || "",
+    title: PlacesUtils.bookmarks.getLocalizedTitle(result) || "",
     index: result.index,
     dateAdded: result.dateAdded.getTime(),
     type: BOOKMARKS_TYPES_TO_API_TYPES_MAP.get(result.type),
     url: getUrl(result.type, result.url && result.url.href),
   };
 
   if (result.guid != PlacesUtils.bookmarks.rootGuid) {
     node.parentId = result.parentGuid;
--- a/browser/components/places/content/editBookmarkOverlay.js
+++ b/browser/components/places/content/editBookmarkOverlay.js
@@ -430,17 +430,20 @@ var gEditItemOverlay = {
      * folder identifier and the time at which it was last-used by this dialog
      * set. Then we sort it descendingly based on the time field.
      */
     this._recentFolders = [];
     for (let folderId of folderIds) {
       var lastUsed =
         PlacesUtils.annotations.getItemAnnotation(folderId, LAST_USED_ANNO);
       let guid = await PlacesUtils.promiseItemGuid(folderId);
-      let title = (await PlacesUtils.bookmarks.fetch(guid)).title;
+      let bm = await PlacesUtils.bookmarks.fetch(guid);
+      // Since this could be a root mobile folder, we should get the proper
+      // title.
+      let title = PlacesUtils.bookmarks.getLocalizedTitle(bm);
       this._recentFolders.push({ folderId, guid, title, lastUsed });
     }
     this._recentFolders.sort(function(a, b) {
       if (b.lastUsed < a.lastUsed)
         return -1;
       if (b.lastUsed > a.lastUsed)
         return 1;
       return 0;
--- a/browser/components/places/tests/browser/browser_bookmarkProperties_readOnlyRoot.js
+++ b/browser/components/places/tests/browser/browser_bookmarkProperties_readOnlyRoot.js
@@ -18,18 +18,14 @@ add_task(async function() {
         Assert.ok(dialogWin.gEditItemOverlay.readOnly, "Dialog is read-only");
         // Check that accept button is disabled
         let acceptButton = dialogWin.document.documentElement.getButton("accept");
         Assert.ok(acceptButton.disabled, "Accept button is disabled");
 
         // Check that name picker is read only
         let namepicker = dialogWin.document.getElementById("editBMPanel_namePicker");
         Assert.ok(namepicker.readOnly, "Name field is read-only");
-        let bookmark = await PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.unfiledGuid);
-        Assert.equal(namepicker.value, bookmark.title, "Node title is correct");
-        // Blur the field and ensure root's name has not been changed.
-        namepicker.blur();
-        bookmark = await PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.unfiledGuid);
-        Assert.equal(namepicker.value, bookmark.title, "Root title is correct");
+        Assert.equal(namepicker.value,
+          PlacesUtils.getString("OtherBookmarksFolderTitle"), "Node title is correct");
       }
     );
   });
 });
--- a/browser/components/places/tests/browser/browser_library_left_pane_fixnames.js
+++ b/browser/components/places/tests/browser/browser_library_left_pane_fixnames.js
@@ -13,18 +13,16 @@
 // itemId: query's itemId,
 // correctTitle: original and correct query's title.
 var leftPaneQueries = [];
 
 function onLibraryReady(organizer) {
       // Check titles have been fixed.
       for (var i = 0; i < leftPaneQueries.length; i++) {
         var query = leftPaneQueries[i];
-        is(PlacesUtils.bookmarks.getItemTitle(query.itemId),
-           query.correctTitle, "Title is correct for query " + query.name);
         if ("concreteId" in query) {
           is(PlacesUtils.bookmarks.getItemTitle(query.concreteId),
            query.concreteTitle, "Concrete title is correct for query " + query.name);
         }
       }
 
       // Close Library window.
       organizer.close();
--- a/services/sync/tests/unit/test_bookmark_duping.js
+++ b/services/sync/tests/unit/test_bookmark_duping.js
@@ -3,16 +3,17 @@
 
 ChromeUtils.import("resource://services-common/async.js");
 ChromeUtils.import("resource://services-sync/engines.js");
 ChromeUtils.import("resource://services-sync/engines/bookmarks.js");
 ChromeUtils.import("resource://services-sync/service.js");
 ChromeUtils.import("resource://services-sync/util.js");
 ChromeUtils.import("resource://services-sync/bookmark_validator.js");
 
+const BookmarksToolbarTitle = "toolbar";
 const bms = PlacesUtils.bookmarks;
 
 add_task(async function setup() {
   await Service.engineManager.unregister("bookmarks");
 });
 
 async function sharedSetup() {
   let engine = new BookmarksEngine(Service);
@@ -626,17 +627,17 @@ add_task(async function test_dupe_empty_
     equal(collection.count(), 5);
 
     // Now create new incoming records that looks alot like a dupe of "Folder 1".
     let newFolderGUID = Utils.makeGUID();
     collection.insert(newFolderGUID, encryptPayload({
       id: newFolderGUID,
       type: "folder",
       title: "Folder 1",
-      parentName: "Bookmarks Toolbar",
+      parentName: BookmarksToolbarTitle,
       parentid: "toolbar",
       children: [],
     }), Date.now() / 1000 + 500);
 
     _("Syncing so new dupe records are processed");
     engine.lastSync = engine.lastSync - 5;
     await engine.sync();
 
--- a/services/sync/tests/unit/test_bookmark_store.js
+++ b/services/sync/tests/unit/test_bookmark_store.js
@@ -2,16 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 ChromeUtils.import("resource://services-common/utils.js");
 ChromeUtils.import("resource://services-sync/engines.js");
 ChromeUtils.import("resource://services-sync/engines/bookmarks.js");
 ChromeUtils.import("resource://services-sync/service.js");
 ChromeUtils.import("resource://services-sync/util.js");
 
+const BookmarksToolbarTitle = "toolbar";
+
 add_task(async function test_ignore_specials() {
   _("Ensure that we can't delete bookmark roots.");
 
   let engine = new BookmarksEngine(Service);
   let store = engine._store;
 
   // Belt...
   let record = new BookmarkFolder("bookmarks", "toolbar", "folder");
@@ -55,17 +57,17 @@ add_task(async function test_bookmark_cr
     _("Let's create a new record.");
     let fxrecord = new Bookmark("bookmarks", "get-firefox1");
     fxrecord.bmkUri        = "http://getfirefox.com/";
     fxrecord.description   = "Firefox is awesome.";
     fxrecord.title         = "Get Firefox!";
     fxrecord.tags          = ["firefox", "awesome", "browser"];
     fxrecord.keyword       = "awesome";
     fxrecord.loadInSidebar = false;
-    fxrecord.parentName    = "Bookmarks Toolbar";
+    fxrecord.parentName    = BookmarksToolbarTitle;
     fxrecord.parentid      = "toolbar";
     await store.applyIncoming(fxrecord);
 
     _("Verify it has been created correctly.");
     item = await PlacesUtils.bookmarks.fetch(fxrecord.id);
     Assert.equal(item.type, PlacesUtils.bookmarks.TYPE_BOOKMARK);
     Assert.equal(item.url.href, "http://getfirefox.com/");
     Assert.equal(item.title, fxrecord.title);
@@ -88,17 +90,17 @@ add_task(async function test_bookmark_cr
                                fxrecord.tags.sort()));
 
     _("The calculated sort index is based on frecency data.");
     Assert.ok(newrecord.sortindex >= 150);
 
     _("Create a record with some values missing.");
     let tbrecord = new Bookmark("bookmarks", "thunderbird1");
     tbrecord.bmkUri        = "http://getthunderbird.com/";
-    tbrecord.parentName    = "Bookmarks Toolbar";
+    tbrecord.parentName    = BookmarksToolbarTitle;
     tbrecord.parentid      = "toolbar";
     await store.applyIncoming(tbrecord);
 
     _("Verify it has been created correctly.");
     item = await PlacesUtils.bookmarks.fetch(tbrecord.id);
     id = await PlacesUtils.promiseItemId(item.guid);
     Assert.equal(item.type, PlacesUtils.bookmarks.TYPE_BOOKMARK);
     Assert.equal(item.url.href, "http://getthunderbird.com/");
@@ -190,17 +192,17 @@ add_task(async function test_bookmark_cr
 
 add_task(async function test_folder_create() {
   let engine = new BookmarksEngine(Service);
   let store = engine._store;
 
   try {
     _("Create a folder.");
     let folder = new BookmarkFolder("bookmarks", "testfolder-1");
-    folder.parentName = "Bookmarks Toolbar";
+    folder.parentName = BookmarksToolbarTitle;
     folder.parentid   = "toolbar";
     folder.title      = "Test Folder";
     await store.applyIncoming(folder);
 
     _("Verify it has been created correctly.");
     let item = await PlacesUtils.bookmarks.fetch(folder.id);
     Assert.equal(item.type, PlacesUtils.bookmarks.TYPE_FOLDER);
     Assert.equal(item.title, folder.title);
@@ -246,17 +248,17 @@ add_task(async function test_folder_crea
       title: "Get Thunderbird!",
     });
 
     _("Create a record for the folder and verify basic properties.");
     let record = await store.createRecord(folder1.guid);
     Assert.ok(record instanceof BookmarkFolder);
     Assert.equal(record.title, "Folder1");
     Assert.equal(record.parentid, "toolbar");
-    Assert.equal(record.parentName, "Bookmarks Toolbar");
+    Assert.equal(record.parentName, BookmarksToolbarTitle);
 
     _("Verify the folder's children. Ensures that the bookmarks were given GUIDs.");
     Assert.deepEqual(record.children, [bmk1.guid, bmk2.guid]);
 
   } finally {
     _("Clean up.");
     await store.wipe();
   }
@@ -482,17 +484,17 @@ add_task(async function test_delete_buff
   let store = engine._store;
 
   await store.wipe();
   await PlacesTestUtils.markBookmarksAsSynced();
 
   try {
     _("Create a folder with two bookmarks.");
     let folder = new BookmarkFolder("bookmarks", "testfolder-1");
-    folder.parentName = "Bookmarks Toolbar";
+    folder.parentName = BookmarksToolbarTitle;
     folder.parentid = "toolbar";
     folder.title = "Test Folder";
     await store.applyIncoming(folder);
 
 
     let fxRecord = new Bookmark("bookmarks", "get-firefox1");
     fxRecord.bmkUri        = "http://getfirefox.com/";
     fxRecord.title         = "Get Firefox!";
--- a/toolkit/components/places/BookmarkHTMLUtils.jsm
+++ b/toolkit/components/places/BookmarkHTMLUtils.jsm
@@ -915,18 +915,22 @@ BookmarkImporter.prototype = {
     await this._importBookmarks();
   },
 };
 
 function BookmarkExporter(aBookmarksTree) {
   // Create a map of the roots.
   let rootsMap = new Map();
   for (let child of aBookmarksTree.children) {
-    if (child.root)
+    if (child.root) {
       rootsMap.set(child.root, child);
+      // Also take the opportunity to get the correctly localised title for the
+      // root.
+      child.title = PlacesUtils.bookmarks.getLocalizedTitle(child);
+    }
   }
 
   // For backwards compatibility reasons the bookmarks menu is the root, while
   // the bookmarks toolbar and unfiled bookmarks will be child items.
   this._root = rootsMap.get("bookmarksMenuFolder");
 
   for (let key of [ "toolbarFolder", "unfiledBookmarksFolder" ]) {
     let root = rootsMap.get(key);
--- a/toolkit/components/places/Bookmarks.jsm
+++ b/toolkit/components/places/Bookmarks.jsm
@@ -168,16 +168,48 @@ var Bookmarks = Object.freeze({
    */
   isVirtualRootItem(guid) {
     return guid == PlacesUtils.bookmarks.virtualMenuGuid ||
            guid == PlacesUtils.bookmarks.virtualToolbarGuid ||
            guid == PlacesUtils.bookmarks.virtualUnfiledGuid;
   },
 
   /**
+   * Returns the title to use on the UI for a bookmark item. Root folders
+   * in the database don't store fully localised versions of the title. To
+   * get those this function should be called.
+   *
+   * Hence, this function should only be called if a root folder object is
+   * likely to be displayed to the user.
+   *
+   * @param {Object} info An object representing a bookmark-item.
+   * @returns {String} The correct string.
+   * @throws {Error} If the guid in PlacesUtils.bookmarks.userContentRoots is
+   *                 not supported.
+   */
+  getLocalizedTitle(info) {
+    if (!PlacesUtils.bookmarks.userContentRoots.includes(info.guid)) {
+      return info.title;
+    }
+
+    switch (info.guid) {
+      case PlacesUtils.bookmarks.toolbarGuid:
+        return PlacesUtils.getString("BookmarksToolbarFolderTitle");
+      case PlacesUtils.bookmarks.menuGuid:
+        return PlacesUtils.getString("BookmarksMenuFolderTitle");
+      case PlacesUtils.bookmarks.unfiledGuid:
+        return PlacesUtils.getString("OtherBookmarksFolderTitle");
+      case PlacesUtils.bookmarks.mobileGuid:
+        return PlacesUtils.getString("MobileBookmarksFolderTitle");
+      default:
+        throw new Error(`Unsupported guid ${info.guid} passed to getLocalizedTitle!`);
+    }
+  },
+
+  /**
    * Inserts a bookmark-item into the bookmarks tree.
    *
    * For creating a bookmark, the following set of properties is required:
    *  - type
    *  - parentGuid
    *  - url, only for bookmarked URLs
    *
    * If an index is not specified, it defaults to appending.
--- a/toolkit/components/places/Database.cpp
+++ b/toolkit/components/places/Database.cpp
@@ -221,17 +221,17 @@ SetJournalMode(nsCOMPtr<mozIStorageConne
   }
 
   return JOURNAL_DELETE;
 }
 
 nsresult
 CreateRoot(nsCOMPtr<mozIStorageConnection>& aDBConn,
            const nsCString& aRootName, const nsCString& aGuid,
-           const nsAString& titleString)
+           const nsCString& titleString)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   // The position of the new item in its folder.
   static int32_t itemPosition = 0;
 
   // A single creation timestamp for all roots so that the root folder's
   // last modification time isn't earlier than its childrens' creation time.
@@ -253,17 +253,17 @@ CreateRoot(nsCOMPtr<mozIStorageConnectio
   if (NS_FAILED(rv)) return rv;
 
   rv = stmt->BindInt32ByName(NS_LITERAL_CSTRING("item_type"),
                              nsINavBookmarksService::TYPE_FOLDER);
   if (NS_FAILED(rv)) return rv;
   rv = stmt->BindInt32ByName(NS_LITERAL_CSTRING("item_position"), itemPosition);
   if (NS_FAILED(rv)) return rv;
   rv = stmt->BindUTF8StringByName(NS_LITERAL_CSTRING("item_title"),
-                                  NS_ConvertUTF16toUTF8(titleString));
+                                  titleString);
   if (NS_FAILED(rv)) return rv;
   rv = stmt->BindInt64ByName(NS_LITERAL_CSTRING("date_added"), timestamp);
   if (NS_FAILED(rv)) return rv;
   rv = stmt->BindInt64ByName(NS_LITERAL_CSTRING("last_modified"), timestamp);
   if (NS_FAILED(rv)) return rv;
   rv = stmt->BindUTF8StringByName(NS_LITERAL_CSTRING("guid"), aGuid);
   if (NS_FAILED(rv)) return rv;
   rv = stmt->BindInt32ByName(NS_LITERAL_CSTRING("sync_status"),
@@ -1222,21 +1222,16 @@ Database::InitSchema(bool* aDatabaseMigr
       // Firefox 60 uses schema version 43.
 
       // Schema Upgrades must add migration code here.
       // >>> IMPORTANT! <<<
       // NEVER MIX UP SYNC AND ASYNC EXECUTION IN MIGRATORS, YOU MAY LOCK THE
       // CONNECTION AND CAUSE FURTHER STEPS TO FAIL.
       // In case, set a bool and do the async work in the ScopeExit guard just
       // before the migration steps.
-
-      rv = UpdateBookmarkRootTitles();
-      // We don't want a broken localization to cause us to think
-      // the database is corrupt and needs to be replaced.
-      MOZ_ASSERT(NS_SUCCEEDED(rv));
     }
   }
   else {
     // This is a new database, so we have to create all the tables and indices.
 
     // moz_places.
     rv = mMainConn->ExecuteSimpleSQL(CREATE_MOZ_PLACES);
     NS_ENSURE_SUCCESS(rv, rv);
@@ -1329,52 +1324,39 @@ Database::InitSchema(bool* aDatabaseMigr
   return NS_OK;
 }
 
 nsresult
 Database::CreateBookmarkRoots()
 {
   MOZ_ASSERT(NS_IsMainThread());
 
-  nsCOMPtr<nsIStringBundleService> bundleService =
-    services::GetStringBundleService();
-  NS_ENSURE_STATE(bundleService);
-  nsCOMPtr<nsIStringBundle> bundle;
-  nsresult rv = bundleService->CreateBundle(PLACES_BUNDLE, getter_AddRefs(bundle));
+  // The first root's title is an empty string.
+  nsresult rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("places"),
+                           NS_LITERAL_CSTRING("root________"), EmptyCString());
   if (NS_FAILED(rv)) return rv;
 
-  nsAutoString rootTitle;
-  // The first root's title is an empty string.
-  rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("places"),
-                  NS_LITERAL_CSTRING("root________"), rootTitle);
+  // For the other roots, the UI doesn't rely on the value in the database, so
+  // just set it to something simple to make it easier for humans to read.
+
+  rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("menu"),
+                  NS_LITERAL_CSTRING("menu________"), NS_LITERAL_CSTRING("menu"));
   if (NS_FAILED(rv)) return rv;
 
-  // Fetch the internationalized folder name from the string bundle.
-  rv = bundle->GetStringFromName("BookmarksMenuFolderTitle", rootTitle);
-  if (NS_FAILED(rv)) return rv;
-  rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("menu"),
-                  NS_LITERAL_CSTRING("menu________"), rootTitle);
+  rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("toolbar"),
+                  NS_LITERAL_CSTRING("toolbar_____"), NS_LITERAL_CSTRING("toolbar"));
   if (NS_FAILED(rv)) return rv;
 
-  rv = bundle->GetStringFromName("BookmarksToolbarFolderTitle", rootTitle);
-  if (NS_FAILED(rv)) return rv;
-  rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("toolbar"),
-                  NS_LITERAL_CSTRING("toolbar_____"), rootTitle);
+  rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("tags"),
+                  NS_LITERAL_CSTRING("tags________"), NS_LITERAL_CSTRING("tags"));
   if (NS_FAILED(rv)) return rv;
 
-  rv = bundle->GetStringFromName("TagsFolderTitle", rootTitle);
-  if (NS_FAILED(rv)) return rv;
-  rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("tags"),
-                  NS_LITERAL_CSTRING("tags________"), rootTitle);
-  if (NS_FAILED(rv)) return rv;
-
-  rv = bundle->GetStringFromName("OtherBookmarksFolderTitle", rootTitle);
   if (NS_FAILED(rv)) return rv;
   rv = CreateRoot(mMainConn, NS_LITERAL_CSTRING("unfiled"),
-                  NS_LITERAL_CSTRING("unfiled_____"), rootTitle);
+                  NS_LITERAL_CSTRING("unfiled_____"), NS_LITERAL_CSTRING("unfiled"));
   if (NS_FAILED(rv)) return rv;
 
   int64_t mobileRootId = CreateMobileRoot();
   if (mobileRootId <= 0) return NS_ERROR_FAILURE;
   {
     nsCOMPtr<mozIStorageStatement> mobileRootSyncStatusStmt;
     rv = mMainConn->CreateStatement(NS_LITERAL_CSTRING(
       "UPDATE moz_bookmarks SET syncStatus = :sync_status WHERE id = :id"
@@ -1483,79 +1465,16 @@ Database::InitTempEntities()
   NS_ENSURE_SUCCESS(rv, rv);
   rv = mMainConn->ExecuteSimpleSQL(CREATE_KEYWORDS_FOREIGNCOUNT_AFTERUPDATE_TRIGGER);
   NS_ENSURE_SUCCESS(rv, rv);
 
   return NS_OK;
 }
 
 nsresult
-Database::UpdateBookmarkRootTitles()
-{
-  MOZ_ASSERT(NS_IsMainThread());
-
-  nsCOMPtr<nsIStringBundleService> bundleService =
-    services::GetStringBundleService();
-  NS_ENSURE_STATE(bundleService);
-
-  nsCOMPtr<nsIStringBundle> bundle;
-  nsresult rv = bundleService->CreateBundle(PLACES_BUNDLE, getter_AddRefs(bundle));
-  if (NS_FAILED(rv)) return rv;
-
-  nsCOMPtr<mozIStorageAsyncStatement> stmt;
-  rv = mMainConn->CreateAsyncStatement(NS_LITERAL_CSTRING(
-    "UPDATE moz_bookmarks SET title = :new_title WHERE guid = :guid"
-  ), getter_AddRefs(stmt));
-  if (NS_FAILED(rv)) return rv;
-
-  nsCOMPtr<mozIStorageBindingParamsArray> paramsArray;
-  rv = stmt->NewBindingParamsArray(getter_AddRefs(paramsArray));
-  if (NS_FAILED(rv)) return rv;
-
-  const char *rootGuids[] = { "menu________"
-                            , "toolbar_____"
-                            , "tags________"
-                            , "unfiled_____"
-                            , "mobile______"
-                            };
-  const char *titleStringIDs[] = { "BookmarksMenuFolderTitle"
-                                 , "BookmarksToolbarFolderTitle"
-                                 , "TagsFolderTitle"
-                                 , "OtherBookmarksFolderTitle"
-                                 , "MobileBookmarksFolderTitle"
-                                 };
-
-  for (uint32_t i = 0; i < ArrayLength(rootGuids); ++i) {
-    nsAutoString title;
-    rv = bundle->GetStringFromName(titleStringIDs[i], title);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<mozIStorageBindingParams> params;
-    rv = paramsArray->NewBindingParams(getter_AddRefs(params));
-    if (NS_FAILED(rv)) return rv;
-    rv = params->BindUTF8StringByName(NS_LITERAL_CSTRING("guid"),
-                                      nsDependentCString(rootGuids[i]));
-    if (NS_FAILED(rv)) return rv;
-    rv = params->BindUTF8StringByName(NS_LITERAL_CSTRING("new_title"),
-                                      NS_ConvertUTF16toUTF8(title));
-    if (NS_FAILED(rv)) return rv;
-    rv = paramsArray->AddParams(params);
-    if (NS_FAILED(rv)) return rv;
-  }
-
-  rv = stmt->BindParameters(paramsArray);
-  if (NS_FAILED(rv)) return rv;
-  nsCOMPtr<mozIStoragePendingStatement> pendingStmt;
-  rv = stmt->ExecuteAsync(nullptr, getter_AddRefs(pendingStmt));
-  if (NS_FAILED(rv)) return rv;
-
-  return NS_OK;
-}
-
-nsresult
 Database::MigrateV31Up() {
   nsresult rv = mMainConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
     "DROP TABLE IF EXISTS moz_bookmarks_roots"
   ));
   NS_ENSURE_SUCCESS(rv, rv);
 
   return NS_OK;
 }
--- a/toolkit/components/places/PlacesDBUtils.jsm
+++ b/toolkit/components/places/PlacesDBUtils.jsm
@@ -222,18 +222,16 @@ this.PlacesDBUtils = {
         return logs;
       }).catch(ex => {
         PlacesDBUtils.clearPendingTasks();
         throw new Error("Unable to incrementally vacuum the favicons database " + ex);
       });
   },
 
   async _getCoherenceStatements() {
-    let updateRootTitleSql = `UPDATE moz_bookmarks SET title = :title
-                              WHERE id = :root_id AND title <> :title`;
     let cleanupStatements = [
       // MOZ_ANNO_ATTRIBUTES
       // A.1 remove obsolete annotations from moz_annos.
       // The 'weave0' idiom exploits character ordering (0 follows /) to
       // efficiently select all annos with a 'weave/' prefix.
       { query:
         `DELETE FROM moz_annos
         WHERE type = 4 OR anno_attribute_id IN (
@@ -280,57 +278,16 @@ this.PlacesDBUtils = {
       { query:
         `DELETE FROM moz_annos WHERE id IN (
           SELECT id FROM moz_annos a
           WHERE NOT EXISTS
             (SELECT id FROM moz_places WHERE id = a.place_id LIMIT 1)
         )`
       },
 
-      // MOZ_BOOKMARKS
-      // C.2 fix roots titles
-      // Some alpha version has wrong roots title, and this also fixes them if
-      // locale has changed.
-      { query: updateRootTitleSql,
-        params: {
-          root_id: PlacesUtils.placesRootId,
-          title: "",
-        }
-      },
-      { query: updateRootTitleSql,
-        params: {
-          root_id: PlacesUtils.bookmarksMenuFolderId,
-          title: PlacesUtils.getString("BookmarksMenuFolderTitle"),
-        }
-      },
-      { query: updateRootTitleSql,
-        params: {
-          root_id: PlacesUtils.bookmarksMenuFolderId,
-          title: PlacesUtils.getString("BookmarksMenuFolderTitle"),
-        }
-      },
-      { query: updateRootTitleSql,
-        params: {
-          root_id: PlacesUtils.toolbarFolderId,
-          title: PlacesUtils.getString("BookmarksToolbarFolderTitle"),
-        }
-      },
-      { query: updateRootTitleSql,
-        params: {
-          root_id: PlacesUtils.unfiledBookmarksFolderId,
-          title: PlacesUtils.getString("OtherBookmarksFolderTitle"),
-        }
-      },
-      { query: updateRootTitleSql,
-        params: {
-          root_id: PlacesUtils.tagsFolderId,
-          title: PlacesUtils.getString("TagsFolderTitle"),
-        }
-      },
-
       // D.1 remove items without a valid place
       // If fk IS NULL we fix them in D.7
       { query:
         `DELETE FROM moz_bookmarks WHERE guid NOT IN (
           :rootGuid, :menuGuid, :toolbarGuid, :unfiledGuid, :tagsGuid  /* skip roots */
         ) AND id IN (
           SELECT b.id FROM moz_bookmarks b
           WHERE fk NOT NULL AND b.type = :bookmark_type
--- a/toolkit/components/places/PlacesSyncUtils.jsm
+++ b/toolkit/components/places/PlacesSyncUtils.jsm
@@ -1052,26 +1052,16 @@ const BookmarkSyncUtils = PlacesSyncUtil
    */
   async ensureMobileQuery() {
     let db = await PlacesUtils.promiseDBConnection();
 
     let mobileChildGuids = await fetchChildGuids(db, PlacesUtils.bookmarks.mobileGuid);
     let hasMobileBookmarks = mobileChildGuids.length > 0;
 
     Services.prefs.setBoolPref(MOBILE_BOOKMARKS_PREF, hasMobileBookmarks);
-    if (hasMobileBookmarks) {
-      let mobileTitle = PlacesUtils.getString("MobileBookmarksFolderTitle");
-
-      // Make sure the mobile root title matches the query.
-      await PlacesUtils.bookmarks.update({
-        guid: PlacesUtils.bookmarks.mobileGuid,
-        title: mobileTitle,
-        source: SOURCE_SYNC,
-      });
-    }
   },
 
   /**
    * Fetches an array of GUIDs for items that have an annotation set with the
    * given value.
    */
   async fetchGuidsWithAnno(anno, val) {
     let db = await PlacesUtils.promiseDBConnection();
--- a/toolkit/components/places/tests/sync/head_sync.js
+++ b/toolkit/components/places/tests/sync/head_sync.js
@@ -5,16 +5,22 @@ ChromeUtils.import("resource://gre/modul
 ChromeUtils.import("resource://gre/modules/PlacesSyncUtils.jsm");
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/SyncedBookmarksMirror.jsm");
 ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 
 ChromeUtils.import("resource://testing-common/PlacesTestUtils.jsm");
 ChromeUtils.import("resource://testing-common/httpd.js");
 
+// These titles are defined in Database::CreateBookmarkRoots
+const BookmarksMenuTitle = "menu";
+const BookmarksToolbarTitle = "toolbar";
+const UnfiledBookmarksTitle = "unfiled";
+const MobileBookmarksTitle = "mobile";
+
 function run_test() {
   let bufLog = Log.repository.getLogger("Sync.Engine.Bookmarks.Mirror");
   bufLog.level = Log.Level.Error;
 
   let sqliteLog = Log.repository.getLogger("Sqlite");
   sqliteLog.level = Log.Level.Error;
 
   let formatter = new Log.BasicFormatter();
--- a/toolkit/components/places/tests/sync/test_bookmark_corruption.js
+++ b/toolkit/components/places/tests/sync/test_bookmark_corruption.js
@@ -24,17 +24,17 @@ add_task(async function test_missing_chi
     deepEqual(idsToUpload, {
       updated: [],
       deleted: [],
     }, "Should not reupload menu with missing children (B D E)");
     await assertLocalTree(PlacesUtils.bookmarks.menuGuid, {
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkCCCC",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "C",
         url: "http://example.com/c",
       }],
     }, "Menu children should be (C)");
@@ -63,17 +63,17 @@ add_task(async function test_missing_chi
     deepEqual(idsToUpload, {
       updated: [],
       deleted: [],
     }, "Should not reupload menu with missing child D");
     await assertLocalTree(PlacesUtils.bookmarks.menuGuid, {
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkBBBB",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "B",
         url: "http://example.com/b",
       }, {
         guid: "bookmarkCCCC",
@@ -109,17 +109,17 @@ add_task(async function test_missing_chi
     deepEqual(idsToUpload, {
       updated: [],
       deleted: [],
     }, "Should not reupload complete menu");
     await assertLocalTree(PlacesUtils.bookmarks.menuGuid, {
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkBBBB",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "B",
         url: "http://example.com/b",
       }, {
         guid: "bookmarkCCCC",
@@ -187,17 +187,17 @@ add_task(async function test_new_orphan_
       deleted: [],
     }, "Should not reupload orphans (B C D)");
   }
 
   await assertLocalTree(PlacesUtils.bookmarks.unfiledGuid, {
     guid: PlacesUtils.bookmarks.unfiledGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 3,
-    title: "Other Bookmarks",
+    title: UnfiledBookmarksTitle,
     children: [{
       guid: "bookmarkBBBB",
       type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
       index: 0,
       title: "B (remote)",
       url: "http://example.com/b-remote",
     }, {
       guid: "bookmarkCCCC",
@@ -234,17 +234,17 @@ add_task(async function test_new_orphan_
       deleted: [],
     }, "Should not reupload orphan A");
   }
 
   await assertLocalTree(PlacesUtils.bookmarks.unfiledGuid, {
     guid: PlacesUtils.bookmarks.unfiledGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 3,
-    title: "Other Bookmarks",
+    title: UnfiledBookmarksTitle,
     children: [{
       guid: "folderAAAAAA",
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
       title: "A",
       children: [{
         guid: "bookmarkDDDD",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
@@ -286,17 +286,17 @@ add_task(async function test_new_orphan_
     }, "Should not reupload orphan E");
   }
 
   // E is still in unfiled because we don't have a record for the menu.
   await assertLocalTree(PlacesUtils.bookmarks.unfiledGuid, {
     guid: PlacesUtils.bookmarks.unfiledGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 3,
-    title: "Other Bookmarks",
+    title: UnfiledBookmarksTitle,
     children: [{
       guid: "folderEEEEEE",
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
       title: "E",
       children: [{
         guid: "folderAAAAAA",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
@@ -347,17 +347,17 @@ add_task(async function test_new_orphan_
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "folderEEEEEE",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "E",
         children: [{
           guid: "folderAAAAAA",
           type: PlacesUtils.bookmarks.TYPE_FOLDER,
@@ -383,27 +383,27 @@ add_task(async function test_new_orphan_
             url: "http://example.com/b-remote",
           }],
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should form complete tree after applying E");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
@@ -520,17 +520,17 @@ add_task(async function test_move_into_o
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         // A remains in its original place, since we don't use the `parentid`,
         // and we don't have a record for G.
         guid: "bookmarkAAAA",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "A",
         url: "http://example.com/a",
@@ -573,27 +573,27 @@ add_task(async function test_move_into_o
             url: "http://example.com/i",
           }],
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should treat local tree as canonical if server is missing new parent");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
@@ -671,17 +671,17 @@ add_task(async function test_new_orphan_
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "folderAAAAAA",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "A",
         children: [{
           guid: "bookmarkBBBB",
           type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
@@ -695,22 +695,22 @@ add_task(async function test_new_orphan_
           title: "E",
           url: "http://example.com/e",
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
       children: [{
         guid: "bookmarkCCCC",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "C (remote)",
         url: "http://example.com/c-remote",
       }, {
         guid: "bookmarkDDDD",
@@ -718,17 +718,17 @@ add_task(async function test_new_orphan_
         index: 1,
         title: "D (remote)",
         url: "http://example.com/d-remote",
       }],
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should move (C D) to unfiled");
 
   // The partial uploader returns and uploads A.
   info("Add A to remote");
   await buf.store([{
     id: "folderAAAAAA",
     type: "folder",
@@ -865,27 +865,27 @@ add_task(async function test_partial_cyc
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
       children: [{
         guid: "folderBBBBBB",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "B (remote)",
         children: [{
           guid: "folderAAAAAA",
           type: PlacesUtils.bookmarks.TYPE_FOLDER,
@@ -899,17 +899,17 @@ add_task(async function test_partial_cyc
             url: "http://example.com/c",
           }],
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should move A and B to unfiled");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
@@ -964,31 +964,31 @@ add_task(async function test_complete_cy
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should not be confused into creating a cycle");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
--- a/toolkit/components/places/tests/sync/test_bookmark_deduping.js
+++ b/toolkit/components/places/tests/sync/test_bookmark_deduping.js
@@ -135,17 +135,17 @@ add_task(async function test_duping() {
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "folderAAAAAA",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "A",
         children: [{
           guid: "bookmarkGGGG",
           type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
@@ -216,27 +216,27 @@ add_task(async function test_duping() {
         index: 6,
         title: "C",
         url: "http://example.com/c",
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should dedupe matching NEW bookmarks");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
--- a/toolkit/components/places/tests/sync/test_bookmark_deletion.js
+++ b/toolkit/components/places/tests/sync/test_bookmark_deletion.js
@@ -112,17 +112,17 @@ add_task(async function test_complex_orp
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "folderGGGGGG",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "G",
         children: [{
           guid: "folderCCCCCC",
           type: PlacesUtils.bookmarks.TYPE_FOLDER,
@@ -137,17 +137,17 @@ add_task(async function test_complex_orp
             url: "http://example.com/f",
           }],
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
       children: [{
         guid: "folderAAAAAA",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "A",
         children: [{
           // B was deleted, so E moved to A.
           guid: "bookmarkEEEE",
@@ -156,22 +156,22 @@ add_task(async function test_complex_orp
           title: "E",
           url: "http://example.com/e",
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should move orphans to closest surviving parent");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
@@ -287,17 +287,17 @@ add_task(async function test_locally_mod
     updated: ["bookmarkAAAA", "bookmarkFFFF", "bookmarkGGGG", "menu"],
     deleted: [],
   }, "Should upload A, relocated local orphans, and menu");
 
   await assertLocalTree(PlacesUtils.bookmarks.menuGuid, {
     guid: PlacesUtils.bookmarks.menuGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
-    title: "Bookmarks Menu",
+    title: BookmarksMenuTitle,
     children: [{
       guid: "bookmarkAAAA",
       type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
       index: 0,
       title: "A (local)",
       url: "http://example.com/a-local",
     }, {
       guid: "bookmarkFFFF",
@@ -422,17 +422,17 @@ add_task(async function test_locally_del
     updated: ["bookmarkFFFF", "bookmarkGGGG", "menu"],
     deleted: ["bookmarkCCCC", "bookmarkEEEE", "folderBBBBBB", "folderDDDDDD"],
   }, "Should upload relocated remote orphans and menu");
 
   await assertLocalTree(PlacesUtils.bookmarks.menuGuid, {
     guid: PlacesUtils.bookmarks.menuGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
-    title: "Bookmarks Menu",
+    title: BookmarksMenuTitle,
     children: [{
       guid: "bookmarkAAAA",
       type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
       index: 0,
       title: "A (remote)",
       url: "http://example.com/a-remote",
     }, {
       guid: "bookmarkFFFF",
@@ -544,39 +544,39 @@ add_task(async function test_move_to_new
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkCCCC",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "C (remote)",
         url: "http://example.com/c-remote",
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should move C to closest surviving parent");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
@@ -628,17 +628,17 @@ add_task(async function test_nonexistent
       synced: false,
       cleartext: {
         id: "menu",
         type: "folder",
         parentid: "places",
         hasDupe: false,
         parentName: "",
         dateAdded: menuDateAdded.getTime(),
-        title: "Bookmarks Menu",
+        title: BookmarksMenuTitle,
         children: [],
       },
     },
   });
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
@@ -743,30 +743,30 @@ add_task(async function test_clear_folde
   }]);
 
   info("Apply remote");
   let changesToUpload = await buf.apply();
   deepEqual(await buf.fetchUnmergedGuids(), [], "Should merge all items");
 
   let idsToUpload = inspectChangeRecords(changesToUpload);
   deepEqual(idsToUpload, {
-    updated: ["bookmarkEEEE", "bookmarkFFFF", "menu", "mobile"],
+    updated: ["bookmarkEEEE", "bookmarkFFFF", "menu", MobileBookmarksTitle],
     deleted: ["bookmarkDDDD"],
   }, "Should upload locally moved and deleted items");
 
   await assertLocalTree(PlacesUtils.bookmarks.rootGuid, {
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkBBBB",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "B",
         url: "http://example.com/b",
       }, {
         guid: "bookmarkEEEE",
@@ -774,34 +774,34 @@ add_task(async function test_clear_folde
         index: 1,
         title: "E",
         url: "http://example.com/e",
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
       children: [{
         guid: "bookmarkCCCC",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "C",
         url: "http://example.com/c",
       }],
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
       children: [{
         guid: "bookmarkFFFF",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "F",
         url: "http://example.com/f",
       }],
     }],
@@ -929,17 +929,17 @@ add_task(async function test_newer_move_
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkEEEE",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "E",
         url: "http://example.com/e",
       }, {
         guid: "bookmarkFFFF",
@@ -947,17 +947,17 @@ add_task(async function test_newer_move_
         index: 1,
         title: "F",
         url: "http://example.com/f",
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
       children: [{
         guid: "bookmarkDDDD",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "D",
         url: "http://example.com/d",
       }, {
         guid: "bookmarkBBBB",
@@ -965,21 +965,21 @@ add_task(async function test_newer_move_
         index: 1,
         title: "B",
         url: "http://example.com/b",
       }],
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should not decide to keep newly moved items in deleted parents");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
--- a/toolkit/components/places/tests/sync/test_bookmark_kinds.js
+++ b/toolkit/components/places/tests/sync/test_bookmark_kinds.js
@@ -90,17 +90,17 @@ add_task(async function test_livemarks()
         tombstone: false,
         counter: 1,
         synced: false,
         cleartext: {
           id: "livemarkDDDD",
           type: "livemark",
           parentid: "menu",
           hasDupe: false,
-          parentName: "Bookmarks Menu",
+          parentName: BookmarksMenuTitle,
           dateAdded: PlacesUtils.toDate(livemarkD.dateAdded).getTime(),
           title: "D",
           feedUri: site + "/feed/d",
           siteUri: site + "/site/d",
         },
       },
       menu: {
         tombstone: false,
@@ -138,17 +138,17 @@ add_task(async function test_livemarks()
       guid: PlacesUtils.bookmarks.rootGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
       title: "",
       children: [{
         guid: PlacesUtils.bookmarks.menuGuid,
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
-        title: "Bookmarks Menu",
+        title: BookmarksMenuTitle,
         children: [{
           guid: "livemarkAAAA",
           type: PlacesUtils.bookmarks.TYPE_FOLDER,
           index: 0,
           title: "A (remote)",
           annos: [{
             name: PlacesUtils.LMANNO_FEEDURI,
             flags: 0,
@@ -171,17 +171,17 @@ add_task(async function test_livemarks()
             expires: PlacesUtils.annotations.EXPIRE_NEVER,
             value: site + "/site/d",
           }],
         }],
       }, {
         guid: PlacesUtils.bookmarks.toolbarGuid,
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 1,
-        title: "Bookmarks Toolbar",
+        title: BookmarksToolbarTitle,
         children: [{
           guid: "livemarkCCCC",
           type: PlacesUtils.bookmarks.TYPE_FOLDER,
           index: 0,
           title: "C (remote)",
           annos: [{
             name: PlacesUtils.LMANNO_FEEDURI,
             flags: 0,
@@ -199,17 +199,17 @@ add_task(async function test_livemarks()
             expires: PlacesUtils.annotations.EXPIRE_NEVER,
             value: site + "/feed/b-remote",
           }],
         }],
       }, {
         guid: PlacesUtils.bookmarks.unfiledGuid,
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 3,
-        title: "Other Bookmarks",
+        title: UnfiledBookmarksTitle,
         children: [{
           guid: "livemarkEEEE",
           type: PlacesUtils.bookmarks.TYPE_FOLDER,
           index: 0,
           title: "E",
           annos: [{
             name: PlacesUtils.LMANNO_FEEDURI,
             flags: 0,
@@ -221,17 +221,17 @@ add_task(async function test_livemarks()
             expires: PlacesUtils.annotations.EXPIRE_NEVER,
             value: site + "/site/e",
           }],
         }],
       }, {
         guid: PlacesUtils.bookmarks.mobileGuid,
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 4,
-        title: "mobile",
+        title: MobileBookmarksTitle,
       }],
     }, "Should apply and dedupe livemarks");
 
     let cLivemark = await PlacesUtils.livemarks.getLivemark({
       guid: "livemarkCCCC",
     });
     equal(cLivemark.title, "C (remote)", "Should set livemark C title");
     ok(cLivemark.feedURI.equals(Services.io.newURI(site + "/feed/c-remote")),
--- a/toolkit/components/places/tests/sync/test_bookmark_structure_changes.js
+++ b/toolkit/components/places/tests/sync/test_bookmark_structure_changes.js
@@ -132,17 +132,17 @@ add_task(async function test_value_struc
               parentGuid: PlacesUtils.bookmarks.menuGuid, oldValue: "D",
               source: PlacesUtils.bookmarks.SOURCES.SYNC },
   }]);
 
   await assertLocalTree(PlacesUtils.bookmarks.menuGuid, {
     guid: PlacesUtils.bookmarks.menuGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
-    title: "Bookmarks Menu",
+    title: BookmarksMenuTitle,
     children: [{
       guid: "folderAAAAAA",
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
       title: "A (local)",
       children: [{
         guid: "bookmarkCCCC",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
@@ -353,22 +353,22 @@ add_task(async function test_move() {
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
       children: [{
         guid: "devFolder___",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "Dev",
         children: [{
           guid: "bzBmk_______",
           type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
@@ -382,17 +382,17 @@ add_task(async function test_move() {
           title: "Webmaker",
           url: "https://webmaker.org/",
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
       children: [{
         guid: "mozFolder___",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "Mozilla",
         children: [{
           guid: "nightlyBmk__",
           type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
@@ -412,17 +412,17 @@ add_task(async function test_move() {
           title: "Get Firefox!",
           url: "http://getfirefox.com/",
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should move and reorder bookmarks to match remote");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
@@ -512,17 +512,17 @@ add_task(async function test_move_into_p
               newParentGuid: "folderCCCCCC",
               source: PlacesUtils.bookmarks.SOURCES.SYNC },
   }]);
 
   await assertLocalTree(PlacesUtils.bookmarks.menuGuid, {
     guid: PlacesUtils.bookmarks.menuGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
-    title: "Bookmarks Menu",
+    title: BookmarksMenuTitle,
     children: [{
       guid: "folderAAAAAA",
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
       title: "A",
     }, {
       guid: "folderCCCCCC",
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
@@ -668,29 +668,29 @@ add_task(async function test_complex_mov
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkCCCC",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         title: "C",
         url: "http://example.com/c",
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
       children: [{
         // We can guarantee child order (B E D), since we always walk remote
         // children first, and the remote folder A record is newer than the
         // local folder. If the local folder were newer, the order would be
         // (D B E).
         guid: "folderAAAAAA",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
@@ -714,22 +714,22 @@ add_task(async function test_complex_mov
           title: "D (local)",
           url: "http://example.com/d-local",
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should take remote order and preserve local children");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
@@ -877,17 +877,17 @@ add_task(async function test_reorder_and
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "bookmarkCCCC",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         url: "http://example.com/c",
         title: "C",
       }, {
         guid: "bookmarkAAAA",
@@ -913,17 +913,17 @@ add_task(async function test_reorder_and
         index: 4,
         url: "http://example.com/j",
         title: "J",
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
       children: [{
         guid: "bookmarkFFFF",
         type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         index: 0,
         url: "http://example.com/f",
         title: "F",
       }, {
         guid: "bookmarkDDDD",
@@ -949,21 +949,21 @@ add_task(async function test_reorder_and
         index: 4,
         url: "http://example.com/h",
         title: "H",
       }],
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should use timestamps to decide base folder order");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
--- a/toolkit/components/places/tests/sync/test_bookmark_value_changes.js
+++ b/toolkit/components/places/tests/sync/test_bookmark_value_changes.js
@@ -77,17 +77,17 @@ add_task(async function test_value_combo
       tombstone: false,
       counter: 3,
       synced: false,
       cleartext: {
         id: "bzBmk_______",
         type: "bookmark",
         parentid: "toolbar",
         hasDupe: false,
-        parentName: "Bookmarks Toolbar",
+        parentName: BookmarksToolbarTitle,
         dateAdded: bzBmk.dateAdded.getTime(),
         bmkUri: "https://bugzilla.mozilla.org/",
         title: "Bugzilla",
         tags: ["new", "tag"],
       },
     },
     toolbar: {
       tombstone: false,
@@ -95,17 +95,17 @@ add_task(async function test_value_combo
       synced: false,
       cleartext: {
         id: "toolbar",
         type: "folder",
         parentid: "places",
         hasDupe: false,
         parentName: "",
         dateAdded: menuInfo.dateAdded.getTime(),
-        title: "Bookmarks Toolbar",
+        title: BookmarksToolbarTitle,
         children: ["fxBmk_______", "tFolder_____", "bzBmk_______"],
       },
     },
   }, "Should upload new local bookmarks and parents");
 
   let localItemIds = await PlacesUtils.promiseManyItemIds(["fxBmk_______",
     "tFolder_____", "tbBmk_______", "bzBmk_______", "mozBmk______"]);
   observer.check([{
@@ -351,17 +351,17 @@ add_task(async function test_value_only_
     guid: PlacesUtils.bookmarks.rootGuid,
     type: PlacesUtils.bookmarks.TYPE_FOLDER,
     index: 0,
     title: "",
     children: [{
       guid: PlacesUtils.bookmarks.menuGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 0,
-      title: "Bookmarks Menu",
+      title: BookmarksMenuTitle,
       children: [{
         guid: "folderAAAAAA",
         type: PlacesUtils.bookmarks.TYPE_FOLDER,
         index: 0,
         title: "A",
         children: [{
           guid: "bookmarkBBBB",
           type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
@@ -423,27 +423,27 @@ add_task(async function test_value_only_
             url: "http://example.com/i-remote",
           }],
         }],
       }],
     }, {
       guid: PlacesUtils.bookmarks.toolbarGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 1,
-      title: "Bookmarks Toolbar",
+      title: BookmarksToolbarTitle,
     }, {
       guid: PlacesUtils.bookmarks.unfiledGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 3,
-      title: "Other Bookmarks",
+      title: UnfiledBookmarksTitle,
     }, {
       guid: PlacesUtils.bookmarks.mobileGuid,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       index: 4,
-      title: "mobile",
+      title: MobileBookmarksTitle,
     }],
   }, "Should not change structure for value-only changes");
 
   await buf.finalize();
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
--- a/toolkit/components/places/tests/unit/test_1105208.js
+++ b/toolkit/components/places/tests/unit/test_1105208.js
@@ -1,20 +1,26 @@
 // Test that result node for folder shortcuts get the target folder title if
 // the shortcut itself has no title set.
 add_task(async function() {
+  let folder = await PlacesUtils.bookmarks.insert({
+    type: PlacesUtils.bookmarks.TYPE_FOLDER,
+    parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+    title: "fake"
+  });
+
+  let folderId = await PlacesUtils.promiseItemId(folder.guid);
+
   let shortcutInfo = await PlacesUtils.bookmarks.insert({
     type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
     parentGuid: PlacesUtils.bookmarks.unfiledGuid,
-    url: "place:folder=TOOLBAR"
+    url: `place:folder=${folderId}`
   });
 
   let unfiledRoot =
     PlacesUtils.getFolderContents(PlacesUtils.unfiledBookmarksFolderId).root;
   let shortcutNode = unfiledRoot.getChild(unfiledRoot.childCount - 1);
   Assert.equal(shortcutNode.bookmarkGuid, shortcutInfo.guid);
 
-  let toolbarInfo =
-    await PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.toolbarGuid);
-  Assert.equal(shortcutNode.title, toolbarInfo.title);
+  Assert.equal(shortcutNode.title, folder.title);
 
   unfiledRoot.containerOpen = false;
 });
--- a/toolkit/components/places/tests/unit/test_bookmarks_html_escape_entities.js
+++ b/toolkit/components/places/tests/unit/test_bookmarks_html_escape_entities.js
@@ -66,17 +66,17 @@ add_task(async function() {
           if (["tags", "last_charset", "shortcuturl", "post_data"].includes(name)) {
             Assert.equal(value, unescaped, `Attribute ${name} should be complete`);
             checksCount--;
           }
         }
         break;
       case Ci.nsIDOMNode.TEXT_NODE:
         // Check Title and description.
-        if (!current.data.startsWith("\n") && !current.data.includes("Bookmarks")) {
+        if (!current.data.startsWith("\n") && current.data.includes("test")) {
           Assert.equal(current.data.trim(), unescaped, "Text node should be complete");
           checksCount--;
         }
         break;
     }
   }
   Assert.equal(checksCount, 0, "All the checks ran");
 });
--- a/toolkit/components/places/tests/unit/test_preventive_maintenance.js
+++ b/toolkit/components/places/tests/unit/test_preventive_maintenance.js
@@ -368,45 +368,16 @@ tests.push({
     Assert.equal(bs.getFolderIdForItem(bs.bookmarksMenuFolder), bs.placesRoot);
     Assert.equal(bs.getFolderIdForItem(bs.tagsFolder), bs.placesRoot);
     Assert.equal(bs.getFolderIdForItem(bs.unfiledBookmarksFolder), bs.placesRoot);
     Assert.equal(bs.getFolderIdForItem(bs.toolbarFolder), bs.placesRoot);
   }
 });
 
 // ------------------------------------------------------------------------------
-tests.push({
-  name: "C.2",
-  desc: "Fix roots titles",
-
-  setup() {
-    // Sanity check: ensure that roots titles are correct. We can use our check.
-    this.check();
-    // Change some roots' titles.
-    bs.setItemTitle(bs.placesRoot, "bad title");
-    Assert.equal(bs.getItemTitle(bs.placesRoot), "bad title");
-    bs.setItemTitle(bs.unfiledBookmarksFolder, "bad title");
-    Assert.equal(bs.getItemTitle(bs.unfiledBookmarksFolder), "bad title");
-  },
-
-  check() {
-    // Ensure all roots titles are correct.
-    Assert.equal(bs.getItemTitle(bs.placesRoot), "");
-    Assert.equal(bs.getItemTitle(bs.bookmarksMenuFolder),
-                 PlacesUtils.getString("BookmarksMenuFolderTitle"));
-    Assert.equal(bs.getItemTitle(bs.tagsFolder),
-                 PlacesUtils.getString("TagsFolderTitle"));
-    Assert.equal(bs.getItemTitle(bs.unfiledBookmarksFolder),
-                 PlacesUtils.getString("OtherBookmarksFolderTitle"));
-    Assert.equal(bs.getItemTitle(bs.toolbarFolder),
-                 PlacesUtils.getString("BookmarksToolbarFolderTitle"));
-  }
-});
-
-// ------------------------------------------------------------------------------
 
 tests.push({
   name: "D.1",
   desc: "Remove items without a valid place",
 
   _validItemId: null,
   _invalidItemId: null,
   _invalidSyncedItemId: null,
--- a/toolkit/components/places/tests/unit/test_sync_utils.js
+++ b/toolkit/components/places/tests/unit/test_sync_utils.js
@@ -1889,17 +1889,17 @@ add_task(async function test_fetch() {
   {
     let item = await PlacesSyncUtils.bookmarks.fetch(folder.recordId);
     deepEqual(item, {
       recordId: folder.recordId,
       kind: "folder",
       parentRecordId: "menu",
       description: "Folder description",
       childRecordIds: [folderBmk.recordId, folderSep.recordId],
-      parentTitle: "Bookmarks Menu",
+      parentTitle: "menu",
       dateAdded: item.dateAdded,
       title: "",
     }, "Should include description, children, title, and parent title in folder");
   }
 
   info("Fetch bookmark with description, sidebar anno, and tags");
   {
     let item = await PlacesSyncUtils.bookmarks.fetch(bmk.recordId);
@@ -1907,17 +1907,17 @@ add_task(async function test_fetch() {
       "url", "tags", "description", "loadInSidebar", "parentTitle", "title", "dateAdded"].sort(),
       "Should include bookmark-specific properties");
     equal(item.recordId, bmk.recordId, "Sync ID should match");
     equal(item.url.href, "https://example.com/", "Should return URL");
     equal(item.parentRecordId, "menu", "Should return parent sync ID");
     deepEqual(item.tags, ["taggy"], "Should return tags");
     equal(item.description, "Bookmark description", "Should return bookmark description");
     strictEqual(item.loadInSidebar, true, "Should return sidebar anno");
-    equal(item.parentTitle, "Bookmarks Menu", "Should return parent title");
+    equal(item.parentTitle, "menu", "Should return parent title");
     strictEqual(item.title, "", "Should return empty title");
   }
 
   info("Fetch bookmark with keyword; without parent title or annos");
   {
     let item = await PlacesSyncUtils.bookmarks.fetch(folderBmk.recordId);
     deepEqual(Object.keys(item).sort(), ["recordId", "kind", "parentRecordId",
       "url", "keyword", "tags", "loadInSidebar", "parentTitle", "title", "dateAdded"].sort(),