Index: chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc |
diff --git a/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc b/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc |
index 1f6302730572dbd5ca30c14391fd545ce5d555f0..4393ced2643006354ac1e173f10c69878ae993fa 100644 |
--- a/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc |
+++ b/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc |
@@ -80,11 +80,17 @@ class WebDialogWebContentsDelegateViews |
// Sets WebView's preferred size based on auto-resized contents. |
web_view_->SetPreferredSize(preferred_size); |
- constrained_window::UpdateWebContentsModalDialogPosition( |
- web_view_->GetWidget(), |
- web_modal::WebContentsModalDialogManager::FromWebContents( |
- initiator_observer_->web_contents())->delegate()-> |
- GetWebContentsModalDialogHost()); |
+ content::WebContents* top_level_web_contents = |
+ constrained_window::GetTopLevelWebContents( |
+ initiator_observer_->web_contents()); |
+ if (top_level_web_contents) { |
+ constrained_window::UpdateWebContentsModalDialogPosition( |
+ web_view_->GetWidget(), |
+ web_modal::WebContentsModalDialogManager::FromWebContents( |
+ top_level_web_contents) |
+ ->delegate() |
+ ->GetWebContentsModalDialogHost()); |
+ } |
} |
private: |
@@ -238,8 +244,13 @@ class ConstrainedWebDialogDelegateViewViews |
} |
void DocumentOnLoadCompletedInMainFrame() override { |
if (!max_size_.IsEmpty() && initiator_observer_.web_contents()) { |
- constrained_window::ShowModalDialog(GetWidget()->GetNativeWindow(), |
- initiator_observer_.web_contents()); |
+ content::WebContents* top_level_web_contents = |
+ constrained_window::GetTopLevelWebContents( |
+ initiator_observer_.web_contents()); |
+ if (top_level_web_contents) { |
+ constrained_window::ShowModalDialog(GetWidget()->GetNativeWindow(), |
+ top_level_web_contents); |
+ } |
} |
} |
@@ -287,6 +298,12 @@ ConstrainedWebDialogDelegate* ShowConstrainedWebDialogWithAutoResize( |
new ConstrainedWebDialogDelegateViewViews( |
browser_context, delegate, web_contents, |
min_size, max_size); |
- constrained_window::CreateWebModalDialogViews(dialog, web_contents); |
+ |
+ // For embedded WebContents, use the embedder's WebContents for constrained |
+ // window. |
+ content::WebContents* top_level_web_contents = |
+ constrained_window::GetTopLevelWebContents(web_contents); |
+ DCHECK(top_level_web_contents); |
+ constrained_window::CreateWebModalDialogViews(dialog, top_level_web_contents); |
return dialog; |
} |