extension_uninstall_dialog_cocoa.mm revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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 28 : public extensions::ExtensionUninstallDialog { 29 public: 30 ExtensionUninstallDialogCocoa(Profile* profile, 31 gfx::NativeWindow parent, 32 Delegate* delegate); 33 virtual ~ExtensionUninstallDialogCocoa() OVERRIDE; 34 35 private: 36 virtual void Show() OVERRIDE; 37}; 38 39ExtensionUninstallDialogCocoa::ExtensionUninstallDialogCocoa( 40 Profile* profile, 41 gfx::NativeWindow parent, 42 extensions::ExtensionUninstallDialog::Delegate* delegate) 43 : extensions::ExtensionUninstallDialog(profile, parent, delegate) { 44} 45 46ExtensionUninstallDialogCocoa::~ExtensionUninstallDialogCocoa() {} 47 48void ExtensionUninstallDialogCocoa::Show() { 49 NSAlert* alert = [[[NSAlert alloc] init] autorelease]; 50 51 NSButton* continueButton = [alert addButtonWithTitle:l10n_util::GetNSString( 52 IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON)]; 53 NSButton* cancelButton = [alert addButtonWithTitle:l10n_util::GetNSString( 54 IDS_CANCEL)]; 55 // Default to accept when triggered via chrome://extensions page. 56 if (triggering_extension_) { 57 [continueButton setKeyEquivalent:@""]; 58 [cancelButton setKeyEquivalent:@"\r"]; 59 } 60 61 [alert setMessageText:base::SysUTF8ToNSString(GetHeadingText())]; 62 [alert setAlertStyle:NSWarningAlertStyle]; 63 [alert setIcon:gfx::NSImageFromImageSkia(icon_)]; 64 65 if ([alert runModal] == NSAlertFirstButtonReturn) 66 delegate_->ExtensionUninstallAccepted(); 67 else 68 delegate_->ExtensionUninstallCanceled(); 69} 70 71} // namespace 72 73// static 74extensions::ExtensionUninstallDialog* 75extensions::ExtensionUninstallDialog::Create(Profile* profile, 76 gfx::NativeWindow parent, 77 Delegate* delegate) { 78 return new ExtensionUninstallDialogCocoa(profile, parent, delegate); 79} 80