| Index: chrome/browser/extensions/extension_disabled_infobar_delegate.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_disabled_infobar_delegate.cc (revision 72158)
|
| +++ chrome/browser/extensions/extension_disabled_infobar_delegate.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// 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.
|
|
|
| @@ -20,35 +20,25 @@
|
| #include "chrome/common/notification_source.h"
|
| #include "grit/generated_resources.h"
|
|
|
| +// ExtensionDisabledDialogDelegate --------------------------------------------
|
| +
|
| class ExtensionDisabledDialogDelegate
|
| : public ExtensionInstallUI::Delegate,
|
| public base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate> {
|
| public:
|
| ExtensionDisabledDialogDelegate(Profile* profile,
|
| ExtensionService* service,
|
| - const Extension* extension)
|
| - : service_(service), extension_(extension) {
|
| - AddRef(); // Balanced in Proceed or Abort.
|
| + const Extension* extension);
|
|
|
| - install_ui_.reset(new ExtensionInstallUI(profile));
|
| - install_ui_->ConfirmInstall(this, extension_);
|
| - }
|
| -
|
| - // Overridden from ExtensionInstallUI::Delegate:
|
| - virtual void InstallUIProceed() {
|
| - service_->GrantPermissionsAndEnableExtension(extension_);
|
| - Release();
|
| - }
|
| - virtual void InstallUIAbort() {
|
| - // Do nothing. The extension will remain disabled.
|
| - Release();
|
| - }
|
| -
|
| private:
|
| friend class base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate>;
|
|
|
| - virtual ~ExtensionDisabledDialogDelegate() {}
|
| + virtual ~ExtensionDisabledDialogDelegate();
|
|
|
| + // ExtensionInstallUI::Delegate:
|
| + virtual void InstallUIProceed();
|
| + virtual void InstallUIAbort();
|
| +
|
| // The UI for showing the install dialog when enabling.
|
| scoped_ptr<ExtensionInstallUI> install_ui_;
|
|
|
| @@ -56,83 +46,129 @@
|
| const Extension* extension_;
|
| };
|
|
|
| -class ExtensionDisabledInfobarDelegate
|
| - : public ConfirmInfoBarDelegate,
|
| - public NotificationObserver {
|
| +ExtensionDisabledDialogDelegate::ExtensionDisabledDialogDelegate(
|
| + Profile* profile,
|
| + ExtensionService* service,
|
| + const Extension* extension)
|
| + : service_(service), extension_(extension) {
|
| + AddRef(); // Balanced in Proceed or Abort.
|
| +
|
| + install_ui_.reset(new ExtensionInstallUI(profile));
|
| + install_ui_->ConfirmInstall(this, extension_);
|
| +}
|
| +
|
| +ExtensionDisabledDialogDelegate::~ExtensionDisabledDialogDelegate() {
|
| +}
|
| +
|
| +void ExtensionDisabledDialogDelegate::InstallUIProceed() {
|
| + service_->GrantPermissionsAndEnableExtension(extension_);
|
| + Release();
|
| +}
|
| +
|
| +void ExtensionDisabledDialogDelegate::InstallUIAbort() {
|
| + // Do nothing. The extension will remain disabled.
|
| + Release();
|
| +}
|
| +
|
| +
|
| +// ExtensionDisabledInfobarDelegate -------------------------------------------
|
| +
|
| +class ExtensionDisabledInfobarDelegate : public ConfirmInfoBarDelegate,
|
| + public NotificationObserver {
|
| public:
|
| ExtensionDisabledInfobarDelegate(TabContents* tab_contents,
|
| ExtensionService* service,
|
| - const Extension* extension)
|
| - : ConfirmInfoBarDelegate(tab_contents),
|
| - tab_contents_(tab_contents),
|
| - service_(service),
|
| - extension_(extension) {
|
| - // The user might re-enable the extension in other ways, so watch for that.
|
| - registrar_.Add(this, NotificationType::EXTENSION_LOADED,
|
| - Source<Profile>(service->profile()));
|
| - registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
|
| - Source<Profile>(service->profile()));
|
| - }
|
| - virtual ~ExtensionDisabledInfobarDelegate() {
|
| - }
|
| - virtual string16 GetMessageText() const {
|
| - return l10n_util::GetStringFUTF16(extension_->is_app() ?
|
| - IDS_APP_DISABLED_INFOBAR_LABEL : IDS_EXTENSION_DISABLED_INFOBAR_LABEL,
|
| - UTF8ToUTF16(extension_->name()));
|
| - }
|
| - virtual SkBitmap* GetIcon() const {
|
| - return NULL;
|
| - }
|
| - virtual int GetButtons() const {
|
| - return BUTTON_OK;
|
| - }
|
| - virtual string16 GetButtonLabel(
|
| - ConfirmInfoBarDelegate::InfoBarButton button) const {
|
| - return l10n_util::GetStringUTF16(
|
| - IDS_EXTENSION_DISABLED_INFOBAR_ENABLE_BUTTON);
|
| - }
|
| - virtual bool Accept() {
|
| - // This object manages its own lifetime.
|
| - new ExtensionDisabledDialogDelegate(tab_contents_->profile(),
|
| - service_, extension_);
|
| - return true;
|
| - }
|
| - virtual void InfoBarClosed() {
|
| - delete this;
|
| - }
|
| + const Extension* extension);
|
|
|
| + private:
|
| + virtual ~ExtensionDisabledInfobarDelegate();
|
| +
|
| + // ConfirmInfoBarDelegate:
|
| + virtual void InfoBarClosed();
|
| + virtual string16 GetMessageText() const;
|
| + virtual int GetButtons() const;
|
| + virtual string16 GetButtonLabel(InfoBarButton button) const;
|
| + virtual bool Accept();
|
| +
|
| + // NotificationObserver:
|
| virtual void Observe(NotificationType type,
|
| const NotificationSource& source,
|
| - const NotificationDetails& details) {
|
| - // TODO(mpcomplete): RemoveInfoBar doesn't seem to always result in us
|
| - // getting deleted.
|
| - const Extension* extension = NULL;
|
| - switch (type.value) {
|
| - case NotificationType::EXTENSION_LOADED:
|
| - extension = Details<const Extension>(details).ptr();
|
| - break;
|
| - case NotificationType::EXTENSION_UNLOADED: {
|
| - UnloadedExtensionInfo* info =
|
| - Details<UnloadedExtensionInfo>(details).ptr();
|
| - if (info->reason == UnloadedExtensionInfo::DISABLE)
|
| - extension = info->extension;
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - if (extension == extension_)
|
| - tab_contents_->RemoveInfoBar(this);
|
| - }
|
| + const NotificationDetails& details);
|
|
|
| - private:
|
| NotificationRegistrar registrar_;
|
| TabContents* tab_contents_;
|
| ExtensionService* service_;
|
| const Extension* extension_;
|
| };
|
|
|
| +ExtensionDisabledInfobarDelegate::ExtensionDisabledInfobarDelegate(
|
| + TabContents* tab_contents,
|
| + ExtensionService* service,
|
| + const Extension* extension)
|
| + : ConfirmInfoBarDelegate(tab_contents),
|
| + tab_contents_(tab_contents),
|
| + service_(service),
|
| + extension_(extension) {
|
| + // The user might re-enable the extension in other ways, so watch for that.
|
| + registrar_.Add(this, NotificationType::EXTENSION_LOADED,
|
| + Source<Profile>(service->profile()));
|
| + registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
|
| + Source<Profile>(service->profile()));
|
| +}
|
| +
|
| +ExtensionDisabledInfobarDelegate::~ExtensionDisabledInfobarDelegate() {
|
| +}
|
| +
|
| +void ExtensionDisabledInfobarDelegate::InfoBarClosed() {
|
| + delete this;
|
| +}
|
| +
|
| +string16 ExtensionDisabledInfobarDelegate::GetMessageText() const {
|
| + return l10n_util::GetStringFUTF16(extension_->is_app() ?
|
| + IDS_APP_DISABLED_INFOBAR_LABEL : IDS_EXTENSION_DISABLED_INFOBAR_LABEL,
|
| + UTF8ToUTF16(extension_->name()));
|
| +}
|
| +
|
| +int ExtensionDisabledInfobarDelegate::GetButtons() const {
|
| + return BUTTON_OK;
|
| +}
|
| +
|
| +string16 ExtensionDisabledInfobarDelegate::GetButtonLabel(
|
| + InfoBarButton button) const {
|
| + DCHECK_EQ(BUTTON_OK, button);
|
| + return l10n_util::GetStringUTF16(
|
| + IDS_EXTENSION_DISABLED_INFOBAR_ENABLE_BUTTON);
|
| +}
|
| +
|
| +bool ExtensionDisabledInfobarDelegate::Accept() {
|
| + // This object manages its own lifetime.
|
| + new ExtensionDisabledDialogDelegate(tab_contents_->profile(), service_,
|
| + extension_);
|
| + return true;
|
| +}
|
| +
|
| +void ExtensionDisabledInfobarDelegate::Observe(
|
| + NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + // TODO(mpcomplete): RemoveInfoBar doesn't seem to always result in us getting
|
| + // deleted.
|
| + const Extension* extension;
|
| + if (type.value == NotificationType::EXTENSION_LOADED) {
|
| + extension = Details<const Extension>(details).ptr();
|
| + } else {
|
| + DCHECK_EQ(NotificationType::EXTENSION_UNLOADED, type.value);
|
| + UnloadedExtensionInfo* info = Details<UnloadedExtensionInfo>(details).ptr();
|
| + extension = (info->reason == UnloadedExtensionInfo::DISABLE) ?
|
| + info->extension : NULL;
|
| + }
|
| + if (extension == extension_)
|
| + tab_contents_->RemoveInfoBar(this);
|
| +}
|
| +
|
| +
|
| +// Globals --------------------------------------------------------------------
|
| +
|
| void ShowExtensionDisabledUI(ExtensionService* service, Profile* profile,
|
| const Extension* extension) {
|
| Browser* browser = BrowserList::GetLastActiveWithProfile(profile);
|
|
|