Chromium Code Reviews| 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 72 #include "extensions/browser/app_window/app_window.h" | 72 #include "extensions/browser/app_window/app_window.h" |
| 73 #include "extensions/browser/app_window/app_window_registry.h" | 73 #include "extensions/browser/app_window/app_window_registry.h" |
| 74 #include "extensions/browser/blacklist_state.h" | 74 #include "extensions/browser/blacklist_state.h" |
| 75 #include "extensions/browser/extension_error.h" | 75 #include "extensions/browser/extension_error.h" |
| 76 #include "extensions/browser/extension_host.h" | 76 #include "extensions/browser/extension_host.h" |
| 77 #include "extensions/browser/extension_registry.h" | 77 #include "extensions/browser/extension_registry.h" |
| 78 #include "extensions/browser/extension_system.h" | 78 #include "extensions/browser/extension_system.h" |
| 79 #include "extensions/browser/lazy_background_task_queue.h" | 79 #include "extensions/browser/lazy_background_task_queue.h" |
| 80 #include "extensions/browser/management_policy.h" | 80 #include "extensions/browser/management_policy.h" |
| 81 #include "extensions/browser/pref_names.h" | 81 #include "extensions/browser/pref_names.h" |
| 82 #include "extensions/browser/uninstall_reason.h" | |
| 83 #include "extensions/browser/view_type_utils.h" | 82 #include "extensions/browser/view_type_utils.h" |
| 84 #include "extensions/browser/warning_set.h" | 83 #include "extensions/browser/warning_set.h" |
| 85 #include "extensions/common/constants.h" | 84 #include "extensions/common/constants.h" |
| 86 #include "extensions/common/extension.h" | 85 #include "extensions/common/extension.h" |
| 87 #include "extensions/common/extension_icon_set.h" | 86 #include "extensions/common/extension_icon_set.h" |
| 88 #include "extensions/common/extension_set.h" | 87 #include "extensions/common/extension_set.h" |
| 89 #include "extensions/common/extension_urls.h" | 88 #include "extensions/common/extension_urls.h" |
| 90 #include "extensions/common/feature_switch.h" | 89 #include "extensions/common/feature_switch.h" |
| 91 #include "extensions/common/manifest.h" | 90 #include "extensions/common/manifest.h" |
| 92 #include "extensions/common/manifest_handlers/background_info.h" | 91 #include "extensions/common/manifest_handlers/background_info.h" |
| (...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 692 AsWeakPtr())); | 691 AsWeakPtr())); |
| 693 web_ui()->RegisterMessageCallback("extensionSettingsEnableErrorCollection", | 692 web_ui()->RegisterMessageCallback("extensionSettingsEnableErrorCollection", |
| 694 base::Bind(&ExtensionSettingsHandler::HandleEnableErrorCollectionMessage, | 693 base::Bind(&ExtensionSettingsHandler::HandleEnableErrorCollectionMessage, |
| 695 AsWeakPtr())); | 694 AsWeakPtr())); |
| 696 web_ui()->RegisterMessageCallback("extensionSettingsAllowFileAccess", | 695 web_ui()->RegisterMessageCallback("extensionSettingsAllowFileAccess", |
| 697 base::Bind(&ExtensionSettingsHandler::HandleAllowFileAccessMessage, | 696 base::Bind(&ExtensionSettingsHandler::HandleAllowFileAccessMessage, |
| 698 AsWeakPtr())); | 697 AsWeakPtr())); |
| 699 web_ui()->RegisterMessageCallback("extensionSettingsAllowOnAllUrls", | 698 web_ui()->RegisterMessageCallback("extensionSettingsAllowOnAllUrls", |
| 700 base::Bind(&ExtensionSettingsHandler::HandleAllowOnAllUrlsMessage, | 699 base::Bind(&ExtensionSettingsHandler::HandleAllowOnAllUrlsMessage, |
| 701 AsWeakPtr())); | 700 AsWeakPtr())); |
| 702 web_ui()->RegisterMessageCallback("extensionSettingsUninstall", | |
| 703 base::Bind(&ExtensionSettingsHandler::HandleUninstallMessage, | |
| 704 AsWeakPtr())); | |
| 705 web_ui()->RegisterMessageCallback("extensionSettingsOptions", | 701 web_ui()->RegisterMessageCallback("extensionSettingsOptions", |
| 706 base::Bind(&ExtensionSettingsHandler::HandleOptionsMessage, | 702 base::Bind(&ExtensionSettingsHandler::HandleOptionsMessage, |
| 707 AsWeakPtr())); | 703 AsWeakPtr())); |
| 708 web_ui()->RegisterMessageCallback("extensionSettingsPermissions", | 704 web_ui()->RegisterMessageCallback("extensionSettingsPermissions", |
| 709 base::Bind(&ExtensionSettingsHandler::HandlePermissionsMessage, | 705 base::Bind(&ExtensionSettingsHandler::HandlePermissionsMessage, |
| 710 AsWeakPtr())); | 706 AsWeakPtr())); |
| 711 web_ui()->RegisterMessageCallback("extensionSettingsShowButton", | 707 web_ui()->RegisterMessageCallback("extensionSettingsShowButton", |
| 712 base::Bind(&ExtensionSettingsHandler::HandleShowButtonMessage, | 708 base::Bind(&ExtensionSettingsHandler::HandleShowButtonMessage, |
| 713 AsWeakPtr())); | 709 AsWeakPtr())); |
| 714 web_ui()->RegisterMessageCallback("extensionSettingsAutoupdate", | 710 web_ui()->RegisterMessageCallback("extensionSettingsAutoupdate", |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 801 | 797 |
| 802 void ExtensionSettingsHandler::OnExtensionDisableReasonsChanged( | 798 void ExtensionSettingsHandler::OnExtensionDisableReasonsChanged( |
| 803 const std::string& extension_id, int disable_reasons) { | 799 const std::string& extension_id, int disable_reasons) { |
| 804 MaybeUpdateAfterNotification(); | 800 MaybeUpdateAfterNotification(); |
| 805 } | 801 } |
| 806 | 802 |
| 807 void ExtensionSettingsHandler::OnExtensionManagementSettingsChanged() { | 803 void ExtensionSettingsHandler::OnExtensionManagementSettingsChanged() { |
| 808 MaybeUpdateAfterNotification(); | 804 MaybeUpdateAfterNotification(); |
| 809 } | 805 } |
| 810 | 806 |
| 811 void ExtensionSettingsHandler::ExtensionUninstallAccepted() { | |
| 812 DCHECK(!extension_id_prompting_.empty()); | |
| 813 | |
| 814 bool was_terminated = false; | |
| 815 | |
| 816 // The extension can be uninstalled in another window while the UI was | |
| 817 // showing. Do nothing in that case. | |
| 818 const Extension* extension = | |
| 819 extension_service_->GetExtensionById(extension_id_prompting_, true); | |
| 820 if (!extension) { | |
| 821 extension = | |
| 822 ExtensionRegistry::Get(Profile::FromWebUI(web_ui()))->GetExtensionById( | |
| 823 extension_id_prompting_, ExtensionRegistry::TERMINATED); | |
| 824 was_terminated = true; | |
| 825 } | |
| 826 if (!extension) | |
| 827 return; | |
| 828 | |
| 829 extension_service_->UninstallExtension( | |
| 830 extension_id_prompting_, | |
| 831 extensions::UNINSTALL_REASON_USER_INITIATED, | |
| 832 base::Bind(&base::DoNothing), | |
| 833 NULL); // Error. | |
| 834 extension_id_prompting_ = ""; | |
| 835 | |
| 836 // There will be no EXTENSION_UNLOADED notification for terminated | |
| 837 // extensions as they were already unloaded. | |
| 838 if (was_terminated) | |
| 839 HandleRequestExtensionsData(NULL); | |
| 840 } | |
| 841 | |
| 842 void ExtensionSettingsHandler::ExtensionUninstallCanceled() { | |
| 843 extension_id_prompting_ = ""; | |
| 844 web_ui()->CallJavascriptFunction("extensions.ExtensionList.uninstallCancel"); | |
|
Dan Beam
2015/03/03 00:12:59
this functionality was dropped and code left :(
| |
| 845 } | |
| 846 | |
| 847 void ExtensionSettingsHandler::ExtensionWarningsChanged() { | 807 void ExtensionSettingsHandler::ExtensionWarningsChanged() { |
| 848 MaybeUpdateAfterNotification(); | 808 MaybeUpdateAfterNotification(); |
| 849 } | 809 } |
| 850 | 810 |
| 851 // This is called when the user clicks "Revoke File/Device Access." | 811 // This is called when the user clicks "Revoke File/Device Access." |
| 852 void ExtensionSettingsHandler::InstallUIProceed() { | 812 void ExtensionSettingsHandler::InstallUIProceed() { |
| 853 Profile* profile = Profile::FromWebUI(web_ui()); | 813 Profile* profile = Profile::FromWebUI(web_ui()); |
| 854 extensions::DevicePermissionsManager::Get(profile) | 814 extensions::DevicePermissionsManager::Get(profile) |
| 855 ->Clear(extension_id_prompting_); | 815 ->Clear(extension_id_prompting_); |
| 856 apps::SavedFilesService::Get(profile)->ClearQueue( | 816 apps::SavedFilesService::Get(profile)->ClearQueue( |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1129 CHECK_EQ(2u, args->GetSize()); | 1089 CHECK_EQ(2u, args->GetSize()); |
| 1130 std::string extension_id; | 1090 std::string extension_id; |
| 1131 std::string allow_str; | 1091 std::string allow_str; |
| 1132 CHECK(args->GetString(0, &extension_id)); | 1092 CHECK(args->GetString(0, &extension_id)); |
| 1133 CHECK(args->GetString(1, &allow_str)); | 1093 CHECK(args->GetString(1, &allow_str)); |
| 1134 util::SetAllowedScriptingOnAllUrls(extension_id, | 1094 util::SetAllowedScriptingOnAllUrls(extension_id, |
| 1135 extension_service_->GetBrowserContext(), | 1095 extension_service_->GetBrowserContext(), |
| 1136 allow_str == "true"); | 1096 allow_str == "true"); |
| 1137 } | 1097 } |
| 1138 | 1098 |
| 1139 void ExtensionSettingsHandler::HandleUninstallMessage( | |
| 1140 const base::ListValue* args) { | |
| 1141 CHECK_EQ(1U, args->GetSize()); | |
| 1142 std::string extension_id; | |
| 1143 CHECK(args->GetString(0, &extension_id)); | |
| 1144 const Extension* extension = | |
| 1145 extension_service_->GetInstalledExtension(extension_id); | |
| 1146 if (!extension) | |
| 1147 return; | |
| 1148 | |
| 1149 if (!management_policy_->UserMayModifySettings(extension, NULL) || | |
| 1150 management_policy_->MustRemainInstalled(extension, NULL)) { | |
| 1151 LOG(ERROR) << "An attempt was made to uninstall an extension that is " | |
| 1152 << "non-usermanagable. Extension id : " << extension->id(); | |
| 1153 return; | |
| 1154 } | |
| 1155 | |
| 1156 if (!extension_id_prompting_.empty()) | |
| 1157 return; // Only one prompt at a time. | |
| 1158 | |
| 1159 extension_id_prompting_ = extension_id; | |
| 1160 | |
| 1161 GetExtensionUninstallDialog()->ConfirmUninstall(extension); | |
| 1162 } | |
| 1163 | |
| 1164 void ExtensionSettingsHandler::HandleOptionsMessage( | 1099 void ExtensionSettingsHandler::HandleOptionsMessage( |
| 1165 const base::ListValue* args) { | 1100 const base::ListValue* args) { |
| 1166 const Extension* extension = GetActiveExtension(args); | 1101 const Extension* extension = GetActiveExtension(args); |
| 1167 if (!extension || OptionsPageInfo::GetOptionsPage(extension).is_empty()) | 1102 if (!extension || OptionsPageInfo::GetOptionsPage(extension).is_empty()) |
| 1168 return; | 1103 return; |
| 1169 ExtensionTabUtil::OpenOptionsPage(extension, | 1104 ExtensionTabUtil::OpenOptionsPage(extension, |
| 1170 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents())); | 1105 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents())); |
| 1171 } | 1106 } |
| 1172 | 1107 |
| 1173 void ExtensionSettingsHandler::HandlePermissionsMessage( | 1108 void ExtensionSettingsHandler::HandlePermissionsMessage( |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1442 (web_contents->GetURL() == BackgroundInfo::GetBackgroundURL(extension)); | 1377 (web_contents->GetURL() == BackgroundInfo::GetBackgroundURL(extension)); |
| 1443 result->push_back( | 1378 result->push_back( |
| 1444 ExtensionPage(web_contents->GetURL(), | 1379 ExtensionPage(web_contents->GetURL(), |
| 1445 process->GetID(), | 1380 process->GetID(), |
| 1446 host->GetRoutingID(), | 1381 host->GetRoutingID(), |
| 1447 process->GetBrowserContext()->IsOffTheRecord(), | 1382 process->GetBrowserContext()->IsOffTheRecord(), |
| 1448 is_background_page && has_generated_background_page)); | 1383 is_background_page && has_generated_background_page)); |
| 1449 } | 1384 } |
| 1450 } | 1385 } |
| 1451 | 1386 |
| 1452 ExtensionUninstallDialog* | |
| 1453 ExtensionSettingsHandler::GetExtensionUninstallDialog() { | |
| 1454 if (!extension_uninstall_dialog_.get()) { | |
| 1455 Browser* browser = chrome::FindBrowserWithWebContents( | |
| 1456 web_ui()->GetWebContents()); | |
| 1457 extension_uninstall_dialog_.reset( | |
| 1458 ExtensionUninstallDialog::Create(extension_service_->profile(), | |
| 1459 browser->window()->GetNativeWindow(), | |
| 1460 this)); | |
| 1461 } | |
| 1462 return extension_uninstall_dialog_.get(); | |
| 1463 } | |
| 1464 | |
| 1465 void ExtensionSettingsHandler::OnReinstallComplete( | 1387 void ExtensionSettingsHandler::OnReinstallComplete( |
| 1466 bool success, | 1388 bool success, |
| 1467 const std::string& error, | 1389 const std::string& error, |
| 1468 webstore_install::Result result) { | 1390 webstore_install::Result result) { |
| 1469 MaybeUpdateAfterNotification(); | 1391 MaybeUpdateAfterNotification(); |
| 1470 } | 1392 } |
| 1471 | 1393 |
| 1472 } // namespace extensions | 1394 } // namespace extensions |
| OLD | NEW |