Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(385)

Side by Side Diff: chrome/browser/extensions/extension_disabled_infobar_delegate.cc

Issue 6249010: Cleanup: de-inline a bunch of classes, rename and move "PluginInstaller" to "... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_disabled_infobar_delegate.h" 5 #include "chrome/browser/extensions/extension_disabled_infobar_delegate.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/extensions/extension_install_ui.h" 11 #include "chrome/browser/extensions/extension_install_ui.h"
12 #include "chrome/browser/extensions/extension_service.h" 12 #include "chrome/browser/extensions/extension_service.h"
13 #include "chrome/browser/tab_contents/infobar_delegate.h" 13 #include "chrome/browser/tab_contents/infobar_delegate.h"
14 #include "chrome/browser/tab_contents/tab_contents.h" 14 #include "chrome/browser/tab_contents/tab_contents.h"
15 #include "chrome/browser/browser_list.h" 15 #include "chrome/browser/browser_list.h"
16 #include "chrome/common/extensions/extension_file_util.h" 16 #include "chrome/common/extensions/extension_file_util.h"
17 #include "chrome/common/extensions/extension_resource.h" 17 #include "chrome/common/extensions/extension_resource.h"
18 #include "chrome/common/notification_details.h" 18 #include "chrome/common/notification_details.h"
19 #include "chrome/common/notification_registrar.h" 19 #include "chrome/common/notification_registrar.h"
20 #include "chrome/common/notification_source.h" 20 #include "chrome/common/notification_source.h"
21 #include "grit/generated_resources.h" 21 #include "grit/generated_resources.h"
22 22
23 // ExtensionDisabledDialogDelegate --------------------------------------------
24
23 class ExtensionDisabledDialogDelegate 25 class ExtensionDisabledDialogDelegate
24 : public ExtensionInstallUI::Delegate, 26 : public ExtensionInstallUI::Delegate,
25 public base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate> { 27 public base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate> {
26 public: 28 public:
27 ExtensionDisabledDialogDelegate(Profile* profile, 29 ExtensionDisabledDialogDelegate(Profile* profile,
28 ExtensionService* service, 30 ExtensionService* service,
29 const Extension* extension) 31 const Extension* extension);
30 : service_(service), extension_(extension) {
31 AddRef(); // Balanced in Proceed or Abort.
32
33 install_ui_.reset(new ExtensionInstallUI(profile));
34 install_ui_->ConfirmInstall(this, extension_);
35 }
36
37 // Overridden from ExtensionInstallUI::Delegate:
38 virtual void InstallUIProceed() {
39 service_->GrantPermissionsAndEnableExtension(extension_);
40 Release();
41 }
42 virtual void InstallUIAbort() {
43 // Do nothing. The extension will remain disabled.
44 Release();
45 }
46 32
47 private: 33 private:
48 friend class base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate>; 34 friend class base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate>;
49 35
50 virtual ~ExtensionDisabledDialogDelegate() {} 36 virtual ~ExtensionDisabledDialogDelegate();
37
38 // ExtensionInstallUI::Delegate:
39 virtual void InstallUIProceed();
40 virtual void InstallUIAbort();
51 41
52 // The UI for showing the install dialog when enabling. 42 // The UI for showing the install dialog when enabling.
53 scoped_ptr<ExtensionInstallUI> install_ui_; 43 scoped_ptr<ExtensionInstallUI> install_ui_;
54 44
55 ExtensionService* service_; 45 ExtensionService* service_;
56 const Extension* extension_; 46 const Extension* extension_;
57 }; 47 };
58 48
59 class ExtensionDisabledInfobarDelegate 49 ExtensionDisabledDialogDelegate::ExtensionDisabledDialogDelegate(
60 : public ConfirmInfoBarDelegate, 50 Profile* profile,
61 public NotificationObserver { 51 ExtensionService* service,
52 const Extension* extension)
53 : service_(service), extension_(extension) {
54 AddRef(); // Balanced in Proceed or Abort.
55
56 install_ui_.reset(new ExtensionInstallUI(profile));
57 install_ui_->ConfirmInstall(this, extension_);
58 }
59
60 ExtensionDisabledDialogDelegate::~ExtensionDisabledDialogDelegate() {
61 }
62
63 void ExtensionDisabledDialogDelegate::InstallUIProceed() {
64 service_->GrantPermissionsAndEnableExtension(extension_);
65 Release();
66 }
67
68 void ExtensionDisabledDialogDelegate::InstallUIAbort() {
69 // Do nothing. The extension will remain disabled.
70 Release();
71 }
72
73
74 // ExtensionDisabledInfobarDelegate -------------------------------------------
75
76 class ExtensionDisabledInfobarDelegate : public ConfirmInfoBarDelegate,
77 public NotificationObserver {
62 public: 78 public:
63 ExtensionDisabledInfobarDelegate(TabContents* tab_contents, 79 ExtensionDisabledInfobarDelegate(TabContents* tab_contents,
64 ExtensionService* service, 80 ExtensionService* service,
65 const Extension* extension) 81 const Extension* extension);
66 : ConfirmInfoBarDelegate(tab_contents),
67 tab_contents_(tab_contents),
68 service_(service),
69 extension_(extension) {
70 // The user might re-enable the extension in other ways, so watch for that.
71 registrar_.Add(this, NotificationType::EXTENSION_LOADED,
72 Source<Profile>(service->profile()));
73 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
74 Source<Profile>(service->profile()));
75 }
76 virtual ~ExtensionDisabledInfobarDelegate() {
77 }
78 virtual string16 GetMessageText() const {
79 return l10n_util::GetStringFUTF16(extension_->is_app() ?
80 IDS_APP_DISABLED_INFOBAR_LABEL : IDS_EXTENSION_DISABLED_INFOBAR_LABEL,
81 UTF8ToUTF16(extension_->name()));
82 }
83 virtual SkBitmap* GetIcon() const {
84 return NULL;
85 }
86 virtual int GetButtons() const {
87 return BUTTON_OK;
88 }
89 virtual string16 GetButtonLabel(
90 ConfirmInfoBarDelegate::InfoBarButton button) const {
91 return l10n_util::GetStringUTF16(
92 IDS_EXTENSION_DISABLED_INFOBAR_ENABLE_BUTTON);
93 }
94 virtual bool Accept() {
95 // This object manages its own lifetime.
96 new ExtensionDisabledDialogDelegate(tab_contents_->profile(),
97 service_, extension_);
98 return true;
99 }
100 virtual void InfoBarClosed() {
101 delete this;
102 }
103 82
83 private:
84 virtual ~ExtensionDisabledInfobarDelegate();
85
86 // ConfirmInfoBarDelegate:
87 virtual void InfoBarClosed();
88 virtual string16 GetMessageText() const;
89 virtual int GetButtons() const;
90 virtual string16 GetButtonLabel(InfoBarButton button) const;
91 virtual bool Accept();
92
93 // NotificationObserver:
104 virtual void Observe(NotificationType type, 94 virtual void Observe(NotificationType type,
105 const NotificationSource& source, 95 const NotificationSource& source,
106 const NotificationDetails& details) { 96 const NotificationDetails& details);
107 // TODO(mpcomplete): RemoveInfoBar doesn't seem to always result in us
108 // getting deleted.
109 const Extension* extension = NULL;
110 switch (type.value) {
111 case NotificationType::EXTENSION_LOADED:
112 extension = Details<const Extension>(details).ptr();
113 break;
114 case NotificationType::EXTENSION_UNLOADED: {
115 UnloadedExtensionInfo* info =
116 Details<UnloadedExtensionInfo>(details).ptr();
117 if (info->reason == UnloadedExtensionInfo::DISABLE)
118 extension = info->extension;
119 break;
120 }
121 default:
122 NOTREACHED();
123 return;
124 }
125 if (extension == extension_)
126 tab_contents_->RemoveInfoBar(this);
127 }
128 97
129 private:
130 NotificationRegistrar registrar_; 98 NotificationRegistrar registrar_;
131 TabContents* tab_contents_; 99 TabContents* tab_contents_;
132 ExtensionService* service_; 100 ExtensionService* service_;
133 const Extension* extension_; 101 const Extension* extension_;
134 }; 102 };
135 103
104 ExtensionDisabledInfobarDelegate::ExtensionDisabledInfobarDelegate(
105 TabContents* tab_contents,
106 ExtensionService* service,
107 const Extension* extension)
108 : ConfirmInfoBarDelegate(tab_contents),
109 tab_contents_(tab_contents),
110 service_(service),
111 extension_(extension) {
112 // The user might re-enable the extension in other ways, so watch for that.
113 registrar_.Add(this, NotificationType::EXTENSION_LOADED,
114 Source<Profile>(service->profile()));
115 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
116 Source<Profile>(service->profile()));
117 }
118
119 ExtensionDisabledInfobarDelegate::~ExtensionDisabledInfobarDelegate() {
120 }
121
122 void ExtensionDisabledInfobarDelegate::InfoBarClosed() {
123 delete this;
124 }
125
126 string16 ExtensionDisabledInfobarDelegate::GetMessageText() const {
127 return l10n_util::GetStringFUTF16(extension_->is_app() ?
128 IDS_APP_DISABLED_INFOBAR_LABEL : IDS_EXTENSION_DISABLED_INFOBAR_LABEL,
129 UTF8ToUTF16(extension_->name()));
130 }
131
132 int ExtensionDisabledInfobarDelegate::GetButtons() const {
133 return BUTTON_OK;
134 }
135
136 string16 ExtensionDisabledInfobarDelegate::GetButtonLabel(
137 InfoBarButton button) const {
138 DCHECK_EQ(BUTTON_OK, button);
139 return l10n_util::GetStringUTF16(
140 IDS_EXTENSION_DISABLED_INFOBAR_ENABLE_BUTTON);
141 }
142
143 bool ExtensionDisabledInfobarDelegate::Accept() {
144 // This object manages its own lifetime.
145 new ExtensionDisabledDialogDelegate(tab_contents_->profile(), service_,
146 extension_);
147 return true;
148 }
149
150 void ExtensionDisabledInfobarDelegate::Observe(
151 NotificationType type,
152 const NotificationSource& source,
153 const NotificationDetails& details) {
154 // TODO(mpcomplete): RemoveInfoBar doesn't seem to always result in us getting
155 // deleted.
156 const Extension* extension;
157 if (type.value == NotificationType::EXTENSION_LOADED) {
158 extension = Details<const Extension>(details).ptr();
159 } else {
160 DCHECK_EQ(NotificationType::EXTENSION_UNLOADED, type.value);
161 UnloadedExtensionInfo* info = Details<UnloadedExtensionInfo>(details).ptr();
162 extension = (info->reason == UnloadedExtensionInfo::DISABLE) ?
163 info->extension : NULL;
164 }
165 if (extension == extension_)
166 tab_contents_->RemoveInfoBar(this);
167 }
168
169
170 // Globals --------------------------------------------------------------------
171
136 void ShowExtensionDisabledUI(ExtensionService* service, Profile* profile, 172 void ShowExtensionDisabledUI(ExtensionService* service, Profile* profile,
137 const Extension* extension) { 173 const Extension* extension) {
138 Browser* browser = BrowserList::GetLastActiveWithProfile(profile); 174 Browser* browser = BrowserList::GetLastActiveWithProfile(profile);
139 if (!browser) 175 if (!browser)
140 return; 176 return;
141 177
142 TabContents* tab_contents = browser->GetSelectedTabContents(); 178 TabContents* tab_contents = browser->GetSelectedTabContents();
143 if (!tab_contents) 179 if (!tab_contents)
144 return; 180 return;
145 181
146 tab_contents->AddInfoBar(new ExtensionDisabledInfobarDelegate( 182 tab_contents->AddInfoBar(new ExtensionDisabledInfobarDelegate(
147 tab_contents, service, extension)); 183 tab_contents, service, extension));
148 } 184 }
149 185
150 void ShowExtensionDisabledDialog(ExtensionService* service, Profile* profile, 186 void ShowExtensionDisabledDialog(ExtensionService* service, Profile* profile,
151 const Extension* extension) { 187 const Extension* extension) {
152 // This object manages its own lifetime. 188 // This object manages its own lifetime.
153 new ExtensionDisabledDialogDelegate(profile, service, extension); 189 new ExtensionDisabledDialogDelegate(profile, service, extension);
154 } 190 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_crash_recovery_browsertest.cc ('k') | chrome/browser/extensions/extension_dom_ui.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698