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