Home | History | Annotate | Download | only in download
      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/download/download_in_progress_dialog_view.h"
      6 
      7 #include <algorithm>
      8 
      9 #include "base/strings/string_number_conversions.h"
     10 #include "chrome/browser/ui/views/constrained_window_views.h"
     11 #include "chrome/grit/chromium_strings.h"
     12 #include "chrome/grit/generated_resources.h"
     13 #include "ui/base/l10n/l10n_util.h"
     14 #include "ui/gfx/size.h"
     15 #include "ui/views/border.h"
     16 #include "ui/views/controls/message_box_view.h"
     17 #include "ui/views/layout/grid_layout.h"
     18 #include "ui/views/widget/widget.h"
     19 
     20 // static
     21 void DownloadInProgressDialogView::Show(
     22     gfx::NativeWindow parent,
     23     int download_count,
     24     Browser::DownloadClosePreventionType dialog_type,
     25     bool app_modal,
     26     const base::Callback<void(bool)>& callback) {
     27   DownloadInProgressDialogView* window = new DownloadInProgressDialogView(
     28       download_count, dialog_type, app_modal, callback);
     29   CreateBrowserModalDialogViews(window, parent)->Show();
     30 }
     31 
     32 DownloadInProgressDialogView::DownloadInProgressDialogView(
     33     int download_count,
     34     Browser::DownloadClosePreventionType dialog_type,
     35     bool app_modal,
     36     const base::Callback<void(bool)>& callback)
     37     : app_modal_(app_modal),
     38       callback_(callback),
     39       message_box_view_(NULL) {
     40   base::string16 explanation_text;
     41   switch (dialog_type) {
     42     case Browser::DOWNLOAD_CLOSE_BROWSER_SHUTDOWN:
     43       if (download_count == 1) {
     44         title_text_ = l10n_util::GetStringUTF16(
     45             IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_TITLE);
     46         explanation_text = l10n_util::GetStringUTF16(
     47             IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_EXPLANATION);
     48       } else {
     49         title_text_ = l10n_util::GetStringUTF16(
     50             IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_TITLE);
     51         explanation_text = l10n_util::GetStringUTF16(
     52             IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_EXPLANATION);
     53       }
     54       ok_button_text_ = l10n_util::GetStringUTF16(
     55           IDS_DOWNLOAD_REMOVE_CONFIRM_OK_BUTTON_LABEL);
     56       break;
     57     case Browser::DOWNLOAD_CLOSE_LAST_WINDOW_IN_INCOGNITO_PROFILE:
     58       if (download_count == 1) {
     59         title_text_ = l10n_util::GetStringUTF16(
     60             IDS_SINGLE_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_TITLE);
     61         explanation_text = l10n_util::GetStringUTF16(
     62             IDS_SINGLE_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_EXPLANATION);
     63       } else {
     64         title_text_ = l10n_util::GetStringUTF16(
     65             IDS_MULTIPLE_INCOGNITO_DOWNLOADS_REMOVE_CONFIRM_TITLE);
     66         explanation_text = l10n_util::GetStringUTF16(
     67             IDS_MULTIPLE_INCOGNITO_DOWNLOADS_REMOVE_CONFIRM_EXPLANATION);
     68       }
     69       ok_button_text_ = l10n_util::GetStringUTF16(
     70           IDS_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_OK_BUTTON_LABEL);
     71       break;
     72     default:
     73       // This dialog should have been created within the same thread invocation
     74       // as the original test that lead to us, so it should always not be ok
     75       // to close.
     76       NOTREACHED();
     77   }
     78   cancel_button_text_ = l10n_util::GetStringUTF16(
     79       IDS_DOWNLOAD_REMOVE_CONFIRM_CANCEL_BUTTON_LABEL);
     80 
     81   message_box_view_ = new views::MessageBoxView(
     82       views::MessageBoxView::InitParams(explanation_text));
     83 }
     84 
     85 DownloadInProgressDialogView::~DownloadInProgressDialogView() {}
     86 
     87 int DownloadInProgressDialogView::GetDefaultDialogButton() const {
     88   return ui::DIALOG_BUTTON_CANCEL;
     89 }
     90 
     91 base::string16 DownloadInProgressDialogView::GetDialogButtonLabel(
     92     ui::DialogButton button) const {
     93   return (button == ui::DIALOG_BUTTON_OK) ?
     94       ok_button_text_ : cancel_button_text_;
     95 }
     96 
     97 bool DownloadInProgressDialogView::Cancel() {
     98   callback_.Run(false);
     99   return true;
    100 }
    101 
    102 bool DownloadInProgressDialogView::Accept() {
    103   callback_.Run(true);
    104   return true;
    105 }
    106 
    107 ui::ModalType DownloadInProgressDialogView::GetModalType() const {
    108   return app_modal_ ? ui::MODAL_TYPE_SYSTEM : ui::MODAL_TYPE_WINDOW;
    109 }
    110 
    111 base::string16 DownloadInProgressDialogView::GetWindowTitle() const {
    112   return title_text_;
    113 }
    114 
    115 void DownloadInProgressDialogView::DeleteDelegate() {
    116   delete this;
    117 }
    118 
    119 views::Widget* DownloadInProgressDialogView::GetWidget() {
    120   return message_box_view_->GetWidget();
    121 }
    122 
    123 const views::Widget* DownloadInProgressDialogView::GetWidget() const {
    124   return message_box_view_->GetWidget();
    125 }
    126 
    127 views::View* DownloadInProgressDialogView::GetContentsView() {
    128   return message_box_view_;
    129 }
    130