Bug 1452645 - Remove load in sidebar functionality. r?mak,r?lina draft
authorMark Banner <standard8@mozilla.com>
Wed, 06 Jun 2018 21:00:45 +0100
changeset 809507 48254e96df5155cca146fb9f6823f1ac3e850f4c
parent 809377 27e90ec610a4c8f6b2a73d79cb1a4df38e822e6a
child 809508 633312b4f14d3f6e203050c51b7218698c581406
push id113701
push userbmo:standard8@mozilla.com
push dateFri, 22 Jun 2018 10:02:26 +0000
reviewersmak, lina
bugs1452645
milestone62.0a1
Bug 1452645 - Remove load in sidebar functionality. r?mak,r?lina Based on patch by mixedpuppy. MozReview-Commit-ID: BZwOtr4VbCH
browser/base/content/browser-context.inc
browser/base/content/browser-places.js
browser/base/content/browser-sets.inc
browser/base/content/browser-sidebar.js
browser/base/content/browser.css
browser/base/content/browser.js
browser/base/content/content.js
browser/base/content/test/sidebar/browser.ini
browser/base/content/test/sidebar/browser_bug409481.js
browser/base/content/web-panels.js
browser/base/content/web-panels.xul
browser/base/jar.mn
browser/components/places/PlacesUIUtils.jsm
browser/components/places/content/bookmarkProperties.js
browser/components/places/content/controller.js
browser/components/places/content/editBookmark.js
browser/components/places/content/editBookmarkPanel.inc.xul
browser/components/places/content/places.js
browser/components/places/tests/browser/browser.ini
browser/components/places/tests/browser/browser_bookmark_load_in_sidebar.js
browser/locales/en-US/chrome/browser/places/editBookmarkOverlay.dtd
browser/modules/ContentClick.jsm
services/sync/modules/bookmark_validator.js
services/sync/modules/engines/bookmarks.js
services/sync/tests/tps/test_bug562515.js
services/sync/tests/tps/test_sync.js
services/sync/tests/unit/test_bookmark_store.js
services/sync/tests/unit/test_engine_changes_during_sync.js
services/sync/tps/extensions/tps/resource/modules/bookmarks.jsm
toolkit/components/places/BookmarkHTMLUtils.jsm
toolkit/components/places/PlacesSyncUtils.jsm
toolkit/components/places/PlacesUtils.jsm
toolkit/components/places/SyncedBookmarksMirror.jsm
toolkit/components/places/tests/sync/head_sync.js
toolkit/components/places/tests/sync/test_sync_utils.js
toolkit/components/places/tests/unit/test_384370.js
toolkit/components/places/tests/unit/test_bookmarks_html.js
toolkit/components/places/tests/unit/test_bookmarks_html_corrupt.js
toolkit/components/places/tests/unit/test_bookmarks_json.js
--- a/browser/base/content/browser-context.inc
+++ b/browser/base/content/browser-context.inc
@@ -263,17 +263,17 @@
       <menuseparator id="context-sep-sendpagetodevice" class="sync-ui-item"
                      hidden="true"/>
       <menu id="context-sendpagetodevice"
             class="sync-ui-item"
             label="&sendPageToDevice.label;"
             accesskey="&sendPageToDevice.accesskey;"
             hidden="true">
         <menupopup id="context-sendpagetodevice-popup"
-                   onpopupshowing="(() => { let browser = gBrowser || getPanelBrowser(); gSync.populateSendTabToDevicesMenu(event.target, browser.currentURI.spec, browser.contentTitle); })()"/>
+                   onpopupshowing="(() => { gSync.populateSendTabToDevicesMenu(event.target, gBrowser.currentURI.spec, gBrowser.contentTitle); })()"/>
       </menu>
       <menuseparator id="context-sep-viewbgimage"/>
       <menuitem id="context-viewbgimage"
                 label="&viewBGImageCmd.label;"
                 accesskey="&viewBGImageCmd.accesskey;"
                 oncommand="gContextMenu.viewBGImage(event);"
                 onclick="checkForMiddleClick(this, event);"/>
       <menuitem id="context-undo"
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -291,18 +291,17 @@ var StarUI = {
         target = target.parentNode;
       }
       target.addEventListener("popupshown", function(event) {
         fn();
       }, {capture: true, once: true});
     };
     gEditItemOverlay.initPanel({ node: aNode,
                                  onPanelReady,
-                                 hiddenRows: ["location",
-                                              "loadInSidebar", "keyword"],
+                                 hiddenRows: ["location", "keyword"],
                                  focusedElement: "preferred"});
 
     this.panel.openPopup(aAnchorElement, aPosition);
   },
 
   _setIconAndPreviewImage(aIsCurrentBrowser) {
     let faviconImage = this._element("editBookmarkPanelFavicon");
     faviconImage.removeAttribute("iconloadingprincipal");
@@ -510,19 +509,17 @@ var PlacesCommandHook = {
                        PlacesUtils.bookmarks.menuGuid :
                        await PlacesUtils.promiseItemGuid(parentId);
     let defaultInsertionPoint = new PlacesInsertionPoint({ parentId, parentGuid });
     PlacesUIUtils.showBookmarkDialog({ action: "add",
                                        type: "bookmark",
                                        uri: makeURI(url),
                                        title,
                                        defaultInsertionPoint,
-                                       hiddenRows: [ "location",
-                                                     "loadInSidebar",
-                                                     "keyword" ]
+                                       hiddenRows: [ "location", "keyword" ]
                                      }, window.top);
   },
 
   /**
    * List of nsIURI objects characterizing the tabs currently open in the
    * browser, modulo pinned tabs.  The URIs will be in the order in which their
    * corresponding tabs appeared and duplicates are discarded.
    */
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -124,20 +124,16 @@
                  sidebarurl="chrome://browser/content/places/bookmarksSidebar.xul"
                  oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/>
 
     <broadcaster id="viewHistorySidebar" autoCheck="false" sidebartitle="&historyButton.label;"
                  type="checkbox" group="sidebar"
                  sidebarurl="chrome://browser/content/places/historySidebar.xul"
                  oncommand="SidebarUI.toggle('viewHistorySidebar');"/>
 
-    <broadcaster id="viewWebPanelsSidebar" autoCheck="false"
-                 type="checkbox" group="sidebar" sidebarurl="chrome://browser/content/web-panels.xul"
-                 oncommand="SidebarUI.toggle('viewWebPanelsSidebar');"/>
-
     <broadcaster id="bookmarkThisPageBroadcaster"
                  label="&bookmarkThisPageCmd.label;"
                  bookmarklabel="&bookmarkThisPageCmd.label;"
                  editlabel="&editThisBookmarkCmd.label;"/>
 
     <!-- popup blocking menu items -->
     <broadcaster id="blockedPopupAllowSite"
                  accesskey="&allowPopups.accesskey;"
--- a/browser/base/content/browser-sidebar.js
+++ b/browser/base/content/browser-sidebar.js
@@ -475,27 +475,16 @@ var SidebarUI = {
       let selBrowser = gBrowser.selectedBrowser;
       selBrowser.messageManager.sendAsyncMessage("Sidebar:VisibilityChange",
         {commandID, isOpen: true}
       );
     });
   },
 
   /**
-  * Sets the webpage favicon in sidebar
-  *
-  */
-  setWebPageIcon(url) {
-    let iconURL = "url(page-icon:" + url + ")";
-    if (this._box.getAttribute("sidebarcommand") == "viewWebPanelsSidebar") {
-      this._icon.style.setProperty("--sidebar-webpage-icon", iconURL);
-    }
-  },
-
-  /**
    * Hide the sidebar.
    *
    * @param {DOMNode} [triggerNode] Node, usually a button, that triggered the
    *                                hiding of the sidebar.
    */
   hide(triggerNode) {
     if (!this.isOpen) {
       return;
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -1406,26 +1406,16 @@ toolbarpaletteitem:not([place="palette"]
 }
 #pageActionContextMenu[state=builtInPinned] > .pageActionContextMenuItem.builtInPinned,
 #pageActionContextMenu[state=builtInUnpinned] > .pageActionContextMenuItem.builtInUnpinned,
 #pageActionContextMenu[state=extensionPinned] > .pageActionContextMenuItem.extensionPinned,
 #pageActionContextMenu[state=extensionUnpinned] > .pageActionContextMenuItem.extensionUnpinned {
   visibility: visible;
 }
 
-
-/* Favicon in Open Bookmark in Sidebar */
-#sidebar-box[sidebarcommand="viewWebPanelsSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
-  list-style-image: var(--sidebar-webpage-icon, url(chrome://mozapps/skin/places/defaultFavicon.svg) );
-  -moz-context-properties: fill;
-  fill: currentColor;
-  width: 16px;
-  height: 16px;
-}
-
 /* WebExtension Sidebars */
 #sidebar-box[sidebarcommand$="-sidebar-action"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
   list-style-image: var(--webextension-menuitem-image, inherit);
   -moz-context-properties: fill;
   fill: currentColor;
   width: 16px;
   height: 16px;
 }
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -6078,51 +6078,16 @@ function UpdateDynamicShortcutTooltipTex
         args.push(ShortcutUtils.prettifyShortcut(shortcut));
       }
     }
     gDynamicTooltipCache.set(nodeId, gNavigatorBundle.getFormattedString(strId, args));
   }
   aTooltip.setAttribute("label", gDynamicTooltipCache.get(nodeId));
 }
 
-var gWebPanelURI;
-function openWebPanel(title, uri) {
-  // Ensure that the web panels sidebar is open.
-  SidebarUI.show("viewWebPanelsSidebar");
-
-  // Set the title of the panel.
-  SidebarUI.title = title;
-
-  // Tell the Web Panels sidebar to load the bookmark.
-  if (SidebarUI.browser.docShell && SidebarUI.browser.contentDocument &&
-      SidebarUI.browser.contentDocument.getElementById("web-panels-browser")) {
-    SidebarUI.browser.contentWindow.loadWebPanel(uri);
-    if (gWebPanelURI) {
-      gWebPanelURI = "";
-      SidebarUI.browser.removeEventListener("load", asyncOpenWebPanel, true);
-    }
-  } else {
-    // The panel is still being constructed.  Attach an onload handler.
-    if (!gWebPanelURI) {
-      SidebarUI.browser.addEventListener("load", asyncOpenWebPanel, true);
-    }
-    gWebPanelURI = uri;
-  }
-}
-
-function asyncOpenWebPanel(event) {
-  if (gWebPanelURI && SidebarUI.browser.contentDocument &&
-      SidebarUI.browser.contentDocument.getElementById("web-panels-browser")) {
-    SidebarUI.browser.contentWindow.loadWebPanel(gWebPanelURI);
-    SidebarUI.setWebPageIcon(gWebPanelURI);
-  }
-  gWebPanelURI = "";
-  SidebarUI.browser.removeEventListener("load", asyncOpenWebPanel, true);
-}
-
 /*
  * - [ Dependencies ] ---------------------------------------------------------
  *  utilityOverlay.js:
  *    - gatherTextUnder
  */
 
 /**
  * Extracts linkNode and href for the current click target.
@@ -6174,17 +6139,17 @@ function hrefAndLinkNodeForClickEvent(ev
 }
 
 /**
  * Called whenever the user clicks in the content area.
  *
  * @param event
  *        The click event.
  * @param isPanelClick
- *        Whether the event comes from a web panel.
+ *        Whether the event comes from an extension panel.
  * @note default event is prevented if the click is handled.
  */
 function contentAreaClick(event, isPanelClick) {
   if (!event.isTrusted || event.defaultPrevented || event.button == 2)
     return;
 
   let [href, linkNode] = hrefAndLinkNodeForClickEvent(event);
   if (!href) {
@@ -6197,17 +6162,17 @@ function contentAreaClick(event, isPanel
     }
     return;
   }
 
   // This code only applies if we have a linkNode (i.e. clicks on real anchor
   // elements, as opposed to XLink).
   if (linkNode && event.button == 0 &&
       !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
-    // A Web panel's links should target the main content area.  Do this
+    // An extension panel's links should target the main content area.  Do this
     // if no modifier keys are down and if there's no target or the target
     // equals _main (the IE convention) or _content (the Mozilla convention).
     let target = linkNode.target;
     let mainTarget = !target || target == "_content" || target == "_main";
     if (isPanelClick && mainTarget) {
       // javascript and data links should be executed in the current browser.
       if (linkNode.getAttribute("onclick") ||
           href.startsWith("javascript:") ||
@@ -6221,32 +6186,16 @@ function contentAreaClick(event, isPanel
         event.preventDefault();
         return;
       }
 
       loadURI(href, null, null, false);
       event.preventDefault();
       return;
     }
-
-    if (linkNode.getAttribute("rel") == "sidebar") {
-      // This is the Opera convention for a special link that, when clicked,
-      // allows to add a sidebar panel.  The link's title attribute contains
-      // the title that should be used for the sidebar panel.
-      PlacesUIUtils.showBookmarkDialog({ action: "add",
-                                         type: "bookmark",
-                                         uri: makeURI(href),
-                                         title: linkNode.getAttribute("title"),
-                                         loadBookmarkInSidebar: true,
-                                         hiddenRows: [ "location",
-                                                       "keyword" ]
-                                       }, window);
-      event.preventDefault();
-      return;
-    }
   }
 
   handleLinkClick(event, href, linkNode);
 
   // Mark the page as a user followed link.  This is done so that history can
   // distinguish automatic embed visits from user activated ones.  For example
   // pages loaded in frames are embed visits and lost with the session, while
   // visits across frames should be preserved.
@@ -7375,19 +7324,17 @@ function AddKeywordForSearchField() {
                                                     [bookmarkData.title]);
     PlacesUIUtils.showBookmarkDialog({ action: "add",
                                        type: "bookmark",
                                        uri: makeURI(bookmarkData.spec),
                                        title,
                                        keyword: "",
                                        postData: bookmarkData.postData,
                                        charSet: bookmarkData.charset,
-                                       hiddenRows: [ "location",
-                                                     "tags",
-                                                     "loadInSidebar" ]
+                                       hiddenRows: [ "location", "tags" ]
                                      }, window);
   };
   mm.addMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage);
 
   mm.sendAsyncMessage("ContextMenu:SearchFieldBookmarkData", {}, { target: gContextMenu.target });
 }
 
 /**
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -212,38 +212,31 @@ var ClickEventHandler = {
       }
     }
 
     let frameOuterWindowID = WebNavigationFrames.getFrameId(ownerDoc.defaultView);
 
     let json = { button: event.button, shiftKey: event.shiftKey,
                  ctrlKey: event.ctrlKey, metaKey: event.metaKey,
                  altKey: event.altKey, href: null, title: null,
-                 bookmark: false, frameOuterWindowID, referrerPolicy,
+                 frameOuterWindowID, referrerPolicy,
                  triggeringPrincipal: principal,
                  originAttributes: principal ? principal.originAttributes : {},
                  isContentWindowPrivate: PrivateBrowsingUtils.isContentWindowPrivate(ownerDoc.defaultView)};
 
     if (href) {
       try {
         BrowserUtils.urlSecurityCheck(href, principal);
       } catch (e) {
         return;
       }
 
       json.href = href;
       if (node) {
         json.title = node.getAttribute("title");
-        if (event.button == 0 && !event.ctrlKey && !event.shiftKey &&
-            !event.altKey && !event.metaKey) {
-          json.bookmark = node.getAttribute("rel") == "sidebar";
-          if (json.bookmark) {
-            event.preventDefault(); // Need to prevent the pageload.
-          }
-        }
       }
       json.noReferrer = BrowserUtils.linkHasNoReferrer(node);
 
       // Check if the link needs to be opened with mixed content allowed.
       // Only when the owner doc has |mixedContentChannel| and the same origin
       // should we allow mixed content.
       json.allowMixedContent = false;
       let docshell = ownerDoc.docShell;
--- a/browser/base/content/test/sidebar/browser.ini
+++ b/browser/base/content/test/sidebar/browser.ini
@@ -1,6 +1,5 @@
 [DEFAULT]
 
-[browser_bug409481.js]
 [browser_sidebar_adopt.js]
 [browser_sidebar_move.js]
 [browser_sidebar_switcher.js]
deleted file mode 100644
--- a/browser/base/content/test/sidebar/browser_bug409481.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* eslint-disable mozilla/no-arbitrary-setTimeout */
-function test() {
-  waitForExplicitFinish();
-
-  // XXX This looks a bit odd, but is needed to avoid throwing when removing the
-  // event listeners below. See bug 310955.
-  document.getElementById("sidebar").addEventListener("load", delayedOpenUrl, true);
-  SidebarUI.show("viewWebPanelsSidebar");
-}
-
-function delayedOpenUrl() {
-  ok(true, "Ran delayedOpenUrl");
-  setTimeout(openPanelUrl, 100);
-}
-
-function openPanelUrl(event) {
-  ok(!document.getElementById("sidebar-box").hidden, "Sidebar showing");
-
-  var sidebar = document.getElementById("sidebar");
-  var root = sidebar.contentDocument.documentElement;
-  ok(root.nodeName != "parsererror", "Sidebar is well formed");
-
-  sidebar.removeEventListener("load", delayedOpenUrl, true);
-  // XXX See comment above
-  sidebar.contentDocument.addEventListener("load", delayedRunTest, true);
-  var url = 'data:text/html,<div%20id="test_bug409481">Content!</div><a id="link" href="http://www.example.com/ctest">Link</a><input id="textbox">';
-  sidebar.contentWindow.loadWebPanel(url);
-}
-
-function delayedRunTest() {
-  ok(true, "Ran delayedRunTest");
-  setTimeout(runTest, 100);
-}
-
-function runTest(event) {
-  var sidebar = document.getElementById("sidebar");
-  sidebar.contentDocument.removeEventListener("load", delayedRunTest, true);
-
-  var browser = sidebar.contentDocument.getElementById("web-panels-browser");
-  var div = browser && browser.contentDocument.getElementById("test_bug409481");
-  ok(div && div.textContent == "Content!", "Sidebar content loaded");
-
-  var link = browser && browser.contentDocument.getElementById("link");
-  sidebar.contentDocument.addEventListener("popupshown", contextMenuOpened);
-
-  EventUtils.synthesizeMouseAtCenter(link, { type: "contextmenu", button: 2 }, browser.contentWindow);
-}
-
-function contextMenuOpened() {
-  var sidebar = document.getElementById("sidebar");
-  sidebar.contentDocument.removeEventListener("popupshown", contextMenuOpened);
-
-  var copyLinkCommand = sidebar.contentDocument.getElementById("context-copylink");
-  copyLinkCommand.addEventListener("command", copyLinkCommandExecuted);
-  copyLinkCommand.doCommand();
-}
-
-function copyLinkCommandExecuted(event) {
-  event.target.removeEventListener("command", copyLinkCommandExecuted);
-
-  var sidebar = document.getElementById("sidebar");
-  var browser = sidebar.contentDocument.getElementById("web-panels-browser");
-  var textbox = browser && browser.contentDocument.getElementById("textbox");
-  textbox.focus();
-  document.commandDispatcher.getControllerForCommand("cmd_paste").doCommand("cmd_paste");
-  is(textbox.value, "http://www.example.com/ctest", "copy link command");
-
-  sidebar.contentDocument.addEventListener("popuphidden", contextMenuClosed);
-  event.target.parentNode.hidePopup();
-}
-
-function contextMenuClosed() {
-  var sidebar = document.getElementById("sidebar");
-  sidebar.contentDocument.removeEventListener("popuphidden", contextMenuClosed);
-
-  SidebarUI.hide();
-
-  ok(document.getElementById("sidebar-box").hidden, "Sidebar successfully hidden");
-
-  finish();
-}
deleted file mode 100644
--- a/browser/base/content/web-panels.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// Via web-panels.xul
-/* import-globals-from browser.js */
-
-const NS_ERROR_MODULE_NETWORK = 2152398848;
-const NS_NET_STATUS_READ_FROM = NS_ERROR_MODULE_NETWORK + 8;
-const NS_NET_STATUS_WROTE_TO  = NS_ERROR_MODULE_NETWORK + 9;
-
-function getPanelBrowser() {
-    return document.getElementById("web-panels-browser");
-}
-
-var panelProgressListener = {
-    onProgressChange(aWebProgress, aRequest,
-                                aCurSelfProgress, aMaxSelfProgress,
-                                aCurTotalProgress, aMaxTotalProgress) {
-    },
-
-    onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) {
-        if (!aRequest)
-          return;
-
-        // ignore local/resource:/chrome: files
-        if (aStatus == NS_NET_STATUS_READ_FROM || aStatus == NS_NET_STATUS_WROTE_TO)
-           return;
-
-        if (aStateFlags & Ci.nsIWebProgressListener.STATE_START &&
-            aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
-            window.parent.document.getElementById("sidebar-throbber").setAttribute("loading", "true");
-        } else if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP &&
-                aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
-            window.parent.document.getElementById("sidebar-throbber").removeAttribute("loading");
-        }
-    },
-
-    onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
-        UpdateBackForwardCommands(getPanelBrowser().webNavigation);
-    },
-
-    onStatusChange(aWebProgress, aRequest, aStatus, aMessage) {
-    },
-
-    onSecurityChange(aWebProgress, aRequest, aState) {
-    },
-
-    QueryInterface: ChromeUtils.generateQI(["nsIWebProgressListener", "nsISupportsWeakReference"]),
-};
-
-var gLoadFired = false;
-function loadWebPanel(aURI) {
-    var panelBrowser = getPanelBrowser();
-    if (gLoadFired) {
-        panelBrowser.webNavigation
-                    .loadURI(aURI, Ci.nsIWebNavigation.LOAD_FLAGS_NONE,
-                             null, null, null);
-    }
-    panelBrowser.setAttribute("cachedurl", aURI);
-}
-
-function load() {
-    var panelBrowser = getPanelBrowser();
-    panelBrowser.webProgress.addProgressListener(panelProgressListener,
-                                                 Ci.nsIWebProgress.NOTIFY_ALL);
-    panelBrowser.messageManager.loadFrameScript("chrome://browser/content/content.js", true);
-    var cachedurl = panelBrowser.getAttribute("cachedurl");
-    if (cachedurl) {
-        panelBrowser.webNavigation
-                    .loadURI(cachedurl, Ci.nsIWebNavigation.LOAD_FLAGS_NONE, null,
-                             null, null);
-    }
-
-    gLoadFired = true;
-}
-
-function unload() {
-    getPanelBrowser().webProgress.removeProgressListener(panelProgressListener);
-}
-
-function PanelBrowserStop() {
-    getPanelBrowser().webNavigation.stop(Ci.nsIWebNavigation.STOP_ALL);
-}
-
-function PanelBrowserReload() {
-    getPanelBrowser().webNavigation
-                     .sessionHistory
-                     .reload(Ci.nsIWebNavigation.LOAD_FLAGS_NONE);
-}
deleted file mode 100644
--- a/browser/base/content/web-panels.xul
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-
-<!DOCTYPE page [
-<!ENTITY % browserDTD SYSTEM "chrome://browser/locale/browser.dtd">
-%browserDTD;
-<!ENTITY % textcontextDTD SYSTEM "chrome://global/locale/textcontext.dtd">
-%textcontextDTD;
-]>
-
-<page id="webpanels-window"
-        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        onload="load()" onunload="unload()">
-  <script type="application/javascript" src="chrome://global/content/contentAreaUtils.js"/>
-  <script type="application/javascript" src="chrome://browser/content/browser.js"/>
-  <script type="application/javascript" src="chrome://browser/content/browser-places.js"/>
-  <script type="application/javascript" src="chrome://browser/content/web-panels.js"/>
-  <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
-  <script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
-  <script type="application/javascript"><![CDATA[
-    ChromeUtils.defineModuleGetter(window,
-      "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm");
-    ChromeUtils.defineModuleGetter(window,
-      "PlacesUIUtils", "resource:///modules/PlacesUIUtils.jsm");
-    ChromeUtils.defineModuleGetter(window,
-      "PlacesTransactions", "resource://gre/modules/PlacesTransactions.jsm");
-
-    ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-    XPCOMUtils.defineLazyScriptGetter(window, "PlacesTreeView",
-      "chrome://browser/content/places/treeView.js");
-    XPCOMUtils.defineLazyScriptGetter(window,
-      ["PlacesInsertionPoint", "PlacesController", "PlacesControllerDragHelper"],
-       "chrome://browser/content/places/controller.js");
-  ]]></script>
-
-  <broadcasterset id="mainBroadcasterSet">
-    <broadcaster id="isFrameImage"/>
-  </broadcasterset>
-
-  <commandset id="mainCommandset">
-    <command id="Browser:Back"
-             oncommand="getPanelBrowser().webNavigation.goBack();"
-             disabled="true"/>
-    <command id="Browser:Forward"
-             oncommand="getPanelBrowser().webNavigation.goForward();"
-             disabled="true"/>
-    <command id="Browser:Stop" oncommand="PanelBrowserStop();"/>
-    <command id="Browser:Reload" oncommand="PanelBrowserReload();"/>
-  </commandset>
-
-  <popupset id="mainPopupSet">
-    <tooltip id="aHTMLTooltip" page="true"/>
-    <menupopup id="contentAreaContextMenu" pagemenu="start"
-               onpopupshowing="if (event.target != this)
-                                 return true;
-                               gContextMenu = new nsContextMenu(this, event.shiftKey);
-                               if (gContextMenu.shouldDisplay)
-                                 document.popupNode = this.triggerNode;
-                               return gContextMenu.shouldDisplay;"
-               onpopuphiding="if (event.target != this)
-                                return;
-                              gContextMenu.hiding();
-                              gContextMenu = null;">
-#include browser-context.inc
-    </menupopup>
-  </popupset>
-
-#include ../../../toolkit/content/editMenuCommands.inc.xul
-  <browser id="web-panels-browser" persist="cachedurl" type="content" flex="1"
-           context="contentAreaContextMenu" tooltip="aHTMLTooltip"
-           onclick="window.parent.contentAreaClick(event, true);"/>
-</page>
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -91,18 +91,16 @@ browser.jar:
         content/browser/sanitizeDialog.css            (content/sanitizeDialog.css)
         content/browser/contentSearchUI.js            (content/contentSearchUI.js)
         content/browser/contentSearchUI.css           (content/contentSearchUI.css)
         content/browser/tabbrowser.css                (content/tabbrowser.css)
         content/browser/tabbrowser.js                 (content/tabbrowser.js)
         content/browser/tabbrowser.xml                (content/tabbrowser.xml)
 *       content/browser/urlbarBindings.xml            (content/urlbarBindings.xml)
         content/browser/utilityOverlay.js             (content/utilityOverlay.js)
-        content/browser/web-panels.js                 (content/web-panels.js)
-*       content/browser/web-panels.xul                (content/web-panels.xul)
         content/browser/webext-panels.js              (content/webext-panels.js)
 *       content/browser/webext-panels.xul             (content/webext-panels.xul)
         content/browser/nsContextMenu.js              (content/nsContextMenu.js)
 # XXX: We should exclude this one as well (bug 71895)
 *       content/browser/hiddenWindow.xul              (content/hiddenWindow.xul)
 #ifndef XP_MACOSX
 *       content/browser/webrtcIndicator.xul           (content/webrtcIndicator.xul)
         content/browser/webrtcIndicator.js            (content/webrtcIndicator.js)
--- a/browser/components/places/PlacesUIUtils.jsm
+++ b/browser/components/places/PlacesUIUtils.jsm
@@ -204,17 +204,16 @@ let InternalFaviconLoader = {
       this._removeLoadDataFromWindowMap(win, loadData);
     }, FAVICON_REQUEST_TIMEOUT);
     let loadDataForWindow = gFaviconLoadDataMap.get(win);
     loadDataForWindow.push(loadData);
   },
 };
 
 var PlacesUIUtils = {
-  LOAD_IN_SIDEBAR_ANNO: "bookmarkProperties/loadInSidebar",
   DESCRIPTION_ANNO: "bookmarkProperties/description",
   LAST_USED_FOLDERS_META_KEY: "bookmarks/lastusedfolders",
 
   /**
    * Makes a URI from a spec, and do fixup
    * @param   aSpec
    *          The string spec of the URI
    * @return A URI object for the spec.
@@ -652,18 +651,18 @@ var PlacesUIUtils = {
       // Skip over separators and folders.
       if (PlacesUtils.nodeIsURI(aNodes[i]))
         urlsToOpen.push({uri: aNodes[i].uri, isBookmark: PlacesUtils.nodeIsBookmark(aNodes[i])});
     }
     this._openTabset(urlsToOpen, aEvent, window);
   },
 
   /**
-   * Loads the node's URL in the appropriate tab or window or as a web
-   * panel given the user's preference specified by modifier keys tracked by a
+   * Loads the node's URL in the appropriate tab or window given the
+   * user's preference specified by modifier keys tracked by a
    * DOM mouse/key event.
    * @param   aNode
    *          An uri result node.
    * @param   aEvent
    *          The DOM mouse/key event with modifier keys set that track the
    *          user's preferred destination window or tab.
    */
   openNodeWithEvent:
@@ -685,18 +684,17 @@ var PlacesUIUtils = {
     this._openNodeIn(aNode, where, window);
     let view = this.getViewForNode(aEvent.target);
     if (view && view.controller.hasCachedLivemarkInfo(aNode.parent)) {
       Services.telemetry.scalarAdd("browser.feeds.livebookmark_item_opened", 1);
     }
   },
 
   /**
-   * Loads the node's URL in the appropriate tab or window or as a
-   * web panel.
+   * Loads the node's URL in the appropriate tab or window.
    * see also openUILinkIn
    */
   openNodeIn: function PUIU_openNodeIn(aNode, aWhere, aView, aPrivate) {
     let window = aView.ownerWindow;
     this._openNodeIn(aNode, aWhere, window, aPrivate);
   },
 
   _openNodeIn: function PUIU__openNodeIn(aNode, aWhere, aWindow, aPrivate = false) {
@@ -706,29 +704,16 @@ var PlacesUIUtils = {
 
       if (!PrivateBrowsingUtils.isWindowPrivate(aWindow)) {
         if (isBookmark)
           this.markPageAsFollowedBookmark(aNode.uri);
         else
           this.markPageAsTyped(aNode.uri);
       }
 
-      // Check whether the node is a bookmark which should be opened as
-      // a web panel
-      if (aWhere == "current" && isBookmark) {
-        if (PlacesUtils.annotations
-                       .itemHasAnnotation(aNode.itemId, this.LOAD_IN_SIDEBAR_ANNO)) {
-          let browserWin = BrowserWindowTracker.getTopWindow();
-          if (browserWin) {
-            browserWin.openWebPanel(aNode.title, aNode.uri);
-            return;
-          }
-        }
-      }
-
       aWindow.openTrustedLinkIn(aNode.uri, aWhere, {
         allowPopups: aNode.uri.startsWith("javascript:"),
         inBackground: this.loadBookmarksInBackground,
         private: aPrivate,
       });
     }
   },
 
--- a/browser/components/places/content/bookmarkProperties.js
+++ b/browser/components/places/content/bookmarkProperties.js
@@ -5,18 +5,16 @@
 
 /**
  * The panel is initialized based on data given in the js object passed
  * as window.arguments[0]. The object must have the following fields set:
  *   @ action (String). Possible values:
  *     - "add" - for adding a new item.
  *       @ type (String). Possible values:
  *         - "bookmark"
- *           @ loadBookmarkInSidebar - optional, the default state for the
- *             "Load this bookmark in the sidebar" field.
  *         - "folder"
  *           @ URIList (Array of nsIURI objects) - optional, list of uris to
  *             be bookmarked under the new folder.
  *         - "livemark"
  *       @ uri (nsIURI object) - optional, the default uri for the new item.
  *         The property is not used for the "folder with items" type.
  *       @ title (String) - optional, the default title for the new item.
  *       @ defaultInsertionPoint (InsertionPoint JS object) - optional, the
@@ -42,17 +40,16 @@
  *             the folder.
  *   @ hiddenRows (Strings array) - optional, list of rows to be hidden
  *     regardless of the item edited or added by the dialog.
  *     Possible values:
  *     - "title"
  *     - "location"
  *     - "keyword"
  *     - "tags"
- *     - "loadInSidebar"
  *     - "folderPicker" - hides both the tree and the menu.
  *
  * window.arguments[0].bookmarkGuid is set to the guid of the item, if the
  * dialog is accepted.
  */
 
 /* import-globals-from editBookmark.js */
 /* import-globals-from controller.js */
@@ -79,17 +76,16 @@ var BookmarkPropertiesPanel = {
       this.__strings = document.getElementById("stringBundle");
     }
     return this.__strings;
   },
 
   _action: null,
   _itemType: null,
   _uri: null,
-  _loadInSidebar: false,
   _title: "",
   _URIs: [],
   _keyword: "",
   _postData: null,
   _charSet: "",
   _feedURI: null,
   _siteURI: null,
 
@@ -103,17 +99,17 @@ var BookmarkPropertiesPanel = {
   _getAcceptLabel: function BPP__getAcceptLabel() {
     if (this._action == ACTION_ADD) {
       if (this._URIs.length)
         return this._strings.getString("dialogAcceptLabelAddMulti");
 
       if (this._itemType == LIVEMARK_CONTAINER)
         return this._strings.getString("dialogAcceptLabelAddLivemark");
 
-      if (this._dummyItem || this._loadInSidebar)
+      if (this._dummyItem)
         return this._strings.getString("dialogAcceptLabelAddItem");
 
       return this._strings.getString("dialogAcceptLabelSaveItem");
     }
     return this._strings.getString("dialogAcceptLabelEdit");
   },
 
   /**
@@ -177,19 +173,16 @@ var BookmarkPropertiesPanel = {
                             this._uri.spec;
             }
           } else {
             this._uri = Services.io.newURI("about:blank");
             this._title = this._strings.getString("newBookmarkDefault");
             this._dummyItem = true;
           }
 
-          if ("loadBookmarkInSidebar" in dialogInfo)
-            this._loadInSidebar = dialogInfo.loadBookmarkInSidebar;
-
           if ("keyword" in dialogInfo) {
             this._keyword = dialogInfo.keyword;
             this._isAddKeywordDialog = true;
             if ("postData" in dialogInfo)
               this._postData = dialogInfo.postData;
             if ("charSet" in dialogInfo)
               this._charSet = dialogInfo.charSet;
           }
@@ -448,24 +441,19 @@ var BookmarkPropertiesPanel = {
       this._defaultInsertionPoint.itemId,
       await this._defaultInsertionPoint.getIndex(),
       this._defaultInsertionPoint.guid,
     ];
   },
 
   async _promiseNewItem() {
     let [containerId, index, parentGuid] = await this._getInsertionPointDetails();
-    let annotations = [];
-    if (this._loadInSidebar) {
-      annotations.push({ name: PlacesUIUtils.LOAD_IN_SIDEBAR_ANNO,
-                         value: true });
-    }
 
     let itemGuid;
-    let info = { parentGuid, index, title: this._title, annotations };
+    let info = { parentGuid, index, title: this._title };
     if (this._itemType == BOOKMARK_ITEM) {
       info.url = this._uri;
       if (this._keyword)
         info.keyword = this._keyword;
       if (this._postData)
         info.postData = this._postData;
 
       if (this._charSet && !PrivateBrowsingUtils.isWindowPrivate(window))
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -268,19 +268,17 @@ PlacesController.prototype = {
       break;
     case "placesCmd_sortBy:name":
       this.sortFolderByName().catch(Cu.reportError);
       break;
     case "placesCmd_createBookmark":
       let node = this._view.selectedNode;
       PlacesUIUtils.showBookmarkDialog({ action: "add",
                                          type: "bookmark",
-                                         hiddenRows: [ "keyword",
-                                                       "location",
-                                                       "loadInSidebar" ],
+                                         hiddenRows: [ "keyword", "location" ],
                                          uri: Services.io.newURI(node.uri),
                                          title: node.title
                                        }, window.top);
       break;
     }
   },
 
   onEvent: function PC_onEvent(eventName) { },
--- a/browser/components/places/content/editBookmark.js
+++ b/browser/components/places/content/editBookmark.js
@@ -153,42 +153,32 @@ var gEditItemOverlay = {
           this._keyword = existingKeyword;
           // Update the text field to the existing keyword.
           this._initTextField(this._keywordField, this._keyword);
         }
       }
     }
   },
 
-  _initLoadInSidebar() {
-    if (!this._paneInfo.isBookmark)
-      throw new Error("_initLoadInSidebar called unexpectedly");
-
-    this._loadInSidebarCheckbox.checked =
-      PlacesUtils.annotations.itemHasAnnotation(
-        this._paneInfo.itemId, PlacesUIUtils.LOAD_IN_SIDEBAR_ANNO);
-  },
-
   /**
    * Initialize the panel.
    *
    * @param aInfo
    *        An object having:
    *        1. one of the following properties:
    *        - node: either a result node or a node-like object representing the
    *          item to be edited. A node-like object must have the following
    *          properties (with values that match exactly those a result node
    *          would have): itemId, bookmarkGuid, uri, title, type.
    *        - uris: an array of uris for bulk tagging.
    *
    *        2. any of the following optional properties:
    *          - hiddenRows (Strings array): list of rows to be hidden regardless
    *            of the item edited. Possible values: "title", "location",
-   *            "keyword", "loadInSidebar", "feedLocation",
-   *            "siteLocation", folderPicker"
+   *            "keyword", "feedLocation", "siteLocation", folderPicker"
    */
   initPanel(aInfo) {
     if (typeof(aInfo) != "object" || aInfo === null)
       throw new Error("aInfo must be an object.");
     if ("node" in aInfo) {
       try {
         aInfo.node.type;
       } catch (e) {
@@ -240,21 +230,16 @@ var gEditItemOverlay = {
     }
 
     // Collapse the tag selector if the item does not accept tags.
     if (showOrCollapse("tagsRow", isURI || bulkTagging, "tags"))
       this._initTagsField();
     else if (!this._element("tagsSelectorRow").collapsed)
       this.toggleTagsSelector();
 
-    // Load in sidebar.
-    if (showOrCollapse("loadInSidebarCheckbox", isBookmark, "loadInSidebar")) {
-      this._initLoadInSidebar();
-    }
-
     // Folder picker.
     // Technically we should check that the item is not moveable, but that's
     // not cheap (we don't always have the parent), and there's no use case for
     // this (it's only the Star UI that shows the folderPicker)
     if (showOrCollapse("folderRow", isItem, "folderPicker")) {
       this._initFolderMenuList(parentGuid).catch(Cu.reportError);
     }
 
@@ -629,29 +614,16 @@ var gEditItemOverlay = {
     let oldKeyword = this._keyword;
     let keyword = this._keyword = this._keywordField.value;
     let postData = this._paneInfo.postData;
     let guid = this._paneInfo.itemGuid;
     PlacesTransactions.EditKeyword({ guid, keyword, postData, oldKeyword })
                       .transact().catch(Cu.reportError);
   },
 
-  onLoadInSidebarCheckboxCommand() {
-    if (!this.initialized || !this._paneInfo.isBookmark)
-      return;
-
-    let annotation = { name: PlacesUIUtils.LOAD_IN_SIDEBAR_ANNO };
-    if (this._loadInSidebarCheckbox.checked)
-      annotation.value = true;
-
-    let guid = this._paneInfo.itemGuid;
-    PlacesTransactions.Annotate({ guid, annotation })
-                      .transact().catch(Cu.reportError);
-  },
-
   toggleFolderTreeVisibility() {
     var expander = this._element("foldersExpander");
     var folderTreeRow = this._element("folderTreeRow");
     if (!folderTreeRow.collapsed) {
       expander.className = "expander-down";
       expander.setAttribute("tooltiptext",
                             expander.getAttribute("tooltiptextdown"));
       folderTreeRow.collapsed = true;
@@ -1003,20 +975,16 @@ var gEditItemOverlay = {
           this._onTagsChange(aGuid, newURI).catch(Cu.reportError);
         }
       }
       break;
     case "keyword":
       if (this._paneInfo.visibleRows.has("keywordRow"))
         this._initKeywordField(aValue).catch(Cu.reportError);
       break;
-    case PlacesUIUtils.LOAD_IN_SIDEBAR_ANNO:
-      if (this._paneInfo.visibleRows.has("loadInSidebarCheckbox"))
-        this._initLoadInSidebar();
-      break;
     }
   },
 
   onItemMoved(id, oldParentId, oldIndex, newParentId, newIndex, type, guid,
               oldParentGuid, newParentGuid) {
     if (!this._paneInfo.isItem || this._paneInfo.itemId != id) {
       return;
     }
@@ -1040,13 +1008,13 @@ var gEditItemOverlay = {
   onItemRemoved() { },
   onBeginUpdateBatch() { },
   onEndUpdateBatch() { },
   onItemVisited() { },
 };
 
 for (let elt of ["folderMenuList", "folderTree", "namePicker",
                  "locationField", "keywordField",
-                 "tagsField", "loadInSidebarCheckbox"]) {
+                 "tagsField" ]) {
   let eltScoped = elt;
   XPCOMUtils.defineLazyGetter(gEditItemOverlay, `_${eltScoped}`,
                               () => gEditItemOverlay._element(eltScoped));
 }
--- a/browser/components/places/content/editBookmarkPanel.inc.xul
+++ b/browser/components/places/content/editBookmarkPanel.inc.xul
@@ -118,20 +118,12 @@
       <label value="&editBookmarkOverlay.keyword.label;"
              accesskey="&editBookmarkOverlay.keyword.accesskey;"
              control="editBMPanel_keywordField"/>
       <textbox id="editBMPanel_keywordField"
                onchange="gEditItemOverlay.onKeywordFieldChange();"/>
     </vbox>
   </vbox>
 
-  <checkbox id="editBMPanel_loadInSidebarCheckbox"
-            collapsed="true"
-            label="&editBookmarkOverlay.loadInSidebar.label;"
-            accesskey="&editBookmarkOverlay.loadInSidebar.accesskey;"
-            oncommand="gEditItemOverlay.onLoadInSidebarCheckboxCommand();">
-    <observes element="additionalInfoBroadcaster" attribute="hidden"/>
-  </checkbox>
-
   <!-- If the ids are changing or additional fields are being added, be sure
        to sync the values in places.js -->
   <broadcaster id="additionalInfoBroadcaster"/>
 </vbox>
--- a/browser/components/places/content/places.js
+++ b/browser/components/places/content/places.js
@@ -27,17 +27,16 @@ const HISTORY_LIBRARY_SEARCH_TELEMETRY =
 
 var PlacesOrganizer = {
   _places: null,
 
   // IDs of fields from editBookmark that should be hidden when infoBox
   // is minimal. IDs should be kept in sync with the IDs of the elements
   // observing additionalInfoBroadcaster.
   _additionalInfoFields: [
-    "editBMPanel_loadInSidebarCheckbox",
     "editBMPanel_keywordRow",
   ],
 
   _initFolderTree() {
     this._places.place = `place:type=${Ci.nsINavHistoryQueryOptions.RESULTS_AS_LEFT_PANE_QUERY}&excludeItems=1&expandQueries=0`;
   },
 
   /**
@@ -663,17 +662,16 @@ var PlacesOrganizer = {
 
       this._detectAndSetDetailsPaneMinimalState(selectedNode);
     } else if (!selectedNode && aNodeList[0]) {
       if (aNodeList.every(PlacesUtils.nodeIsURI)) {
         let uris = aNodeList.map(node => Services.io.newURI(node.uri));
         detailsDeck.selectedIndex = 1;
         gEditItemOverlay.initPanel({ uris,
                                      hiddenRows: ["folderPicker",
-                                                  "loadInSidebar",
                                                   "location",
                                                   "keyword",
                                                   "name"]});
         this._detectAndSetDetailsPaneMinimalState(selectedNode);
       } else {
         detailsDeck.selectedIndex = 0;
         let selectItemDesc = document.getElementById("selectItemDescription");
         let itemsCountLabel = document.getElementById("itemsCountText");
--- a/browser/components/places/tests/browser/browser.ini
+++ b/browser/components/places/tests/browser/browser.ini
@@ -12,17 +12,16 @@ support-files =
   keyword_form.html
 
 [browser_addBookmarkForFrame.js]
 skip-if = (verify && debug)
 [browser_bookmark_add_tags.js]
 [browser_bookmark_backup_export_import.js]
 [browser_bookmark_change_location.js]
 [browser_bookmark_folder_moveability.js]
-[browser_bookmark_load_in_sidebar.js]
 [browser_bookmark_private_window.js]
 skip-if = (verify && debug && (os == 'win' || os == 'mac'))
 [browser_bookmark_remove_tags.js]
 [browser_bookmarklet_windowOpen.js]
 support-files =
   bookmarklet_windowOpen_dummy.html
 [browser_bookmarks_change_title.js]
 [browser_bookmarks_sidebar_search.js]
deleted file mode 100644
--- a/browser/components/places/tests/browser/browser_bookmark_load_in_sidebar.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-/**
- * Test that a bookmark can be loaded inside the Bookmarks sidebar.
- */
-"use strict";
-
-const TEST_URL = "about:buildconfig";
-
-// Cleanup.
-registerCleanupFunction(async () => {
-  await PlacesUtils.bookmarks.eraseEverything();
-});
-
-add_task(async function test_load_in_sidebar() {
-  let bm = await PlacesUtils.bookmarks.insert({
-    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
-    url: TEST_URL,
-    title: TEST_URL,
-  });
-
-  await withSidebarTree("bookmarks", async function(tree) {
-    tree.selectItems([bm.guid]);
-    await withBookmarksDialog(
-      false,
-      function openPropertiesDialog() {
-        tree.controller.doCommand("placesCmd_show:info");
-      },
-
-      // Check the "Load this bookmark in the sidebar" option.
-      async function test(dialogWin) {
-        let loadInSidebar = dialogWin.document.getElementById("editBMPanel_loadInSidebarCheckbox");
-        let promiseCheckboxChanged = PlacesTestUtils.waitForNotification(
-          "onItemChanged",
-          (id, parentId, checked) => checked === true
-        );
-
-        loadInSidebar.click();
-
-        EventUtils.synthesizeKey("VK_RETURN", {}, dialogWin);
-        await promiseCheckboxChanged;
-      }
-    );
-
-    let sidebar = document.getElementById("sidebar");
-
-    let sidebarLoadedPromise = new Promise(resolve => {
-      sidebar.addEventListener("load", function() {
-        executeSoon(resolve);
-      }, {capture: true, once: true});
-    });
-
-    // Select and open the bookmark in the sidebar.
-    tree.selectItems([bm.guid]);
-    tree.controller.doCommand("placesCmd_open");
-
-    await sidebarLoadedPromise;
-
-    let sidebarTitle = document.getElementById("sidebar-title");
-    let sidebarBrowser = sidebar.contentDocument.getElementById("web-panels-browser");
-
-    await BrowserTestUtils.browserLoaded(sidebarBrowser, false, TEST_URL);
-
-    let h1Elem = sidebarBrowser.contentDocument.getElementsByTagName("h1")[0];
-
-    // Check that the title and the content of the page are loaded successfully.
-    Assert.equal(sidebarTitle.value, TEST_URL, "The sidebar title is successfully loaded.");
-    Assert.equal(h1Elem.textContent, TEST_URL, "The sidebar content is successfully loaded.");
-  });
-});
--- a/browser/locales/en-US/chrome/browser/places/editBookmarkOverlay.dtd
+++ b/browser/locales/en-US/chrome/browser/places/editBookmarkOverlay.dtd
@@ -14,13 +14,11 @@
 <!ENTITY editBookmarkOverlay.foldersExpanderDown.tooltip     "Show all the bookmarks folders">
 <!ENTITY editBookmarkOverlay.expanderUp.tooltip              "Hide">
 <!ENTITY editBookmarkOverlay.tags.label                      "Tags:">
 <!ENTITY editBookmarkOverlay.tags.accesskey                  "T">
 <!ENTITY editBookmarkOverlay.tagsEmptyDesc.label             "Separate tags with commas">
 <!ENTITY editBookmarkOverlay.keyword.label                   "Keyword:">
 <!ENTITY editBookmarkOverlay.keyword.accesskey               "K">
 <!ENTITY editBookmarkOverlay.tagsExpanderDown.tooltip        "Show all tags">
-<!ENTITY editBookmarkOverlay.loadInSidebar.label             "Load this bookmark in the sidebar">
-<!ENTITY editBookmarkOverlay.loadInSidebar.accesskey         "h">
 <!ENTITY editBookmarkOverlay.choose.label                    "Choose…">
 <!ENTITY editBookmarkOverlay.newFolderButton.label           "New Folder">
 <!ENTITY editBookmarkOverlay.newFolderButton.accesskey       "o">
--- a/browser/modules/ContentClick.jsm
+++ b/browser/modules/ContentClick.jsm
@@ -40,33 +40,16 @@ var ContentClick = {
       // Might be middle mouse navigation.
       if (Services.prefs.getBoolPref("middlemouse.contentLoadURL") &&
           !Services.prefs.getBoolPref("general.autoScroll")) {
         window.middleMousePaste(json);
       }
       return;
     }
 
-    if (json.bookmark) {
-      // This is the Opera convention for a special link that, when clicked,
-      // allows to add a sidebar panel.  The link's title attribute contains
-      // the title that should be used for the sidebar panel.
-      PlacesUIUtils.showBookmarkDialog({ action: "add",
-                                         type: "bookmark",
-                                         uri: Services.io.newURI(json.href),
-                                         title: json.title,
-                                         loadBookmarkInSidebar: true,
-                                         hiddenRows: [ "location",
-                                                       "keyword" ]
-                                       }, window);
-      return;
-    }
-
-    // Note: We don't need the sidebar code here.
-
     // Mark the page as a user followed link.  This is done so that history can
     // distinguish automatic embed visits from user activated ones.  For example
     // pages loaded in frames are embed visits and lost with the session, while
     // visits across frames should be preserved.
     try {
       if (!PrivateBrowsingUtils.isWindowPrivate(window))
         PlacesUIUtils.markPageAsFollowedLink(json.href);
     } catch (ex) { /* Skip invalid URIs. */ }
--- a/services/sync/modules/bookmark_validator.js
+++ b/services/sync/modules/bookmark_validator.js
@@ -734,17 +734,17 @@ class BookmarkValidator {
    *     - childGUIDs (array of strings, only present if type is 'folder'): the
    *       list of child GUIDs stored on the server.
    *     - children (array of records, only present if type is 'folder'):
    *       each record has these same properties. This may differ in content
    *       from what you may expect from the childGUIDs list, as it won't
    *       contain any records that could not be found.
    *     - parent (record): The parent to this record.
    *     - Unchanged properties send down from the server: id, title, type,
-   *       parentName, parentid, bmkURI, keyword, tags, pos, queryId, loadInSidebar
+   *       parentName, parentid, bmkURI, keyword, tags, pos, queryId
    * - root: Root of the server-side bookmark tree. Has the same properties as
    *   above.
    * - deletedRecords: As above, but only contains items that the server sent
    *   where it also sent indication that the item should be deleted.
    * - problemData: a BookmarkProblemData object, with the caveat that
    *   the fields describing client/server relationship will not have been filled
    *   out yet.
    */
--- a/services/sync/modules/engines/bookmarks.js
+++ b/services/sync/modules/engines/bookmarks.js
@@ -27,17 +27,17 @@ XPCOMUtils.defineLazyModuleGetters(this,
 });
 
 XPCOMUtils.defineLazyGetter(this, "PlacesBundle", () => {
   return Services.strings.createBundle("chrome://places/locale/places.properties");
 });
 
 XPCOMUtils.defineLazyGetter(this, "ANNOS_TO_TRACK", () => [
   PlacesSyncUtils.bookmarks.DESCRIPTION_ANNO,
-  PlacesSyncUtils.bookmarks.SIDEBAR_ANNO, PlacesUtils.LMANNO_FEEDURI,
+  PlacesUtils.LMANNO_FEEDURI,
   PlacesUtils.LMANNO_SITEURI,
 ]);
 
 const PLACES_MAINTENANCE_INTERVAL_SECONDS = 4 * 60 * 60; // 4 hours.
 
 const FOLDER_SORTINDEX = 1000000;
 
 // Roots that should be deleted from the server, instead of applied locally.
@@ -153,37 +153,35 @@ Bookmark.prototype = {
   __proto__: PlacesItem.prototype,
   _logName: "Sync.Record.Bookmark",
 
   toSyncBookmark() {
     let info = PlacesItem.prototype.toSyncBookmark.call(this);
     info.title = this.title;
     info.url = this.bmkUri;
     info.description = this.description;
-    info.loadInSidebar = this.loadInSidebar;
     info.tags = this.tags;
     info.keyword = this.keyword;
     return info;
   },
 
   fromSyncBookmark(item) {
     PlacesItem.prototype.fromSyncBookmark.call(this, item);
     this.title = item.title;
     this.bmkUri = item.url.href;
     this.description = item.description;
-    this.loadInSidebar = item.loadInSidebar;
     this.tags = item.tags;
     this.keyword = item.keyword;
   },
 };
 
 Utils.deferGetSet(Bookmark,
                   "cleartext",
                   ["title", "bmkUri", "description",
-                   "loadInSidebar", "tags", "keyword"]);
+                   "tags", "keyword"]);
 
 function BookmarkQuery(collection, id) {
   Bookmark.call(this, collection, id, "query");
 }
 BookmarkQuery.prototype = {
   __proto__: Bookmark.prototype,
   _logName: "Sync.Record.BookmarkQuery",
 
--- a/services/sync/tests/tps/test_bug562515.js
+++ b/services/sync/tests/tps/test_bug562515.js
@@ -16,17 +16,16 @@ var phases = { "phase1": "profile1",
 /*
  * Bookmark lists
  */
 
 // the initial list of bookmarks to add to the browser
 var bookmarks_initial = {
   "menu": [
     { uri: "http://www.google.com",
-      loadInSidebar: true,
       tags: [ "google", "computers", "internet", "www"]
     },
     { uri: "http://bugzilla.mozilla.org/show_bug.cgi?id=%s",
       title: "Bugzilla",
       keyword: "bz"
     },
     { folder: "foldera" },
     { uri: "http://www.mozilla.com" },
@@ -56,17 +55,16 @@ var bookmarks_initial = {
     }
   ]
 };
 
 // a list of bookmarks to delete during a 'delete' action
 var bookmarks_to_delete = {
   "menu": [
     { uri: "http://www.google.com",
-      loadInSidebar: true,
       tags: [ "google", "computers", "internet", "www"]
     }
   ],
   "menu/foldera": [
     { uri: "http://www.yahoo.com",
       title: "testing Yahoo"
     }
   ]
--- a/services/sync/tests/tps/test_sync.js
+++ b/services/sync/tests/tps/test_sync.js
@@ -15,21 +15,19 @@ var phases = { "phase1": "profile1",
 /*
  * Bookmark asset lists: these define bookmarks that are used during the test
  */
 
 // the initial list of bookmarks to be added to the browser
 var bookmarks_initial = {
   "menu": [
     { uri: "http://www.google.com",
-      loadInSidebar: true,
       tags: ["google", "computers", "internet", "www"],
       changes: {
         title: "Google",
-        loadInSidebar: false,
         tags: ["google", "computers", "misc"],
       }
     },
     { uri: "http://bugzilla.mozilla.org/show_bug.cgi?id=%s",
       title: "Bugzilla",
       keyword: "bz",
       changes: {
         keyword: "bugzilla"
@@ -87,17 +85,16 @@ var bookmarks_after_first_modify = {
   "menu": [
     { uri: "http://www.apple.com/iphone/",
       title: "iPhone",
       before: "Google",
       tags: []
     },
     { uri: "http://www.google.com",
       title: "Google",
-      loadInSidebar: false,
       tags: [ "google", "computers", "misc"]
     },
     { uri: "http://bugzilla.mozilla.org/show_bug.cgi?id=%s",
       title: "Bugzilla",
       keyword: "bugzilla"
     },
     { folder: "foldera" },
     { uri: "http://www.mozilla.com" },
@@ -132,17 +129,16 @@ var bookmarks_after_first_modify = {
   ]
 };
 
 // a list of bookmarks to delete during a 'delete' action
 var bookmarks_to_delete = {
   "menu": [
     { uri: "http://www.google.com",
       title: "Google",
-      loadInSidebar: false,
       tags: [ "google", "computers", "misc" ]
     }
   ]
 };
 
 // the state of bookmarks after the second 'modify' action has been performed
 // on them
 var bookmarks_after_second_modify = {
@@ -415,10 +411,8 @@ Phase("phase3", [
 Phase("phase4", [
   [Sync],
   [Bookmarks.verify, bookmarks_after_second_modify],
   [Passwords.verify, passwords_after_second_modify],
   [Bookmarks.verifyNot, bookmarks_absent],
   [Passwords.verifyNot, passwords_absent],
   [History.verifyNot, history_absent],
 ]);
-
-
--- a/services/sync/tests/unit/test_bookmark_store.js
+++ b/services/sync/tests/unit/test_bookmark_store.js
@@ -56,17 +56,16 @@ 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    = 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/");
--- a/services/sync/tests/unit/test_engine_changes_during_sync.js
+++ b/services/sync/tests/unit/test_engine_changes_during_sync.js
@@ -349,17 +349,16 @@ add_task(async function test_bookmark_ch
       collection.insert(folder2_guid, encryptPayload(remoteFolder.cleartext));
 
       let remoteFxBmk = new Bookmark("bookmarks", bmk2_guid);
       remoteFxBmk.bmkUri        = "http://getfirefox.com/";
       remoteFxBmk.description   = "Firefox is awesome.";
       remoteFxBmk.title         = "Get Firefox!";
       remoteFxBmk.tags          = ["firefox", "awesome", "browser"];
       remoteFxBmk.keyword       = "awesome";
-      remoteFxBmk.loadInSidebar = false;
       remoteFxBmk.parentName    = "Folder 1";
       remoteFxBmk.parentid      = folder1.guid;
       collection.insert(bmk2_guid, encryptPayload(remoteFxBmk.cleartext));
 
       // A tag query referencing a nonexistent tag folder, which we should
       // create locally when applying the record.
       let remoteTagQuery = new BookmarkQuery("bookmarks", tagQuery_guid);
       remoteTagQuery.bmkUri     = "place:type=7&folder=999";
--- a/services/sync/tps/extensions/tps/resource/modules/bookmarks.jsm
+++ b/services/sync/tps/extensions/tps/resource/modules/bookmarks.jsm
@@ -29,17 +29,16 @@ function extend(child, supertype) {
 }
 
 /**
  * PlacesItemProps object, holds properties for places items
  */
 function PlacesItemProps(props) {
   this.location = null;
   this.uri = null;
-  this.loadInSidebar = null;
   this.keyword = null;
   this.title = null;
   this.description = null;
   this.after = null;
   this.before = null;
   this.folder = null;
   this.position = null;
   this.delete = false;
@@ -439,39 +438,16 @@ Bookmark.prototype = {
       if (entry) {
         await PlacesUtils.keywords.remove(entry);
       }
       await PlacesUtils.keywords.insert({keyword, url: this.props.uri});
     }
   },
 
   /**
-   * SetLoadInSidebar
-   *
-   * Updates this bookmark's loadInSidebar property.
-   *
-   * @param loadInSidebar if true, the loadInSidebar property will be set,
-   *        if false, it will be cleared, and any other value will result
-   *        in no change
-   * @return nothing
-   */
-  async SetLoadInSidebar(loadInSidebar) {
-    let itemId = await PlacesUtils.promiseItemId(this.props.guid);
-    if (loadInSidebar)
-      PlacesUtils.annotations.setItemAnnotation(itemId,
-                                    "bookmarkProperties/loadInSidebar",
-                                    true,
-                                    0,
-                                    PlacesUtils.annotations.EXPIRE_NEVER);
-    else if (!loadInSidebar)
-      PlacesUtils.annotations.removeItemAnnotation(itemId,
-                                       "bookmarkProperties/loadInSidebar");
-  },
-
-  /**
    * SetUri
    *
    * Updates this bookmark's URI.
    *
    * @param uri The new URI to set for this boomark; if null, no changes
    *        are made
    * @return nothing
    */
@@ -515,33 +491,31 @@ Bookmark.prototype = {
       "bookmark, error creating folder " + this.props.location);
     let bookmarkURI = Services.io.newURI(this.props.uri);
     let {guid} = await PlacesUtils.bookmarks.insert({parentGuid: this.props.parentGuid,
                                                      url: bookmarkURI,
                                                      title: this.props.title});
     this.props.guid = guid;
     await this.SetKeyword(this.props.keyword);
     await this.SetDescription(this.props.description);
-    await this.SetLoadInSidebar(this.props.loadInSidebar);
     await this.SetTags(this.props.tags);
     return this.props.guid;
   },
 
   /**
    * Update
    *
    * Updates this bookmark's properties according the properties on this
    * object's 'updateProps' property.
    *
    * @return nothing
    */
   async Update() {
     Logger.AssertTrue(this.props.guid, "Invalid guid during Update");
     await this.SetDescription(this.updateProps.description);
-    await this.SetLoadInSidebar(this.updateProps.loadInSidebar);
     await this.SetTitle(this.updateProps.title);
     await this.SetUri(this.updateProps.uri);
     await this.SetKeyword(this.updateProps.keyword);
     await this.SetTags(this.updateProps.tags);
     await this.SetLocation(this.updateProps.location);
     await this.SetPosition(this.updateProps.position);
   },
 
@@ -576,31 +550,16 @@ Bookmark.prototype = {
       let {keyword} = await PlacesSyncUtils.bookmarks.fetch(this.props.guid);
       if (keyword != this.props.keyword) {
         Logger.logPotentialError("Incorrect keyword - expected: " +
           this.props.keyword + ", actual: " + keyword +
           " for " + this.toString());
         return null;
       }
     }
-    let itemId = await PlacesUtils.promiseItemId(this.props.guid);
-    let loadInSidebar = PlacesUtils.annotations.itemHasAnnotation(
-      itemId,
-      "bookmarkProperties/loadInSidebar");
-    if (loadInSidebar)
-      loadInSidebar = PlacesUtils.annotations.getItemAnnotation(
-        itemId,
-        "bookmarkProperties/loadInSidebar");
-    if (this.props.loadInSidebar != null &&
-        loadInSidebar != this.props.loadInSidebar) {
-      Logger.logPotentialError("Incorrect loadInSidebar setting - expected: " +
-        this.props.loadInSidebar + ", actual: " + loadInSidebar +
-        " for " + this.toString());
-      return null;
-    }
     if (this.props.tags != null) {
       try {
         let URI = Services.io.newURI(this.props.uri);
         let tags = PlacesUtils.tagging.getTagsForURI(URI, {});
         tags.sort();
         this.props.tags.sort();
         if (JSON.stringify(tags) != JSON.stringify(this.props.tags)) {
           Logger.logPotentialError("Wrong tags - expected: " +
--- a/toolkit/components/places/BookmarkHTMLUtils.jsm
+++ b/toolkit/components/places/BookmarkHTMLUtils.jsm
@@ -19,17 +19,16 @@
  *   Old version used this to set attributes on the current container. We only
  *   care about the content of the heading container, which contains the title
  *   of the bookmark container.
  * Bookmark := a
  *   HREF is the destination of the bookmark
  *   FEEDURL is the URI of the RSS feed if this is a livemark.
  *   LAST_CHARSET is stored as an annotation so that the next time we go to
  *     that page we remember the user's preference.
- *   WEB_PANEL is set to "true" if the bookmark should be loaded in the sidebar.
  *   ICON will be stored in the favicon service
  *   ICON_URI is new for places bookmarks.html, it refers to the original
  *     URI of the favicon so we don't have to make up favicon URLs.
  *   Text of the <a> container is the name of the bookmark
  *   Ignored: LAST_VISIT, ID (writing out non-RDF IDs can confuse Firefox 2)
  * Bookmark comment := dd
  *   This affects the previosly added bookmark
  * Separator := hr
@@ -71,17 +70,16 @@ ChromeUtils.defineModuleGetter(this, "Pl
   "resource://gre/modules/PlacesBackups.jsm");
 
 const Container_Normal = 0;
 const Container_Toolbar = 1;
 const Container_Menu = 2;
 const Container_Unfiled = 3;
 const Container_Places = 4;
 
-const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
 
 const MICROSEC_PER_SEC = 1000000;
 
 const EXPORT_INDENT = "    "; // four spaces
 
 function base64EncodeString(aString) {
   let stream = Cc["@mozilla.org/io/string-input-stream;1"]
@@ -497,17 +495,16 @@ BookmarkImporter.prototype = {
     // Get the attributes we care about.
     let href = this._safeTrim(aElt.getAttribute("href"));
     let feedUrl = this._safeTrim(aElt.getAttribute("feedurl"));
     let icon = this._safeTrim(aElt.getAttribute("icon"));
     let iconUri = this._safeTrim(aElt.getAttribute("icon_uri"));
     let lastCharset = this._safeTrim(aElt.getAttribute("last_charset"));
     let keyword = this._safeTrim(aElt.getAttribute("shortcuturl"));
     let postData = this._safeTrim(aElt.getAttribute("post_data"));
-    let webPanel = this._safeTrim(aElt.getAttribute("web_panel"));
     let dateAdded = this._safeTrim(aElt.getAttribute("add_date"));
     let lastModified = this._safeTrim(aElt.getAttribute("last_modified"));
     let tags = this._safeTrim(aElt.getAttribute("tags"));
 
     // For feeds, get the feed URL.  If it is invalid, mPreviousFeed will be
     // NULL and we'll create it as a normal bookmark.
     if (feedUrl) {
       frame.previousFeed = feedUrl;
@@ -565,27 +562,16 @@ BookmarkImporter.prototype = {
         aTag.length <= Ci.nsITaggingService.MAX_TAG_LENGTH);
 
       // If we end up with none, then delete the property completely.
       if (!bookmark.tags.length) {
         delete bookmark.tags;
       }
     }
 
-    if (webPanel && webPanel.toLowerCase() == "true") {
-      if (!bookmark.hasOwnProperty("annos")) {
-        bookmark.annos = [];
-      }
-      bookmark.annos.push({ "name": LOAD_IN_SIDEBAR_ANNO,
-                            "flags": 0,
-                            "expires": 4,
-                            "value": 1
-                          });
-    }
-
     if (lastCharset) {
       bookmark.charset = lastCharset;
     }
 
     if (keyword) {
       bookmark.keyword = keyword;
     }
 
@@ -1030,18 +1016,16 @@ BookmarkExporter.prototype = {
     await this._writeFaviconAttribute(aItem);
 
     if (aItem.keyword) {
       this._writeAttribute("SHORTCUTURL", escapeHtmlEntities(aItem.keyword));
       if (aItem.postData)
         this._writeAttribute("POST_DATA", escapeHtmlEntities(aItem.postData));
     }
 
-    if (aItem.annos && aItem.annos.some(anno => anno.name == LOAD_IN_SIDEBAR_ANNO))
-      this._writeAttribute("WEB_PANEL", "true");
     if (aItem.charset)
       this._writeAttribute("LAST_CHARSET", escapeHtmlEntities(aItem.charset));
     if (aItem.tags)
       this._writeAttribute("TAGS", escapeHtmlEntities(aItem.tags));
     this._writeLine(">" + escapeHtmlEntities(aItem.title) + "</A>");
     this._writeDescription(aItem, aIndent);
   },
 
--- a/toolkit/components/places/PlacesSyncUtils.jsm
+++ b/toolkit/components/places/PlacesSyncUtils.jsm
@@ -374,17 +374,16 @@ const HistorySyncUtils = PlacesSyncUtils
     );
     return rows.map(row => row.getResultByName("url"));
   },
 });
 
 const BookmarkSyncUtils = PlacesSyncUtils.bookmarks = Object.freeze({
   SMART_BOOKMARKS_ANNO: "Places/SmartBookmark",
   DESCRIPTION_ANNO: "bookmarkProperties/description",
-  SIDEBAR_ANNO: "bookmarkProperties/loadInSidebar",
   SYNC_PARENT_ANNO: "sync/parent",
 
   SYNC_ID_META_KEY: "sync/bookmarks/syncId",
   LAST_SYNC_META_KEY: "sync/bookmarks/lastSync",
   WIPE_REMOTE_META_KEY: "sync/bookmarks/wipeRemote",
 
   // Jan 23, 1993 in milliseconds since 1970. Corresponds roughly to the release
   // of the original NCSA Mosiac. We can safely assume that any dates before
@@ -1111,17 +1110,16 @@ const BookmarkSyncUtils = PlacesSyncUtil
    *  - kind: Optional.
    *  - guid: Required.
    *  - parentGuid: Optional; reparents the bookmark if specified.
    *  - title: Optional.
    *  - url: Optional.
    *  - tags: Optional; replaces all existing tags.
    *  - keyword: Optional.
    *  - description: Optional.
-   *  - loadInSidebar: Optional.
    *  - query: Optional.
    *
    * @param info
    *        object representing a bookmark-item, as defined above.
    *
    * @return {Promise} resolved when the update is complete.
    * @resolves to an object representing the updated bookmark.
    * @rejects if it's not possible to update the given bookmark.
@@ -1143,17 +1141,16 @@ const BookmarkSyncUtils = PlacesSyncUtil
    *  - kind: Required.
    *  - guid: Required.
    *  - parentGuid: Required.
    *  - url: Required for bookmarks.
    *  - query: A smart bookmark query string, optional.
    *  - tags: An optional array of tag strings.
    *  - keyword: An optional keyword string.
    *  - description: An optional description string.
-   *  - loadInSidebar: An optional boolean; defaults to false.
    *
    * Sync doesn't set the index, since it appends and reorders children
    * after applying all incoming items.
    *
    * @param info
    *        object representing a synced bookmark.
    *
    * @return {Promise} resolved when the creation is complete.
@@ -1181,18 +1178,16 @@ const BookmarkSyncUtils = PlacesSyncUtil
    *    or created on a remote device if known.
    *  - title ("bookmark", "folder", "livemark", "query"): The item's title.
    *    Omitted if empty.
    *  - url ("bookmark", "query"): The item's URL.
    *  - tags ("bookmark", "query"): An array containing the item's tags.
    *  - keyword ("bookmark"): The bookmark's keyword, if one exists.
    *  - description ("bookmark", "folder", "livemark"): The item's description.
    *    Omitted if one isn't set.
-   *  - loadInSidebar ("bookmark", "query"): Whether to load the bookmark in
-   *    the sidebar. Always `false` for queries.
    *  - feed ("livemark"): A `URL` object pointing to the livemark's feed URL.
    *  - site ("livemark"): A `URL` object pointing to the livemark's site URL,
    *    or `null` if one isn't set.
    *  - childRecordIds ("folder"): An array containing the record IDs of the item's
    *    children, used to determine child order.
    *  - folder ("query"): The tag folder name, if this is a tag query.
    *  - query ("query"): The smart bookmark query name, if this is a smart
    *    bookmark.
@@ -1610,24 +1605,16 @@ async function insertBookmarkMetadata(db
   if (insertInfo.description) {
     PlacesUtils.annotations.setItemAnnotation(itemId,
       BookmarkSyncUtils.DESCRIPTION_ANNO, insertInfo.description, 0,
       PlacesUtils.annotations.EXPIRE_NEVER,
       SOURCE_SYNC);
     newItem.description = insertInfo.description;
   }
 
-  if (insertInfo.loadInSidebar) {
-    PlacesUtils.annotations.setItemAnnotation(itemId,
-      BookmarkSyncUtils.SIDEBAR_ANNO, insertInfo.loadInSidebar, 0,
-      PlacesUtils.annotations.EXPIRE_NEVER,
-      SOURCE_SYNC);
-    newItem.loadInSidebar = insertInfo.loadInSidebar;
-  }
-
   return newItem;
 }
 
 // Determines the Sync record kind for an existing bookmark.
 async function getKindForItem(db, item) {
   switch (item.type) {
     case PlacesUtils.bookmarks.TYPE_FOLDER: {
       let isLivemark = await getAnno(db, item.guid,
@@ -1844,29 +1831,16 @@ async function updateBookmarkMetadata(db
         SOURCE_SYNC);
     } else {
       PlacesUtils.annotations.removeItemAnnotation(itemId,
         BookmarkSyncUtils.DESCRIPTION_ANNO, SOURCE_SYNC);
     }
     newItem.description = updateInfo.description;
   }
 
-  if (updateInfo.hasOwnProperty("loadInSidebar")) {
-    if (updateInfo.loadInSidebar) {
-      PlacesUtils.annotations.setItemAnnotation(itemId,
-        BookmarkSyncUtils.SIDEBAR_ANNO, updateInfo.loadInSidebar, 0,
-        PlacesUtils.annotations.EXPIRE_NEVER,
-        SOURCE_SYNC);
-    } else {
-      PlacesUtils.annotations.removeItemAnnotation(itemId,
-        BookmarkSyncUtils.SIDEBAR_ANNO, SOURCE_SYNC);
-    }
-    newItem.loadInSidebar = updateInfo.loadInSidebar;
-  }
-
   if (updateInfo.hasOwnProperty("query")) {
     PlacesUtils.annotations.setItemAnnotation(itemId,
       BookmarkSyncUtils.SMART_BOOKMARKS_ANNO, updateInfo.query, 0,
       PlacesUtils.annotations.EXPIRE_NEVER,
       SOURCE_SYNC);
     newItem.query = updateInfo.query;
   }
 
@@ -1892,18 +1866,16 @@ function validateNewBookmark(name, info)
       tags: { validIf: b => [ BookmarkSyncUtils.KINDS.BOOKMARK,
                               BookmarkSyncUtils.KINDS.QUERY ].includes(b.kind) },
       keyword: { validIf: b => [ BookmarkSyncUtils.KINDS.BOOKMARK,
                                  BookmarkSyncUtils.KINDS.QUERY ].includes(b.kind) },
       description: { validIf: b => [ BookmarkSyncUtils.KINDS.BOOKMARK,
                                      BookmarkSyncUtils.KINDS.QUERY,
                                      BookmarkSyncUtils.KINDS.FOLDER,
                                      BookmarkSyncUtils.KINDS.LIVEMARK ].includes(b.kind) },
-      loadInSidebar: { validIf: b => [ BookmarkSyncUtils.KINDS.BOOKMARK,
-                                       BookmarkSyncUtils.KINDS.QUERY ].includes(b.kind) },
       feed: { validIf: b => b.kind == BookmarkSyncUtils.KINDS.LIVEMARK },
       site: { validIf: b => b.kind == BookmarkSyncUtils.KINDS.LIVEMARK },
       dateAdded: { required: false }
     });
 
   return insertInfo;
 }
 
@@ -2063,17 +2035,17 @@ function syncBookmarkToPlacesBookmark(in
         break;
     }
   }
 
   return bookmarkInfo;
 }
 
 // Creates and returns a Sync bookmark object containing the bookmark's
-// tags, keyword, description, and whether it loads in the sidebar.
+// tags, keyword, description.
 var fetchBookmarkItem = async function(db, bookmarkItem) {
   let item = await placesBookmarkToSyncBookmark(db, bookmarkItem);
 
   if (!item.title) {
     item.title = "";
   }
 
   item.tags = PlacesUtils.tagging.getTagsForURI(
@@ -2087,19 +2059,16 @@ var fetchBookmarkItem = async function(d
   }
 
   let description = await getAnno(db, bookmarkItem.guid,
                                   BookmarkSyncUtils.DESCRIPTION_ANNO);
   if (description) {
     item.description = description;
   }
 
-  item.loadInSidebar = !!(await getAnno(db, bookmarkItem.guid,
-                                        BookmarkSyncUtils.SIDEBAR_ANNO));
-
   return item;
 };
 
 // Creates and returns a Sync bookmark object containing the folder's
 // description and children.
 async function fetchFolderItem(db, bookmarkItem) {
   let item = await placesBookmarkToSyncBookmark(db, bookmarkItem);
 
--- a/toolkit/components/places/PlacesUtils.jsm
+++ b/toolkit/components/places/PlacesUtils.jsm
@@ -280,17 +280,16 @@ const SYNC_BOOKMARK_VALIDATORS = Object.
           tag.length > Ci.nsITaggingService.MAX_TAG_LENGTH) {
         throw new Error(`Invalid tag: ${tag}`);
       }
     }
     return v;
   },
   keyword: simpleValidateFunc(v => v === null || typeof v == "string"),
   description: simpleValidateFunc(v => v === null || typeof v == "string"),
-  loadInSidebar: simpleValidateFunc(v => v === true || v === false),
   dateAdded: simpleValidateFunc(v => typeof v === "number"
     && v > PlacesSyncUtils.bookmarks.EARLIEST_BOOKMARK_TIMESTAMP),
   feed: v => v === null ? v : BOOKMARK_VALIDATORS.url(v),
   site: v => v === null ? v : BOOKMARK_VALIDATORS.url(v),
   title: BOOKMARK_VALIDATORS.title,
   url: BOOKMARK_VALIDATORS.url,
 });
 
--- a/toolkit/components/places/SyncedBookmarksMirror.jsm
+++ b/toolkit/components/places/SyncedBookmarksMirror.jsm
@@ -667,31 +667,30 @@ class SyncedBookmarksMirror {
 
     await this.maybeStoreRemoteURL(url);
 
     let serverModified = determineServerModified(record);
     let dateAdded = determineDateAdded(record);
     let title = validateTitle(record.title);
     let keyword = validateKeyword(record.keyword);
     let description = validateDescription(record.description);
-    let loadInSidebar = record.loadInSidebar === true ? "1" : null;
 
     await this.db.executeCached(`
       REPLACE INTO items(guid, serverModified, needsMerge, kind,
                          dateAdded, title, keyword,
-                         urlId, description, loadInSidebar)
+                         urlId, description)
       VALUES(:guid, :serverModified, :needsMerge, :kind,
              :dateAdded, NULLIF(:title, ""), :keyword,
              (SELECT id FROM urls
               WHERE hash = hash(:url) AND
                     url = :url),
-             :description, :loadInSidebar)`,
+             :description)`,
       { guid, serverModified, needsMerge,
         kind: SyncedBookmarksMirror.KIND.BOOKMARK, dateAdded, title, keyword,
-        url: url.href, description, loadInSidebar });
+        url: url.href, description });
 
     let tags = record.tags;
     if (tags && Array.isArray(tags)) {
       for (let rawTag of tags) {
         let tag = validateTag(rawTag);
         if (!tag) {
           continue;
         }
@@ -1568,17 +1567,17 @@ class SyncedBookmarksMirror {
       { valueState: BookmarkMergeState.TYPE.REMOTE });
 
     // Stage remaining locally changed items for upload.
     await this.db.execute(`
       WITH RECURSIVE
       ${LocalItemsSQLFragment}
       INSERT INTO itemsToUpload(id, guid, syncChangeCounter, parentGuid,
                                 parentTitle, dateAdded, type, title, isQuery,
-                                url, tags, description, loadInSidebar,
+                                url, tags, description,
                                 smartBookmarkName, keyword, feedURL, siteURL,
                                 position, tagFolderName)
       SELECT s.id, s.guid, s.syncChangeCounter, s.parentGuid, s.parentTitle,
              s.dateAdded / 1000, s.type, s.title,
              IFNULL(SUBSTR(h.url, 1, 6) = 'place:', 0) AS isQuery,
              h.url,
              (SELECT GROUP_CONCAT(t.title, ',') FROM moz_bookmarks e
               JOIN moz_bookmarks t ON t.id = e.parent
@@ -1586,20 +1585,16 @@ class SyncedBookmarksMirror {
               WHERE s.type = :bookmarkType AND
                     r.guid = :tagsGuid AND
                     e.fk = h.id),
              (SELECT a.content FROM moz_items_annos a
               JOIN moz_anno_attributes n ON n.id = a.anno_attribute_id
               WHERE s.type IN (:bookmarkType, :folderType) AND
                     a.item_id = s.id AND
                     n.name = :descriptionAnno),
-             IFNULL((SELECT a.content FROM moz_items_annos a
-                     JOIN moz_anno_attributes n ON n.id = a.anno_attribute_id
-                     WHERE a.item_id = s.id AND
-                           n.name = :sidebarAnno), 0),
              (SELECT a.content FROM moz_items_annos a
               JOIN moz_anno_attributes n ON n.id = a.anno_attribute_id
               WHERE a.item_id = s.id AND
                     n.name = :smartBookmarkAnno),
              (SELECT keyword FROM moz_keywords WHERE place_id = h.id),
              (SELECT a.content FROM moz_items_annos a
               JOIN moz_anno_attributes n ON n.id = a.anno_attribute_id
               WHERE s.type = :folderType AND
@@ -1616,17 +1611,16 @@ class SyncedBookmarksMirror {
       FROM localItems s
       LEFT JOIN moz_places h ON h.id = s.placeId
       LEFT JOIN idsToWeaklyUpload w ON w.id = s.id
       WHERE s.syncChangeCounter >= 1 OR
             w.id NOT NULL`,
       { bookmarkType: PlacesUtils.bookmarks.TYPE_BOOKMARK,
         tagsGuid: PlacesUtils.bookmarks.tagsGuid,
         descriptionAnno: PlacesSyncUtils.bookmarks.DESCRIPTION_ANNO,
-        sidebarAnno: PlacesSyncUtils.bookmarks.SIDEBAR_ANNO,
         smartBookmarkAnno: PlacesSyncUtils.bookmarks.SMART_BOOKMARKS_ANNO,
         folderType: PlacesUtils.bookmarks.TYPE_FOLDER,
         feedURLAnno: PlacesUtils.LMANNO_FEEDURI,
         siteURLAnno: PlacesUtils.LMANNO_SITEURI });
 
     // Record the child GUIDs of locally changed folders, which we use to
     // populate the `children` array in the record.
     await this.db.execute(`
@@ -1666,17 +1660,17 @@ class SyncedBookmarksMirror {
       } else {
         childRecordIdsByLocalParentId.set(localParentId, [childRecordId]);
       }
     }
 
     let itemRows = await this.db.execute(`
       SELECT id, syncChangeCounter, guid, isDeleted, type, isQuery,
              smartBookmarkName, tagFolderName,
-             loadInSidebar, keyword, tags, url, IFNULL(title, "") AS title,
+             keyword, tags, url, IFNULL(title, "") AS title,
              description, feedURL, siteURL, position, parentGuid,
              IFNULL(parentTitle, "") AS parentTitle, dateAdded
       FROM itemsToUpload`);
 
     for await (let row of yieldingIterator(itemRows)) {
       let syncChangeCounter = row.getResultByName("syncChangeCounter");
 
       let guid = row.getResultByName("guid");
@@ -1741,20 +1735,16 @@ class SyncedBookmarksMirror {
             dateAdded: row.getResultByName("dateAdded") || undefined,
             bmkUri: row.getResultByName("url"),
             title: row.getResultByName("title"),
           };
           let description = row.getResultByName("description");
           if (description) {
             bookmarkCleartext.description = description;
           }
-          let loadInSidebar = row.getResultByName("loadInSidebar");
-          if (loadInSidebar) {
-            bookmarkCleartext.loadInSidebar = true;
-          }
           let keyword = row.getResultByName("keyword");
           if (keyword) {
             bookmarkCleartext.keyword = keyword;
           }
           let tags = row.getResultByName("tags");
           if (tags) {
             bookmarkCleartext.tags = tags.split(",");
           }
@@ -1966,16 +1956,18 @@ async function migrateMirrorSchema(db, c
 async function initializeMirrorDatabase(db) {
   // Key-value metadata table. Stores the server collection last modified time
   // and sync ID.
   await db.execute(`CREATE TABLE mirror.meta(
     key TEXT PRIMARY KEY,
     value NOT NULL
   )`);
 
+  // Note: loadInSidebar is not used as of Firefox 63, but remains to avoid
+  // rebuilding the database if the user happens to downgrade.
   await db.execute(`CREATE TABLE mirror.items(
     id INTEGER PRIMARY KEY,
     guid TEXT UNIQUE NOT NULL,
     /* The server modified time, in milliseconds. */
     serverModified INTEGER NOT NULL DEFAULT 0,
     needsMerge BOOLEAN NOT NULL DEFAULT 0,
     isDeleted BOOLEAN NOT NULL DEFAULT 0,
     kind INTEGER NOT NULL DEFAULT -1,
@@ -2084,20 +2076,16 @@ async function initializeTempMirrorEntit
   // Columns in `items` that correspond to annos stored in `moz_items_annos`.
   // We use this table to build SQL fragments for the `insertNewLocalItems` and
   // `updateExistingLocalItems` triggers below.
   const syncedAnnoTriggers = [{
     annoName: PlacesSyncUtils.bookmarks.DESCRIPTION_ANNO,
     columnName: "newDescription",
     type: PlacesUtils.annotations.TYPE_STRING,
   }, {
-    annoName: PlacesSyncUtils.bookmarks.SIDEBAR_ANNO,
-    columnName: "newLoadInSidebar",
-    type: PlacesUtils.annotations.TYPE_INT32,
-  }, {
     annoName: PlacesSyncUtils.bookmarks.SMART_BOOKMARKS_ANNO,
     columnName: "newSmartBookmarkName",
     type: PlacesUtils.annotations.TYPE_STRING,
   }, {
     annoName: PlacesUtils.LMANNO_FEEDURI,
     columnName: "newFeedURL",
     type: PlacesUtils.annotations.TYPE_STRING,
   }, {
@@ -2194,17 +2182,17 @@ async function initializeTempMirrorEntit
   // on this view to update Places. Note that we can't just `REPLACE INTO
   // moz_bookmarks`, because `REPLACE` doesn't fire the `AFTER DELETE` triggers
   // that Places uses to maintain schema coherency.
   await db.execute(`
     CREATE TEMP VIEW itemsToMerge(localId, remoteId, hasRemoteValue, newLevel,
                                   oldGuid, newGuid, newType,
                                   newDateAddedMicroseconds, newTitle,
                                   oldPlaceId, newPlaceId, newKeyword,
-                                  newDescription, newLoadInSidebar,
+                                  newDescription,
                                   newSmartBookmarkName, newFeedURL,
                                   newSiteURL) AS
     SELECT b.id, v.id, r.valueState = ${BookmarkMergeState.TYPE.REMOTE},
            r.level, r.localGuid, r.mergedGuid,
            (CASE WHEN v.kind IN (${[
                         SyncedBookmarksMirror.KIND.BOOKMARK,
                         SyncedBookmarksMirror.KIND.QUERY,
                       ].join(",")}) THEN ${PlacesUtils.bookmarks.TYPE_BOOKMARK}
@@ -2213,17 +2201,17 @@ async function initializeTempMirrorEntit
                         SyncedBookmarksMirror.KIND.LIVEMARK,
                       ].join(",")}) THEN ${PlacesUtils.bookmarks.TYPE_FOLDER}
                  ELSE ${PlacesUtils.bookmarks.TYPE_SEPARATOR} END),
            /* Take the older creation date. "b.dateAdded" is in microseconds;
               "v.dateAdded" is in milliseconds. */
            (CASE WHEN b.dateAdded / 1000 < v.dateAdded THEN b.dateAdded
                  ELSE v.dateAdded * 1000 END),
            v.title, h.id, u.newPlaceId, v.keyword, v.description,
-           v.loadInSidebar, v.smartBookmarkName, v.feedURL, v.siteURL
+           v.smartBookmarkName, v.feedURL, v.siteURL
     FROM items v
     JOIN mergeStates r ON r.mergedGuid = v.guid
     LEFT JOIN moz_bookmarks b ON b.guid = r.localGuid
     LEFT JOIN moz_places h ON h.id = b.fk
     LEFT JOIN (
       SELECT h.id AS newPlaceId, u.id AS urlId
       FROM urls u
       JOIN moz_places h ON h.url_hash = u.hash AND
@@ -2691,17 +2679,16 @@ async function initializeTempMirrorEntit
     parentTitle TEXT,
     dateAdded INTEGER, /* In milliseconds. */
     type INTEGER,
     title TEXT,
     isQuery BOOLEAN NOT NULL DEFAULT 0,
     url TEXT,
     tags TEXT,
     description TEXT,
-    loadInSidebar BOOLEAN,
     smartBookmarkName TEXT,
     tagFolderName TEXT,
     keyword TEXT,
     feedURL TEXT,
     siteURL TEXT,
     position INTEGER
   )`);
 
--- a/toolkit/components/places/tests/sync/head_sync.js
+++ b/toolkit/components/places/tests/sync/head_sync.js
@@ -131,17 +131,16 @@ async function promiseManyDatesAdded(gui
 
 async function fetchLocalTree(rootGuid) {
   function bookmarkNodeToInfo(node) {
     let { guid, index, title, typeCode: type } = node;
     let itemInfo = { guid, index, title, type };
     if (node.annos) {
       let syncableAnnos = node.annos.filter(anno => [
         PlacesSyncUtils.bookmarks.DESCRIPTION_ANNO,
-        PlacesSyncUtils.bookmarks.SIDEBAR_ANNO,
         PlacesSyncUtils.bookmarks.SMART_BOOKMARKS_ANNO,
         PlacesUtils.LMANNO_FEEDURI,
         PlacesUtils.LMANNO_SITEURI,
       ].includes(anno.name));
       if (syncableAnnos.length) {
         itemInfo.annos = syncableAnnos;
       }
     }
--- a/toolkit/components/places/tests/sync/test_sync_utils.js
+++ b/toolkit/components/places/tests/sync/test_sync_utils.js
@@ -1,17 +1,16 @@
 ChromeUtils.import("resource://gre/modules/ObjectUtils.jsm");
 ChromeUtils.import("resource://gre/modules/PlacesSyncUtils.jsm");
 ChromeUtils.import("resource://testing-common/httpd.js");
 ChromeUtils.defineModuleGetter(this, "Preferences",
                                "resource://gre/modules/Preferences.jsm");
 Cu.importGlobalProperties(["URLSearchParams"]);
 
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
-const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 const SYNC_PARENT_ANNO = "sync/parent";
 
 var makeGuid = PlacesUtils.history.makeGuid;
 
 function makeLivemarkServer() {
   let server = new HttpServer();
   server.registerPrefixHandler("/feed/", do_get_file("./livemark.xml"));
   server.start(-1);
@@ -1001,40 +1000,16 @@ add_task(async function test_update_anno
       description: null,
     });
     ok(!updatedItem.description, "Should not return cleared description");
     let id = await recordIdToId(updatedItem.recordId);
     ok(!PlacesUtils.annotations.itemHasAnnotation(id, DESCRIPTION_ANNO),
       "Should remove description anno");
   }
 
-  info("Add bookmark sidebar anno");
-  {
-    let updatedItem = await PlacesSyncUtils.bookmarks.update({
-      recordId: guids.bmk,
-      loadInSidebar: true,
-    });
-    ok(updatedItem.loadInSidebar, "Should return sidebar anno");
-    let id = await recordIdToId(updatedItem.recordId);
-    ok(PlacesUtils.annotations.itemHasAnnotation(id, LOAD_IN_SIDEBAR_ANNO),
-      "Should set sidebar anno for existing bookmark");
-  }
-
-  info("Clear bookmark sidebar anno");
-  {
-    let updatedItem = await PlacesSyncUtils.bookmarks.update({
-      recordId: guids.bmk,
-      loadInSidebar: false,
-    });
-    ok(!updatedItem.loadInSidebar, "Should not return cleared sidebar anno");
-    let id = await recordIdToId(updatedItem.recordId);
-    ok(!PlacesUtils.annotations.itemHasAnnotation(id, LOAD_IN_SIDEBAR_ANNO),
-      "Should clear sidebar anno for existing bookmark");
-  }
-
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
 add_task(async function test_update_move_root() {
   info("Move root to same parent");
   {
     // This should be a no-op.
@@ -1489,47 +1464,16 @@ add_task(async function test_insert_anno
   {
     equal(descFolder.description, "Folder description",
       "Should return new folder description");
     let id = await recordIdToId(descFolder.recordId);
     equal(PlacesUtils.annotations.getItemAnnotation(id, DESCRIPTION_ANNO),
       "Folder description", "Should set new folder description");
   }
 
-  info("Bookmark with sidebar anno");
-  let sidebarBmk = await PlacesSyncUtils.bookmarks.insert({
-    kind: "bookmark",
-    url: "https://example.com",
-    recordId: makeGuid(),
-    parentRecordId: "menu",
-    loadInSidebar: true,
-  });
-  {
-    ok(sidebarBmk.loadInSidebar, "Should return sidebar anno for new bookmark");
-    let id = await recordIdToId(sidebarBmk.recordId);
-    ok(PlacesUtils.annotations.itemHasAnnotation(id, LOAD_IN_SIDEBAR_ANNO),
-      "Should set sidebar anno for new bookmark");
-  }
-
-  info("Bookmark without sidebar anno");
-  let noSidebarBmk = await PlacesSyncUtils.bookmarks.insert({
-    kind: "bookmark",
-    url: "https://example.org",
-    recordId: makeGuid(),
-    parentRecordId: "toolbar",
-    loadInSidebar: false,
-  });
-  {
-    ok(!noSidebarBmk.loadInSidebar,
-      "Should not return sidebar anno for new bookmark");
-    let id = await recordIdToId(noSidebarBmk.recordId);
-    ok(!PlacesUtils.annotations.itemHasAnnotation(id, LOAD_IN_SIDEBAR_ANNO),
-      "Should not set sidebar anno for new bookmark");
-  }
-
   await PlacesUtils.bookmarks.eraseEverything();
   await PlacesSyncUtils.bookmarks.reset();
 });
 
 add_task(async function test_insert_tag_query() {
   info("Use the public tagging API to ensure we added the tag correctly");
   await PlacesUtils.bookmarks.insert({
     parentGuid: PlacesUtils.bookmarks.menuGuid,
@@ -1818,17 +1762,16 @@ add_task(async function test_fetch() {
     description: "Folder description",
   });
   let bmk = await PlacesSyncUtils.bookmarks.insert({
     recordId: makeGuid(),
     parentRecordId: "menu",
     kind: "bookmark",
     url: "https://example.com",
     description: "Bookmark description",
-    loadInSidebar: true,
     tags: ["taggy"],
   });
   let folderBmk = await PlacesSyncUtils.bookmarks.insert({
     recordId: makeGuid(),
     parentRecordId: folder.recordId,
     kind: "bookmark",
     url: "https://example.org",
     keyword: "kw",
@@ -1865,39 +1808,37 @@ add_task(async function test_fetch() {
       description: "Folder description",
       childRecordIds: [folderBmk.recordId, folderSep.recordId],
       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");
+  info("Fetch bookmark with description and tags");
   {
     let item = await PlacesSyncUtils.bookmarks.fetch(bmk.recordId);
     deepEqual(Object.keys(item).sort(), ["recordId", "kind", "parentRecordId",
-      "url", "tags", "description", "loadInSidebar", "parentTitle", "title", "dateAdded"].sort(),
+      "url", "tags", "description", "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, "menu", "Should return parent title");
     strictEqual(item.title, "", "Should return empty title");
   }
 
-  info("Fetch bookmark with keyword; without parent title or annos");
+  info("Fetch bookmark with keyword; without parent title");
   {
     let item = await PlacesSyncUtils.bookmarks.fetch(folderBmk.recordId);
     deepEqual(Object.keys(item).sort(), ["recordId", "kind", "parentRecordId",
-      "url", "keyword", "tags", "loadInSidebar", "parentTitle", "title", "dateAdded"].sort(),
+      "url", "keyword", "tags", "parentTitle", "title", "dateAdded"].sort(),
       "Should omit blank bookmark-specific properties");
-    strictEqual(item.loadInSidebar, false, "Should not load bookmark in sidebar");
     deepEqual(item.tags, [], "Tags should be empty");
     equal(item.keyword, "kw", "Should return keyword");
     strictEqual(item.parentTitle, "", "Should include parent title even if empty");
     strictEqual(item.title, "", "Should include bookmark title even if empty");
   }
 
   info("Fetch separator");
   {
--- a/toolkit/components/places/tests/unit/test_384370.js
+++ b/toolkit/components/places/tests/unit/test_384370.js
@@ -1,9 +1,8 @@
-const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
 
 var tagData = [
   { uri: uri("http://slint.us"), tags: ["indie", "kentucky", "music"] },
   { uri: uri("http://en.wikipedia.org/wiki/Diplodocus"), tags: ["dinosaur", "dj", "rad word"] }
 ];
 
 var bookmarkData = [
@@ -100,18 +99,16 @@ async function testMenuBookmarks() {
 
   // open test folder, and test the children
   folderNode.containerOpen = true;
   Assert.equal(folderNode.childCount, 1);
 
   let bookmarkNode = folderNode.getChild(0);
   Assert.equal("http://test/post", bookmarkNode.uri);
   Assert.equal("test post keyword", bookmarkNode.title);
-  Assert.ok(PlacesUtils.annotations.itemHasAnnotation(bookmarkNode.itemId,
-                                                      LOAD_IN_SIDEBAR_ANNO));
   Assert.equal(bookmarkNode.dateAdded, 1177375336000000);
 
   let entry = await PlacesUtils.keywords.fetch({ url: bookmarkNode.uri });
   Assert.equal("test", entry.keyword);
   Assert.equal("hidden1%3Dbar&text1%3D%25s", entry.postData);
 
   Assert.equal("ISO-8859-1",
                (await PlacesUtils.getCharsetForURI(NetUtil.newURI(bookmarkNode.uri))));
--- a/toolkit/components/places/tests/unit/test_bookmarks_html.js
+++ b/toolkit/components/places/tests/unit/test_bookmarks_html.js
@@ -1,15 +1,14 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
 
 // An object representing the contents of bookmarks.preplaces.html.
 var test_bookmarks = {
   menu: [
     { title: "Mozilla Firefox",
       children: [
         { title: "Help and Tutorials",
@@ -38,17 +37,16 @@ var test_bookmarks = {
       dateAdded: 1177541020000000,
       lastModified: 1177541050000000,
       children: [
         { title: "test post keyword",
           description: "item description",
           dateAdded: 1177375336000000,
           lastModified: 1177375423000000,
           keyword: "test",
-          sidebar: true,
           postData: "hidden1%3Dbar&text1%3D%25s",
           charset: "ISO-8859-1",
           url: "http://test/post"
         }
       ]
     }
   ],
   toolbar: [
@@ -317,21 +315,16 @@ function checkItem(aExpected, aNode) {
                            base64EncodeString(String.fromCharCode.apply(String, data));
           Assert.ok(base64Icon == aExpected.icon);
           break;
         case "keyword": {
           let entry = await PlacesUtils.keywords.fetch({ url: aNode.uri });
           Assert.equal(entry.keyword, aExpected.keyword);
           break;
         }
-        case "sidebar":
-          Assert.equal(PlacesUtils.annotations
-                                  .itemHasAnnotation(id, LOAD_IN_SIDEBAR_ANNO),
-                       aExpected.sidebar);
-          break;
         case "postData": {
           let entry = await PlacesUtils.keywords.fetch({ url: aNode.uri });
           Assert.equal(entry.postData, aExpected.postData);
           break;
         }
         case "charset":
           let testURI = NetUtil.newURI(aNode.uri);
           Assert.equal((await PlacesUtils.getCharsetForURI(testURI)), aExpected.charset);
--- a/toolkit/components/places/tests/unit/test_bookmarks_html_corrupt.js
+++ b/toolkit/components/places/tests/unit/test_bookmarks_html_corrupt.js
@@ -1,15 +1,14 @@
 /*
  * This test ensures that importing/exporting to HTML does not stop
  * if a malformed uri is found.
  */
 
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
-const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 
 const TEST_FAVICON_PAGE_URL = "http://en-US.www.mozilla.com/en-US/firefox/central/";
 const TEST_FAVICON_DATA_SIZE = 580;
 
 add_task(async function test_corrupt_file() {
   // avoid creating the places smart folder during tests
   Services.prefs.setIntPref("browser.places.smartBookmarksVersion", -1);
 
@@ -77,18 +76,16 @@ var database_check = async function() {
   let bookmarkNode = folderNode.getChild(0);
   Assert.equal("http://test/post", bookmarkNode.uri);
   Assert.equal("test post keyword", bookmarkNode.title);
 
   let entry = await PlacesUtils.keywords.fetch({ url: bookmarkNode.uri });
   Assert.equal("test", entry.keyword);
   Assert.equal("hidden1%3Dbar&text1%3D%25s", entry.postData);
 
-  Assert.ok(PlacesUtils.annotations.itemHasAnnotation(bookmarkNode.itemId,
-                                                      LOAD_IN_SIDEBAR_ANNO));
   Assert.equal(bookmarkNode.dateAdded, 1177375336000000);
   Assert.equal(bookmarkNode.lastModified, 1177375423000000);
 
   Assert.equal((await PlacesUtils.getCharsetForURI(NetUtil.newURI(bookmarkNode.uri))),
                "ISO-8859-1");
 
   Assert.equal("item description",
                PlacesUtils.annotations.getItemAnnotation(bookmarkNode.itemId,
--- a/toolkit/components/places/tests/unit/test_bookmarks_json.js
+++ b/toolkit/components/places/tests/unit/test_bookmarks_json.js
@@ -1,15 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 ChromeUtils.import("resource://gre/modules/BookmarkJSONUtils.jsm");
 
-const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
 
 // An object representing the contents of bookmarks.json.
 var test_bookmarks = {
   menu: [
     { guid: "OCyeUO5uu9FF",
       title: "Mozilla Firefox",
       children: [
@@ -51,17 +50,16 @@ var test_bookmarks = {
       lastModified: 1177541050000000,
       children: [
         { guid: "OCyeUO5uu9GX",
           title: "test post keyword",
           description: "item description",
           dateAdded: 1177375336000000,
           lastModified: 1177375423000000,
           keyword: "test",
-          sidebar: true,
           postData: "hidden1%3Dbar&text1%3D%25s",
           charset: "ISO-8859-1"
         }
       ]
     }
   ],
   toolbar: [
     { guid: "OCyeUO5uu9FB",
@@ -212,20 +210,16 @@ async function checkItem(aExpected, aNod
       case "keyword": {
         let entry = await PlacesUtils.keywords.fetch({ url: aNode.uri });
         Assert.equal(entry.keyword, aExpected.keyword);
         break;
       }
       case "guid":
         Assert.equal(bookmark.guid, aExpected.guid);
         break;
-      case "sidebar":
-        Assert.equal(PlacesUtils.annotations.itemHasAnnotation(
-                     id, LOAD_IN_SIDEBAR_ANNO), aExpected.sidebar);
-        break;
       case "postData": {
         let entry = await PlacesUtils.keywords.fetch({ url: aNode.uri });
         Assert.equal(entry.postData, aExpected.postData);
         break;
       }
       case "charset":
         let testURI = Services.io.newURI(aNode.uri);
         Assert.equal((await PlacesUtils.getCharsetForURI(testURI)), aExpected.charset);