extension_uninstall_dialog_cocoa.mm revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright (c) 2011 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/extensions/extension_uninstall_dialog.h"
6
7#import <Cocoa/Cocoa.h>
8
9#include <string>
10
11#include "base/strings/sys_string_conversions.h"
12#include "base/strings/utf_string_conversions.h"
13#include "extensions/common/extension.h"
14#include "grit/chromium_strings.h"
15#include "grit/generated_resources.h"
16#include "skia/ext/skia_utils_mac.h"
17#include "ui/base/l10n/l10n_util_mac.h"
18#include "ui/base/resource/resource_bundle.h"
19#include "ui/gfx/image/image_skia_util_mac.h"
20
21namespace {
22
23// The Cocoa implementation of ExtensionUninstallDialog. This has a less
24// complex life cycle than the Views and GTK implementations because the
25// dialog blocks the page from navigating away and destroying the dialog,
26// so there's no way for the dialog to outlive its delegate.
27class ExtensionUninstallDialogCocoa : public ExtensionUninstallDialog {
28 public:
29  ExtensionUninstallDialogCocoa(
30      Profile* profile,
31      Browser* browser,
32      Delegate* delegate);
33  virtual ~ExtensionUninstallDialogCocoa() OVERRIDE;
34
35 private:
36  virtual void Show() OVERRIDE;
37};
38
39ExtensionUninstallDialogCocoa::ExtensionUninstallDialogCocoa(
40    Profile* profile,
41    Browser* browser,
42    ExtensionUninstallDialog::Delegate* delegate)
43    : ExtensionUninstallDialog(profile, browser, delegate) {}
44
45ExtensionUninstallDialogCocoa::~ExtensionUninstallDialogCocoa() {}
46
47void ExtensionUninstallDialogCocoa::Show() {
48  NSAlert* alert = [[[NSAlert alloc] init] autorelease];
49
50  NSButton* continueButton = [alert addButtonWithTitle:l10n_util::GetNSString(
51      IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON)];
52  // Clear the key equivalent (currently 'Return') because cancel is the default
53  // button.
54  [continueButton setKeyEquivalent:@""];
55
56  NSButton* cancelButton = [alert addButtonWithTitle:l10n_util::GetNSString(
57      IDS_CANCEL)];
58  [cancelButton setKeyEquivalent:@"\r"];
59
60  [alert setMessageText:l10n_util::GetNSStringF(
61       IDS_EXTENSION_UNINSTALL_PROMPT_HEADING,
62       UTF8ToUTF16(extension_->name()))];
63  [alert setAlertStyle:NSWarningAlertStyle];
64  [alert setIcon:gfx::NSImageFromImageSkia(icon_)];
65
66  if ([alert runModal] == NSAlertFirstButtonReturn)
67    delegate_->ExtensionUninstallAccepted();
68  else
69    delegate_->ExtensionUninstallCanceled();
70}
71
72}  // namespace
73
74// static
75ExtensionUninstallDialog* ExtensionUninstallDialog::Create(
76    Profile* profile,
77    Browser* browser,
78    Delegate* delegate) {
79  return new ExtensionUninstallDialogCocoa(profile, browser, delegate);
80}
81