Chromium Code Reviews| Index: chrome/browser/ui/views/pdf_password_dialog.cc |
| diff --git a/chrome/browser/ui/views/pdf_password_dialog.cc b/chrome/browser/ui/views/pdf_password_dialog.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bacf545b85b4f0f5b9538b9968517a053d570470 |
| --- /dev/null |
| +++ b/chrome/browser/ui/views/pdf_password_dialog.cc |
| @@ -0,0 +1,162 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/ui/pdf/pdf_tab_helper.h" |
| + |
| +#include "chrome/browser/ui/views/constrained_window_views.h" |
| +#include "components/web_modal/web_contents_modal_dialog_host.h" |
| +#include "components/web_modal/web_contents_modal_dialog_manager.h" |
| +#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/browser/web_contents_view.h" |
| +#include "grit/generated_resources.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| +#include "ui/views/controls/message_box_view.h" |
| +#include "ui/views/controls/textfield/textfield.h" |
| +#include "ui/views/layout/layout_constants.h" |
| +#include "ui/views/widget/widget.h" |
| +#include "ui/views/window/dialog_delegate.h" |
| + |
| +namespace { |
| + |
| +class PDFPasswordDialogViews : public views::DialogDelegate { |
|
sky
2013/09/16 17:18:38
Add a description.
Avi (use Gerrit)
2013/09/16 18:57:14
Done.
|
| + public: |
| + PDFPasswordDialogViews(content::WebContents* web_contents, |
| + const base::string16& prompt, |
| + const PasswordDialogClosedCallback& callback); |
| + virtual ~PDFPasswordDialogViews(); |
| + |
| + // views::DialogDelegate: |
| + virtual base::string16 GetWindowTitle() const OVERRIDE; |
| + virtual base::string16 GetDialogButtonLabel( |
| + ui::DialogButton button) const OVERRIDE; |
| + virtual bool Cancel() OVERRIDE; |
| + virtual bool Accept() OVERRIDE; |
| + |
| + // views::WidgetDelegate: |
| + virtual views::View* GetContentsView() OVERRIDE; |
| + virtual views::NonClientFrameView* CreateNonClientFrameView( |
| + views::Widget* widget) OVERRIDE; |
| + virtual views::Widget* GetWidget() OVERRIDE; |
| + virtual const views::Widget* GetWidget() const OVERRIDE; |
| + virtual void DeleteDelegate() OVERRIDE; |
| + virtual ui::ModalType GetModalType() const OVERRIDE; |
| + |
| + private: |
| + // The message box view whose commands we handle. |
| + views::MessageBoxView* message_box_view_; |
| + |
| + views::Widget* dialog_; |
| + content::BrowserContext* browser_context_; |
| + |
| + PasswordDialogClosedCallback callback_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PDFPasswordDialogViews); |
| +}; |
| + |
| +PDFPasswordDialogViews::PDFPasswordDialogViews( |
| + content::WebContents* web_contents, |
| + const base::string16& prompt, |
| + const PasswordDialogClosedCallback& callback) |
| + : browser_context_(web_contents->GetBrowserContext()), |
| + callback_(callback) { |
|
sky
2013/09/16 17:18:38
nit: initialize dialog_ to NULL in the member list
Avi (use Gerrit)
2013/09/16 18:57:14
Done.
|
| + views::MessageBoxView::InitParams init_params(prompt); |
| + init_params.options = views::MessageBoxView::HAS_PROMPT_FIELD; |
| + init_params.inter_row_vertical_spacing = |
| + views::kUnrelatedControlVerticalSpacing; |
| + message_box_view_ = new views::MessageBoxView(init_params); |
| + |
| + message_box_view_->text_box()->SetObscured(true); |
| + |
| + web_modal::WebContentsModalDialogManager* web_contents_modal_dialog_manager = |
| + web_modal::WebContentsModalDialogManager::FromWebContents(web_contents); |
| + web_modal::WebContentsModalDialogManagerDelegate* modal_delegate = |
| + web_contents_modal_dialog_manager->delegate(); |
| + DCHECK(modal_delegate); |
| + dialog_ = views::Widget::CreateWindowAsFramelessChild( |
| + this, |
| + web_contents->GetView()->GetNativeView(), |
| + modal_delegate->GetWebContentsModalDialogHost()->GetHostView()); |
| + web_contents_modal_dialog_manager->ShowDialog(dialog_->GetNativeView()); |
| + |
| + message_box_view_->text_box()->RequestFocus(); |
|
sky
2013/09/16 17:18:38
Override GetInitiallyFocusedView instead.
Avi (use Gerrit)
2013/09/16 18:57:14
Done.
|
| +} |
| + |
| +PDFPasswordDialogViews::~PDFPasswordDialogViews() { |
| + if (!callback_.is_null()) { |
| + // This dialog was torn down without either OK or cancel being clicked; be |
| + // considerate and at least do the callback. |
| + callback_.Run(false, base::string16()); |
| + } |
| +} |
| + |
| +////////////////////////////////////////////////////////////////////////////// |
| +// PDFPasswordDialogViews, views::DialogDelegate implementation: |
| + |
| +base::string16 PDFPasswordDialogViews::GetWindowTitle() const { |
| + return l10n_util::GetStringUTF16(IDS_PDF_PASSWORD_DIALOG_TITLE); |
| +} |
| + |
| +base::string16 PDFPasswordDialogViews::GetDialogButtonLabel( |
| + ui::DialogButton button) const { |
| + if (button == ui::DIALOG_BUTTON_OK) |
| + return l10n_util::GetStringUTF16(IDS_OK); |
| + if (button == ui::DIALOG_BUTTON_CANCEL) |
| + return l10n_util::GetStringUTF16(IDS_CANCEL); |
| + return base::string16(); |
| +} |
| + |
| +bool PDFPasswordDialogViews::Cancel() { |
| + callback_.Run(false, base::string16()); |
| + callback_.Reset(); |
| + return true; |
| +} |
| + |
| +bool PDFPasswordDialogViews::Accept() { |
| + callback_.Run(true, message_box_view_->text_box()->text()); |
| + callback_.Reset(); |
| + return true; |
| +} |
| + |
| +/////////////////////////////////////////////////////////////////////////////// |
| +// PDFPasswordDialogViews, views::WidgetDelegate implementation: |
| + |
| +views::View* PDFPasswordDialogViews::GetContentsView() { |
| + return message_box_view_; |
| +} |
| + |
| +// TODO(wittman): Remove this override once we move to the new style frame view |
| +// on all dialogs. |
| +views::NonClientFrameView* PDFPasswordDialogViews::CreateNonClientFrameView( |
| + views::Widget* widget) { |
| + return CreateConstrainedStyleNonClientFrameView(widget, browser_context_); |
| +} |
| + |
| +views::Widget* PDFPasswordDialogViews::GetWidget() { |
| + return message_box_view_->GetWidget(); |
| +} |
| + |
| +const views::Widget* PDFPasswordDialogViews::GetWidget() const { |
| + return message_box_view_->GetWidget(); |
| +} |
| + |
| +void PDFPasswordDialogViews::DeleteDelegate() { |
| + delete this; |
| +} |
| + |
| +ui::ModalType PDFPasswordDialogViews::GetModalType() const { |
| +#if defined(USE_ASH) |
| + return ui::MODAL_TYPE_CHILD; |
| +#else |
| + return views::WidgetDelegate::GetModalType(); |
| +#endif |
| +} |
| + |
| +} // namespace |
| + |
| +void ShowPDFPasswordDialog(content::WebContents* web_contents, |
| + const base::string16& prompt, |
| + const PasswordDialogClosedCallback& callback) { |
| + new PDFPasswordDialogViews(web_contents, prompt, callback); |
| +} |