1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/views/tab_modal_confirm_dialog_views.h" 6 7 #include "base/strings/utf_string_conversions.h" 8 #include "chrome/browser/ui/browser_dialogs.h" 9 #include "chrome/browser/ui/browser_list.h" 10 #include "chrome/browser/ui/browser_window.h" 11 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" 12 #include "chrome/browser/ui/views/constrained_window_views.h" 13 #include "chrome/common/chrome_switches.h" 14 #include "components/web_modal/web_contents_modal_dialog_manager.h" 15 #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" 16 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents_view.h" 18 #include "grit/generated_resources.h" 19 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/window_open_disposition.h" 21 #include "ui/views/controls/message_box_view.h" 22 #include "ui/views/layout/layout_constants.h" 23 #include "ui/views/widget/widget.h" 24 #include "ui/views/window/dialog_client_view.h" 25 26 using web_modal::WebContentsModalDialogManager; 27 28 // static 29 TabModalConfirmDialog* TabModalConfirmDialog::Create( 30 TabModalConfirmDialogDelegate* delegate, 31 content::WebContents* web_contents) { 32 return new TabModalConfirmDialogViews( 33 delegate, web_contents); 34 } 35 36 ////////////////////////////////////////////////////////////////////////////// 37 // TabModalConfirmDialogViews, constructor & destructor: 38 39 TabModalConfirmDialogViews::TabModalConfirmDialogViews( 40 TabModalConfirmDialogDelegate* delegate, 41 content::WebContents* web_contents) 42 : delegate_(delegate), 43 dialog_(NULL), 44 browser_context_(web_contents->GetBrowserContext()) { 45 views::MessageBoxView::InitParams init_params(delegate->GetMessage()); 46 init_params.inter_row_vertical_spacing = 47 views::kUnrelatedControlVerticalSpacing; 48 message_box_view_ = new views::MessageBoxView(init_params); 49 50 string16 link_text(delegate->GetLinkText()); 51 if (!link_text.empty()) 52 message_box_view_->SetLink(link_text, this); 53 54 WebContentsModalDialogManager* web_contents_modal_dialog_manager = 55 WebContentsModalDialogManager::FromWebContents(web_contents); 56 dialog_ = CreateWebContentsModalDialogViews( 57 this, 58 web_contents->GetView()->GetNativeView(), 59 web_contents_modal_dialog_manager->delegate()-> 60 GetWebContentsModalDialogHost()); 61 web_contents_modal_dialog_manager->ShowDialog(dialog_->GetNativeView()); 62 delegate_->set_close_delegate(this); 63 } 64 65 TabModalConfirmDialogViews::~TabModalConfirmDialogViews() { 66 } 67 68 void TabModalConfirmDialogViews::AcceptTabModalDialog() { 69 GetDialogClientView()->AcceptWindow(); 70 } 71 72 void TabModalConfirmDialogViews::CancelTabModalDialog() { 73 GetDialogClientView()->CancelWindow(); 74 } 75 76 void TabModalConfirmDialogViews::CloseDialog() { 77 dialog_->Close(); 78 } 79 80 ////////////////////////////////////////////////////////////////////////////// 81 // TabModalConfirmDialogViews, views::LinkListener implementation: 82 83 void TabModalConfirmDialogViews::LinkClicked(views::Link* source, 84 int event_flags) { 85 delegate_->LinkClicked(ui::DispositionFromEventFlags(event_flags)); 86 } 87 88 ////////////////////////////////////////////////////////////////////////////// 89 // TabModalConfirmDialogViews, views::DialogDelegate implementation: 90 91 string16 TabModalConfirmDialogViews::GetWindowTitle() const { 92 return delegate_->GetTitle(); 93 } 94 95 string16 TabModalConfirmDialogViews::GetDialogButtonLabel( 96 ui::DialogButton button) const { 97 if (button == ui::DIALOG_BUTTON_OK) 98 return delegate_->GetAcceptButtonTitle(); 99 if (button == ui::DIALOG_BUTTON_CANCEL) 100 return delegate_->GetCancelButtonTitle(); 101 return string16(); 102 } 103 104 bool TabModalConfirmDialogViews::Cancel() { 105 delegate_->Cancel(); 106 return true; 107 } 108 109 bool TabModalConfirmDialogViews::Accept() { 110 delegate_->Accept(); 111 return true; 112 } 113 114 bool TabModalConfirmDialogViews::Close() { 115 delegate_->Close(); 116 return true; 117 } 118 119 /////////////////////////////////////////////////////////////////////////////// 120 // TabModalConfirmDialogViews, views::WidgetDelegate implementation: 121 122 views::View* TabModalConfirmDialogViews::GetContentsView() { 123 return message_box_view_; 124 } 125 126 // TODO(wittman): Remove this override once we move to the new style frame view 127 // on all dialogs. 128 views::NonClientFrameView* TabModalConfirmDialogViews::CreateNonClientFrameView( 129 views::Widget* widget) { 130 return CreateConstrainedStyleNonClientFrameView(widget, browser_context_); 131 } 132 133 views::Widget* TabModalConfirmDialogViews::GetWidget() { 134 return message_box_view_->GetWidget(); 135 } 136 137 const views::Widget* TabModalConfirmDialogViews::GetWidget() const { 138 return message_box_view_->GetWidget(); 139 } 140 141 void TabModalConfirmDialogViews::DeleteDelegate() { 142 delete this; 143 } 144 145 ui::ModalType TabModalConfirmDialogViews::GetModalType() const { 146 #if defined(USE_ASH) 147 return ui::MODAL_TYPE_CHILD; 148 #else 149 return views::WidgetDelegate::GetModalType(); 150 #endif 151 } 152