OLD | NEW |
---|---|
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_prompt.h" | 5 #include "chrome/browser/extensions/extension_install_prompt.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/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
12 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
16 #include "chrome/browser/extensions/bundle_installer.h" | 16 #include "chrome/browser/extensions/bundle_installer.h" |
17 #include "chrome/browser/extensions/extension_install_ui.h" | 17 #include "chrome/browser/extensions/extension_install_ui.h" |
18 #include "chrome/browser/extensions/extension_util.h" | 18 #include "chrome/browser/extensions/extension_util.h" |
19 #include "chrome/browser/extensions/permissions_updater.h" | |
19 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
20 #include "chrome/browser/ui/browser.h" | 21 #include "chrome/browser/ui/browser.h" |
21 #include "chrome/browser/ui/browser_window.h" | 22 #include "chrome/browser/ui/browser_window.h" |
22 #include "chrome/common/chrome_switches.h" | 23 #include "chrome/common/chrome_switches.h" |
23 #include "chrome/common/pref_names.h" | 24 #include "chrome/common/pref_names.h" |
24 #include "chrome/grit/chromium_strings.h" | 25 #include "chrome/grit/chromium_strings.h" |
25 #include "chrome/grit/generated_resources.h" | 26 #include "chrome/grit/generated_resources.h" |
26 #include "content/public/browser/web_contents.h" | 27 #include "content/public/browser/web_contents.h" |
27 #include "extensions/browser/extension_prefs.h" | 28 #include "extensions/browser/extension_prefs.h" |
28 #include "extensions/browser/extension_util.h" | 29 #include "extensions/browser/extension_util.h" |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
212 average_rating_(0.0), | 213 average_rating_(0.0), |
213 rating_count_(0), | 214 rating_count_(0), |
214 show_user_count_(false), | 215 show_user_count_(false), |
215 has_webstore_data_(false) { | 216 has_webstore_data_(false) { |
216 } | 217 } |
217 | 218 |
218 ExtensionInstallPrompt::Prompt::~Prompt() { | 219 ExtensionInstallPrompt::Prompt::~Prompt() { |
219 } | 220 } |
220 | 221 |
221 void ExtensionInstallPrompt::Prompt::SetPermissions( | 222 void ExtensionInstallPrompt::Prompt::SetPermissions( |
222 const std::vector<base::string16>& permissions) { | 223 const std::vector<base::string16>& permissions, |
223 permissions_ = permissions; | 224 PermissionsType permissions_type) { |
225 switch (permissions_type) { | |
226 case REGULAR_PERMISSIONS: | |
227 permissions_ = permissions; | |
228 break; | |
229 case WITHHELD_PERMISSIONS: | |
230 withheld_permissions_ = permissions; | |
231 break; | |
232 case ALL_PERMISSIONS: | |
233 NOTREACHED(); | |
234 break; | |
235 } | |
224 } | 236 } |
225 | 237 |
226 void ExtensionInstallPrompt::Prompt::SetPermissionsDetails( | 238 void ExtensionInstallPrompt::Prompt::SetPermissionsDetails( |
227 const std::vector<base::string16>& details) { | 239 const std::vector<base::string16>& details, |
228 details_ = details; | 240 PermissionsType permissions_type) { |
229 is_showing_details_for_permissions_.clear(); | 241 switch (permissions_type) { |
230 for (size_t i = 0; i < details.size(); ++i) | 242 case REGULAR_PERMISSIONS: |
231 is_showing_details_for_permissions_.push_back(false); | 243 details_ = details; |
244 is_showing_details_for_permissions_.clear(); | |
245 for (size_t i = 0; i < details.size(); ++i) | |
246 is_showing_details_for_permissions_.push_back(false); | |
247 break; | |
248 case WITHHELD_PERMISSIONS: | |
249 withheld_details_ = details; | |
250 is_showing_details_for_withheld_permissions_.clear(); | |
251 for (size_t i = 0; i < details.size(); ++i) | |
252 is_showing_details_for_withheld_permissions_.push_back(false); | |
253 break; | |
254 case ALL_PERMISSIONS: | |
255 NOTREACHED(); | |
256 break; | |
257 } | |
232 } | 258 } |
233 | 259 |
234 void ExtensionInstallPrompt::Prompt::SetIsShowingDetails( | 260 void ExtensionInstallPrompt::Prompt::SetIsShowingDetails( |
235 DetailsType type, | 261 DetailsType type, |
236 size_t index, | 262 size_t index, |
237 bool is_showing_details) { | 263 bool is_showing_details) { |
238 switch (type) { | 264 switch (type) { |
239 case PERMISSIONS_DETAILS: | 265 case PERMISSIONS_DETAILS: |
240 is_showing_details_for_permissions_[index] = is_showing_details; | 266 is_showing_details_for_permissions_[index] = is_showing_details; |
241 break; | 267 break; |
268 case WITHHELD_PERMISSIONS_DETAILS: | |
269 is_showing_details_for_withheld_permissions_[index] = is_showing_details; | |
270 break; | |
242 case RETAINED_FILES_DETAILS: | 271 case RETAINED_FILES_DETAILS: |
243 is_showing_details_for_retained_files_ = is_showing_details; | 272 is_showing_details_for_retained_files_ = is_showing_details; |
244 break; | 273 break; |
245 } | 274 } |
246 } | 275 } |
247 | 276 |
248 void ExtensionInstallPrompt::Prompt::SetWebstoreData( | 277 void ExtensionInstallPrompt::Prompt::SetWebstoreData( |
249 const std::string& localized_user_count, | 278 const std::string& localized_user_count, |
250 bool show_user_count, | 279 bool show_user_count, |
251 double average_rating, | 280 double average_rating, |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
347 return kAbortButtonIds[type_] > 0; | 376 return kAbortButtonIds[type_] > 0; |
348 } | 377 } |
349 | 378 |
350 base::string16 ExtensionInstallPrompt::Prompt::GetAbortButtonLabel() const { | 379 base::string16 ExtensionInstallPrompt::Prompt::GetAbortButtonLabel() const { |
351 CHECK(HasAbortButtonLabel()); | 380 CHECK(HasAbortButtonLabel()); |
352 if (ShouldShowExplanationText()) | 381 if (ShouldShowExplanationText()) |
353 return experiment_->GetCancelButtonText(); | 382 return experiment_->GetCancelButtonText(); |
354 return l10n_util::GetStringUTF16(kAbortButtonIds[type_]); | 383 return l10n_util::GetStringUTF16(kAbortButtonIds[type_]); |
355 } | 384 } |
356 | 385 |
357 base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsHeading() const { | 386 base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsHeading( |
358 return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]); | 387 PermissionsType permissions_type) const { |
388 switch (permissions_type) { | |
389 case REGULAR_PERMISSIONS: | |
390 return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]); | |
391 case WITHHELD_PERMISSIONS: | |
392 return l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WITHHELD); | |
393 case ALL_PERMISSIONS: | |
394 NOTREACHED(); | |
395 return base::string16(); | |
396 } | |
359 } | 397 } |
360 | 398 |
361 base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFilesHeading() const { | 399 base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFilesHeading() const { |
362 const int kRetainedFilesMessageIDs[6] = { | 400 const int kRetainedFilesMessageIDs[6] = { |
363 IDS_EXTENSION_PROMPT_RETAINED_FILES_DEFAULT, | 401 IDS_EXTENSION_PROMPT_RETAINED_FILES_DEFAULT, |
364 IDS_EXTENSION_PROMPT_RETAINED_FILE_SINGULAR, | 402 IDS_EXTENSION_PROMPT_RETAINED_FILE_SINGULAR, |
365 IDS_EXTENSION_PROMPT_RETAINED_FILES_ZERO, | 403 IDS_EXTENSION_PROMPT_RETAINED_FILES_ZERO, |
366 IDS_EXTENSION_PROMPT_RETAINED_FILES_TWO, | 404 IDS_EXTENSION_PROMPT_RETAINED_FILES_TWO, |
367 IDS_EXTENSION_PROMPT_RETAINED_FILES_FEW, | 405 IDS_EXTENSION_PROMPT_RETAINED_FILES_FEW, |
368 IDS_EXTENSION_PROMPT_RETAINED_FILES_MANY, | 406 IDS_EXTENSION_PROMPT_RETAINED_FILES_MANY, |
369 }; | 407 }; |
370 std::vector<int> message_ids; | 408 std::vector<int> message_ids; |
371 for (size_t i = 0; i < arraysize(kRetainedFilesMessageIDs); i++) { | 409 for (size_t i = 0; i < arraysize(kRetainedFilesMessageIDs); i++) { |
372 message_ids.push_back(kRetainedFilesMessageIDs[i]); | 410 message_ids.push_back(kRetainedFilesMessageIDs[i]); |
373 } | 411 } |
374 return l10n_util::GetPluralStringFUTF16(message_ids, GetRetainedFileCount()); | 412 return l10n_util::GetPluralStringFUTF16(message_ids, GetRetainedFileCount()); |
375 } | 413 } |
376 | 414 |
377 bool ExtensionInstallPrompt::Prompt::ShouldShowPermissions() const { | 415 bool ExtensionInstallPrompt::Prompt::ShouldShowPermissions() const { |
378 return GetPermissionCount() > 0 || type_ == POST_INSTALL_PERMISSIONS_PROMPT; | 416 return GetPermissionCount(REGULAR_PERMISSIONS) > 0 || |
417 GetPermissionCount(WITHHELD_PERMISSIONS) > 0 || | |
418 type_ == POST_INSTALL_PERMISSIONS_PROMPT; | |
379 } | 419 } |
380 | 420 |
381 void ExtensionInstallPrompt::Prompt::AppendRatingStars( | 421 void ExtensionInstallPrompt::Prompt::AppendRatingStars( |
382 StarAppender appender, void* data) const { | 422 StarAppender appender, void* data) const { |
383 CHECK(appender); | 423 CHECK(appender); |
384 CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); | 424 CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); |
385 int rating_integer = floor(average_rating_); | 425 int rating_integer = floor(average_rating_); |
386 double rating_fractional = average_rating_ - rating_integer; | 426 double rating_fractional = average_rating_ - rating_integer; |
387 | 427 |
388 if (rating_fractional > 0.66) { | 428 if (rating_fractional > 0.66) { |
(...skipping 27 matching lines...) Expand all Loading... | |
416 base::string16 ExtensionInstallPrompt::Prompt::GetUserCount() const { | 456 base::string16 ExtensionInstallPrompt::Prompt::GetUserCount() const { |
417 CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); | 457 CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); |
418 | 458 |
419 if (show_user_count_) { | 459 if (show_user_count_) { |
420 return l10n_util::GetStringFUTF16(IDS_EXTENSION_USER_COUNT, | 460 return l10n_util::GetStringFUTF16(IDS_EXTENSION_USER_COUNT, |
421 base::UTF8ToUTF16(localized_user_count_)); | 461 base::UTF8ToUTF16(localized_user_count_)); |
422 } | 462 } |
423 return base::string16(); | 463 return base::string16(); |
424 } | 464 } |
425 | 465 |
426 size_t ExtensionInstallPrompt::Prompt::GetPermissionCount() const { | 466 size_t ExtensionInstallPrompt::Prompt::GetPermissionCount( |
427 return permissions_.size(); | 467 PermissionsType permissions_type) const { |
468 switch (permissions_type) { | |
469 case REGULAR_PERMISSIONS: | |
470 return permissions_.size(); | |
471 case WITHHELD_PERMISSIONS: | |
472 return withheld_permissions_.size(); | |
473 case ALL_PERMISSIONS: | |
474 return permissions_.size() + withheld_permissions_.size(); | |
475 } | |
428 } | 476 } |
429 | 477 |
430 size_t ExtensionInstallPrompt::Prompt::GetPermissionsDetailsCount() const { | 478 size_t ExtensionInstallPrompt::Prompt::GetPermissionsDetailsCount( |
431 return details_.size(); | 479 PermissionsType permissions_type) const { |
480 switch (permissions_type) { | |
481 case REGULAR_PERMISSIONS: | |
482 return details_.size(); | |
483 case WITHHELD_PERMISSIONS: | |
484 return withheld_details_.size(); | |
485 case ALL_PERMISSIONS: | |
486 return details_.size() + withheld_details_.size(); | |
487 } | |
432 } | 488 } |
433 | 489 |
434 base::string16 ExtensionInstallPrompt::Prompt::GetPermission(size_t index) | 490 base::string16 ExtensionInstallPrompt::Prompt::GetPermission( |
435 const { | 491 size_t index, |
436 CHECK_LT(index, permissions_.size()); | 492 PermissionsType permissions_type) const { |
437 return permissions_[index]; | 493 switch (permissions_type) { |
494 case REGULAR_PERMISSIONS: | |
495 CHECK_LT(index, permissions_.size()); | |
496 return permissions_[index]; | |
497 case WITHHELD_PERMISSIONS: | |
498 CHECK_LT(index, withheld_permissions_.size()); | |
499 return withheld_permissions_[index]; | |
500 case ALL_PERMISSIONS: | |
501 NOTREACHED(); | |
502 return base::string16(); | |
503 } | |
438 } | 504 } |
439 | 505 |
440 base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsDetails( | 506 base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsDetails( |
441 size_t index) const { | 507 size_t index, |
442 CHECK_LT(index, details_.size()); | 508 PermissionsType permissions_type) const { |
443 return details_[index]; | 509 switch (permissions_type) { |
510 case REGULAR_PERMISSIONS: | |
511 CHECK_LT(index, details_.size()); | |
512 return details_[index]; | |
513 case WITHHELD_PERMISSIONS: | |
514 CHECK_LT(index, withheld_details_.size()); | |
515 return withheld_details_[index]; | |
516 case ALL_PERMISSIONS: | |
517 NOTREACHED(); | |
518 return base::string16(); | |
519 } | |
444 } | 520 } |
445 | 521 |
446 bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails( | 522 bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails( |
447 DetailsType type, size_t index) const { | 523 DetailsType type, size_t index) const { |
448 switch (type) { | 524 switch (type) { |
449 case PERMISSIONS_DETAILS: | 525 case PERMISSIONS_DETAILS: |
450 CHECK_LT(index, is_showing_details_for_permissions_.size()); | 526 CHECK_LT(index, is_showing_details_for_permissions_.size()); |
451 return is_showing_details_for_permissions_[index]; | 527 return is_showing_details_for_permissions_[index]; |
528 case WITHHELD_PERMISSIONS_DETAILS: | |
529 CHECK_LT(index, is_showing_details_for_withheld_permissions_.size()); | |
530 return is_showing_details_for_withheld_permissions_[index]; | |
452 case RETAINED_FILES_DETAILS: | 531 case RETAINED_FILES_DETAILS: |
453 return is_showing_details_for_retained_files_; | 532 return is_showing_details_for_retained_files_; |
454 } | 533 } |
455 return false; | 534 return false; |
456 } | 535 } |
457 | 536 |
458 size_t ExtensionInstallPrompt::Prompt::GetRetainedFileCount() const { | 537 size_t ExtensionInstallPrompt::Prompt::GetRetainedFileCount() const { |
459 return retained_files_.size(); | 538 return retained_files_.size(); |
460 } | 539 } |
461 | 540 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
740 prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup()); | 819 prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup()); |
741 | 820 |
742 if (permissions_.get() && | 821 if (permissions_.get() && |
743 (!extension_ || | 822 (!extension_ || |
744 !extensions::PermissionsData::ShouldSkipPermissionWarnings( | 823 !extensions::PermissionsData::ShouldSkipPermissionWarnings( |
745 extension_->id()))) { | 824 extension_->id()))) { |
746 Manifest::Type type = | 825 Manifest::Type type = |
747 extension_ ? extension_->GetType() : Manifest::TYPE_UNKNOWN; | 826 extension_ ? extension_->GetType() : Manifest::TYPE_UNKNOWN; |
748 const extensions::PermissionMessageProvider* message_provider = | 827 const extensions::PermissionMessageProvider* message_provider = |
749 extensions::PermissionMessageProvider::Get(); | 828 extensions::PermissionMessageProvider::Get(); |
829 | |
830 // Initialize permissions so that withheld permissions don't end up in the | |
831 // install prompt. | |
832 if (extension_) { | |
833 extensions::PermissionsUpdater(install_ui_->profile()) | |
834 .InitializePermissions( | |
835 extension_, extensions::PermissionsUpdater::INIT_FLAG_TRANSIENT); | |
836 permissions_ = extension_->permissions_data()->active_permissions(); | |
Devlin
2014/09/02 21:07:51
This will fantastically break optional permissions
gpdavis
2014/09/04 19:40:04
Okay, I think I figured this out. I've removed th
| |
837 } | |
750 prompt_->SetPermissions( | 838 prompt_->SetPermissions( |
751 message_provider->GetWarningMessages(permissions_.get(), type)); | 839 message_provider->GetWarningMessages(permissions_.get(), type), |
840 REGULAR_PERMISSIONS); | |
752 prompt_->SetPermissionsDetails( | 841 prompt_->SetPermissionsDetails( |
753 message_provider->GetWarningMessagesDetails(permissions_.get(), type)); | 842 message_provider->GetWarningMessagesDetails(permissions_.get(), type), |
843 REGULAR_PERMISSIONS); | |
844 | |
845 scoped_refptr<const extensions::PermissionSet> withheld = | |
846 extension_->permissions_data()->withheld_permissions(); | |
847 if (!withheld->IsEmpty()) { | |
848 prompt_->SetPermissions( | |
849 message_provider->GetWarningMessages(withheld.get(), type), | |
850 PermissionsType::WITHHELD_PERMISSIONS); | |
851 prompt_->SetPermissionsDetails( | |
852 message_provider->GetWarningMessagesDetails(withheld.get(), type), | |
853 PermissionsType::WITHHELD_PERMISSIONS); | |
854 } | |
754 } | 855 } |
755 | 856 |
756 switch (prompt_->type()) { | 857 switch (prompt_->type()) { |
757 case PERMISSIONS_PROMPT: | 858 case PERMISSIONS_PROMPT: |
758 case RE_ENABLE_PROMPT: | 859 case RE_ENABLE_PROMPT: |
759 case INLINE_INSTALL_PROMPT: | 860 case INLINE_INSTALL_PROMPT: |
760 case EXTERNAL_INSTALL_PROMPT: | 861 case EXTERNAL_INSTALL_PROMPT: |
761 case INSTALL_PROMPT: | 862 case INSTALL_PROMPT: |
762 case LAUNCH_PROMPT: | 863 case LAUNCH_PROMPT: |
763 case POST_INSTALL_PERMISSIONS_PROMPT: | 864 case POST_INSTALL_PERMISSIONS_PROMPT: |
(...skipping 12 matching lines...) Expand all Loading... | |
776 } | 877 } |
777 | 878 |
778 if (AutoConfirmPrompt(delegate_)) | 879 if (AutoConfirmPrompt(delegate_)) |
779 return; | 880 return; |
780 | 881 |
781 if (show_dialog_callback_.is_null()) | 882 if (show_dialog_callback_.is_null()) |
782 GetDefaultShowDialogCallback().Run(show_params_, delegate_, prompt_); | 883 GetDefaultShowDialogCallback().Run(show_params_, delegate_, prompt_); |
783 else | 884 else |
784 show_dialog_callback_.Run(show_params_, delegate_, prompt_); | 885 show_dialog_callback_.Run(show_params_, delegate_, prompt_); |
785 } | 886 } |
OLD | NEW |