Bug 1435437 - Expose gNavigatorBundle as a plain JS object with a stringbundle-like API;r=Gijs draft
authorBrian Grinstead <bgrinstead@mozilla.com>
Fri, 02 Feb 2018 16:15:53 -0800
changeset 750865 0f2eef9178cb61802f158efe88b82a723f5e082e
parent 750719 2638ae89f86fbb5f224ef0511b3f77aec5503a51
child 750866 0ba6478a55111e77a77da40c15d74d9c6c9339c6
push id97770
push userbgrinstead@mozilla.com
push dateSat, 03 Feb 2018 00:49:25 +0000
reviewersGijs
bugs1435437
milestone60.0a1
Bug 1435437 - Expose gNavigatorBundle as a plain JS object with a stringbundle-like API;r=Gijs This will allow us to not rely on an actual <stringbundle> while still avoiding a mass rewrite of code that accesses gNavigatorBundle with the more awkward API exposed by gBrowserBundle. MozReview-Commit-ID: 2B4smbo1xZP
browser/base/content/browser.js
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -138,16 +138,28 @@ if (AppConstants.MOZ_CRASHREPORTER) {
   XPCOMUtils.defineLazyServiceGetter(this, "gCrashReporter",
                                      "@mozilla.org/xre/app-info;1",
                                      "nsICrashReporter");
 }
 
 XPCOMUtils.defineLazyGetter(this, "gBrowserBundle", function() {
   return Services.strings.createBundle("chrome://browser/locale/browser.properties");
 });
+XPCOMUtils.defineLazyGetter(this, "gNavigatorBundle", function() {
+  // This is a stringbundle-like interface to gBrowserBundle, formerly a getter for
+  // the "bundle_browser" element.
+  return {
+    getString(key) {
+      return gBrowserBundle.GetStringFromName(key);
+    },
+    getFormattedString(key, array) {
+      return gBrowserBundle.formatStringFromName(key, array, array.length);
+    }
+  };
+});
 XPCOMUtils.defineLazyGetter(this, "gTabBrowserBundle", function() {
   return Services.strings.createBundle("chrome://browser/locale/tabbrowser.properties");
 });
 
 XPCOMUtils.defineLazyGetter(this, "gCustomizeMode", function() {
   let scope = {};
   ChromeUtils.import("resource:///modules/CustomizeMode.jsm", scope);
   return new scope.CustomizeMode(window);
@@ -219,22 +231,21 @@ var gMultiProcessBrowser =
         .getInterface(Ci.nsIWebNavigation)
         .QueryInterface(Ci.nsILoadContext)
         .useRemoteTabs;
 
 if (AppConstants.platform != "macosx") {
   var gEditUIVisible = true;
 }
 
-/* globals gBrowser, gNavToolbox, gURLBar:true, gNavigatorBundle*/
+/* globals gBrowser, gNavToolbox, gURLBar:true */
 [
   ["gBrowser",            "content"],
   ["gNavToolbox",         "navigator-toolbox"],
   ["gURLBar",             "urlbar"],
-  ["gNavigatorBundle",    "bundle_browser"]
 ].forEach(function(elementGlobal) {
   var [name, id] = elementGlobal;
   Object.defineProperty(window, name, {
     configurable: true,
     enumerable: true,
     get() {
       var element = document.getElementById(id);
       if (!element)