diff --git ui/shell_dialogs/base_shell_dialog_win.cc ui/shell_dialogs/base_shell_dialog_win.cc
index b8ef380ab0059..fc90b5ce0e6d4 100644
--- ui/shell_dialogs/base_shell_dialog_win.cc
+++ ui/shell_dialogs/base_shell_dialog_win.cc
@@ -58,11 +58,15 @@ BaseShellDialogImpl::Owners& BaseShellDialogImpl::GetOwners() {
 
 // static
 void BaseShellDialogImpl::DisableOwner(HWND owner) {
+  if (owner)
+    owner = GetAncestor(owner, GA_ROOT);
   SetOwnerEnabled(owner, false);
 }
 
 std::unique_ptr<BaseShellDialogImpl::RunState> BaseShellDialogImpl::BeginRun(
     HWND owner) {
+  if (owner)
+    owner = GetAncestor(owner, GA_ROOT);
   // Cannot run a modal shell dialog if one is already running for this owner.
   DCHECK(!IsRunningDialogForOwner(owner));
   // The owner must be a top level window, otherwise we could end up with two
@@ -88,6 +92,8 @@ void BaseShellDialogImpl::EndRun(std::unique_ptr<RunState> run_state) {
 }
 
 bool BaseShellDialogImpl::IsRunningDialogForOwner(HWND owner) const {
+  if (owner)
+    owner = GetAncestor(owner, GA_ROOT);
   return (owner && GetOwners().find(owner) != GetOwners().end());
 }