tab_modal_confirm_dialog_views.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
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 26using web_modal::WebContentsModalDialogManager; 27 28// static 29TabModalConfirmDialog* 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 39TabModalConfirmDialogViews::TabModalConfirmDialogViews( 40 TabModalConfirmDialogDelegate* delegate, 41 content::WebContents* web_contents) 42 : web_contents_(web_contents), 43 delegate_(delegate), 44 dialog_(NULL), 45 browser_context_(web_contents->GetBrowserContext()) { 46 views::MessageBoxView::InitParams init_params(delegate->GetMessage()); 47 init_params.inter_row_vertical_spacing = 48 views::kUnrelatedControlVerticalSpacing; 49 message_box_view_ = new views::MessageBoxView(init_params); 50 51 string16 link_text(delegate->GetLinkText()); 52 if (!link_text.empty()) 53 message_box_view_->SetLink(link_text, this); 54 55 WebContentsModalDialogManager* web_contents_modal_dialog_manager = 56 WebContentsModalDialogManager::FromWebContents(web_contents); 57 dialog_ = CreateWebContentsModalDialogViews( 58 this, 59 web_contents->GetView()->GetNativeView(), 60 web_contents_modal_dialog_manager->delegate()-> 61 GetWebContentsModalDialogHost()); 62 web_contents_modal_dialog_manager->ShowDialog(dialog_->GetNativeView()); 63 delegate_->set_operations_delegate(this); 64} 65 66TabModalConfirmDialogViews::~TabModalConfirmDialogViews() { 67} 68 69void TabModalConfirmDialogViews::AcceptTabModalDialog() { 70 GetDialogClientView()->AcceptWindow(); 71} 72 73void TabModalConfirmDialogViews::CancelTabModalDialog() { 74 GetDialogClientView()->CancelWindow(); 75} 76 77void TabModalConfirmDialogViews::CloseDialog() { 78 dialog_->Close(); 79} 80 81void TabModalConfirmDialogViews::SetPreventCloseOnLoadStart(bool prevent) { 82 WebContentsModalDialogManager* web_contents_modal_dialog_manager = 83 WebContentsModalDialogManager::FromWebContents(web_contents_); 84 web_contents_modal_dialog_manager->SetPreventCloseOnLoadStart( 85 dialog_->GetNativeView(), prevent); 86} 87 88////////////////////////////////////////////////////////////////////////////// 89// TabModalConfirmDialogViews, views::LinkListener implementation: 90 91void TabModalConfirmDialogViews::LinkClicked(views::Link* source, 92 int event_flags) { 93 delegate_->LinkClicked(ui::DispositionFromEventFlags(event_flags)); 94} 95 96////////////////////////////////////////////////////////////////////////////// 97// TabModalConfirmDialogViews, views::DialogDelegate implementation: 98 99string16 TabModalConfirmDialogViews::GetWindowTitle() const { 100 return delegate_->GetTitle(); 101} 102 103string16 TabModalConfirmDialogViews::GetDialogButtonLabel( 104 ui::DialogButton button) const { 105 if (button == ui::DIALOG_BUTTON_OK) 106 return delegate_->GetAcceptButtonTitle(); 107 if (button == ui::DIALOG_BUTTON_CANCEL) 108 return delegate_->GetCancelButtonTitle(); 109 return string16(); 110} 111 112bool TabModalConfirmDialogViews::Cancel() { 113 delegate_->Cancel(); 114 return true; 115} 116 117bool TabModalConfirmDialogViews::Accept() { 118 delegate_->Accept(); 119 return true; 120} 121 122/////////////////////////////////////////////////////////////////////////////// 123// TabModalConfirmDialogViews, views::WidgetDelegate implementation: 124 125views::View* TabModalConfirmDialogViews::GetContentsView() { 126 return message_box_view_; 127} 128 129// TODO(wittman): Remove this override once we move to the new style frame view 130// on all dialogs. 131views::NonClientFrameView* TabModalConfirmDialogViews::CreateNonClientFrameView( 132 views::Widget* widget) { 133 return CreateConstrainedStyleNonClientFrameView(widget, browser_context_); 134} 135 136views::Widget* TabModalConfirmDialogViews::GetWidget() { 137 return message_box_view_->GetWidget(); 138} 139 140const views::Widget* TabModalConfirmDialogViews::GetWidget() const { 141 return message_box_view_->GetWidget(); 142} 143 144void TabModalConfirmDialogViews::DeleteDelegate() { 145 delete this; 146} 147 148ui::ModalType TabModalConfirmDialogViews::GetModalType() const { 149#if defined(USE_ASH) 150 return ui::MODAL_TYPE_CHILD; 151#else 152 return views::WidgetDelegate::GetModalType(); 153#endif 154} 155