summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-26 03:54:27 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-26 03:54:27 +0000
commit765b4b9f6ae50f98592cbb382c3cdbc0cf7ea899 (patch)
tree926362fa44163093f6f5e08e73f56ff0713dcab7 /chrome/browser/extensions
parent74c933eed60f29d0ddfc47fd1dbdbfdea4c9f6ca (diff)
downloadchromium_src-765b4b9f6ae50f98592cbb382c3cdbc0cf7ea899.zip
chromium_src-765b4b9f6ae50f98592cbb382c3cdbc0cf7ea899.tar.gz
chromium_src-765b4b9f6ae50f98592cbb382c3cdbc0cf7ea899.tar.bz2
Fix broken tree on mac/linux.
Review URL: http://codereview.chromium.org/159389 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21623 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/extensions_service.cc2
-rw-r--r--chrome/browser/extensions/theme_preview_infobar_delegate.cc72
-rw-r--r--chrome/browser/extensions/theme_preview_infobar_delegate.h36
3 files changed, 109 insertions, 1 deletions
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index a409244..38947aa 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -28,7 +28,7 @@
#include "chrome/browser/extensions/extension_updater.h"
#include "chrome/browser/extensions/external_extension_provider.h"
#include "chrome/browser/extensions/external_pref_extension_provider.h"
-#include "chrome/browser/views/extensions/theme_preview_infobar_delegate.h"
+#include "chrome/browser/extensions/theme_preview_infobar_delegate.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/utility_process_host.h"
diff --git a/chrome/browser/extensions/theme_preview_infobar_delegate.cc b/chrome/browser/extensions/theme_preview_infobar_delegate.cc
new file mode 100644
index 0000000..7e6f63a
--- /dev/null
+++ b/chrome/browser/extensions/theme_preview_infobar_delegate.cc
@@ -0,0 +1,72 @@
+// Copyright (c) 2009 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/views/extensions/theme_preview_infobar_delegate.h"
+
+#include "app/l10n_util.h"
+#include "base/string_util.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "grit/generated_resources.h"
+
+ThemePreviewInfobarDelegate::ThemePreviewInfobarDelegate(
+ TabContents* tab_contents, const std::string& name)
+ : ConfirmInfoBarDelegate(tab_contents),
+ profile_(tab_contents->profile()), name_(name),
+ selection_made_(false) {
+}
+
+void ThemePreviewInfobarDelegate::InfoBarClosed() {
+ if (!selection_made_)
+ profile_->ClearTheme();
+
+ delete this;
+}
+
+std::wstring ThemePreviewInfobarDelegate::GetMessageText() const {
+ return l10n_util::GetStringF(IDS_THEME_PREVIEW_INFOBAR_LABEL,
+ UTF8ToWide(name_));
+}
+
+SkBitmap* ThemePreviewInfobarDelegate::GetIcon() const {
+ // TODO(aa): Reply with the theme's icon, but this requires reading it
+ // asynchronously from disk.
+ return NULL;
+}
+
+int ThemePreviewInfobarDelegate::GetButtons() const {
+ return BUTTON_OK | BUTTON_CANCEL;
+}
+
+std::wstring ThemePreviewInfobarDelegate::GetButtonLabel(
+ ConfirmInfoBarDelegate::InfoBarButton button) const {
+ switch (button) {
+ case BUTTON_OK:
+ return l10n_util::GetString(IDS_THEME_PREVIEW_INFOBAR_OK_BUTTON);
+ case BUTTON_CANCEL:
+ return l10n_util::GetString(IDS_THEME_PREVIEW_INFOBAR_CANCEL_BUTTON);
+ default:
+ NOTREACHED();
+ return L"";
+ }
+}
+
+bool ThemePreviewInfobarDelegate::Accept() {
+ selection_made_ = true;
+ return true;
+}
+
+bool ThemePreviewInfobarDelegate::Cancel() {
+ selection_made_ = true;
+
+ // Blech, this is a total hack.
+ //
+ // a) We should be uninstalling via ExtensionsService, not
+ // Profile::ClearTheme().
+ // b) We should be able to view the theme without installing it. This would
+ // help in edge cases like the user closing the window or tab before making
+ // a decision.
+ profile_->ClearTheme();
+ return true;
+}
diff --git a/chrome/browser/extensions/theme_preview_infobar_delegate.h b/chrome/browser/extensions/theme_preview_infobar_delegate.h
new file mode 100644
index 0000000..4fa4dd2
--- /dev/null
+++ b/chrome/browser/extensions/theme_preview_infobar_delegate.h
@@ -0,0 +1,36 @@
+// Copyright (c) 2009 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.
+
+#ifndef CHROME_BROWSER_VIEWS_EXTENSIONS_THEME_PREVIEW_INFOBAR_DELEGATE_H_
+#define CHROME_BROWSER_VIEWS_EXTENSIONS_THEME_PREVIEW_INFOBAR_DELEGATE_H_
+
+#include "chrome/browser/tab_contents/infobar_delegate.h"
+
+class Extension;
+class ExtensionsService;
+class SkBitmap;
+class TabContents;
+
+// When a user installs a theme, we display it immediately, but provide an
+// infobar allowing them to cancel.
+class ThemePreviewInfobarDelegate : public ConfirmInfoBarDelegate {
+ public:
+ ThemePreviewInfobarDelegate(TabContents* tab_contents,
+ const std::string& name);
+ virtual void InfoBarClosed();
+ virtual std::wstring GetMessageText() const;
+ virtual SkBitmap* GetIcon() const;
+ virtual int GetButtons() const;
+ virtual std::wstring GetButtonLabel(
+ ConfirmInfoBarDelegate::InfoBarButton button) const;
+ virtual bool Accept();
+ virtual bool Cancel();
+
+ private:
+ Profile* profile_;
+ std::string name_; // name of theme to install
+ bool selection_made_; // whether the user has made a selection yet
+};
+
+#endif // CHROME_BROWSER_VIEWS_EXTENSIONS_THEME_PREVIEW_INFOBAR_DELEGATE_H_