Skip to content

Commit

Permalink
Bug 1931937 [wpt PR 49232] - Implement new behavior for popovers cont…
Browse files Browse the repository at this point in the history
…ained within invokers, a=testonly

Automatic update from web-platform-tests
Implement new behavior for popovers contained within invokers

In this case:

```
<button popovertarget=foo>Activate
  <div popover id=foo>Clicking me shouldn't close me</div>
</button>
```

clicking the button properly activates the popover, however,
clicking on the popover itself after that should **not** close
the popover. It currently does because the popover click
bubbles to the `<button>` and activates the invoker, which
toggles the popover closed.

This CL changes that behavior so that clicks on the popover
in the case above no longer re-invoke the popover.

Spec PR:
  whatwg/html#10770

Bug: 379241451
Change-Id: Iab67127c46a97a081a7818bfd917864729bf8b5c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6026982
Auto-Submit: Mason Freed <masonfchromium.org>
Commit-Queue: Mason Freed <masonfchromium.org>
Reviewed-by: David Baron <dbaronchromium.org>
Cr-Commit-Position: refs/heads/main{#1384498}

--

wpt-commits: 50f7c0548260cdc2f11bface1816a283f9314de8
wpt-pr: 49232

UltraBlame original commit: 1bc5ed8ce26d83713b264aae65068e3c8de79546
  • Loading branch information
marco-c committed Nov 26, 2024
1 parent dd7c155 commit 5f37f93
Showing 1 changed file with 63 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<!DOCTYPE html>
<meta charset="utf-8" />
<link rel="author" href="mailto:[email protected]">
<link rel=help href="https://github.com/whatwg/html/pull/10770">
<link rel=help href="https://issues.chromium.org/issues/379241451">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/popover-utils.js"></script>

<button id=case1 popovertarget=popover>Button
<div popover id=popover>
<span class=descendant>Popover</span>
</div>
</button>

<button id=case2 popovertarget=case2 popover>Self link</button>

<button popovertarget=case3>Button
<div popover id=case3>
<span class=descendant>Popover</span>
</div>
</button>

<script>
promise_test(async t => {
const invoker = document.querySelector('#case1');
const popover = invoker.querySelector('[popover]');
const descendant = invoker.querySelector('.descendant');
assert_false(popover.matches(':popover-open'));
invoker.click();
assert_true(popover.matches(':popover-open'));
popover.click();
assert_true(popover.matches(':popover-open'),'Should still be open');
descendant.click();
assert_true(popover.matches(':popover-open'),'Should still be open, even for descendant');
popover.hidePopover();
},'clicking a popover nested inside a button should not re-invoke the popover');

promise_test(async t => {
const element = document.querySelector('#case2');
assert_false(element.matches(':popover-open'));
element.showPopover();
assert_true(element.matches(':popover-open'));
element.click(); // This is a click on the button, which is also the popover
assert_false(element.matches(':popover-open'));
element.hidePopover();
},'corner case: invoker that is also a popover');

promise_test(async t => {
const popover = document.querySelector('#case3');
const outerInvoker = popover.parentElement;
const descendant = popover.querySelector('.descendant');
const innerInvoker = popover.appendChild(document.createElement('button'));
innerInvoker.popoverTargetElement = popover;
assert_false(popover.matches(':popover-open'));
outerInvoker.click();
assert_true(popover.matches(':popover-open'));
descendant.click();
assert_true(popover.matches(':popover-open'),'descendant doesn\'t close popover');
innerInvoker.click();
assert_false(popover.matches(':popover-open'),'inner invoker still works');
},'invoker inside popover still works, even with weird nesting');
</script>

0 comments on commit 5f37f93

Please sign in to comment.