Backed out changeset d567ffebf337 (bug 1823359) for causing failures on popover-light-dismiss.html. CLOSED TREE

This commit is contained in:
Csoregi Natalia
2023-03-22 18:19:46 +02:00
parent 52b743889f
commit 5d087970e3
15 changed files with 63 additions and 81 deletions

View File

@@ -92,7 +92,6 @@
#include "nsTextFragment.h"
#include "mozilla/dom/BindingUtils.h"
#include "mozilla/dom/MouseEventBinding.h"
#include "mozilla/dom/ToggleEvent.h"
#include "mozilla/dom/TouchEvent.h"
#include "mozilla/ErrorResult.h"
#include "nsHTMLDocument.h"
@@ -674,17 +673,14 @@ nsresult nsGenericHTMLElement::AfterSetAttr(
// The missing value default is the no popover state.
newState = PopoverState::None;
}
PopoverState oldState = GetPopoverState();
if (newState != oldState) {
if (oldState != PopoverState::None) {
HidePopoverInternal(/* aFireEvents = */ false, IgnoreErrors());
if (newState != GetPopoverState()) {
if (PopoverOpen()) {
HidePopover(IgnoreErrors());
}
if (newState != PopoverState::None) {
EnsurePopoverData().SetPopoverState(newState);
PopoverPseudoStateUpdate(false, true);
} else {
if (newState == PopoverState::None) {
ClearPopoverData();
RemoveStates(ElementState::OPEN | ElementState::CLOSED);
} else {
EnsurePopoverData().SetPopoverState(newState);
}
}
} else if (aName == nsGkAtoms::dir) {
@@ -3150,57 +3146,24 @@ void nsGenericHTMLElement::PopoverPseudoStateUpdate(bool aOpen, bool aNotify) {
ToggleStates(changedStates, aNotify);
}
bool nsGenericHTMLElement::FireBeforeToggle(bool aIsOpen) {
ToggleEventInit init;
init.mBubbles = false;
if (aIsOpen) {
init.mCancelable = false;
init.mOldState = u"open"_ns;
init.mNewState = u"closed"_ns;
} else {
init.mCancelable = true;
init.mOldState = u"closed"_ns;
init.mNewState = u"open"_ns;
}
RefPtr<ToggleEvent> event =
ToggleEvent::Constructor(this, u"beforetoggle"_ns, init);
event->SetTrusted(true);
EventDispatcher::DispatchDOMEvent(MOZ_KnownLive(ToSupports(this)), nullptr,
event, nullptr, nullptr);
return event->DefaultPrevented();
}
// https://html.spec.whatwg.org/#dom-showpopover
void nsGenericHTMLElement::ShowPopover(ErrorResult& aRv) {
if (!CheckPopoverValidity(PopoverVisibilityState::Hidden, aRv)) {
return;
}
// Fire beforetoggle event and re-check popover validity.
if (FireBeforeToggle(false)) {
return;
}
if (!CheckPopoverValidity(PopoverVisibilityState::Hidden, aRv)) {
return;
}
// TODO: Fire beforetoggle event and re-check popover validity.
// TODO: Run auto popover steps.
// TODO: Add to Top Layer.
PopoverPseudoStateUpdate(true, true);
GetPopoverData()->SetPopoverVisibilityState(PopoverVisibilityState::Showing);
// TODO: Handle popover focusing.
PopoverPseudoStateUpdate(true, true);
// TODO: Queue popover toggle event task.
}
// https://html.spec.whatwg.org/#dom-hidepopover
void nsGenericHTMLElement::HidePopover(ErrorResult& aRv) {
HidePopoverInternal(true, aRv);
}
void nsGenericHTMLElement::HidePopoverInternal(bool aFireEvents,
ErrorResult& aRv) {
OwnerDoc()->HidePopover(*this, true, aFireEvents, aRv);
OwnerDoc()->HidePopover(*this, true, true, aRv);
}
// https://html.spec.whatwg.org/multipage/popover.html#dom-togglepopover