Bug 1288406 - Part 4: Explicitly observe broadcasters' localizable attributes. r=Pike
authorStaś Małolepszy <stas@mozilla.com>
Thu, 04 Aug 2016 00:12:10 +0200
changeset 396524 4796bf9cddc858ee4bebd5aa2f816b6a2df3630d
parent 396523 828fe08e213c83e382a8d76dd551fa060986fe21
child 396525 743f2b93cfd96118f8e1aa3fef7cc0e6fa69b614
push id25030
push usersmalolepszy@mozilla.com
push dateThu, 04 Aug 2016 00:06:48 +0000
reviewersPike
bugs1288406
milestone50.0a1
Bug 1288406 - Part 4: Explicitly observe broadcasters' localizable attributes. r=Pike Before this change the <broadcaster> elements would broadcast their data-l10n-ids to the obervers and the L20n's mutation observer would kick in and localize both the broadcaster and the observer. After having their localizable attributes like `label` localized the broadcasters would boadcast them to the observes again. By using the <observes> elements inside of <menuitem> elements we can be specific about which attributes are observed. By not broadcasting data-l10n-ids it will be possible in the future to add them specifically to the observing elements to define their own accesskeys not tied to the global broadcaster. MozReview-Commit-ID: D2tcO80nt6o
browser/base/content/browser-menubar.inc
browser/base/content/browser-places.js
browser/base/content/browser-sets.inc
browser/locales/en-US/browser/menubar.ftl
browser/locales/en-US/browser/toolbar.ftl
toolkit/content/l20n-chrome-xul.js
toolkit/modules/IntlMessageContext.jsm
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -167,25 +167,38 @@
                               data-l10n-id="view-customize-toolbar-menuitem"
                               command="cmd_CustomizeToolbars"/>
                   </menupopup>
                 </menu>
                 <menu id="viewSidebarMenuMenu"
                       data-l10n-id="view-sidebar-menu">
                   <menupopup id="viewSidebarMenu">
                     <menuitem id="menu_bookmarksSidebar"
-                              key="viewBookmarksSidebarKb"
-                              observes="viewBookmarksSidebar"/>
+                              key="viewBookmarksSidebarKb">
+                      <observes element="viewBookmarksSidebar" attribute="label"/>
+                      <observes element="viewBookmarksSidebar" attribute="checked"/>
+                      <observes element="viewBookmarksSidebar" attribute="autoCheck"/>
+                      <observes element="viewBookmarksSidebar" attribute="type"/>
+                      <observes element="viewBookmarksSidebar" attribute="oncommand"/>
+                    </menuitem>
                     <menuitem id="menu_historySidebar"
-                              data-l10n-id="view-history-menuitem"
-                              key="key_gotoHistory"
-                              observes="viewHistorySidebar"/>
-                    <menuitem id="menu_tabsSidebar"
-                              data-l10n-id="view-synced-tabs-menuitem"
-                              observes="viewTabsSidebar"/>
+                              key="key_gotoHistory">
+                      <observes element="viewHistorySidebar" attribute="label"/>
+                      <observes element="viewHistorySidebar" attribute="checked"/>
+                      <observes element="viewHistorySidebar" attribute="autoCheck"/>
+                      <observes element="viewHistorySidebar" attribute="type"/>
+                      <observes element="viewHistorySidebar" attribute="oncommand"/>
+                    </menuitem>
+                    <menuitem id="menu_tabsSidebar">
+                      <observes element="viewTabsSidebar" attribute="label"/>
+                      <observes element="viewTabsSidebar" attribute="checked"/>
+                      <observes element="viewTabsSidebar" attribute="autoCheck"/>
+                      <observes element="viewTabsSidebar" attribute="type"/>
+                      <observes element="viewTabsSidebar" attribute="oncommand"/>
+                    </menuitem>
                     <!-- Service providers with sidebars are inserted between these two menuseperators -->
                     <menuseparator hidden="true"/>
                     <menuseparator class="social-provider-menu" hidden="true"/>
                   </menupopup>
                 </menu>
                 <menuseparator/>
                 <menu id="viewFullZoomMenu" data-l10n-id="full-zoom-menu"
                       onpopupshowing="FullZoom.updateMenu();">
@@ -341,18 +354,19 @@
                tooltip="bhTooltip" popupsinherittooltip="true">
       <menuitem id="bookmarksShowAll"
                 data-l10n-id="show-all-bookmarks-menuitem"
                 command="Browser:ShowAllBookmarks"
                 key="manBookmarkKb"/>
       <menuseparator id="organizeBookmarksSeparator"/>
       <menuitem id="menu_bookmarkThisPage"
                 command="Browser:AddBookmarkAs"
-                observes="bookmarkThisPageBroadcaster"
-                key="addBookmarkAsKb"/>
+                key="addBookmarkAsKb">
+        <observes element="bookmarkThisPageBroadcaster" attribute="label"/>
+      </menuitem>
       <menuitem id="subscribeToPageMenuitem"
                 data-l10n-id="subscribe-to-page-menuitem"
 #ifndef XP_MACOSX
                 class="menuitem-iconic"
 #endif
                 oncommand="return FeedHandler.subscribeToFeed(null, event);"
                 onclick="checkForMiddleClick(this, event);"
                 observes="singleFeedMenuitemState"/>
@@ -436,19 +450,22 @@
               <menuitem id="sync-reauthitem"
                         data-l10n-id="sync-re-auth-menuitem"
                         observes="sync-reauth-state"
                         oncommand="gSyncUI.openSignInAgainPage('menubar');"/>
               <menuseparator id="devToolsSeparator"/>
               <menu id="webDeveloperMenu"
                     data-l10n-id="web-developer-menu">
                 <menupopup id="menuWebDeveloperPopup">
-                  <menuitem id="menu_pageSource"
-                            data-l10n-id="page-source-menuitem"
-                            observes="devtoolsMenuBroadcaster_PageSource"/>
+                  <menuitem id="menu_pageSource">
+                    <observes element="devtoolsMenuBroadcaster_PageSource" attribute="label"/>
+                    <observes element="devtoolsMenuBroadcaster_PageSource" attribute="accesskey"/>
+                    <observes element="devtoolsMenuBroadcaster_PageSource" attribute="key"/>
+                    <observes element="devtoolsMenuBroadcaster_PageSource" attribute="command"/>
+                  </menuitem>
                 </menupopup>
               </menu>
               <menuitem id="menu_pageInfo"
                         data-l10n-id="page-info-menuitem"
 #ifndef XP_WIN
                         key="key_viewInfo"
 #endif
                         command="View:PageInfo"/>
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -1661,17 +1661,17 @@ var BookmarkingUI = {
 
   /**
    * forceReset is passed when we're destroyed and the label should go back
    * to the default (Bookmark This Page) for OS X.
    */
   _updateBookmarkPageMenuItem: function BUI__updateBookmarkPageMenuItem(forceReset) {
     let isStarred = !forceReset && this._itemIds.length > 0;
     let l10nId = isStarred ?
-      "edit-this-page-menuitem" : "bookmark-this-page-menuitem";
+      "edit-this-page-broadcaster" : "bookmark-this-page-broadcaster";
     if (this.broadcaster) {
       this.broadcaster.setAttribute("data-l10n-id", l10nId);
     }
   },
 
   onMainMenuPopupShowing: function BUI_onMainMenuPopupShowing(event) {
     // Don't handle events for submenus.
     if (event.target != event.currentTarget)
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -117,34 +117,36 @@
     <command id="Browser:ShowAllBookmarks"
              oncommand="PlacesCommandHook.showPlacesOrganizer('UnfiledBookmarks');"/>
     <command id="Browser:ShowAllHistory"
              oncommand="PlacesCommandHook.showPlacesOrganizer('History');"/>
   </commandset>
 
   <broadcasterset id="mainBroadcasterSet">
     <broadcaster id="Social:PageShareOrMark" disabled="true"/>
-    <broadcaster id="viewBookmarksSidebar" autoCheck="false" data-l10n-id="bookmarks-button"
+    <broadcaster id="viewBookmarksSidebar" autoCheck="false"
+                 data-l10n-id="view-bookmarks-broadcaster"
                  type="checkbox" group="sidebar" sidebarurl="chrome://browser/content/bookmarks/bookmarksPanel.xul"
                  oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/>
 
     <!-- for both places and non-places, the sidebar lives at
          chrome://browser/content/history/history-panel.xul so there are no
          problems when switching between versions -->
-    <broadcaster id="viewHistorySidebar" autoCheck="false" data-l10n-id="view-history-menuitem"
+    <broadcaster id="viewHistorySidebar" autoCheck="false"
+                 data-l10n-id="view-history-broadcaster"
                  type="checkbox" group="sidebar"
                  sidebarurl="chrome://browser/content/history/history-panel.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"
-                 data-l10n-id="bookmark-this-page-menuitem"/>
+                 data-l10n-id="bookmark-this-page-broadcaster"/>
 
     <!-- popup blocking menu items -->
     <broadcaster id="blockedPopupAllowSite"
                  accesskey="&allowPopups.accesskey;"
                  oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
     <broadcaster id="blockedPopupEditSettings"
 #ifdef XP_WIN
                  label="&editPopupSettings.label;"
@@ -169,25 +171,26 @@
         A 'syncstatus' attribute is set while actively syncing, and the label
         attribute which changes from "sync now" to "syncing" etc. -->
     <broadcaster id="sync-status"/>
     <!-- broadcasters of the "hidden" attribute to reflect setup state for
          menus -->
     <broadcaster id="sync-setup-state"/>
     <broadcaster id="sync-syncnow-state" hidden="true"/>
     <broadcaster id="sync-reauth-state" hidden="true"/>
-    <broadcaster id="viewTabsSidebar" autoCheck="false" data-l10n-id="view-synced-tabs-menuitem"
+    <broadcaster id="viewTabsSidebar" autoCheck="false"
+                 data-l10n-id="view-tabs-broadcaster"
                  type="checkbox" group="sidebar"
                  sidebarurl="chrome://browser/content/syncedtabs/sidebar.xhtml"
                  oncommand="SidebarUI.toggle('viewTabsSidebar');"/>
     <broadcaster id="workOfflineMenuitemState"/>
     <broadcaster id="socialSidebarBroadcaster" hidden="true"/>
 
     <broadcaster id="devtoolsMenuBroadcaster_PageSource"
-                 data-l10n-id="page-source-menuitem"
+                 data-l10n-id="page-source-broadcaster"
                  key="key_viewSource"
                  command="View:PageSource">
       <observes element="canViewSource" attribute="disabled"/>
     </broadcaster>
   </broadcasterset>
 
   <keyset id="mainKeyset">
     <key id="key_newNavigator" data-l10n-id="new-navigator-key" command="cmd_newNavigator" modifiers="accel"/>
@@ -284,25 +287,23 @@
 #endif
     <key data-l10n-id="find-again-key2" command="cmd_findAgain"/>
     <key data-l10n-id="find-again-key2" command="cmd_findPrevious" modifiers="shift"/>
 
     <key id="addBookmarkAsKb" data-l10n-id="bookmark-this-page-key" command="Browser:AddBookmarkAs" modifiers="accel"/>
 # Accel+Shift+A-F are reserved on GTK
 #ifndef MOZ_WIDGET_GTK
     <key id="bookmarkAllTabsKb" data-l10n-id="bookmark-this-page-key" oncommand="PlacesCommandHook.bookmarkCurrentPages();" modifiers="accel,shift"/>
-    <key id="manBookmarkKb" data-l10n-id="bookmarks-key" command="Browser:ShowAllBookmarks" modifiers="accel,shift"/>
-#else
-    <key id="manBookmarkKb" data-l10n-id="bookmarks-key" command="Browser:ShowAllBookmarks" modifiers="accel,shift"/>
 #endif
-    <key id="viewBookmarksSidebarKb" data-l10n-id="bookmarks-key" command="viewBookmarksSidebar" modifiers="accel"/>
+    <key id="manBookmarkKb" data-l10n-id="show-all-bookmarks-key" command="Browser:ShowAllBookmarks" modifiers="accel,shift"/>
+    <key id="viewBookmarksSidebarKb" data-l10n-id="view-bookmarks-key" command="viewBookmarksSidebar" modifiers="accel"/>
 #ifdef XP_WIN
 # Cmd+I is conventially mapped to Info on MacOS X, thus it should not be
 # overridden for other purposes there.
-    <key id="viewBookmarksSidebarWinKb" data-l10n-id="bookmarks-key" command="viewBookmarksSidebar" modifiers="accel"/>
+    <key id="viewBookmarksSidebarWinKb" data-l10n-id="view-bookmarks-key-win" command="viewBookmarksSidebar" modifiers="accel"/>
 #endif
 
     <!--<key id="markPage" key="&markPageCmd.commandkey;" command="Social:TogglePageMark" modifiers="accel,shift"/>-->
     <key id="focusChatBar" key="&social.chatBar.commandkey;" command="Chat:Focus"
 #ifdef XP_MACOSX
 # Sadly the devtools uses shift-accel-c on non-mac and alt-accel-c everywhere else
 # So we just use the other
          modifiers="accel,shift"
@@ -313,17 +314,17 @@
 
     <key id="key_stop" keycode="VK_ESCAPE" command="Browser:Stop"/>
 
 #ifdef XP_MACOSX
     <key id="key_stop_mac" modifiers="accel" key="&stopCmd.macCommandKey;" command="Browser:Stop"/>
 #endif
 
     <key id="key_gotoHistory"
-         data-l10n-id="history-key"
+         data-l10n-id="view-history-key"
 #ifdef XP_MACOSX
          modifiers="accel,shift"
 #else
          modifiers="accel"
 #endif
          command="viewHistorySidebar"/>
 
     <key id="key_fullZoomReduce"  data-l10n-id="full-zoom-reduce-key1"  command="cmd_fullZoomReduce"  modifiers="accel"/>
--- a/browser/locales/en-US/browser/menubar.ftl
+++ b/browser/locales/en-US/browser/menubar.ftl
@@ -171,21 +171,16 @@ view-toolbars-menu =
     [xul/accesskey]  T
 view-sidebar-menu =
     [xul/label]      Sidebar
     [xul/accesskey]  e
 view-customize-toolbar-menuitem =
     [xul/label]      Customize…
     [xul/accesskey]  C
 
-view-history-menuitem =
-    [xul/label]      History
-view-synced-tabs-menuitem =
-    [xul/label]      Synced Tabs
-
 full-zoom-menu =
     [xul/label]      Zoom
     [xul/accesskey]  Z
 full-zoom-enlarge-menuitem =
     [xul/label]      Zoom In
     [xul/accesskey]  I
 full-zoom-enlarge-key1 =
     [xul/key]        +
@@ -267,19 +262,26 @@ history-undo-window-menu =
 
 [[ Bookmarks menu ]]
 
 bookmarks-menu =
     [xul/label]      Bookmarks
     [xul/accesskey]  B
 show-all-bookmarks-menuitem =
     [xul/label]      Show All Bookmarks
-bookmark-this-page-menuitem =
+# The command key for [lin] should not contain the letters A-F since they
+# are reserved shortcut keys on Linux.
+show-all-bookmarks-key =
+    [xul/key]    { OS() ->
+        [lin] o
+       *[other] b
+    }
+bookmark-this-page-broadcaster =
     [xul/label]      Bookmark This Page
-edit-this-page-menuitem =
+edit-this-page-broadcaster =
     [xul/label]      Edit This Page
 bookmark-this-page-key =
     [xul/key]        d
 subscribe-to-page-menuitem =
     [xul/label]      Subscribe to This Page…
 subscribe-to-page-menupopup =
     [xul/label]      Subscribe to This Page…
 add-cur-pages-menuitem =
@@ -327,17 +329,17 @@ sync-re-auth-menuitem =
     [xul/accesskey]  R
 sync-toolbar-button =
     [xul/label]      Sync
 
 web-developer-menu =
     [xul/label]      Web Developer
     [xul/accesskey]  W
 
-page-source-menuitem =
+page-source-broadcaster =
     [xul/label]      Page Source
     [xul/accesskey]  o
 page-source-key =
     [xul/key]        u
 page-info-menuitem =
     [xul/label]      Page Info
     [xul/accesskey]  I
 page-info-key =
--- a/browser/locales/en-US/browser/toolbar.ftl
+++ b/browser/locales/en-US/browser/toolbar.ftl
@@ -4,23 +4,21 @@
 
 urlbar-textbox =
     [xul/placeholder] Search or enter address
     [xul/accesskey]   d
 
 
 [[ Toolbar items ]]
 
-bookmarks-button =
+view-bookmarks-broadcaster =
     [xul/label]      Bookmarks
-# The command key for [lin] should not contain the letters A-F since they
-# are reserved shortcut keys on Linux.
-bookmarks-key =
-    [xul/key]    { OS() ->
-        [win] o
-        [mac] b
-       *[lin] i
-    }
+view-bookmarks-key =
+    [xul/key]        b
+view-bookmarks-key-win =
+    [xul/key]        i
 
-history-button =
+view-history-broadcaster =
     [xul/label]      History
-history-key =
+view-history-key =
     [xul/key]        h
+view-tabs-broadcaster =
+    [xul/label]      Synced Tabs
--- a/toolkit/content/l20n-chrome-xul.js
+++ b/toolkit/content/l20n-chrome-xul.js
@@ -575,25 +575,22 @@ function getIndexOfType(element) {
   }
   return index;
 }
 
 const ns = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
 
 const allowed = {
   attributes: {
-    global: ['aria-label', 'aria-valuetext', 'aria-moz-hint'],
-    broadcaster: ['label'],
-    button: ['accesskey'],
+    global: [
+      'accesskey', 'aria-label', 'aria-valuetext', 'aria-moz-hint', 'label'
+    ],
     key: ['key', 'keycode'],
-    menu: ['label', 'accesskey'],
-    menuitem: ['label', 'accesskey'],
-    tab: ['label'],
     textbox: ['placeholder'],
-    toolbarbutton: ['label', 'tooltiptext'],
+    toolbarbutton: ['tooltiptext'],
   }
 };
 
 class XULLocalization extends Localization {
   overlayElement(element, translation) {
     return overlayElement(this, element, translation);
   }
 
--- a/toolkit/modules/IntlMessageContext.jsm
+++ b/toolkit/modules/IntlMessageContext.jsm
@@ -1233,9 +1233,9 @@ this.EXPORTED_SYMBOLS = ['MessageContext
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(Intl, "ListFormat",
   "resource://gre/modules/IntlListFormat.jsm");
 XPCOMUtils.defineLazyModuleGetter(Intl, "PluralRules",
   "resource://gre/modules/IntlPluralRules.jsm");
 
-this.MessageContext = MessageContext;
+this.MessageContext = MessageContext;
\ No newline at end of file