Bug 1475304 - Remove broadcasters that only have one observer;r=Gijs,r=johannh draft
authorBrian Grinstead <bgrinstead@mozilla.com>
Mon, 16 Jul 2018 11:47:58 -0700
changeset 818872 4585baf257767a19a291d66bc2a7b364cad8ad32
parent 818682 2ed1506d1dc7db3d70a3feed95f1456bce05bbee
push id116382
push userbgrinstead@mozilla.com
push dateMon, 16 Jul 2018 18:49:50 +0000
reviewersGijs, johannh
bugs1475304
milestone63.0a1
Bug 1475304 - Remove broadcasters that only have one observer;r=Gijs,r=johannh MozReview-Commit-ID: KbYBy2RjK1i
browser/base/content/browser-feeds.js
browser/base/content/browser-menubar.inc
browser/base/content/browser-safebrowsing.js
browser/base/content/browser-sets.inc
browser/base/content/browser-trackingprotection.js
browser/base/content/browser.js
browser/base/content/browser.xul
browser/base/content/test/popups/browser_popup_blocker.js
browser/components/customizableui/content/panelUI.inc.xul
security/manager/pki/resources/content/clientauthask.xul
--- a/browser/base/content/browser-feeds.js
+++ b/browser/base/content/browser-feeds.js
@@ -222,22 +222,22 @@ var FeedHandler = {
       // We might default to a livebookmarks modal dialog,
       // so reset that if the user happens to click it again
       gBrowser.selectedBrowser.feeds = feeds;
     }
   },
 
   get _feedMenuitem() {
     delete this._feedMenuitem;
-    return this._feedMenuitem = document.getElementById("singleFeedMenuitemState");
+    return this._feedMenuitem = document.getElementById("subscribeToPageMenuitem");
   },
 
   get _feedMenupopup() {
     delete this._feedMenupopup;
-    return this._feedMenupopup = document.getElementById("multipleFeedsMenuState");
+    return this._feedMenupopup = document.getElementById("subscribeToPageMenupopup");
   },
 
   /**
    * Update the browser UI to show whether or not feeds are available when
    * a page is loaded or the user switches tabs to a page that has feeds.
    */
   updateFeeds() {
     if (this._updateFeedTimeout)
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -394,29 +394,30 @@
                 command="Browser:ShowAllBookmarks"
                 key="manBookmarkKb"/>
       <menuseparator id="organizeBookmarksSeparator"/>
       <menuitem id="menu_bookmarkThisPage"
                 command="Browser:AddBookmarkAs"
                 observes="bookmarkThisPageBroadcaster"
                 key="addBookmarkAsKb"/>
       <menuitem id="subscribeToPageMenuitem"
+                disabled="true"
 #ifndef XP_MACOSX
                 class="menuitem-iconic"
 #endif
                 label="&subscribeToPageMenuitem.label;"
                 oncommand="return FeedHandler.subscribeToFeed(null, event);"
                 onclick="checkForMiddleClick(this, event);"
-                observes="singleFeedMenuitemState"/>
+                />
       <menu id="subscribeToPageMenupopup"
+            hidden="true"
 #ifndef XP_MACOSX
             class="menu-iconic"
 #endif
-            label="&subscribeToPageMenupopup.label;"
-            observes="multipleFeedsMenuState">
+            label="&subscribeToPageMenupopup.label;">
         <menupopup id="subscribeToPageSubmenuMenupopup"
                    onpopupshowing="return FeedHandler.buildFeedList(event.target);"
                    oncommand="return FeedHandler.subscribeToFeed(null, event);"
                    onclick="checkForMiddleClick(this, event);"/>
       </menu>
       <menuitem id="menu_bookmarkAllTabs"
                 label="&addCurPagesCmd.label;"
                 class="show-only-for-keyboard"
@@ -506,18 +507,22 @@
                         observes="sync-reauth-state"
                         oncommand="gSync.openSignInAgainPage('menubar');"/>
               <menuseparator id="devToolsSeparator"/>
               <menu id="webDeveloperMenu"
                     label="&webDeveloperMenu.label;"
                     accesskey="&webDeveloperMenu.accesskey;">
                 <menupopup id="menuWebDeveloperPopup">
                   <menuitem id="menu_pageSource"
-                            observes="devtoolsMenuBroadcaster_PageSource"
-                            accesskey="&pageSourceCmd.accesskey;"/>
+                            label="&pageSourceCmd.label;"
+                            key="key_viewSource"
+                            command="View:PageSource"
+                            accesskey="&pageSourceCmd.accesskey;">
+                    <observes element="canViewSource" attribute="disabled"/>
+                  </menuitem>
                 </menupopup>
               </menu>
               <menuitem id="menu_pageInfo"
                         accesskey="&pageInfoCmd.accesskey;"
                         label="&pageInfoCmd.label;"
 #ifndef XP_WIN
                         key="key_viewInfo"
 #endif
@@ -604,24 +609,24 @@
                           accesskey="&helpSafeMode.accesskey;"
                           label="&helpSafeMode.label;"
                           stopaccesskey="&helpSafeMode.stop.accesskey;"
                           stoplabel="&helpSafeMode.stop.label;"
                           oncommand="safeModeRestart();"/>
                 <menuitem id="menu_HelpPopup_reportPhishingtoolmenu"
                           label="&reportDeceptiveSiteMenu.title;"
                           accesskey="&reportDeceptiveSiteMenu.accesskey;"
-                          observes="reportPhishingBroadcaster"
+                          disabled="true"
                           oncommand="openUILink(gSafeBrowsing.getReportURL('Phish'), event, {triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({})});"
                           onclick="checkForMiddleClick(this, event);"
                           hidden="true"/>
                 <menuitem id="menu_HelpPopup_reportPhishingErrortoolmenu"
                           label="&safeb.palm.notdeceptive.label;"
                           accesskey="&safeb.palm.notdeceptive.accesskey;"
-                          observes="reportPhishingErrorBroadcaster"
+                          disabled="true"
                           oncommand="ReportFalseDeceptiveSite();"
                           onclick="checkForMiddleClick(this, event);"
                           hidden="true"/>
                 <menuseparator id="aboutSeparator"/>
                 <menuitem id="aboutName"
                           accesskey="&aboutProduct2.accesskey;"
                           label="&aboutProduct2.label;"
                           oncommand="openAboutDialog();"/>
--- a/browser/base/content/browser-safebrowsing.js
+++ b/browser/base/content/browser-safebrowsing.js
@@ -13,40 +13,38 @@ var gSafeBrowsing = {
     // This is because when the DocShell loads an error page, the
     // currentURI stays at the original target, while the documentURI
     // will point to the internal error page we loaded instead.
     var docURI = gBrowser.selectedBrowser.documentURI;
     var isPhishingPage =
       docURI && docURI.spec.startsWith("about:blocked?e=deceptiveBlocked");
 
     // Show/hide the appropriate menu item.
-    document.getElementById("menu_HelpPopup_reportPhishingtoolmenu")
-            .hidden = isPhishingPage;
-    document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu")
-            .hidden = !isPhishingPage;
+    const reportMenu = document.getElementById("menu_HelpPopup_reportPhishingtoolmenu");
+    reportMenu.hidden = isPhishingPage;
+    const reportErrorMenu = document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu");
+    reportErrorMenu.hidden = !isPhishingPage;
 
     // Now look at the currentURI to learn which page we were trying
     // to browse to.
     const uri = gBrowser.currentURI;
     const isReportablePage = uri && (uri.schemeIs("http") || uri.schemeIs("https"));
 
     const disabledByPolicy = !Services.policies.isAllowed("feedbackCommands");
 
-    const reportBroadcaster = document.getElementById("reportPhishingBroadcaster");
     if (disabledByPolicy || isPhishingPage || !isReportablePage) {
-      reportBroadcaster.setAttribute("disabled", "true");
+      reportMenu.setAttribute("disabled", "true");
     } else {
-      reportBroadcaster.removeAttribute("disabled");
+      reportMenu.removeAttribute("disabled");
     }
 
-    const reportErrorBroadcaster = document.getElementById("reportPhishingErrorBroadcaster");
     if (disabledByPolicy || !isPhishingPage || !isReportablePage) {
-      reportErrorBroadcaster.setAttribute("disabled", "true");
+      reportErrorMenu.setAttribute("disabled", "true");
     } else {
-      reportErrorBroadcaster.removeAttribute("disabled");
+      reportErrorMenu.removeAttribute("disabled");
     }
   },
 
   /**
    * Used to report a phishing page or a false positive
    *
    * @param name
    *        String One of "PhishMistake", "MalwareMistake", or "Phish"
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -128,39 +128,19 @@
                  type="checkbox" group="sidebar"
                  sidebarurl="chrome://browser/content/places/historySidebar.xul"
                  oncommand="SidebarUI.toggle('viewHistorySidebar');"/>
 
     <broadcaster id="bookmarkThisPageBroadcaster"
                  label="&bookmarkThisPageCmd.label;"
                  bookmarklabel="&bookmarkThisPageCmd.label;"
                  editlabel="&editThisBookmarkCmd.label;"/>
-
-    <!-- popup blocking menu items -->
-    <broadcaster id="blockedPopupAllowSite"
-                 accesskey="&allowPopups.accesskey;"
-                 oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
-    <broadcaster id="blockedPopupEditSettings"
-#ifdef XP_WIN
-                 label="&editPopupSettings.label;"
-#else
-                 label="&editPopupSettingsUnix.label;"
-#endif
-                 accesskey="&editPopupSettings.accesskey;"
-                 oncommand="gPopupBlockerObserver.editPopupSettings();"/>
-    <broadcaster id="blockedPopupDontShowMessage"
-                 accesskey="&dontShowMessage.accesskey;"
-                 type="checkbox"
-                 oncommand="gPopupBlockerObserver.dontShowMessage();"/>
-    <broadcaster id="blockedPopupsSeparator"/>
     <broadcaster id="isImage"/>
     <broadcaster id="canViewSource"/>
     <broadcaster id="isFrameImage"/>
-    <broadcaster id="singleFeedMenuitemState" disabled="true"/>
-    <broadcaster id="multipleFeedsMenuState" hidden="true"/>
 
     <!-- Sync broadcasters -->
     <!-- A broadcaster of a number of attributes suitable for "sync now" UI -
         A 'syncstatus' attribute is set while actively syncing, and the label
         attribute which changes from "sync now" to "syncing" etc. -->
     <broadcaster id="sync-status" onmouseover="gSync.refreshSyncButtonsTooltip();"/>
     <!-- broadcasters of the "hidden" attribute to reflect setup state for
          menus -->
@@ -168,26 +148,16 @@
     <broadcaster id="sync-unverified-state" hidden="true"/>
     <broadcaster id="sync-syncnow-state" hidden="true"/>
     <broadcaster id="sync-reauth-state" hidden="true"/>
     <broadcaster id="viewTabsSidebar" autoCheck="false" sidebartitle="&syncedTabs.sidebar.label;"
                  type="checkbox" group="sidebar"
                  sidebarurl="chrome://browser/content/syncedtabs/sidebar.xhtml"
                  oncommand="SidebarUI.toggle('viewTabsSidebar');"/>
     <broadcaster id="workOfflineMenuitemState"/>
-
-    <broadcaster id="devtoolsMenuBroadcaster_PageSource"
-                 label="&pageSourceCmd.label;"
-                 key="key_viewSource"
-                 command="View:PageSource">
-      <observes element="canViewSource" attribute="disabled"/>
-    </broadcaster>
-    <broadcaster id="reportPhishingBroadcaster" disabled="true"/>
-    <broadcaster id="reportPhishingErrorBroadcaster" disabled="true"/>
-    <broadcaster id="trackingProtectionBroadcaster" enabled="false"/>
   </broadcasterset>
 
   <keyset id="mainKeyset">
     <key id="key_newNavigator"
          key="&newNavigatorCmd.key;"
          command="cmd_newNavigator"
          modifiers="accel" reserved="true"/>
     <key id="key_newNavigatorTab" key="&tabCmd.commandkey;" modifiers="accel"
--- a/browser/base/content/browser-trackingprotection.js
+++ b/browser/base/content/browser-trackingprotection.js
@@ -36,17 +36,17 @@ var TrackingProtection = {
     this.content = $("#tracking-protection-content");
     this.icon = $("#tracking-protection-icon");
     this.appMenuContainer = $("#appMenu-tp-container");
     this.appMenuSeparator = $("#appMenu-tp-separator");
     this.iconBox = $("#tracking-protection-icon-box");
     this.animatedIcon = $("#tracking-protection-icon-animatable-image");
     this.animatedIcon.addEventListener("animationend", () => this.iconBox.removeAttribute("animate"));
 
-    this.broadcaster = $("#trackingProtectionBroadcaster");
+    this.appMenuButton = $("#appMenu-tp-toggle");
 
     this.enableTooltip =
       gNavigatorBundle.getString("trackingProtection.toggle.enable.tooltip");
     this.disableTooltip =
       gNavigatorBundle.getString("trackingProtection.toggle.disable.tooltip");
     this.enableTooltipPB =
       gNavigatorBundle.getString("trackingProtection.toggle.enable.pbmode.tooltip");
     this.disableTooltipPB =
@@ -126,24 +126,24 @@ var TrackingProtection = {
     this.enabledGlobally =
       Services.prefs.getBoolPref(this.PREF_ENABLED_GLOBALLY);
     this.enabledInPrivateWindows =
       Services.prefs.getBoolPref(this.PREF_ENABLED_IN_PRIVATE_WINDOWS);
 
     this.content.setAttribute("enabled", this.enabled);
 
     if (PrivateBrowsingUtils.isWindowPrivate(window)) {
-      this.broadcaster.setAttribute("enabled", this.enabledInPrivateWindows);
-      this.broadcaster.setAttribute("aria-pressed", this.enabledInPrivateWindows);
-      this.broadcaster.setAttribute("tooltiptext", this.enabledInPrivateWindows ?
+      this.appMenuButton.setAttribute("enabled", this.enabledInPrivateWindows);
+      this.appMenuButton.setAttribute("aria-pressed", this.enabledInPrivateWindows);
+      this.appMenuButton.setAttribute("tooltiptext", this.enabledInPrivateWindows ?
         this.disableTooltipPB : this.enableTooltipPB);
     } else {
-      this.broadcaster.setAttribute("enabled", this.enabledGlobally);
-      this.broadcaster.setAttribute("aria-pressed", this.enabledGlobally);
-      this.broadcaster.setAttribute("tooltiptext", this.enabledGlobally ?
+      this.appMenuButton.setAttribute("enabled", this.enabledGlobally);
+      this.appMenuButton.setAttribute("aria-pressed", this.enabledGlobally);
+      this.appMenuButton.setAttribute("tooltiptext", this.enabledGlobally ?
         this.disableTooltip : this.enableTooltip);
     }
   },
 
   enabledHistogramAdd(value) {
     if (PrivateBrowsingUtils.isWindowPrivate(window)) {
       return;
     }
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -750,17 +750,17 @@ var gPopupBlockerObserver = {
       // showable popup addresses to the menu.
       if (foundUsablePopupURI)
         blockedPopupsSeparator.removeAttribute("hidden");
     }, null);
   },
 
   onPopupHiding(aEvent) {
     let item = aEvent.target.lastChild;
-    while (item && item.getAttribute("observes") != "blockedPopupsSeparator") {
+    while (item && item.id != "blockedPopupsSeparator") {
       let next = item.previousSibling;
       item.remove();
       item = next;
     }
   },
 
   showBlockedPopup(aEvent) {
     var target = aEvent.target;
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -399,20 +399,32 @@
                 class="viewCustomizeToolbar"
                 label="&viewCustomizeToolbar.label;"
                 accesskey="&viewCustomizeToolbar.accesskey;"/>
     </menupopup>
 
     <menupopup id="blockedPopupOptions"
                onpopupshowing="gPopupBlockerObserver.fillPopupList(event);"
                onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);">
-      <menuitem observes="blockedPopupAllowSite"/>
-      <menuitem observes="blockedPopupEditSettings"/>
-      <menuitem observes="blockedPopupDontShowMessage"/>
-      <menuseparator observes="blockedPopupsSeparator"/>
+      <menuitem id="blockedPopupAllowSite"
+                accesskey="&allowPopups.accesskey;"
+                oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
+      <menuitem
+#ifdef XP_WIN
+                label="&editPopupSettings.label;"
+#else
+                label="&editPopupSettingsUnix.label;"
+#endif
+                accesskey="&editPopupSettings.accesskey;"
+                oncommand="gPopupBlockerObserver.editPopupSettings();"/>
+      <menuitem id="blockedPopupDontShowMessage"
+                accesskey="&dontShowMessage.accesskey;"
+                type="checkbox"
+                oncommand="gPopupBlockerObserver.dontShowMessage();"/>
+      <menuseparator id="blockedPopupsSeparator"/>
     </menupopup>
 
     <menupopup id="autohide-context"
            onpopupshowing="FullScreen.getAutohide(this.firstChild);">
       <menuitem type="checkbox" label="&fullScreenAutohide.label;"
                 accesskey="&fullScreenAutohide.accesskey;"
                 oncommand="FullScreen.setAutohide();"/>
       <menuseparator/>
--- a/browser/base/content/test/popups/browser_popup_blocker.js
+++ b/browser/base/content/test/popups/browser_popup_blocker.js
@@ -51,17 +51,17 @@ add_task(async function test_opening_blo
   // Pressing "allow" should open all blocked popups.
   let popupTabs = [];
   function onTabOpen(event) {
     popupTabs.push(event.target);
   }
   gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen);
 
   // Press the button.
-  let allow = menu.querySelector("[observes='blockedPopupAllowSite']");
+  let allow = document.getElementById("blockedPopupAllowSite");
   allow.doCommand();
   await BrowserTestUtils.waitForCondition(() =>
     popupTabs.length == 2 &&
     popupTabs.every(aTab => aTab.linkedBrowser.currentURI.spec != "about:blank"));
 
   gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen);
 
   ok(popupTabs[0].linkedBrowser.currentURI.spec.endsWith("popup_blocker_a.html"), "Popup a");
--- a/browser/components/customizableui/content/panelUI.inc.xul
+++ b/browser/components/customizableui/content/panelUI.inc.xul
@@ -214,17 +214,17 @@
                          tooltiptext="&trackingProtection.tooltip;"
                          class="subviewbutton subviewbutton-iconic"
                          oncommand="TrackingProtection.openPreferences('appMenu-trackingprotection');"
                          label="&trackingProtection.title;"/>
           <toolbarseparator orient="vertical"/>
           <toolbarbutton id="appMenu-tp-toggle"
                          closemenu="none"
                          class="subviewkeynav"
-                         observes="trackingProtectionBroadcaster"
+                         enabled="false"
                          oncommand="TrackingProtection.onGlobalToggleCommand();" />
         </toolbaritem>
         <toolbarseparator id="appMenu-tp-separator" hidden="true" />
         <toolbarbutton id="appMenu-new-window-button"
                        class="subviewbutton subviewbutton-iconic"
                        label="&newNavigatorCmd.label;"
                        key="key_newNavigator"
                        command="cmd_newNavigator"/>
--- a/security/manager/pki/resources/content/clientauthask.xul
+++ b/security/manager/pki/resources/content/clientauthask.xul
@@ -28,21 +28,20 @@
   <groupbox>
     <description style="font-weight: bold;">&clientAuthAsk.message1;</description>
     <description id="hostname"/>
     <description id="organization"/>
     <description id="issuer"/>
     </groupbox>
     <groupbox>
     <description style="font-weight: bold;">&clientAuthAsk.message2;</description>
-    <broadcaster id="certSelected" oncommand="onCertSelected();"/>
     <!-- The items in this menulist must never be sorted,
          but remain in the order filled by the application
     -->
-    <menulist id="nicknames" observes="certSelected">
+    <menulist id="nicknames" oncommand="onCertSelected();">
         <menupopup/>
     </menulist>
     <description>&clientAuthAsk.message3;</description>
     <textbox readonly="true" id="details" multiline="true"
       style="height: 11em;"/>
     <checkbox id="rememberBox" checked="true"/>
   </groupbox>