Commit 1338e147 authored by Cosmin Sabou's avatar Cosmin Sabou
Browse files

Backed out changeset 31915ad32476 (bug 1833570) for causing build bustages on...

Backed out changeset 31915ad32476 (bug 1833570) for causing build bustages on PopoverData.h. CLOSED TREE
parent 789fd6cf
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -15046,9 +15046,7 @@ void Document::HidePopover(Element& aPopover, bool aFocusPreviousElement,
    }
  }
  auto* data = popoverHTMLEl->GetPopoverData();
  MOZ_ASSERT(data, "Should have popover data");
  data->SetInvoker(nullptr);
  aPopover.SetHasPopoverInvoker(false);
  // Fire beforetoggle event and re-check popover validity.
  if (aFireEvents && !wasHiding) {
+14 −2
Original line number Diff line number Diff line
@@ -4248,6 +4248,19 @@ void Element::ClearServoData(Document* aDoc) {
  }
}

bool Element::HasPopoverInvoker() const {
  auto* popoverData = GetPopoverData();
  return popoverData && popoverData->HasPopoverInvoker();
}

void Element::SetHasPopoverInvoker(bool aHasInvoker) {
  if (aHasInvoker) {
    EnsurePopoverData().SetHasPopoverInvoker(true);
  } else if (auto* popoverData = GetPopoverData()) {
    popoverData->SetHasPopoverInvoker(false);
  }
}

bool Element::IsAutoPopover() const {
  const auto* htmlElement = nsGenericHTMLElement::FromNode(this);
  return htmlElement &&
@@ -4292,9 +4305,8 @@ Element* Element::GetTopmostPopoverAncestor() const {

  checkAncestor(newPopover->GetFlattenedTreeParentElement());

  // TODO: To handle the button invokers
  // https://github.com/whatwg/html/issues/9160
  RefPtr<Element> invoker = newPopover->GetPopoverData()->GetInvoker();
  checkAncestor(invoker);

  return topmostPopoverAncestor;
}
+4 −0
Original line number Diff line number Diff line
@@ -581,6 +581,10 @@ class Element : public FragmentOrElement {
    return CreatePopoverData();
  }

  // https://html.spec.whatwg.org/multipage/popover.html#popover-invoker
  bool HasPopoverInvoker() const;
  void SetHasPopoverInvoker(bool);

  bool IsAutoPopover() const;
  bool IsPopoverOpen() const;

+6 −13
Original line number Diff line number Diff line
@@ -66,14 +66,10 @@ class PopoverData {
    mPreviouslyFocusedElement = aPreviouslyFocusedElement;
  }

  RefPtr<Element> GetInvoker() const {
    return do_QueryReferent(mInvokerElement);
  bool HasPopoverInvoker() const { return mHasPopoverInvoker; }
  void SetHasPopoverInvoker(bool aHasPopoverInvoker) {
    mHasPopoverInvoker = aHasPopoverInvoker;
  }
  void SetInvoker(Element* aInvokerElement) {
    mInvokerElement =
        do_GetWeakReference(static_cast<nsINode*>(aInvokerElement));
  }

  PopoverToggleEventTask* GetToggleEventTask() const { return mTask; }
  void SetToggleEventTask(PopoverToggleEventTask* aTask) { mTask = aTask; }
  void ClearToggleEventTask() { mTask = nullptr; }
@@ -89,12 +85,9 @@ class PopoverData {
  // See, https://github.com/whatwg/html/issues/9063
  nsWeakPtr mPreviouslyFocusedElement = nullptr;

  // https://html.spec.whatwg.org/#popover-invoker
  // Since having a popover invoker only makes a difference if the invoker
  // is in the document (in another open popover to be precise) we can make
  // this a weak reference, as if the element goes away it's necessarily not
  // connected to our document.
  nsWeakPtr mInvokerElement;
  // https://html.spec.whatwg.org/multipage/popover.html#popover-invoker, also
  // see https://github.com/whatwg/html/issues/9168.
  bool mHasPopoverInvoker = false;
  bool mIsHiding = false;
  RefPtr<PopoverToggleEventTask> mTask;
};
+1 −1
Original line number Diff line number Diff line
@@ -2892,7 +2892,7 @@ void nsGenericHTMLFormControlElementWithState::HandlePopoverTargetAction() {
  if (canHide && target->IsPopoverOpen()) {
    target->HidePopover(IgnoreErrors());
  } else if (canShow && !target->IsPopoverOpen()) {
    target->GetPopoverData()->SetInvoker(this);
    target->SetHasPopoverInvoker(true);
    target->ShowPopover(IgnoreErrors());
  }
}