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/ui/webui/extensions/extension_settings_handler.h" | 5 #include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" |
6 | 6 |
7 #include "apps/app_load_service.h" | 7 #include "apps/app_load_service.h" |
8 #include "apps/saved_files_service.h" | 8 #include "apps/saved_files_service.h" |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 22 matching lines...) Expand all Loading... | |
33 #include "chrome/browser/extensions/extension_error_reporter.h" | 33 #include "chrome/browser/extensions/extension_error_reporter.h" |
34 #include "chrome/browser/extensions/extension_management.h" | 34 #include "chrome/browser/extensions/extension_management.h" |
35 #include "chrome/browser/extensions/extension_service.h" | 35 #include "chrome/browser/extensions/extension_service.h" |
36 #include "chrome/browser/extensions/extension_tab_util.h" | 36 #include "chrome/browser/extensions/extension_tab_util.h" |
37 #include "chrome/browser/extensions/extension_ui_util.h" | 37 #include "chrome/browser/extensions/extension_ui_util.h" |
38 #include "chrome/browser/extensions/extension_util.h" | 38 #include "chrome/browser/extensions/extension_util.h" |
39 #include "chrome/browser/extensions/install_verifier.h" | 39 #include "chrome/browser/extensions/install_verifier.h" |
40 #include "chrome/browser/extensions/path_util.h" | 40 #include "chrome/browser/extensions/path_util.h" |
41 #include "chrome/browser/extensions/shared_module_service.h" | 41 #include "chrome/browser/extensions/shared_module_service.h" |
42 #include "chrome/browser/extensions/updater/extension_updater.h" | 42 #include "chrome/browser/extensions/updater/extension_updater.h" |
43 #include "chrome/browser/extensions/webstore_reinstaller.h" | |
43 #include "chrome/browser/platform_util.h" | 44 #include "chrome/browser/platform_util.h" |
44 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 45 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
45 #include "chrome/browser/profiles/profile.h" | 46 #include "chrome/browser/profiles/profile.h" |
46 #include "chrome/browser/supervised_user/supervised_user_service.h" | 47 #include "chrome/browser/supervised_user/supervised_user_service.h" |
47 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" | 48 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
48 #include "chrome/browser/tab_contents/background_contents.h" | 49 #include "chrome/browser/tab_contents/background_contents.h" |
49 #include "chrome/browser/ui/browser.h" | 50 #include "chrome/browser/ui/browser.h" |
50 #include "chrome/browser/ui/browser_finder.h" | 51 #include "chrome/browser/ui/browser_finder.h" |
51 #include "chrome/browser/ui/browser_window.h" | 52 #include "chrome/browser/ui/browser_window.h" |
52 #include "chrome/browser/ui/extensions/application_launch.h" | 53 #include "chrome/browser/ui/extensions/application_launch.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
207 false, | 208 false, |
208 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 209 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
209 } | 210 } |
210 | 211 |
211 base::DictionaryValue* ExtensionSettingsHandler::CreateExtensionDetailValue( | 212 base::DictionaryValue* ExtensionSettingsHandler::CreateExtensionDetailValue( |
212 const Extension* extension, | 213 const Extension* extension, |
213 const std::vector<ExtensionPage>& pages, | 214 const std::vector<ExtensionPage>& pages, |
214 const WarningService* warning_service) { | 215 const WarningService* warning_service) { |
215 // The items which are to be written into app_dict are also described in | 216 // The items which are to be written into app_dict are also described in |
216 // chrome/browser/resources/extensions/extension_list.js in @typedef for | 217 // chrome/browser/resources/extensions/extension_list.js in @typedef for |
217 // ExtensionData. Please update it whenever you add or remove any keys here. | 218 // ExtensionData. Please update it whenever you add or remove any keys here. |
Dan Beam
2014/09/18 21:36:50
it actually worked! :)
Devlin
2014/09/19 21:30:09
;)
| |
218 base::DictionaryValue* extension_data = new base::DictionaryValue(); | 219 base::DictionaryValue* extension_data = new base::DictionaryValue(); |
219 bool enabled = extension_service_->IsExtensionEnabled(extension->id()); | 220 bool enabled = extension_service_->IsExtensionEnabled(extension->id()); |
220 GetExtensionBasicInfo(extension, enabled, extension_data); | 221 GetExtensionBasicInfo(extension, enabled, extension_data); |
221 | 222 |
222 ExtensionPrefs* prefs = ExtensionPrefs::Get(extension_service_->profile()); | 223 ExtensionPrefs* prefs = ExtensionPrefs::Get(extension_service_->profile()); |
223 int disable_reasons = prefs->GetDisableReasons(extension->id()); | 224 int disable_reasons = prefs->GetDisableReasons(extension->id()); |
224 | 225 |
225 bool suspicious_install = | 226 bool suspicious_install = |
226 (disable_reasons & Extension::DISABLE_NOT_VERIFIED) != 0; | 227 (disable_reasons & Extension::DISABLE_NOT_VERIFIED) != 0; |
227 extension_data->SetBoolean("suspiciousInstall", suspicious_install); | 228 extension_data->SetBoolean("suspiciousInstall", suspicious_install); |
(...skipping 18 matching lines...) Expand all Loading... | |
246 !enabled, NULL); | 247 !enabled, NULL); |
247 if (Manifest::IsUnpackedLocation(extension->location())) { | 248 if (Manifest::IsUnpackedLocation(extension->location())) { |
248 extension_data->SetString("path", extension->path().value()); | 249 extension_data->SetString("path", extension->path().value()); |
249 extension_data->SetString( | 250 extension_data->SetString( |
250 "prettifiedPath", | 251 "prettifiedPath", |
251 extensions::path_util::PrettifyPath(extension->path()).value()); | 252 extensions::path_util::PrettifyPath(extension->path()).value()); |
252 } | 253 } |
253 extension_data->SetString("icon", icon.spec()); | 254 extension_data->SetString("icon", icon.spec()); |
254 extension_data->SetBoolean("isUnpacked", | 255 extension_data->SetBoolean("isUnpacked", |
255 Manifest::IsUnpackedLocation(extension->location())); | 256 Manifest::IsUnpackedLocation(extension->location())); |
257 extension_data->SetBoolean("isFromStore", | |
258 extension->location() == Manifest::INTERNAL && | |
259 ManifestURL::UpdatesFromGallery(extension)); | |
256 ExtensionRegistry* registry = | 260 ExtensionRegistry* registry = |
257 ExtensionRegistry::Get(extension_service_->profile()); | 261 ExtensionRegistry::Get(extension_service_->profile()); |
258 extension_data->SetBoolean( | 262 extension_data->SetBoolean( |
259 "terminated", | 263 "terminated", |
260 registry->terminated_extensions().Contains(extension->id())); | 264 registry->terminated_extensions().Contains(extension->id())); |
261 extension_data->SetBoolean("enabledIncognito", | 265 extension_data->SetBoolean("enabledIncognito", |
262 util::IsIncognitoEnabled(extension->id(), extension_service_->profile())); | 266 util::IsIncognitoEnabled(extension->id(), extension_service_->profile())); |
263 extension_data->SetBoolean("incognitoCanBeEnabled", | 267 extension_data->SetBoolean("incognitoCanBeEnabled", |
264 extension->can_be_incognito_enabled()); | 268 extension->can_be_incognito_enabled()); |
265 extension_data->SetBoolean("wantsFileAccess", extension->wants_file_access()); | 269 extension_data->SetBoolean("wantsFileAccess", extension->wants_file_access()); |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
503 source->AddString("extensionSettingsEnableErrorCollection", | 507 source->AddString("extensionSettingsEnableErrorCollection", |
504 l10n_util::GetStringUTF16(IDS_EXTENSIONS_ENABLE_ERROR_COLLECTION)); | 508 l10n_util::GetStringUTF16(IDS_EXTENSIONS_ENABLE_ERROR_COLLECTION)); |
505 source->AddString("extensionSettingsAllowFileAccess", | 509 source->AddString("extensionSettingsAllowFileAccess", |
506 l10n_util::GetStringUTF16(IDS_EXTENSIONS_ALLOW_FILE_ACCESS)); | 510 l10n_util::GetStringUTF16(IDS_EXTENSIONS_ALLOW_FILE_ACCESS)); |
507 source->AddString("extensionSettingsAllowOnAllUrls", | 511 source->AddString("extensionSettingsAllowOnAllUrls", |
508 l10n_util::GetStringUTF16(IDS_EXTENSIONS_ALLOW_ON_ALL_URLS)); | 512 l10n_util::GetStringUTF16(IDS_EXTENSIONS_ALLOW_ON_ALL_URLS)); |
509 source->AddString("extensionSettingsIncognitoWarning", | 513 source->AddString("extensionSettingsIncognitoWarning", |
510 l10n_util::GetStringUTF16(IDS_EXTENSIONS_INCOGNITO_WARNING)); | 514 l10n_util::GetStringUTF16(IDS_EXTENSIONS_INCOGNITO_WARNING)); |
511 source->AddString("extensionSettingsReloadTerminated", | 515 source->AddString("extensionSettingsReloadTerminated", |
512 l10n_util::GetStringUTF16(IDS_EXTENSIONS_RELOAD_TERMINATED)); | 516 l10n_util::GetStringUTF16(IDS_EXTENSIONS_RELOAD_TERMINATED)); |
517 source->AddString("extensionSettingsRepairCorrupted", | |
518 l10n_util::GetStringUTF16(IDS_EXTENSIONS_REPAIR_CORRUPTED)); | |
513 source->AddString("extensionSettingsLaunch", | 519 source->AddString("extensionSettingsLaunch", |
514 l10n_util::GetStringUTF16(IDS_EXTENSIONS_LAUNCH)); | 520 l10n_util::GetStringUTF16(IDS_EXTENSIONS_LAUNCH)); |
515 source->AddString("extensionSettingsReloadUnpacked", | 521 source->AddString("extensionSettingsReloadUnpacked", |
516 l10n_util::GetStringUTF16(IDS_EXTENSIONS_RELOAD_UNPACKED)); | 522 l10n_util::GetStringUTF16(IDS_EXTENSIONS_RELOAD_UNPACKED)); |
517 source->AddString("extensionSettingsOptions", | 523 source->AddString("extensionSettingsOptions", |
518 l10n_util::GetStringUTF16(IDS_EXTENSIONS_OPTIONS_LINK)); | 524 l10n_util::GetStringUTF16(IDS_EXTENSIONS_OPTIONS_LINK)); |
519 source->AddString("extensionSettingsPermissions", | 525 source->AddString("extensionSettingsPermissions", |
520 l10n_util::GetStringUTF16(IDS_EXTENSIONS_PERMISSIONS_LINK)); | 526 l10n_util::GetStringUTF16(IDS_EXTENSIONS_PERMISSIONS_LINK)); |
521 source->AddString("extensionSettingsVisitWebsite", | 527 source->AddString("extensionSettingsVisitWebsite", |
522 l10n_util::GetStringUTF16(IDS_EXTENSIONS_VISIT_WEBSITE)); | 528 l10n_util::GetStringUTF16(IDS_EXTENSIONS_VISIT_WEBSITE)); |
523 source->AddString("extensionSettingsVisitWebStore", | 529 source->AddString("extensionSettingsVisitWebStore", |
524 l10n_util::GetStringUTF16(IDS_EXTENSIONS_VISIT_WEBSTORE)); | 530 l10n_util::GetStringUTF16(IDS_EXTENSIONS_VISIT_WEBSTORE)); |
525 source->AddString("extensionSettingsPolicyControlled", | 531 source->AddString("extensionSettingsPolicyControlled", |
526 l10n_util::GetStringUTF16(IDS_EXTENSIONS_POLICY_CONTROLLED)); | 532 l10n_util::GetStringUTF16(IDS_EXTENSIONS_POLICY_CONTROLLED)); |
527 source->AddString("extensionSettingsDependentExtensions", | 533 source->AddString("extensionSettingsDependentExtensions", |
528 l10n_util::GetStringUTF16(IDS_EXTENSIONS_DEPENDENT_EXTENSIONS)); | 534 l10n_util::GetStringUTF16(IDS_EXTENSIONS_DEPENDENT_EXTENSIONS)); |
529 source->AddString("extensionSettingsSupervisedUser", | 535 source->AddString("extensionSettingsSupervisedUser", |
530 l10n_util::GetStringUTF16(IDS_EXTENSIONS_LOCKED_SUPERVISED_USER)); | 536 l10n_util::GetStringUTF16(IDS_EXTENSIONS_LOCKED_SUPERVISED_USER)); |
531 source->AddString("extensionSettingsCorruptInstall", | 537 source->AddString("extensionSettingsCorruptInstall", |
532 l10n_util::GetStringUTF16( | 538 l10n_util::GetStringUTF16( |
533 IDS_EXTENSIONS_CORRUPTED_EXTENSION)); | 539 IDS_EXTENSIONS_CORRUPTED_EXTENSION)); |
534 source->AddString("extensionSettingsSuspiciousInstall", | 540 source->AddString("extensionSettingsSuspiciousInstall", |
535 l10n_util::GetStringFUTF16( | 541 l10n_util::GetStringFUTF16( |
536 IDS_EXTENSIONS_ADDED_WITHOUT_KNOWLEDGE, | 542 IDS_EXTENSIONS_ADDED_WITHOUT_KNOWLEDGE, |
537 l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE))); | 543 l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE))); |
538 source->AddString("extensionSettingsLearnMore", | 544 source->AddString("extensionSettingsLearnMore", |
539 l10n_util::GetStringUTF16(IDS_LEARN_MORE)); | 545 l10n_util::GetStringUTF16(IDS_LEARN_MORE)); |
540 source->AddString("extensionSettingsCorruptInstallHelpUrl", | |
541 base::ASCIIToUTF16( | |
542 google_util::AppendGoogleLocaleParam( | |
543 GURL(chrome::kCorruptExtensionURL), | |
544 g_browser_process->GetApplicationLocale()).spec())); | |
545 source->AddString("extensionSettingsSuspiciousInstallHelpUrl", | 546 source->AddString("extensionSettingsSuspiciousInstallHelpUrl", |
546 base::ASCIIToUTF16( | 547 base::ASCIIToUTF16( |
547 google_util::AppendGoogleLocaleParam( | 548 google_util::AppendGoogleLocaleParam( |
548 GURL(chrome::kRemoveNonCWSExtensionURL), | 549 GURL(chrome::kRemoveNonCWSExtensionURL), |
549 g_browser_process->GetApplicationLocale()).spec())); | 550 g_browser_process->GetApplicationLocale()).spec())); |
550 source->AddString("extensionSettingsShowButton", | 551 source->AddString("extensionSettingsShowButton", |
551 l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_BUTTON)); | 552 l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_BUTTON)); |
552 source->AddString("extensionSettingsLoadUnpackedButton", | 553 source->AddString("extensionSettingsLoadUnpackedButton", |
553 l10n_util::GetStringUTF16(IDS_EXTENSIONS_LOAD_UNPACKED_BUTTON)); | 554 l10n_util::GetStringUTF16(IDS_EXTENSIONS_LOAD_UNPACKED_BUTTON)); |
554 source->AddString("extensionSettingsPackButton", | 555 source->AddString("extensionSettingsPackButton", |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
624 AsWeakPtr())); | 625 AsWeakPtr())); |
625 web_ui()->RegisterMessageCallback("extensionSettingsInspect", | 626 web_ui()->RegisterMessageCallback("extensionSettingsInspect", |
626 base::Bind(&ExtensionSettingsHandler::HandleInspectMessage, | 627 base::Bind(&ExtensionSettingsHandler::HandleInspectMessage, |
627 AsWeakPtr())); | 628 AsWeakPtr())); |
628 web_ui()->RegisterMessageCallback("extensionSettingsLaunch", | 629 web_ui()->RegisterMessageCallback("extensionSettingsLaunch", |
629 base::Bind(&ExtensionSettingsHandler::HandleLaunchMessage, | 630 base::Bind(&ExtensionSettingsHandler::HandleLaunchMessage, |
630 AsWeakPtr())); | 631 AsWeakPtr())); |
631 web_ui()->RegisterMessageCallback("extensionSettingsReload", | 632 web_ui()->RegisterMessageCallback("extensionSettingsReload", |
632 base::Bind(&ExtensionSettingsHandler::HandleReloadMessage, | 633 base::Bind(&ExtensionSettingsHandler::HandleReloadMessage, |
633 AsWeakPtr())); | 634 AsWeakPtr())); |
635 web_ui()->RegisterMessageCallback("extensionSettingsRepair", | |
636 base::Bind(&ExtensionSettingsHandler::HandleRepairMessage, | |
637 AsWeakPtr())); | |
634 web_ui()->RegisterMessageCallback("extensionSettingsEnable", | 638 web_ui()->RegisterMessageCallback("extensionSettingsEnable", |
635 base::Bind(&ExtensionSettingsHandler::HandleEnableMessage, | 639 base::Bind(&ExtensionSettingsHandler::HandleEnableMessage, |
636 AsWeakPtr())); | 640 AsWeakPtr())); |
637 web_ui()->RegisterMessageCallback("extensionSettingsEnableIncognito", | 641 web_ui()->RegisterMessageCallback("extensionSettingsEnableIncognito", |
638 base::Bind(&ExtensionSettingsHandler::HandleEnableIncognitoMessage, | 642 base::Bind(&ExtensionSettingsHandler::HandleEnableIncognitoMessage, |
639 AsWeakPtr())); | 643 AsWeakPtr())); |
640 web_ui()->RegisterMessageCallback("extensionSettingsEnableErrorCollection", | 644 web_ui()->RegisterMessageCallback("extensionSettingsEnableErrorCollection", |
641 base::Bind(&ExtensionSettingsHandler::HandleEnableErrorCollectionMessage, | 645 base::Bind(&ExtensionSettingsHandler::HandleEnableErrorCollectionMessage, |
642 AsWeakPtr())); | 646 AsWeakPtr())); |
643 web_ui()->RegisterMessageCallback("extensionSettingsAllowFileAccess", | 647 web_ui()->RegisterMessageCallback("extensionSettingsAllowFileAccess", |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
971 NEW_WINDOW)); | 975 NEW_WINDOW)); |
972 } | 976 } |
973 | 977 |
974 void ExtensionSettingsHandler::HandleReloadMessage( | 978 void ExtensionSettingsHandler::HandleReloadMessage( |
975 const base::ListValue* args) { | 979 const base::ListValue* args) { |
976 std::string extension_id = base::UTF16ToUTF8(ExtractStringValue(args)); | 980 std::string extension_id = base::UTF16ToUTF8(ExtractStringValue(args)); |
977 CHECK(!extension_id.empty()); | 981 CHECK(!extension_id.empty()); |
978 extension_service_->ReloadExtensionWithQuietFailure(extension_id); | 982 extension_service_->ReloadExtensionWithQuietFailure(extension_id); |
979 } | 983 } |
980 | 984 |
985 void ExtensionSettingsHandler::HandleRepairMessage( | |
986 const base::ListValue* args) { | |
987 std::string extension_id = base::UTF16ToUTF8(ExtractStringValue(args)); | |
988 CHECK(!extension_id.empty()); | |
989 scoped_refptr<WebstoreReinstaller> reinstaller(new WebstoreReinstaller( | |
990 web_contents(), | |
991 extension_id, | |
992 base::Bind(&ExtensionSettingsHandler::OnReinstallComplete, | |
993 AsWeakPtr()))); | |
994 reinstaller->BeginReinstall(); | |
995 } | |
996 | |
981 void ExtensionSettingsHandler::HandleEnableMessage( | 997 void ExtensionSettingsHandler::HandleEnableMessage( |
982 const base::ListValue* args) { | 998 const base::ListValue* args) { |
983 CHECK_EQ(2U, args->GetSize()); | 999 CHECK_EQ(2U, args->GetSize()); |
984 std::string extension_id, enable_str; | 1000 std::string extension_id, enable_str; |
985 CHECK(args->GetString(0, &extension_id)); | 1001 CHECK(args->GetString(0, &extension_id)); |
986 CHECK(args->GetString(1, &enable_str)); | 1002 CHECK(args->GetString(1, &enable_str)); |
987 | 1003 |
988 const Extension* extension = | 1004 const Extension* extension = |
989 extension_service_->GetInstalledExtension(extension_id); | 1005 extension_service_->GetInstalledExtension(extension_id); |
990 if (!extension) | 1006 if (!extension) |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1400 ExtensionUninstallDialog::Create(extension_service_->profile(), | 1416 ExtensionUninstallDialog::Create(extension_service_->profile(), |
1401 browser->window()->GetNativeWindow(), | 1417 browser->window()->GetNativeWindow(), |
1402 this)); | 1418 this)); |
1403 } | 1419 } |
1404 return extension_uninstall_dialog_.get(); | 1420 return extension_uninstall_dialog_.get(); |
1405 #else | 1421 #else |
1406 return NULL; | 1422 return NULL; |
1407 #endif // !defined(OS_ANDROID) | 1423 #endif // !defined(OS_ANDROID) |
1408 } | 1424 } |
1409 | 1425 |
1426 void ExtensionSettingsHandler::OnReinstallComplete( | |
1427 bool success, | |
1428 const std::string& error, | |
1429 webstore_install::Result result) { | |
1430 MaybeUpdateAfterNotification(); | |
Yoyo Zhou
2014/09/18 22:47:08
Why do we need to run this callback if the uninsta
Devlin
2014/09/18 23:19:10
To me, it seems safer and more consistent. It wou
| |
1431 } | |
1432 | |
1410 void ExtensionSettingsHandler::OnRequirementsChecked( | 1433 void ExtensionSettingsHandler::OnRequirementsChecked( |
1411 std::string extension_id, | 1434 std::string extension_id, |
1412 std::vector<std::string> requirement_errors) { | 1435 std::vector<std::string> requirement_errors) { |
1413 if (requirement_errors.empty()) { | 1436 if (requirement_errors.empty()) { |
1414 extension_service_->EnableExtension(extension_id); | 1437 extension_service_->EnableExtension(extension_id); |
1415 } else { | 1438 } else { |
1416 ExtensionErrorReporter::GetInstance()->ReportError( | 1439 ExtensionErrorReporter::GetInstance()->ReportError( |
1417 base::UTF8ToUTF16(JoinString(requirement_errors, ' ')), | 1440 base::UTF8ToUTF16(JoinString(requirement_errors, ' ')), |
1418 true); // Be noisy. | 1441 true); // Be noisy. |
1419 } | 1442 } |
1420 requirements_checker_.reset(); | 1443 requirements_checker_.reset(); |
1421 } | 1444 } |
1422 | 1445 |
1423 } // namespace extensions | 1446 } // namespace extensions |
OLD | NEW |