Narrow retained UI overlay lifetime debt

This commit is contained in:
2026-06-15 19:26:11 +02:00
parent f907d88c26
commit 565564c061
15 changed files with 603 additions and 67 deletions

View File

@@ -210,6 +210,36 @@ void clear_for_layout_reload_invalidates_overlays(pp::tests::Harness& h)
PP_EXPECT(h, !tree.captured_node(UiCaptureKind::keyboard).ok());
}
void double_close_overlay_returns_invalid_argument(pp::tests::Harness& h)
{
NodeLifetimeTree tree;
const auto root = tree.create_root();
PP_EXPECT(h, root);
if (!root) {
return;
}
UiOverlayLifetime overlays(tree, root.value());
const auto popup = overlays.open_popup();
PP_EXPECT(h, popup);
if (!popup) {
return;
}
const auto child = overlays.open_child_popup(popup.value());
PP_EXPECT(h, child);
if (!child) {
return;
}
PP_EXPECT(h, overlays.close(child.value()).ok());
PP_EXPECT(h, !overlays.close(child.value()).ok());
PP_EXPECT(h, overlays.close(popup.value()).ok());
PP_EXPECT(h, !overlays.close(popup.value()).ok());
PP_EXPECT(h, overlays.overlay_count() == 0U);
PP_EXPECT(h, !overlays.tracks(child.value()));
}
}
int main()
@@ -222,6 +252,7 @@ int main()
harness.run("modal_dialog_captures_pointer_and_keyboard", modal_dialog_captures_pointer_and_keyboard);
harness.run("modeless_dialog_does_not_steal_capture", modeless_dialog_does_not_steal_capture);
harness.run("rejects_untracked_or_dead_overlay_closes", rejects_untracked_or_dead_overlay_closes);
harness.run("double_close_overlay_returns_invalid_argument", double_close_overlay_returns_invalid_argument);
harness.run("clear_for_layout_reload_invalidates_overlays", clear_for_layout_reload_invalidates_overlays);
return harness.finish();
}