tab_modal_confirm_dialog_views.cc revision a02191e04bc25c4935f804f2c080ae28663d096d
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/views/tab_modal_confirm_dialog_views.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/browser_window.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_host.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/web_contents.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "grit/generated_resources.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/base/window_open_disposition.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/controls/message_box_view.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/layout/layout_constants.h" 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/views/widget/widget.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/window/dialog_client_view.h" 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using web_modal::WebContentsModalDialogManager; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using web_modal::WebContentsModalDialogManagerDelegate; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TabModalConfirmDialog* TabModalConfirmDialog::Create( 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TabModalConfirmDialogDelegate* delegate, 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebContents* web_contents) { 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return new TabModalConfirmDialogViews( 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate, web_contents); 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TabModalConfirmDialogViews, constructor & destructor: 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TabModalConfirmDialogViews::TabModalConfirmDialogViews( 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TabModalConfirmDialogDelegate* delegate, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebContents* web_contents) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : delegate_(delegate), 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_(NULL) { 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::MessageBoxView::InitParams init_params(delegate->GetDialogMessage()); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) init_params.inter_row_vertical_spacing = 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::kUnrelatedControlVerticalSpacing; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_box_view_ = new views::MessageBoxView(init_params); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::string16 link_text(delegate->GetLinkText()); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!link_text.empty()) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_box_view_->SetLink(link_text, this); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContentsModalDialogManager* web_contents_modal_dialog_manager = 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContentsModalDialogManager::FromWebContents(web_contents); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContentsModalDialogManagerDelegate* modal_delegate = 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_contents_modal_dialog_manager->delegate(); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(modal_delegate); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_ = views::Widget::CreateWindowAsFramelessChild( 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this, modal_delegate->GetWebContentsModalDialogHost()->GetHostView()); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_contents_modal_dialog_manager->ShowModalDialog( 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_->GetNativeView()); 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->set_close_delegate(this); 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TabModalConfirmDialogViews::~TabModalConfirmDialogViews() { 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TabModalConfirmDialogViews::AcceptTabModalDialog() { 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetDialogClientView()->AcceptWindow(); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TabModalConfirmDialogViews::CancelTabModalDialog() { 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetDialogClientView()->CancelWindow(); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TabModalConfirmDialogViews::CloseDialog() { 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_->Close(); 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci////////////////////////////////////////////////////////////////////////////// 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TabModalConfirmDialogViews, views::LinkListener implementation: 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TabModalConfirmDialogViews::LinkClicked(views::Link* source, 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int event_flags) { 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->LinkClicked(ui::DispositionFromEventFlags(event_flags)); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TabModalConfirmDialogViews, views::DialogDelegate implementation: 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::string16 TabModalConfirmDialogViews::GetWindowTitle() const { 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return delegate_->GetTitle(); 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::string16 TabModalConfirmDialogViews::GetDialogButtonLabel( 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui::DialogButton button) const { 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (button == ui::DIALOG_BUTTON_OK) 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return delegate_->GetAcceptButtonTitle(); 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (button == ui::DIALOG_BUTTON_CANCEL) 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return delegate_->GetCancelButtonTitle(); 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return base::string16(); 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool TabModalConfirmDialogViews::Cancel() { 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_->Cancel(); 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool TabModalConfirmDialogViews::Accept() { 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->Accept(); 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 112} 113 114bool TabModalConfirmDialogViews::Close() { 115 delegate_->Close(); 116 return true; 117} 118 119/////////////////////////////////////////////////////////////////////////////// 120// TabModalConfirmDialogViews, views::WidgetDelegate implementation: 121 122views::View* TabModalConfirmDialogViews::GetContentsView() { 123 return message_box_view_; 124} 125 126views::Widget* TabModalConfirmDialogViews::GetWidget() { 127 return message_box_view_->GetWidget(); 128} 129 130const views::Widget* TabModalConfirmDialogViews::GetWidget() const { 131 return message_box_view_->GetWidget(); 132} 133 134void TabModalConfirmDialogViews::DeleteDelegate() { 135 delete this; 136} 137 138ui::ModalType TabModalConfirmDialogViews::GetModalType() const { 139#if defined(USE_ASH) 140 return ui::MODAL_TYPE_CHILD; 141#else 142 return views::WidgetDelegate::GetModalType(); 143#endif 144} 145