--- 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")