From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shelley Vohr <shelley.vohr@gmail.com>
Date: Fri, 16 Jun 2023 11:15:57 +0200
Subject: fix: crash on nativeTheme change during context menu close

Refs https://chromium-review.googlesource.com/c/chromium/src/+/4363385

Fixes a crash seen when trying to change nativeTheme source during
a context menu close. This happens as a result of a change added in the
above CL, which doesn't check whether or not the menu controller could
possibly be null as can happen during a context menu close. This
only affects Windows 11, as Bubble Border is only enabled there.

This should be upstreamed, as other uses of MenuController in this
file do check for menu controller being null.

diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc
index 76bb4863858fb1bde1288b3d1b1d07f151a2f801..f2ceb3b8d6cbcf4bb4af8b85573bba29a38e5abf 100644
--- a/ui/views/controls/menu/menu_scroll_view_container.cc
+++ b/ui/views/controls/menu/menu_scroll_view_container.cc
@@ -402,8 +402,7 @@ void MenuScrollViewContainer::CreateDefaultBorder() {
   MenuController* menu_controller =
       content_view_->GetMenuItem()->GetMenuController();
   const MenuConfig& menu_config = MenuConfig::instance();
-  corner_radius_ = menu_config.CornerRadiusForMenu(
-      content_view_->GetMenuItem()->GetMenuController());
+  corner_radius_ = menu_config.CornerRadiusForMenu(menu_controller);
   int padding = menu_config.use_outer_border && corner_radius_ > 0
                     ? kBorderPaddingDueToRoundedCorners
                     : 0;
@@ -418,8 +417,9 @@ void MenuScrollViewContainer::CreateDefaultBorder() {
   int bottom_inset = GetFootnote() ? 0 : vertical_inset;
 
   if (menu_config.use_outer_border) {
-    if (menu_config.use_bubble_border && (corner_radius_ > 0) &&
-        !menu_controller->IsCombobox()) {
+    // Menu controller could be null during context menu being closed.
+    bool is_combobox = menu_controller && !menu_controller->IsCombobox();
+    if (menu_config.use_bubble_border && (corner_radius_ > 0) && !is_combobox) {
       CreateBubbleBorder();
     } else {
       gfx::Insets insets = gfx::Insets::TLBR(vertical_inset, horizontal_inset,
