Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Unified Diff: chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc

Issue 2172363002: Created min size for print preview dialog and modified to allow the Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix mac build error Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..fa497d83afc43e7f985abe3d2df1c59aa1b9b568 100644
--- a/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc
+++ b/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc
@@ -11,10 +11,12 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/webui/chrome_web_contents_handler.h"
#include "components/constrained_window/constrained_window_views.h"
+#include "components/guest_view/browser/guest_view_base.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
+#include "ui/gfx/native_widget_types.h"
#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h"
#include "ui/views/controls/webview/webview.h"
#include "ui/views/view.h"
@@ -29,13 +31,12 @@ namespace {
// potential use after destruction.
class InitiatorWebContentsObserver
: public content::WebContentsObserver {
- public:
- explicit InitiatorWebContentsObserver(content::WebContents* web_contents)
- : content::WebContentsObserver(web_contents) {
- }
+ public:
+ explicit InitiatorWebContentsObserver(content::WebContents* web_contents)
+ : content::WebContentsObserver(web_contents) {}
- private:
- DISALLOW_COPY_AND_ASSIGN(InitiatorWebContentsObserver);
+ private:
+ DISALLOW_COPY_AND_ASSIGN(InitiatorWebContentsObserver);
};
class WebDialogWebContentsDelegateViews
@@ -144,14 +145,17 @@ class ConstrainedWebDialogDelegateViewViews
ui::WebDialogDelegate* delegate,
content::WebContents* web_contents,
const gfx::Size& min_size,
- const gfx::Size& max_size)
+ const gfx::Size& max_size,
+ bool is_toplevel)
: views::WebView(browser_context),
initiator_observer_(web_contents),
- impl_(new ConstrainedWebDialogDelegateViews(browser_context, delegate,
+ impl_(new ConstrainedWebDialogDelegateViews(browser_context,
+ delegate,
&initiator_observer_,
this)),
min_size_(min_size),
- max_size_(max_size) {
+ max_size_(max_size),
+ is_toplevel_(is_toplevel) {
SetWebContents(GetWebContents());
AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE));
if (!max_size_.IsEmpty())
@@ -200,7 +204,10 @@ class ConstrainedWebDialogDelegateViewViews
// No close button if the dialog doesn't want a title bar.
return impl_->GetWebDialogDelegate()->ShouldShowDialogTitle();
}
- ui::ModalType GetModalType() const override { return ui::MODAL_TYPE_CHILD; }
+ ui::ModalType GetModalType() const override {
+ ui::ModalType type = GetWebDialogDelegate()->GetDialogModalType();
+ return type == ui::MODAL_TYPE_NONE ? ui::MODAL_TYPE_CHILD : type;
+ }
// views::WebView:
bool AcceleratorPressed(const ui::Accelerator& accelerator) override {
@@ -238,8 +245,14 @@ class ConstrainedWebDialogDelegateViewViews
}
void DocumentOnLoadCompletedInMainFrame() override {
if (!max_size_.IsEmpty() && initiator_observer_.web_contents()) {
- constrained_window::ShowModalDialog(GetWidget()->GetNativeWindow(),
- initiator_observer_.web_contents());
+ if (is_toplevel_) {
+ constrained_window::ShowTopLevelModalDialog(
+ GetWidget()->GetNativeWindow(), initiator_observer_.web_contents(),
+ this);
+ } else {
+ constrained_window::ShowModalDialog(GetWidget()->GetNativeWindow(),
+ initiator_observer_.web_contents());
+ }
}
}
@@ -258,23 +271,62 @@ class ConstrainedWebDialogDelegateViewViews
const gfx::Size min_size_;
const gfx::Size max_size_;
+ // If true, dialog is a toplevel window - a peer and modal transient child of
+ // the original web contents window rather than a child. This allows the
+ // dialog to extend outside of the original window on some platforms
+ // (ChromeOS)
+ bool is_toplevel_;
+
DISALLOW_COPY_AND_ASSIGN(ConstrainedWebDialogDelegateViewViews);
};
} // namespace
+ConstrainedWebDialogDelegate* ShowTopLevelConstrainedWebDialogInWindow(
+ content::BrowserContext* browser_context,
+ ui::WebDialogDelegate* delegate,
+ content::WebContents* web_contents,
+ gfx::NativeView dialog_host_window) {
+ ConstrainedWebDialogDelegateViewViews* dialog =
+ new ConstrainedWebDialogDelegateViewViews(browser_context, delegate,
+ web_contents, gfx::Size(),
+ gfx::Size(), false);
+ content::WebContents* top_web_contents =
+ guest_view::GuestViewBase::GetTopLevelWebContents(web_contents);
+ views::Widget* widget =
+ views::DialogDelegate::CreateDialogWidget(dialog,
+ dialog_host_window,
+ nullptr);
+ constrained_window::ShowTopLevelModalDialog(widget->GetNativeWindow(),
+ top_web_contents, dialog);
+ return dialog;
+}
+
ConstrainedWebDialogDelegate* ShowConstrainedWebDialog(
content::BrowserContext* browser_context,
ui::WebDialogDelegate* delegate,
content::WebContents* web_contents) {
ConstrainedWebDialogDelegateViewViews* dialog =
- new ConstrainedWebDialogDelegateViewViews(
- browser_context, delegate, web_contents,
- gfx::Size(), gfx::Size());
+ new ConstrainedWebDialogDelegateViewViews(browser_context, delegate,
+ web_contents, gfx::Size(),
+ gfx::Size(), false);
constrained_window::ShowWebModalDialogViews(dialog, web_contents);
return dialog;
}
+ConstrainedWebDialogDelegate* ShowTopLevelConstrainedWebDialog(
+ content::BrowserContext* browser_context,
+ ui::WebDialogDelegate* delegate,
+ content::WebContents* web_contents) {
+ ConstrainedWebDialogDelegateViewViews* dialog =
+ new ConstrainedWebDialogDelegateViewViews(browser_context, delegate,
+ web_contents, gfx::Size(),
+ gfx::Size(), true);
+ constrained_window::ShowTopLevelWebModalDialogViews(dialog, web_contents,
+ dialog);
+ return dialog;
+}
+
ConstrainedWebDialogDelegate* ShowConstrainedWebDialogWithAutoResize(
content::BrowserContext* browser_context,
ui::WebDialogDelegate* delegate,
@@ -285,8 +337,7 @@ ConstrainedWebDialogDelegate* ShowConstrainedWebDialogWithAutoResize(
DCHECK(!max_size.IsEmpty());
ConstrainedWebDialogDelegateViewViews* dialog =
new ConstrainedWebDialogDelegateViewViews(
- browser_context, delegate, web_contents,
- min_size, max_size);
+ browser_context, delegate, web_contents, min_size, max_size, false);
constrained_window::CreateWebModalDialogViews(dialog, web_contents);
return dialog;
}

Powered by Google App Engine
This is Rietveld 408576698