158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/apps/directory_access_confirmation_dialog.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/callback.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tab_modal_confirm_dialog.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_contents.h"
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "grit/generated_resources.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace {
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class DirectoryAccessConfirmationDialog : public TabModalConfirmDialogDelegate {
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DirectoryAccessConfirmationDialog(bool writable,
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                    const base::string16& app_name,
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                    content::WebContents* web_contents,
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                    const base::Closure& on_accept,
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                    const base::Closure& on_cancel);
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetTitle() OVERRIDE;
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetMessage() OVERRIDE;
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetAcceptButtonTitle() OVERRIDE;
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetCancelButtonTitle() OVERRIDE;
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnAccepted() OVERRIDE;
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnCanceled() OVERRIDE;
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnClosed() OVERRIDE;
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const base::Closure on_accept_;
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const base::Closure on_cancel_;
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const bool writable_;
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const base::string16 app_name_;
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)DirectoryAccessConfirmationDialog::DirectoryAccessConfirmationDialog(
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    bool writable,
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& app_name,
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    content::WebContents* web_contents,
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const base::Closure& on_accept,
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const base::Closure& on_cancel)
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : TabModalConfirmDialogDelegate(web_contents),
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      on_accept_(on_accept),
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      on_cancel_(on_cancel),
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      writable_(writable),
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      app_name_(app_name) {}
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
52d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 DirectoryAccessConfirmationDialog::GetTitle() {
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return l10n_util::GetStringUTF16(
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      IDS_EXTENSIONS_DIRECTORY_CONFIRMATION_DIALOG_TITLE);
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
57d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 DirectoryAccessConfirmationDialog::GetMessage() {
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (writable_) {
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return l10n_util::GetStringFUTF16(
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        IDS_EXTENSIONS_DIRECTORY_CONFIRMATION_DIALOG_MESSAGE_WRITABLE,
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        app_name_);
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  } else {
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return l10n_util::GetStringFUTF16(
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        IDS_EXTENSIONS_DIRECTORY_CONFIRMATION_DIALOG_MESSAGE_READ_ONLY,
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        app_name_);
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
69d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 DirectoryAccessConfirmationDialog::GetAcceptButtonTitle() {
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL);
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
72d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 DirectoryAccessConfirmationDialog::GetCancelButtonTitle() {
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL);
7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void DirectoryAccessConfirmationDialog::OnAccepted() {
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  on_accept_.Run();
7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void DirectoryAccessConfirmationDialog::OnCanceled() {
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  on_cancel_.Run();
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void DirectoryAccessConfirmationDialog::OnClosed() {
8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  on_cancel_.Run();
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace
8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void CreateDirectoryAccessConfirmationDialog(bool writable,
91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                             const base::string16& app_name,
9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                             content::WebContents* web_contents,
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                             const base::Closure& on_accept,
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                             const base::Closure& on_cancel) {
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  TabModalConfirmDialog::Create(
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      new DirectoryAccessConfirmationDialog(
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)          writable, app_name, web_contents, on_accept, on_cancel),
9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      web_contents);
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
100