Bug 1457719 - Part 4 - Remove the "autorepeatbutton" element. r=bz draft
authorPaolo Amadini <paolo.mozmail@amadzone.org>
Fri, 01 Jun 2018 11:15:56 +0100
changeset 802740 ae1bafe7144f6f428e2ef4e7047d5c64e0a19e8c
parent 802739 16600f0916ac4188ceaf8dff61fb61021cc8da5a
push id111939
push userpaolo.mozmail@amadzone.org
push dateFri, 01 Jun 2018 10:30:29 +0000
reviewersbz
bugs1457719
milestone62.0a1
Bug 1457719 - Part 4 - Remove the "autorepeatbutton" element. r=bz The DoMouseClick helper is also removed because no other caller can now pass a null aEvent. Other MouseClicked implementations are also updated since aEvent cannot be null, which was already the case. MozReview-Commit-ID: 3bTJ6cZW9ZA
dom/xbl/nsXBLPrototypeBinding.cpp
layout/base/PositionedEventTargeting.cpp
layout/base/nsCSSFrameConstructor.cpp
layout/generic/nsFrameIdList.h
layout/xul/crashtests/460900-1.xul
layout/xul/crashtests/crashtests.list
layout/xul/moz.build
layout/xul/nsButtonBoxFrame.cpp
layout/xul/nsButtonBoxFrame.h
layout/xul/nsResizerFrame.cpp
layout/xul/nsScrollBoxFrame.cpp
layout/xul/nsScrollbarButtonFrame.cpp
layout/xul/nsScrollbarButtonFrame.h
layout/xul/nsTitleBarFrame.cpp
toolkit/content/widgets/scrollbox.xml
toolkit/content/xul.css
xpcom/ds/nsGkAtomList.h
--- a/dom/xbl/nsXBLPrototypeBinding.cpp
+++ b/dom/xbl/nsXBLPrototypeBinding.cpp
@@ -1542,17 +1542,17 @@ nsXBLPrototypeBinding::WriteNamespace(ns
 
   return NS_OK;
 }
 
 
 bool CheckTagNameWhiteList(int32_t aNameSpaceID, nsAtom *aTagName)
 {
   static Element::AttrValuesArray kValidXULTagNames[] =  {
-    &nsGkAtoms::autorepeatbutton, &nsGkAtoms::box, &nsGkAtoms::browser,
+    &nsGkAtoms::box, &nsGkAtoms::browser,
     &nsGkAtoms::button, &nsGkAtoms::hbox, &nsGkAtoms::image, &nsGkAtoms::menu,
     &nsGkAtoms::menubar, &nsGkAtoms::menuitem, &nsGkAtoms::menupopup,
     &nsGkAtoms::row, &nsGkAtoms::slider, &nsGkAtoms::spacer,
     &nsGkAtoms::splitter, &nsGkAtoms::text, &nsGkAtoms::tree, nullptr};
 
   uint32_t i;
   if (aNameSpaceID == kNameSpaceID_XUL) {
     for (i = 0; kValidXULTagNames[i]; ++i) {
--- a/layout/base/PositionedEventTargeting.cpp
+++ b/layout/base/PositionedEventTargeting.cpp
@@ -232,17 +232,16 @@ GetClickableAncestor(nsIFrame* aFrame, n
       return content;
     }
 
     // See nsCSSFrameConstructor::FindXULTagData. This code is not
     // really intended to be used with XUL, though.
     if (content->IsAnyOfXULElements(nsGkAtoms::button,
                                     nsGkAtoms::checkbox,
                                     nsGkAtoms::radio,
-                                    nsGkAtoms::autorepeatbutton,
                                     nsGkAtoms::menu,
                                     nsGkAtoms::menubutton,
                                     nsGkAtoms::menuitem,
                                     nsGkAtoms::menulist,
                                     nsGkAtoms::scrollbarbutton,
                                     nsGkAtoms::resizer)) {
       return content;
     }
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -229,19 +229,16 @@ static FrameCtorDebugFlags gFlags[] = {
 #include "nsIBoxObject.h"
 #include "nsPIListBoxObject.h"
 #include "nsListBoxBodyFrame.h"
 #include "nsListItemFrame.h"
 #include "nsXULLabelFrame.h"
 
 //------------------------------------------------------------------
 
-nsIFrame*
-NS_NewAutoRepeatBoxFrame(nsIPresShell* aPresShell, ComputedStyle* aStyle);
-
 nsContainerFrame*
 NS_NewRootBoxFrame (nsIPresShell* aPresShell, ComputedStyle* aStyle);
 
 nsContainerFrame*
 NS_NewDocElementBoxFrame(nsIPresShell* aPresShell, ComputedStyle* aStyle);
 
 nsIFrame*
 NS_NewDeckFrame (nsIPresShell* aPresShell, ComputedStyle* aStyle);
@@ -4287,17 +4284,16 @@ nsCSSFrameConstructor::FindXULTagData(El
   }
 
   static const FrameConstructionDataByTag sXULTagData[] = {
 #ifdef MOZ_XUL
     SCROLLABLE_XUL_CREATE(button, NS_NewButtonBoxFrame),
     SCROLLABLE_XUL_CREATE(thumb, NS_NewButtonBoxFrame),
     SCROLLABLE_XUL_CREATE(checkbox, NS_NewButtonBoxFrame),
     SCROLLABLE_XUL_CREATE(radio, NS_NewButtonBoxFrame),
-    SCROLLABLE_XUL_CREATE(autorepeatbutton, NS_NewAutoRepeatBoxFrame),
     SCROLLABLE_XUL_CREATE(titlebar, NS_NewTitleBarFrame),
     SCROLLABLE_XUL_CREATE(resizer, NS_NewResizerFrame),
     SCROLLABLE_XUL_CREATE(toolbarpaletteitem, NS_NewBoxFrame),
     SIMPLE_XUL_CREATE(image, NS_NewImageBoxFrame),
     SIMPLE_XUL_CREATE(spring, NS_NewLeafBoxFrame),
     SIMPLE_XUL_CREATE(spacer, NS_NewLeafBoxFrame),
     SIMPLE_XUL_CREATE(treechildren, NS_NewTreeBodyFrame),
     SIMPLE_XUL_CREATE(treecol, NS_NewTreeColFrame),
--- a/layout/generic/nsFrameIdList.h
+++ b/layout/generic/nsFrameIdList.h
@@ -1,17 +1,16 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* 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/. */
 
 FRAME_ID(BRFrame, Br, Leaf)
 FRAME_ID(DetailsFrame, Details, NotLeaf)
-FRAME_ID(nsAutoRepeatBoxFrame, Box, NotLeaf)
 FRAME_ID(nsBCTableCellFrame, BCTableCell, NotLeaf)
 FRAME_ID(nsBackdropFrame, Backdrop, Leaf)
 FRAME_ID(nsBlockFrame, Block, NotLeaf)
 FRAME_ID(nsBox, None, NotLeaf)
 FRAME_ID(nsBoxFrame, Box, NotLeaf)
 FRAME_ID(nsBulletFrame, Bullet, Leaf)
 FRAME_ID(nsButtonBoxFrame, Box, NotLeaf)
 FRAME_ID(nsCanvasFrame, Canvas, NotLeaf)
deleted file mode 100644
--- a/layout/xul/crashtests/460900-1.xul
+++ /dev/null
@@ -1,3 +0,0 @@
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="document.getElementById('label').control='c';">
-<label id="label"><hbox><listboxbody><hbox/><tooltip/></listboxbody><autorepeatbutton/></hbox></label>
-</window>
--- a/layout/xul/crashtests/crashtests.list
+++ b/layout/xul/crashtests/crashtests.list
@@ -69,17 +69,16 @@ load 420424-1.xul
 load 430356-1.xhtml
 load 431738.xhtml
 load 432058-1.xul
 load 432068-1.xul
 load 432068-2.xul
 load 433296-1.xul
 load 433429.xul
 load 452185.html
-load 460900-1.xul
 load 464149-1.xul
 asserts(0-1) load 464407-1.xhtml # Bugs 450974, 1267054, 718883
 load 467080.xul
 load 467481-1.xul
 load 470063-1.html
 load 470272.html
 load 472189.xul
 load 475133.html
--- a/layout/xul/moz.build
+++ b/layout/xul/moz.build
@@ -44,17 +44,16 @@ UNIFIED_SOURCES += [
     'nsBoxFrame.cpp',
     'nsBoxLayout.cpp',
     'nsBoxLayoutState.cpp',
     'nsButtonBoxFrame.cpp',
     'nsRepeatService.cpp',
     'nsRootBoxFrame.cpp',
     'nsScrollbarButtonFrame.cpp',
     'nsScrollbarFrame.cpp',
-    'nsScrollBoxFrame.cpp',
     'nsSliderFrame.cpp',
     'nsSprocketLayout.cpp',
     'nsStackFrame.cpp',
     'nsStackLayout.cpp',
     'nsXULTooltipListener.cpp',
 ]
 
 if CONFIG['MOZ_XUL']:
--- a/layout/xul/nsButtonBoxFrame.cpp
+++ b/layout/xul/nsButtonBoxFrame.cpp
@@ -192,45 +192,30 @@ nsButtonBoxFrame::Blurred()
     EventStateManager* esm = PresContext()->EventStateManager();
     esm->SetContentState(nullptr, NS_EVENT_STATE_ACTIVE);
     esm->SetContentState(nullptr, NS_EVENT_STATE_HOVER);
   }
   mIsHandlingKeyEvent = false;
 }
 
 void
-nsButtonBoxFrame::DoMouseClick(WidgetGUIEvent* aEvent, bool aTrustEvent)
+nsButtonBoxFrame::MouseClicked(WidgetGUIEvent* aEvent)
 {
   // Don't execute if we're disabled.
   if (mContent->AsElement()->AttrValueIs(kNameSpaceID_None, nsGkAtoms::disabled,
                                          nsGkAtoms::_true, eCaseMatters))
     return;
 
-  // Execute the oncommand event handler.
-  bool isShift = false;
-  bool isControl = false;
-  bool isAlt = false;
-  bool isMeta = false;
-  uint16_t inputSource = MouseEventBinding::MOZ_SOURCE_UNKNOWN;
-
-  if(aEvent) {
-    WidgetInputEvent* inputEvent = aEvent->AsInputEvent();
-    isShift = inputEvent->IsShift();
-    isControl = inputEvent->IsControl();
-    isAlt = inputEvent->IsAlt();
-    isMeta = inputEvent->IsMeta();
-
-    WidgetMouseEventBase* mouseEvent = aEvent->AsMouseEventBase();
-    if (mouseEvent) {
-      inputSource = mouseEvent->inputSource;
-    }
-  }
-
   // Have the content handle the event, propagating it according to normal DOM rules.
   nsCOMPtr<nsIPresShell> shell = PresContext()->GetPresShell();
-  if (shell) {
-    nsContentUtils::DispatchXULCommand(mContent,
-                                       aEvent ?
-                                         aEvent->IsTrusted() : aTrustEvent,
-                                       nullptr, shell,
-                                       isControl, isAlt, isShift, isMeta, inputSource);
-  }
+  if (!shell)
+    return;
+
+  // Execute the oncommand event handler.
+  WidgetInputEvent* inputEvent = aEvent->AsInputEvent();
+  WidgetMouseEventBase* mouseEvent = aEvent->AsMouseEventBase();
+  nsContentUtils::DispatchXULCommand(mContent, aEvent->IsTrusted(), nullptr,
+                                     shell, inputEvent->IsControl(),
+                                     inputEvent->IsAlt(), inputEvent->IsShift(),
+                                     inputEvent->IsMeta(),
+                                     mouseEvent ? mouseEvent->inputSource
+                                                : MouseEventBinding::MOZ_SOURCE_UNKNOWN);
 }
--- a/layout/xul/nsButtonBoxFrame.h
+++ b/layout/xul/nsButtonBoxFrame.h
@@ -27,32 +27,26 @@ public:
                                            const nsDisplayListSet& aLists) override;
 
   virtual void DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData) override;
 
   virtual nsresult HandleEvent(nsPresContext* aPresContext,
                                mozilla::WidgetGUIEvent* aEvent,
                                nsEventStatus* aEventStatus) override;
 
-  virtual void MouseClicked(mozilla::WidgetGUIEvent* aEvent)
-  { DoMouseClick(aEvent, false); }
+  virtual void MouseClicked(mozilla::WidgetGUIEvent* aEvent);
 
   void Blurred();
 
 #ifdef DEBUG_FRAME_DUMP
   virtual nsresult GetFrameName(nsAString& aResult) const override {
     return MakeFrameName(NS_LITERAL_STRING("ButtonBoxFrame"), aResult);
   }
 #endif
 
-  /**
-   * Our implementation of MouseClicked.
-   * @param aTrustEvent if true and aEvent as null, then assume the event was trusted
-   */
-  void DoMouseClick(mozilla::WidgetGUIEvent* aEvent, bool aTrustEvent);
   void UpdateMouseThrough() override { AddStateBits(NS_FRAME_MOUSE_THROUGH_NEVER); }
 
 private:
   class nsButtonBoxListener final : public nsIDOMEventListener
   {
   public:
     explicit nsButtonBoxListener(nsButtonBoxFrame* aButtonBoxFrame) :
       mButtonBoxFrame(aButtonBoxFrame)
--- a/layout/xul/nsResizerFrame.cpp
+++ b/layout/xul/nsResizerFrame.cpp
@@ -530,28 +530,14 @@ nsResizerFrame::GetDirection()
   }
 
   return directions[index];
 }
 
 void
 nsResizerFrame::MouseClicked(WidgetMouseEvent* aEvent)
 {
-  bool isTrusted = false;
-  bool isShift = false;
-  bool isControl = false;
-  bool isAlt = false;
-  bool isMeta = false;
-  uint16_t inputSource = dom::MouseEventBinding::MOZ_SOURCE_UNKNOWN;
-
-  if(aEvent) {
-    isShift = aEvent->IsShift();
-    isControl = aEvent->IsControl();
-    isAlt = aEvent->IsAlt();
-    isMeta = aEvent->IsMeta();
-    inputSource = aEvent->inputSource;
-  }
-
   // Execute the oncommand event handler.
-  nsContentUtils::DispatchXULCommand(mContent, isTrusted, nullptr,
-                                     nullptr, isControl, isAlt,
-                                     isShift, isMeta, inputSource);
+  nsContentUtils::DispatchXULCommand(mContent, false, nullptr,
+                                     nullptr, aEvent->IsControl(),
+                                     aEvent->IsAlt(), aEvent->IsShift(),
+                                     aEvent->IsMeta(), aEvent->inputSource);
 }
deleted file mode 100644
--- a/layout/xul/nsScrollBoxFrame.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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/. */
-
-#include "nsCOMPtr.h"
-#include "nsPresContext.h"
-#include "nsGkAtoms.h"
-#include "nsButtonBoxFrame.h"
-#include "nsITimer.h"
-#include "nsRepeatService.h"
-#include "mozilla/MouseEvents.h"
-#include "nsIContent.h"
-
-using namespace mozilla;
-
-class nsAutoRepeatBoxFrame final : public nsButtonBoxFrame
-{
-public:
-  NS_DECL_FRAMEARENA_HELPERS(nsAutoRepeatBoxFrame)
-
-  friend nsIFrame* NS_NewAutoRepeatBoxFrame(nsIPresShell* aPresShell,
-                                            ComputedStyle* aStyle);
-
-  virtual void DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData) override;
-
-  virtual nsresult AttributeChanged(int32_t aNameSpaceID,
-                                    nsAtom* aAttribute,
-                                    int32_t aModType) override;
-
-  virtual nsresult HandleEvent(nsPresContext* aPresContext,
-                               WidgetGUIEvent* aEvent,
-                               nsEventStatus* aEventStatus) override;
-
-  NS_IMETHOD HandlePress(nsPresContext* aPresContext,
-                         WidgetGUIEvent* aEvent,
-                         nsEventStatus* aEventStatus) override;
-
-  NS_IMETHOD HandleRelease(nsPresContext* aPresContext,
-                           WidgetGUIEvent* aEvent,
-                           nsEventStatus* aEventStatus) override;
-
-protected:
-  explicit nsAutoRepeatBoxFrame(ComputedStyle* aStyle):
-    nsButtonBoxFrame(aStyle, kClassID) {}
-
-  void StartRepeat() {
-    if (IsActivatedOnHover()) {
-      // No initial delay on hover.
-      nsRepeatService::GetInstance()->Start(Notify, this,
-                                            mContent->OwnerDoc(),
-                                            NS_LITERAL_CSTRING("DoMouseClick"),
-                                            0);
-    } else {
-      nsRepeatService::GetInstance()->Start(Notify, this,
-                                            mContent->OwnerDoc(),
-                                            NS_LITERAL_CSTRING("DoMouseClick"));
-    }
-  }
-  void StopRepeat() {
-    nsRepeatService::GetInstance()->Stop(Notify, this);
-  }
-  void Notify();
-  static void Notify(void* aData) {
-    static_cast<nsAutoRepeatBoxFrame*>(aData)->Notify();
-  }
-
-  bool mTrustedEvent;
-
-  bool IsActivatedOnHover();
-};
-
-nsIFrame*
-NS_NewAutoRepeatBoxFrame (nsIPresShell* aPresShell, ComputedStyle* aStyle)
-{
-  return new (aPresShell) nsAutoRepeatBoxFrame(aStyle);
-}
-
-NS_IMPL_FRAMEARENA_HELPERS(nsAutoRepeatBoxFrame)
-
-nsresult
-nsAutoRepeatBoxFrame::HandleEvent(nsPresContext* aPresContext,
-                                  WidgetGUIEvent* aEvent,
-                                  nsEventStatus* aEventStatus)
-{
-  NS_ENSURE_ARG_POINTER(aEventStatus);
-  if (nsEventStatus_eConsumeNoDefault == *aEventStatus) {
-    return NS_OK;
-  }
-
-  switch(aEvent->mMessage) {
-    // repeat mode may be "hover" for repeating while the mouse is hovering
-    // over the element, otherwise repetition is done while the element is
-    // active (pressed).
-    case eMouseEnterIntoWidget:
-    case eMouseOver:
-      if (IsActivatedOnHover()) {
-        StartRepeat();
-        mTrustedEvent = aEvent->IsTrusted();
-      }
-      break;
-
-    case eMouseExitFromWidget:
-    case eMouseOut:
-      // always stop on mouse exit
-      StopRepeat();
-      // Not really necessary but do this to be safe
-      mTrustedEvent = false;
-      break;
-
-    case eMouseClick: {
-      WidgetMouseEvent* mouseEvent = aEvent->AsMouseEvent();
-      if (mouseEvent->IsLeftClickEvent()) {
-        // skip button frame handling to prevent click handling
-        return nsBoxFrame::HandleEvent(aPresContext, mouseEvent, aEventStatus);
-      }
-      break;
-    }
-
-    default:
-      break;
-  }
-
-  return nsButtonBoxFrame::HandleEvent(aPresContext, aEvent, aEventStatus);
-}
-
-NS_IMETHODIMP
-nsAutoRepeatBoxFrame::HandlePress(nsPresContext* aPresContext,
-                                  WidgetGUIEvent* aEvent,
-                                  nsEventStatus* aEventStatus)
-{
-  if (!IsActivatedOnHover()) {
-    StartRepeat();
-    mTrustedEvent = aEvent->IsTrusted();
-    DoMouseClick(aEvent, mTrustedEvent);
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsAutoRepeatBoxFrame::HandleRelease(nsPresContext* aPresContext,
-                                    WidgetGUIEvent* aEvent,
-                                    nsEventStatus* aEventStatus)
-{
-  if (!IsActivatedOnHover()) {
-    StopRepeat();
-  }
-  return NS_OK;
-}
-
-nsresult
-nsAutoRepeatBoxFrame::AttributeChanged(int32_t aNameSpaceID,
-                                       nsAtom* aAttribute,
-                                       int32_t aModType)
-{
-  if (aAttribute == nsGkAtoms::type) {
-    StopRepeat();
-  }
-  return NS_OK;
-}
-
-void
-nsAutoRepeatBoxFrame::Notify()
-{
-  DoMouseClick(nullptr, mTrustedEvent);
-}
-
-void
-nsAutoRepeatBoxFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData)
-{
-  // Ensure our repeat service isn't going... it's possible that a scrollbar can disappear out
-  // from under you while you're in the process of scrolling.
-  StopRepeat();
-  nsButtonBoxFrame::DestroyFrom(aDestructRoot, aPostDestroyData);
-}
-
-bool
-nsAutoRepeatBoxFrame::IsActivatedOnHover()
-{
-  return mContent->AsElement()->AttrValueIs(
-      kNameSpaceID_None, nsGkAtoms::repeat, nsGkAtoms::hover, eCaseMatters);
-}
--- a/layout/xul/nsScrollbarButtonFrame.cpp
+++ b/layout/xul/nsScrollbarButtonFrame.cpp
@@ -220,23 +220,16 @@ void nsScrollbarButtonFrame::Notify()
         m->RepeatButtonScroll(sb);
       } else {
         sb->MoveToNewPosition();
       }
     }
   }
 }
 
-void
-nsScrollbarButtonFrame::MouseClicked(WidgetGUIEvent* aEvent)
-{
-  nsButtonBoxFrame::MouseClicked(aEvent);
-  //MouseClicked();
-}
-
 nsresult
 nsScrollbarButtonFrame::GetChildWithTag(nsAtom* atom, nsIFrame* start,
                                         nsIFrame*& result)
 {
   // recursively search our children
   for (nsIFrame* childFrame : start->PrincipalChildList())
   {
     // get the content node
--- a/layout/xul/nsScrollbarButtonFrame.h
+++ b/layout/xul/nsScrollbarButtonFrame.h
@@ -58,18 +58,16 @@ public:
     return NS_OK;
   }
 
   NS_IMETHOD HandleRelease(nsPresContext* aPresContext,
                            mozilla::WidgetGUIEvent* aEvent,
                            nsEventStatus* aEventStatus) override;
 
 protected:
-  virtual void MouseClicked(mozilla::WidgetGUIEvent* aEvent) override;
-
   void StartRepeat() {
     nsRepeatService::GetInstance()->Start(Notify, this,
                                           mContent->OwnerDoc(),
                                           NS_LITERAL_CSTRING("nsScrollbarButtonFrame"));
   }
   void StopRepeat() {
     nsRepeatService::GetInstance()->Stop(Notify, this);
   }
--- a/layout/xul/nsTitleBarFrame.cpp
+++ b/layout/xul/nsTitleBarFrame.cpp
@@ -163,28 +163,14 @@ nsTitleBarFrame::HandleEvent(nsPresConte
     return nsBoxFrame::HandleEvent(aPresContext, aEvent, aEventStatus);
   else
     return NS_OK;
 }
 
 void
 nsTitleBarFrame::MouseClicked(WidgetMouseEvent* aEvent)
 {
-  bool isTrusted = false;
-  bool isShift = false;
-  bool isControl = false;
-  bool isAlt = false;
-  bool isMeta = false;
-  uint16_t inputSource = dom::MouseEventBinding::MOZ_SOURCE_UNKNOWN;
-
-  if(aEvent) {
-    isShift = aEvent->IsShift();
-    isControl = aEvent->IsControl();
-    isAlt = aEvent->IsAlt();
-    isMeta = aEvent->IsMeta();
-    inputSource = aEvent->inputSource;
-  }
-
   // Execute the oncommand event handler.
-  nsContentUtils::DispatchXULCommand(mContent, isTrusted, nullptr,
-                                     nullptr, isControl, isAlt,
-                                     isShift, isMeta, inputSource);
+  nsContentUtils::DispatchXULCommand(mContent, false, nullptr,
+                                     nullptr, aEvent->IsControl(),
+                                     aEvent->IsAlt(), aEvent->IsShift(),
+                                     aEvent->IsMeta(), aEvent->inputSource);
 }
--- a/toolkit/content/widgets/scrollbox.xml
+++ b/toolkit/content/widgets/scrollbox.xml
@@ -601,26 +601,16 @@
       <handler event="scrollend"><![CDATA[
         this._isScrolling = false;
         this._destination = 0;
         this._direction = 0;
       ]]></handler>
     </handlers>
   </binding>
 
-  <binding id="autorepeatbutton" extends="chrome://global/content/bindings/general.xml#basecontrol">
-    <resources>
-      <stylesheet src="chrome://global/skin/scrollbox.css"/>
-    </resources>
-
-    <content repeat="hover">
-      <xul:image class="autorepeatbutton-icon"/>
-    </content>
-  </binding>
-
   <binding id="arrowscrollbox-clicktoscroll" extends="chrome://global/content/bindings/scrollbox.xml#arrowscrollbox">
     <content>
       <xul:toolbarbutton class="scrollbutton-up"
                          xbl:inherits="orient,collapsed=notoverflowing,disabled=scrolledtostart"
                          anonid="scrollbutton-up"
                          onclick="_distanceScroll(event);"
                          onmousedown="if (event.button == 0) _startScroll(-1);"
                          onmouseup="if (event.button == 0) _stopScroll();"
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -867,20 +867,16 @@ scrollbox[smoothscroll=true] {
 arrowscrollbox {
   -moz-binding: url("chrome://global/content/bindings/scrollbox.xml#arrowscrollbox");
 }
 
 arrowscrollbox[clicktoscroll="true"] {
   -moz-binding: url("chrome://global/content/bindings/scrollbox.xml#arrowscrollbox-clicktoscroll");
 }
 
-autorepeatbutton {
-  -moz-binding: url("chrome://global/content/bindings/scrollbox.xml#autorepeatbutton");
-}
-
 /********** stringbundle **********/
 
 stringbundle,
 stringbundleset {
   display: none;
 }
 
 /********** dialog **********/
--- a/xpcom/ds/nsGkAtomList.h
+++ b/xpcom/ds/nsGkAtomList.h
@@ -139,17 +139,16 @@ GK_ATOM(attribute, "attribute")
 GK_ATOM(attributes, "attributes")
 GK_ATOM(attributeSet, "attribute-set")
 GK_ATOM(_auto, "auto")
 GK_ATOM(autocheck, "autocheck")
 GK_ATOM(autocomplete, "autocomplete")
 GK_ATOM(autocomplete_richlistbox, "autocomplete-richlistbox")
 GK_ATOM(autofocus, "autofocus")
 GK_ATOM(autoplay, "autoplay")
-GK_ATOM(autorepeatbutton, "autorepeatbutton")
 GK_ATOM(axis, "axis")
 GK_ATOM(b, "b")
 GK_ATOM(background, "background")
 GK_ATOM(base, "base")
 GK_ATOM(basefont, "basefont")
 GK_ATOM(baseline, "baseline")
 GK_ATOM(bdi, "bdi")
 GK_ATOM(bdo, "bdo")