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

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

Issue 9456019: Add GTK interface for installing bundles of extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_install_ui.h" 5 #include "chrome/browser/extensions/extension_install_ui.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/string_number_conversions.h" 12 #include "base/string_number_conversions.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/stringprintf.h" 14 #include "base/stringprintf.h"
15 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
16 #include "chrome/browser/extensions/bundle_installer.h"
16 #include "chrome/browser/extensions/extension_install_dialog.h" 17 #include "chrome/browser/extensions/extension_install_dialog.h"
17 #include "chrome/browser/extensions/theme_installed_infobar_delegate.h" 18 #include "chrome/browser/extensions/theme_installed_infobar_delegate.h"
18 #include "chrome/browser/infobars/infobar_tab_helper.h" 19 #include "chrome/browser/infobars/infobar_tab_helper.h"
19 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/simple_message_box.h" 21 #include "chrome/browser/simple_message_box.h"
21 #include "chrome/browser/tabs/tab_strip_model.h" 22 #include "chrome/browser/tabs/tab_strip_model.h"
22 #include "chrome/browser/themes/theme_service.h" 23 #include "chrome/browser/themes/theme_service.h"
23 #include "chrome/browser/themes/theme_service_factory.h" 24 #include "chrome/browser/themes/theme_service_factory.h"
24 #include "chrome/browser/ui/browser.h" 25 #include "chrome/browser/ui/browser.h"
25 #include "chrome/browser/ui/browser_dialogs.h" 26 #include "chrome/browser/ui/browser_dialogs.h"
26 #include "chrome/browser/ui/browser_list.h" 27 #include "chrome/browser/ui/browser_list.h"
27 #include "chrome/browser/ui/browser_navigator.h" 28 #include "chrome/browser/ui/browser_navigator.h"
28 #include "chrome/browser/ui/browser_window.h" 29 #include "chrome/browser/ui/browser_window.h"
29 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 30 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
30 #include "chrome/common/chrome_notification_types.h" 31 #include "chrome/common/chrome_notification_types.h"
31 #include "chrome/common/chrome_switches.h" 32 #include "chrome/common/chrome_switches.h"
32 #include "chrome/common/extensions/extension.h" 33 #include "chrome/common/extensions/extension.h"
33 #include "chrome/common/extensions/extension_icon_set.h" 34 #include "chrome/common/extensions/extension_icon_set.h"
34 #include "chrome/common/extensions/extension_resource.h" 35 #include "chrome/common/extensions/extension_resource.h"
35 #include "chrome/common/extensions/url_pattern.h" 36 #include "chrome/common/extensions/url_pattern.h"
36 #include "chrome/common/url_constants.h" 37 #include "chrome/common/url_constants.h"
37 #include "content/public/browser/notification_service.h" 38 #include "content/public/browser/notification_service.h"
38 #include "grit/chromium_strings.h" 39 #include "grit/chromium_strings.h"
39 #include "grit/generated_resources.h" 40 #include "grit/generated_resources.h"
40 #include "grit/theme_resources.h" 41 #include "grit/theme_resources.h"
41 #include "ui/base/l10n/l10n_util.h" 42 #include "ui/base/l10n/l10n_util.h"
42 #include "ui/base/resource/resource_bundle.h" 43 #include "ui/base/resource/resource_bundle.h"
43 44
44 using content::WebContents; 45 using content::WebContents;
46 using extensions::BundleInstaller;
45 47
46 static const int kTitleIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = { 48 static const int kTitleIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
47 0, 49 0,
48 IDS_EXTENSION_INLINE_INSTALL_PROMPT_TITLE, 50 IDS_EXTENSION_INLINE_INSTALL_PROMPT_TITLE,
51 IDS_EXTENSION_INSTALL_PROMPT_TITLE,
49 IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE, 52 IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE,
50 IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE 53 IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE
51 }; 54 };
52 static const int kHeadingIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = { 55 static const int kHeadingIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
53 IDS_EXTENSION_INSTALL_PROMPT_HEADING, 56 IDS_EXTENSION_INSTALL_PROMPT_HEADING,
54 IDS_EXTENSION_INSTALL_PROMPT_HEADING, 57 0,
Mihai Parparita -not on Chrome 2012/02/24 01:42:03 Since there's enough of these 0 "gaps" in these ta
jstritar 2012/02/24 18:21:46 Done.
58 0,
55 IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING, 59 IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING,
56 IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING 60 IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING
57 }; 61 };
58 static const int kAcceptButtonIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = { 62 static const int kAcceptButtonIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
59 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, 63 IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
60 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, 64 IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
65 IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
61 IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON, 66 IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON,
62 IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON 67 IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON
63 }; 68 };
64 static const int kAbortButtonIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = { 69 static const int kAbortButtonIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
65 0, 70 0,
66 0, 71 0,
67 0, 72 0,
73 0,
68 IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON 74 IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON
69 }; 75 };
70 static const int kPermissionsHeaderIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = { 76 static const int kPermissionsHeaderIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
71 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, 77 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO,
72 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, 78 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO,
79 IDS_EXTENSION_PROMPT_THESE_WILL_HAVE_ACCESS_TO,
73 IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO, 80 IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO,
74 IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO, 81 IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO,
75 }; 82 };
76 83
77 namespace { 84 namespace {
78 85
79 // Size of extension icon in top left of dialog. 86 // Size of extension icon in top left of dialog.
80 const int kIconSize = 69; 87 const int kIconSize = 69;
81 88
82 } // namespace 89 } // namespace
(...skipping 15 matching lines...) Expand all
98 void ExtensionInstallUI::Prompt::SetInlineInstallWebstoreData( 105 void ExtensionInstallUI::Prompt::SetInlineInstallWebstoreData(
99 const std::string& localized_user_count, 106 const std::string& localized_user_count,
100 double average_rating, 107 double average_rating,
101 int rating_count) { 108 int rating_count) {
102 CHECK_EQ(INLINE_INSTALL_PROMPT, type_); 109 CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
103 localized_user_count_ = localized_user_count; 110 localized_user_count_ = localized_user_count;
104 average_rating_ = average_rating; 111 average_rating_ = average_rating;
105 rating_count_ = rating_count; 112 rating_count_ = rating_count;
106 } 113 }
107 114
108 string16 ExtensionInstallUI::Prompt::GetDialogTitle( 115 string16 ExtensionInstallUI::Prompt::GetDialogTitle() const {
109 const Extension* extension) const {
110 if (type_ == INSTALL_PROMPT) { 116 if (type_ == INSTALL_PROMPT) {
111 return l10n_util::GetStringUTF16(extension->is_app() ? 117 return l10n_util::GetStringUTF16(extension_->is_app() ?
112 IDS_EXTENSION_INSTALL_APP_PROMPT_TITLE : 118 IDS_EXTENSION_INSTALL_APP_PROMPT_TITLE :
113 IDS_EXTENSION_INSTALL_EXTENSION_PROMPT_TITLE); 119 IDS_EXTENSION_INSTALL_EXTENSION_PROMPT_TITLE);
114 } else { 120 } else {
115 return l10n_util::GetStringUTF16(kTitleIds[type_]); 121 return l10n_util::GetStringUTF16(kTitleIds[type_]);
116 } 122 }
117 } 123 }
118 124
119 string16 ExtensionInstallUI::Prompt::GetHeading( 125 string16 ExtensionInstallUI::Prompt::GetHeading() const {
120 const std::string& extension_name) const {
121 if (type_ == INLINE_INSTALL_PROMPT) { 126 if (type_ == INLINE_INSTALL_PROMPT) {
122 return UTF8ToUTF16(extension_name); 127 return UTF8ToUTF16(extension_->name());
128 } else if (type_ == BUNDLE_INSTALL_PROMPT) {
129 return bundle_->GetHeadingTextFor(BundleInstaller::Item::STATE_PENDING);
123 } else { 130 } else {
124 return l10n_util::GetStringFUTF16( 131 return l10n_util::GetStringFUTF16(
125 kHeadingIds[type_], UTF8ToUTF16(extension_name)); 132 kHeadingIds[type_], UTF8ToUTF16(extension_->name()));
126 } 133 }
127 } 134 }
128 135
129 string16 ExtensionInstallUI::Prompt::GetAcceptButtonLabel() const { 136 string16 ExtensionInstallUI::Prompt::GetAcceptButtonLabel() const {
130 return l10n_util::GetStringUTF16(kAcceptButtonIds[type_]); 137 return l10n_util::GetStringUTF16(kAcceptButtonIds[type_]);
131 } 138 }
132 139
133 bool ExtensionInstallUI::Prompt::HasAbortButtonLabel() const { 140 bool ExtensionInstallUI::Prompt::HasAbortButtonLabel() const {
134 return kAbortButtonIds[type_] > 0; 141 return kAbortButtonIds[type_] > 0;
135 } 142 }
136 143
137 string16 ExtensionInstallUI::Prompt::GetAbortButtonLabel() const { 144 string16 ExtensionInstallUI::Prompt::GetAbortButtonLabel() const {
138 CHECK(HasAbortButtonLabel()); 145 CHECK(HasAbortButtonLabel());
139 return l10n_util::GetStringUTF16(kAbortButtonIds[type_]); 146 return l10n_util::GetStringUTF16(kAbortButtonIds[type_]);
140 } 147 }
141 148
142 string16 ExtensionInstallUI::Prompt::GetPermissionsHeader() const { 149 string16 ExtensionInstallUI::Prompt::GetPermissionsHeading() const {
143 return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]); 150 return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]);
144 } 151 }
145 152
146 void ExtensionInstallUI::Prompt::AppendRatingStars( 153 void ExtensionInstallUI::Prompt::AppendRatingStars(
147 StarAppender appender, void* data) const { 154 StarAppender appender, void* data) const {
148 CHECK(appender); 155 CHECK(appender);
149 CHECK_EQ(INLINE_INSTALL_PROMPT, type_); 156 CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
150 int rating_integer = floor(average_rating_); 157 int rating_integer = floor(average_rating_);
151 double rating_fractional = average_rating_ - rating_integer; 158 double rating_fractional = average_rating_ - rating_integer;
152 159
(...skipping 30 matching lines...) Expand all
183 CHECK_EQ(INLINE_INSTALL_PROMPT, type_); 190 CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
184 return l10n_util::GetStringFUTF16( 191 return l10n_util::GetStringFUTF16(
185 IDS_EXTENSION_USER_COUNT, 192 IDS_EXTENSION_USER_COUNT,
186 UTF8ToUTF16(localized_user_count_)); 193 UTF8ToUTF16(localized_user_count_));
187 } 194 }
188 195
189 size_t ExtensionInstallUI::Prompt::GetPermissionCount() const { 196 size_t ExtensionInstallUI::Prompt::GetPermissionCount() const {
190 return permissions_.size(); 197 return permissions_.size();
191 } 198 }
192 199
193 string16 ExtensionInstallUI::Prompt::GetPermission(int index) const { 200 string16 ExtensionInstallUI::Prompt::GetPermission(size_t index) const {
201 CHECK_LT(index, permissions_.size());
194 return l10n_util::GetStringFUTF16( 202 return l10n_util::GetStringFUTF16(
195 IDS_EXTENSION_PERMISSION_LINE, permissions_[index]); 203 IDS_EXTENSION_PERMISSION_LINE, permissions_[index]);
196 } 204 }
197 205
198 ExtensionInstallUI::ExtensionInstallUI(Profile* profile) 206 ExtensionInstallUI::ExtensionInstallUI(Profile* profile)
199 : profile_(profile), 207 : profile_(profile),
200 ui_loop_(MessageLoop::current()), 208 ui_loop_(MessageLoop::current()),
201 previous_using_native_theme_(false), 209 previous_using_native_theme_(false),
202 extension_(NULL), 210 extension_(NULL),
203 delegate_(NULL), 211 delegate_(NULL),
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } 306 }
299 307
300 namespace { 308 namespace {
301 309
302 bool disable_failure_ui_for_tests = false; 310 bool disable_failure_ui_for_tests = false;
303 311
304 } // namespace 312 } // namespace
305 313
306 void ExtensionInstallUI::OnInstallFailure(const string16& error) { 314 void ExtensionInstallUI::OnInstallFailure(const string16& error) {
307 DCHECK(ui_loop_ == MessageLoop::current()); 315 DCHECK(ui_loop_ == MessageLoop::current());
316 if (disable_failure_ui_for_tests || skip_post_install_ui_)
317 return;
308 318
309 Browser* browser = BrowserList::GetLastActiveWithProfile(profile_); 319 Browser* browser = BrowserList::GetLastActiveWithProfile(profile_);
310 if (disable_failure_ui_for_tests)
311 return;
312 browser::ShowErrorBox( 320 browser::ShowErrorBox(
313 browser ? browser->window()->GetNativeHandle() : NULL, 321 browser ? browser->window()->GetNativeHandle() : NULL,
314 l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALL_FAILURE_TITLE), 322 l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALL_FAILURE_TITLE),
315 error); 323 error);
316 } 324 }
317 325
318 void ExtensionInstallUI::SetIcon(SkBitmap* image) { 326 void ExtensionInstallUI::SetIcon(SkBitmap* image) {
319 if (image) 327 if (image)
320 icon_ = *image; 328 icon_ = *image;
321 else 329 else
(...skipping 11 matching lines...) Expand all
333 case RE_ENABLE_PROMPT: 341 case RE_ENABLE_PROMPT:
334 case INSTALL_PROMPT: { 342 case INSTALL_PROMPT: {
335 content::NotificationService* service = 343 content::NotificationService* service =
336 content::NotificationService::current(); 344 content::NotificationService::current();
337 service->Notify(chrome::NOTIFICATION_EXTENSION_WILL_SHOW_CONFIRM_DIALOG, 345 service->Notify(chrome::NOTIFICATION_EXTENSION_WILL_SHOW_CONFIRM_DIALOG,
338 content::Source<ExtensionInstallUI>(this), 346 content::Source<ExtensionInstallUI>(this),
339 content::NotificationService::NoDetails()); 347 content::NotificationService::NoDetails());
340 348
341 Prompt prompt(prompt_type_); 349 Prompt prompt(prompt_type_);
342 prompt.SetPermissions(permissions_->GetWarningMessages()); 350 prompt.SetPermissions(permissions_->GetWarningMessages());
343 ShowExtensionInstallDialog( 351 prompt.set_extension(extension_);
344 profile_, delegate_, extension_, &icon_, prompt); 352 prompt.set_icon(icon_);
353 ShowExtensionInstallDialog(profile_, delegate_, prompt);
345 break; 354 break;
346 } 355 }
347 default: 356 default:
348 NOTREACHED() << "Unknown message"; 357 NOTREACHED() << "Unknown message";
349 break; 358 break;
350 } 359 }
351 } 360 }
352 361
353 // static 362 // static
354 void ExtensionInstallUI::OpenAppInstalledNTP(Browser* browser, 363 void ExtensionInstallUI::OpenAppInstalledNTP(Browser* browser,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 bool previous_using_native_theme) { 439 bool previous_using_native_theme) {
431 Profile* profile = tab_contents->profile(); 440 Profile* profile = tab_contents->profile();
432 return new ThemeInstalledInfoBarDelegate( 441 return new ThemeInstalledInfoBarDelegate(
433 tab_contents->infobar_tab_helper(), 442 tab_contents->infobar_tab_helper(),
434 profile->GetExtensionService(), 443 profile->GetExtensionService(),
435 ThemeServiceFactory::GetForProfile(profile), 444 ThemeServiceFactory::GetForProfile(profile),
436 new_theme, 445 new_theme,
437 previous_theme_id, 446 previous_theme_id,
438 previous_using_native_theme); 447 previous_using_native_theme);
439 } 448 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698