Backout changeset 8af101010da7 (bug 692130 bustage fix 1)
authorEd Morley <bmo@edmorley.co.uk>
Fri, 07 Oct 2011 01:36:01 +0100
changeset 79645 ed12a4461eebf288ea49a5bc9d98907883b13a27
parent 79644 2db24d928e6c61636dabce2f4567c3273982e6ea
child 79646 b2ac6a043d7884d6429163023e8ac4b9424ff1cc
push idunknown
push userunknown
push dateunknown
bugs692130
milestone10.0a1
backs out8af101010da7bfffc91ffad8465950887ba58094
Backout changeset 8af101010da7 (bug 692130 bustage fix 1)
browser/components/sidebar/Makefile.in
browser/components/sidebar/nsSidebar.js
browser/components/sidebar/nsSidebar.manifest
browser/components/sidebar/src/Makefile.in
browser/components/sidebar/src/nsSidebar.js
browser/components/sidebar/src/nsSidebar.manifest
deleted file mode 100644
--- a/browser/components/sidebar/Makefile.in
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is mozilla.org Code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-EXTRA_COMPONENTS = nsSidebar.manifest
-EXTRA_PP_COMPONENTS = nsSidebar.js
-
-include $(topsrcdir)/config/rules.mk
-
deleted file mode 100644
--- a/browser/components/sidebar/nsSidebar.js
+++ /dev/null
@@ -1,231 +0,0 @@
-# -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1999
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Stephen Lamm            <slamm@netscape.com>
-#   Robert John Churchill   <rjc@netscape.com>
-#   David Hyatt             <hyatt@mozilla.org>
-#   Christopher A. Aillon   <christopher@aillon.com>
-#   Myk Melez               <myk@mozilla.org>
-#   Pamela Greene           <pamg.bugs@gmail.com>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-Components.utils.import("resource://gre/modules/Services.jsm");
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const DEBUG = false; /* set to false to suppress debug messages */
-
-const SIDEBAR_CONTRACTID        = "@mozilla.org/sidebar;1";
-const SIDEBAR_CID               = Components.ID("{22117140-9c6e-11d3-aaf1-00805f8a4905}");
-const nsISidebar                = Components.interfaces.nsISidebar;
-const nsISidebarExternal        = Components.interfaces.nsISidebarExternal;
-const nsIClassInfo              = Components.interfaces.nsIClassInfo;
-
-// File extension for Sherlock search plugin description files
-const SHERLOCK_FILE_EXT_REGEXP = /\.src$/i;
-
-function nsSidebar()
-{
-}
-
-nsSidebar.prototype.classID = SIDEBAR_CID;
-
-nsSidebar.prototype.nc = "http://home.netscape.com/NC-rdf#";
-
-function sidebarURLSecurityCheck(url)
-{
-    if (!/^(https?:|ftp:)/i.test(url)) {
-        Components.utils.reportError("Invalid argument passed to window.sidebar.addPanel: Unsupported panel URL." );
-        return false;
-    }
-    return true;
-}
-
-/* decorate prototype to provide ``class'' methods and property accessors */
-nsSidebar.prototype.addPanel =
-function (aTitle, aContentURL, aCustomizeURL)
-{
-    debug("addPanel(" + aTitle + ", " + aContentURL + ", " +
-          aCustomizeURL + ")");
-
-    return this.addPanelInternal(aTitle, aContentURL, aCustomizeURL, false);
-}
-
-nsSidebar.prototype.addPersistentPanel =
-function(aTitle, aContentURL, aCustomizeURL)
-{
-    debug("addPersistentPanel(" + aTitle + ", " + aContentURL + ", " +
-           aCustomizeURL + ")\n");
-
-    return this.addPanelInternal(aTitle, aContentURL, aCustomizeURL, true);
-}
-
-nsSidebar.prototype.addPanelInternal =
-function (aTitle, aContentURL, aCustomizeURL, aPersist)
-{
-    // XXX Bug 620418: We shouldn't do this anymore. Instead, we should find the
-    // global object for our caller and use it.
-    var win = Services.wm.getMostRecentWindow("navigator:browser");
-    if (!sidebarURLSecurityCheck(aContentURL))
-      return;
-
-    var uri = null;
-    try {
-      uri = Services.io.newURI(aContentURL, null, null);
-    }
-    catch(ex) { return; }
-
-    win.PlacesUIUtils.showBookmarkDialog({ action: "add"
-                                         , type: "bookmark"
-                                         , hiddenRows: [ "description"
-                                                       , "keyword"
-                                                       , "location"
-                                                       , "loadInSidebar" ]
-                                         , uri: uri
-                                         , title: aTitle
-                                         , loadBookmarkInSidebar: true
-                                         }, win, true);
-}
-
-nsSidebar.prototype.validateSearchEngine =
-function (engineURL, iconURL)
-{
-  try
-  {
-    // Make sure the URLs are HTTP, HTTPS, or FTP.
-    var isWeb = /^(https?|ftp):\/\//i;
-
-    if (!isWeb.test(engineURL))
-      throw "Unsupported search engine URL";
-
-    if (iconURL && !isWeb.test(iconURL))
-      throw "Unsupported search icon URL.";
-  }
-  catch(ex)
-  {
-    debug(ex);
-    Components.utils.reportError("Invalid argument passed to window.sidebar.addSearchEngine: " + ex);
-
-    var searchBundle = Services.strings.createBundle("chrome://global/locale/search/search.properties");
-    var brandBundle = Services.strings.createBundle("chrome://branding/locale/brand.properties");
-    var brandName = brandBundle.GetStringFromName("brandShortName");
-    var title = searchBundle.GetStringFromName("error_invalid_engine_title");
-    var msg = searchBundle.formatStringFromName("error_invalid_engine_msg",
-                                                [brandName], 1);
-    Services.ww.getNewPrompter(null).alert(title, msg);
-    return false;
-  }
-
-  return true;
-}
-
-// The suggestedTitle and suggestedCategory parameters are ignored, but remain
-// for backward compatibility.
-nsSidebar.prototype.addSearchEngine =
-function (engineURL, iconURL, suggestedTitle, suggestedCategory)
-{
-  debug("addSearchEngine(" + engineURL + ", " + iconURL + ", " +
-        suggestedCategory + ", " + suggestedTitle + ")");
-
-  if (!this.validateSearchEngine(engineURL, iconURL))
-    return;
-
-  // OpenSearch files will likely be far more common than Sherlock files, and
-  // have less consistent suffixes, so we assume that ".src" is a Sherlock
-  // (text) file, and anything else is OpenSearch (XML).
-  var dataType;
-  if (SHERLOCK_FILE_EXT_REGEXP.test(engineURL))
-    dataType = Components.interfaces.nsISearchEngine.DATA_TEXT;
-  else
-    dataType = Components.interfaces.nsISearchEngine.DATA_XML;
-
-  Services.search.addEngine(engineURL, dataType, iconURL, true);
-}
-
-// This function exists largely to implement window.external.AddSearchProvider(),
-// to match other browsers' APIs.  The capitalization, although nonstandard here,
-// is therefore important.
-nsSidebar.prototype.AddSearchProvider =
-function (aDescriptionURL)
-{
-  // Get the favicon URL for the current page, or our best guess at the current
-  // page since we don't have easy access to the active document.  Most search
-  // engines will override this with an icon specified in the OpenSearch
-  // description anyway.
-  var win = Services.wm.getMostRecentWindow("navigator:browser");
-  var browser = win.gBrowser;
-  var iconURL = "";
-  // Use documentURIObject in the check for shouldLoadFavIcon so that we
-  // do the right thing with about:-style error pages.  Bug 453442
-  if (browser.shouldLoadFavIcon(browser.selectedBrowser
-                                       .contentDocument
-                                       .documentURIObject))
-    iconURL = browser.getIcon();
-
-  if (!this.validateSearchEngine(aDescriptionURL, iconURL))
-    return;
-
-  const typeXML = Components.interfaces.nsISearchEngine.DATA_XML;
-  Services.search.addEngine(aDescriptionURL, typeXML, iconURL, true);
-}
-
-// This function exists to implement window.external.IsSearchProviderInstalled(),
-// for compatibility with other browsers.  It will return an integer value
-// indicating whether the given engine is installed for the current user.
-// However, it is currently stubbed out due to security/privacy concerns
-// stemming from difficulties in determining what domain issued the request.
-// See bug 340604 and
-// http://msdn.microsoft.com/en-us/library/aa342526%28VS.85%29.aspx .
-// XXX Implement this!
-nsSidebar.prototype.IsSearchProviderInstalled =
-function (aSearchURL)
-{
-  return 0;
-}
-
-nsSidebar.prototype.classInfo = XPCOMUtils.generateCI({classID: SIDEBAR_CID,
-                                                       contractID: SIDEBAR_CONTRACTID,
-                                                       classDescription: "Sidebar",
-                                                       interfaces: [nsISidebar, nsISidebarExternal],
-                                                       flags: nsIClassInfo.DOM_OBJECT});
-
-nsSidebar.prototype.QueryInterface = XPCOMUtils.generateQI([nsISidebar, nsISidebarExternal]);
-
-var NSGetFactory = XPCOMUtils.generateNSGetFactory([nsSidebar]);
-
-/* static functions */
-if (DEBUG)
-    debug = function (s) { dump("-*- sidebar component: " + s + "\n"); }
-else
-    debug = function (s) {}
deleted file mode 100644
--- a/browser/components/sidebar/nsSidebar.manifest
+++ /dev/null
@@ -1,4 +0,0 @@
-component {22117140-9c6e-11d3-aaf1-00805f8a4905} nsSidebar.js
-contract @mozilla.org/sidebar;1 {22117140-9c6e-11d3-aaf1-00805f8a4905}
-category JavaScript-global-property sidebar @mozilla.org/sidebar;1
-category JavaScript-global-property external @mozilla.org/sidebar;1
new file mode 100644
--- /dev/null
+++ b/browser/components/sidebar/src/Makefile.in
@@ -0,0 +1,49 @@
+#
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org Code.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1998
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH		= ../../../..
+topsrcdir	= @top_srcdir@
+srcdir		= @srcdir@
+VPATH		= @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+EXTRA_COMPONENTS = nsSidebar.manifest
+EXTRA_PP_COMPONENTS = nsSidebar.js
+
+include $(topsrcdir)/config/rules.mk
+
new file mode 100644
--- /dev/null
+++ b/browser/components/sidebar/src/nsSidebar.js
@@ -0,0 +1,231 @@
+# -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1999
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#   Stephen Lamm            <slamm@netscape.com>
+#   Robert John Churchill   <rjc@netscape.com>
+#   David Hyatt             <hyatt@mozilla.org>
+#   Christopher A. Aillon   <christopher@aillon.com>
+#   Myk Melez               <myk@mozilla.org>
+#   Pamela Greene           <pamg.bugs@gmail.com>
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+const DEBUG = false; /* set to false to suppress debug messages */
+
+const SIDEBAR_CONTRACTID        = "@mozilla.org/sidebar;1";
+const SIDEBAR_CID               = Components.ID("{22117140-9c6e-11d3-aaf1-00805f8a4905}");
+const nsISidebar                = Components.interfaces.nsISidebar;
+const nsISidebarExternal        = Components.interfaces.nsISidebarExternal;
+const nsIClassInfo              = Components.interfaces.nsIClassInfo;
+
+// File extension for Sherlock search plugin description files
+const SHERLOCK_FILE_EXT_REGEXP = /\.src$/i;
+
+function nsSidebar()
+{
+}
+
+nsSidebar.prototype.classID = SIDEBAR_CID;
+
+nsSidebar.prototype.nc = "http://home.netscape.com/NC-rdf#";
+
+function sidebarURLSecurityCheck(url)
+{
+    if (!/^(https?:|ftp:)/i.test(url)) {
+        Components.utils.reportError("Invalid argument passed to window.sidebar.addPanel: Unsupported panel URL." );
+        return false;
+    }
+    return true;
+}
+
+/* decorate prototype to provide ``class'' methods and property accessors */
+nsSidebar.prototype.addPanel =
+function (aTitle, aContentURL, aCustomizeURL)
+{
+    debug("addPanel(" + aTitle + ", " + aContentURL + ", " +
+          aCustomizeURL + ")");
+
+    return this.addPanelInternal(aTitle, aContentURL, aCustomizeURL, false);
+}
+
+nsSidebar.prototype.addPersistentPanel =
+function(aTitle, aContentURL, aCustomizeURL)
+{
+    debug("addPersistentPanel(" + aTitle + ", " + aContentURL + ", " +
+           aCustomizeURL + ")\n");
+
+    return this.addPanelInternal(aTitle, aContentURL, aCustomizeURL, true);
+}
+
+nsSidebar.prototype.addPanelInternal =
+function (aTitle, aContentURL, aCustomizeURL, aPersist)
+{
+    // XXX Bug 620418: We shouldn't do this anymore. Instead, we should find the
+    // global object for our caller and use it.
+    var win = Services.wm.getMostRecentWindow("navigator:browser");
+    if (!sidebarURLSecurityCheck(aContentURL))
+      return;
+
+    var uri = null;
+    try {
+      uri = Services.io.newURI(aContentURL, null, null);
+    }
+    catch(ex) { return; }
+
+    win.PlacesUIUtils.showBookmarkDialog({ action: "add"
+                                         , type: "bookmark"
+                                         , hiddenRows: [ "description"
+                                                       , "keyword"
+                                                       , "location"
+                                                       , "loadInSidebar" ]
+                                         , uri: uri
+                                         , title: aTitle
+                                         , loadBookmarkInSidebar: true
+                                         }, win, true);
+}
+
+nsSidebar.prototype.validateSearchEngine =
+function (engineURL, iconURL)
+{
+  try
+  {
+    // Make sure the URLs are HTTP, HTTPS, or FTP.
+    var isWeb = /^(https?|ftp):\/\//i;
+
+    if (!isWeb.test(engineURL))
+      throw "Unsupported search engine URL";
+
+    if (iconURL && !isWeb.test(iconURL))
+      throw "Unsupported search icon URL.";
+  }
+  catch(ex)
+  {
+    debug(ex);
+    Components.utils.reportError("Invalid argument passed to window.sidebar.addSearchEngine: " + ex);
+
+    var searchBundle = Services.strings.createBundle("chrome://global/locale/search/search.properties");
+    var brandBundle = Services.strings.createBundle("chrome://branding/locale/brand.properties");
+    var brandName = brandBundle.GetStringFromName("brandShortName");
+    var title = searchBundle.GetStringFromName("error_invalid_engine_title");
+    var msg = searchBundle.formatStringFromName("error_invalid_engine_msg",
+                                                [brandName], 1);
+    Services.ww.getNewPrompter(null).alert(title, msg);
+    return false;
+  }
+
+  return true;
+}
+
+// The suggestedTitle and suggestedCategory parameters are ignored, but remain
+// for backward compatibility.
+nsSidebar.prototype.addSearchEngine =
+function (engineURL, iconURL, suggestedTitle, suggestedCategory)
+{
+  debug("addSearchEngine(" + engineURL + ", " + iconURL + ", " +
+        suggestedCategory + ", " + suggestedTitle + ")");
+
+  if (!this.validateSearchEngine(engineURL, iconURL))
+    return;
+
+  // OpenSearch files will likely be far more common than Sherlock files, and
+  // have less consistent suffixes, so we assume that ".src" is a Sherlock
+  // (text) file, and anything else is OpenSearch (XML).
+  var dataType;
+  if (SHERLOCK_FILE_EXT_REGEXP.test(engineURL))
+    dataType = Components.interfaces.nsISearchEngine.DATA_TEXT;
+  else
+    dataType = Components.interfaces.nsISearchEngine.DATA_XML;
+
+  Services.search.addEngine(engineURL, dataType, iconURL, true);
+}
+
+// This function exists largely to implement window.external.AddSearchProvider(),
+// to match other browsers' APIs.  The capitalization, although nonstandard here,
+// is therefore important.
+nsSidebar.prototype.AddSearchProvider =
+function (aDescriptionURL)
+{
+  // Get the favicon URL for the current page, or our best guess at the current
+  // page since we don't have easy access to the active document.  Most search
+  // engines will override this with an icon specified in the OpenSearch
+  // description anyway.
+  var win = Services.wm.getMostRecentWindow("navigator:browser");
+  var browser = win.gBrowser;
+  var iconURL = "";
+  // Use documentURIObject in the check for shouldLoadFavIcon so that we
+  // do the right thing with about:-style error pages.  Bug 453442
+  if (browser.shouldLoadFavIcon(browser.selectedBrowser
+                                       .contentDocument
+                                       .documentURIObject))
+    iconURL = browser.getIcon();
+
+  if (!this.validateSearchEngine(aDescriptionURL, iconURL))
+    return;
+
+  const typeXML = Components.interfaces.nsISearchEngine.DATA_XML;
+  Services.search.addEngine(aDescriptionURL, typeXML, iconURL, true);
+}
+
+// This function exists to implement window.external.IsSearchProviderInstalled(),
+// for compatibility with other browsers.  It will return an integer value
+// indicating whether the given engine is installed for the current user.
+// However, it is currently stubbed out due to security/privacy concerns
+// stemming from difficulties in determining what domain issued the request.
+// See bug 340604 and
+// http://msdn.microsoft.com/en-us/library/aa342526%28VS.85%29.aspx .
+// XXX Implement this!
+nsSidebar.prototype.IsSearchProviderInstalled =
+function (aSearchURL)
+{
+  return 0;
+}
+
+nsSidebar.prototype.classInfo = XPCOMUtils.generateCI({classID: SIDEBAR_CID,
+                                                       contractID: SIDEBAR_CONTRACTID,
+                                                       classDescription: "Sidebar",
+                                                       interfaces: [nsISidebar, nsISidebarExternal],
+                                                       flags: nsIClassInfo.DOM_OBJECT});
+
+nsSidebar.prototype.QueryInterface = XPCOMUtils.generateQI([nsISidebar, nsISidebarExternal]);
+
+var NSGetFactory = XPCOMUtils.generateNSGetFactory([nsSidebar]);
+
+/* static functions */
+if (DEBUG)
+    debug = function (s) { dump("-*- sidebar component: " + s + "\n"); }
+else
+    debug = function (s) {}
new file mode 100644
--- /dev/null
+++ b/browser/components/sidebar/src/nsSidebar.manifest
@@ -0,0 +1,4 @@
+component {22117140-9c6e-11d3-aaf1-00805f8a4905} nsSidebar.js
+contract @mozilla.org/sidebar;1 {22117140-9c6e-11d3-aaf1-00805f8a4905}
+category JavaScript-global-property sidebar @mozilla.org/sidebar;1
+category JavaScript-global-property external @mozilla.org/sidebar;1