Index: chrome/browser/extensions/extension_generic_dialog.cc |
diff --git a/chrome/browser/extensions/extension_generic_dialog.cc b/chrome/browser/extensions/extension_generic_dialog.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3037d9f395333bf7461c11e2313e4305658bfc20 |
--- /dev/null |
+++ b/chrome/browser/extensions/extension_generic_dialog.cc |
@@ -0,0 +1,107 @@ |
+// Copyright (c) 2011 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/extensions/extension_generic_dialog.h" |
+ |
+#include "base/logging.h" |
+#include "base/message_loop.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/common/extensions/extension.h" |
+#include "chrome/common/extensions/extension_icon_set.h" |
+#include "chrome/common/extensions/extension_resource.h" |
+#include "grit/generated_resources.h" |
+#include "grit/theme_resources.h" |
+#include "ui/base/resource/resource_bundle.h" |
+ |
+// Size of extension icon in top left of dialog. |
+static const int kIconSize = 69; |
+ |
+// static |
+const int ExtensionGenericDialog::kTitleIds[DIALOG_NUM_TYPES] = { |
+ IDS_EXTENSION_UNINSTALL_PROMPT_TITLE, |
+ IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE |
+}; |
+// static |
+const int ExtensionGenericDialog::kHeadingIds[DIALOG_NUM_TYPES] = { |
+ IDS_EXTENSION_UNINSTALL_PROMPT_HEADING, |
+ IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING |
+}; |
+// static |
+const int ExtensionGenericDialog::kButtonIds[DIALOG_NUM_TYPES] = { |
+ IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON, |
+ IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON |
+}; |
+ |
+ExtensionGenericDialog::ExtensionGenericDialog(Profile* profile) |
+ : profile_(profile), |
+ ui_loop_(MessageLoop::current()), |
+ delegate_(NULL), |
+ extension_(NULL), |
+ dialog_type_(DIALOG_NUM_TYPES), |
+ ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)) { |
+} |
+ |
+ExtensionGenericDialog::~ExtensionGenericDialog() { |
+} |
+ |
+void ExtensionGenericDialog::ConfirmUninstall(Delegate* delegate, |
+ const Extension* extension) { |
+ DCHECK(ui_loop_ == MessageLoop::current()); |
+ delegate_ = delegate; |
+ extension_ = extension; |
+ |
+ ShowConfirmation(DIALOG_UNINSTALL); |
+} |
+ |
+void ExtensionGenericDialog::ConfirmReenable(Delegate* delegate, |
+ const Extension* extension) { |
+ DCHECK(ui_loop_ == MessageLoop::current()); |
+ delegate_ = delegate; |
+ extension_ = extension; |
+ |
+ ShowConfirmation(DIALOG_RE_ENABLE); |
+} |
+ |
+void ExtensionGenericDialog::ShowConfirmation(DialogType dialog_type) { |
+ dialog_type_ = dialog_type; |
+ ExtensionResource image = |
+ extension_->GetIconResource(Extension::EXTENSION_ICON_LARGE, |
+ ExtensionIconSet::MATCH_EXACTLY); |
+ // Load the image asynchronously. The response will be sent to OnImageLoaded. |
+ tracker_.LoadImage(extension_, image, |
+ gfx::Size(kIconSize, kIconSize), |
+ ImageLoadingTracker::DONT_CACHE); |
+} |
+ |
+void ExtensionGenericDialog::SetIcon(SkBitmap* image) { |
+ if (image) |
+ icon_ = *image; |
+ else |
+ icon_ = SkBitmap(); |
+ if (icon_.empty()) { |
+ if (extension_->is_app()) { |
+ icon_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed( |
+ IDR_APP_DEFAULT_ICON); |
+ } else { |
+ icon_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed( |
+ IDR_EXTENSION_DEFAULT_ICON); |
+ } |
+ } |
+} |
+ |
+void ExtensionGenericDialog::OnImageLoaded(SkBitmap* image, |
+ const ExtensionResource& resource, |
+ int index) { |
+ SetIcon(image); |
+ |
+ switch (dialog_type_) { |
+ case DIALOG_UNINSTALL: { |
+ Show(profile_, delegate_, extension_, &icon_, DIALOG_UNINSTALL); |
+ break; |
+ } |
+ default: |
+ NOTREACHED() << "Unknown message"; |
+ break; |
+ } |
+} |