| 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 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 AsWeakPtr())); | 701 AsWeakPtr())); |
| 703 web_ui()->RegisterMessageCallback("extensionSettingsEnableErrorCollection", | 702 web_ui()->RegisterMessageCallback("extensionSettingsEnableErrorCollection", |
| 704 base::Bind(&ExtensionSettingsHandler::HandleEnableErrorCollectionMessage, | 703 base::Bind(&ExtensionSettingsHandler::HandleEnableErrorCollectionMessage, |
| 705 AsWeakPtr())); | 704 AsWeakPtr())); |
| 706 web_ui()->RegisterMessageCallback("extensionSettingsAllowFileAccess", | 705 web_ui()->RegisterMessageCallback("extensionSettingsAllowFileAccess", |
| 707 base::Bind(&ExtensionSettingsHandler::HandleAllowFileAccessMessage, | 706 base::Bind(&ExtensionSettingsHandler::HandleAllowFileAccessMessage, |
| 708 AsWeakPtr())); | 707 AsWeakPtr())); |
| 709 web_ui()->RegisterMessageCallback("extensionSettingsAllowOnAllUrls", | 708 web_ui()->RegisterMessageCallback("extensionSettingsAllowOnAllUrls", |
| 710 base::Bind(&ExtensionSettingsHandler::HandleAllowOnAllUrlsMessage, | 709 base::Bind(&ExtensionSettingsHandler::HandleAllowOnAllUrlsMessage, |
| 711 AsWeakPtr())); | 710 AsWeakPtr())); |
| 712 web_ui()->RegisterMessageCallback("extensionSettingsUninstall", | |
| 713 base::Bind(&ExtensionSettingsHandler::HandleUninstallMessage, | |
| 714 AsWeakPtr())); | |
| 715 web_ui()->RegisterMessageCallback("extensionSettingsOptions", | 711 web_ui()->RegisterMessageCallback("extensionSettingsOptions", |
| 716 base::Bind(&ExtensionSettingsHandler::HandleOptionsMessage, | 712 base::Bind(&ExtensionSettingsHandler::HandleOptionsMessage, |
| 717 AsWeakPtr())); | 713 AsWeakPtr())); |
| 718 web_ui()->RegisterMessageCallback("extensionSettingsPermissions", | 714 web_ui()->RegisterMessageCallback("extensionSettingsPermissions", |
| 719 base::Bind(&ExtensionSettingsHandler::HandlePermissionsMessage, | 715 base::Bind(&ExtensionSettingsHandler::HandlePermissionsMessage, |
| 720 AsWeakPtr())); | 716 AsWeakPtr())); |
| 721 web_ui()->RegisterMessageCallback("extensionSettingsShowButton", | 717 web_ui()->RegisterMessageCallback("extensionSettingsShowButton", |
| 722 base::Bind(&ExtensionSettingsHandler::HandleShowButtonMessage, | 718 base::Bind(&ExtensionSettingsHandler::HandleShowButtonMessage, |
| 723 AsWeakPtr())); | 719 AsWeakPtr())); |
| 724 web_ui()->RegisterMessageCallback("extensionSettingsAutoupdate", | 720 web_ui()->RegisterMessageCallback("extensionSettingsAutoupdate", |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 811 | 807 |
| 812 void ExtensionSettingsHandler::OnExtensionDisableReasonsChanged( | 808 void ExtensionSettingsHandler::OnExtensionDisableReasonsChanged( |
| 813 const std::string& extension_id, int disable_reasons) { | 809 const std::string& extension_id, int disable_reasons) { |
| 814 MaybeUpdateAfterNotification(); | 810 MaybeUpdateAfterNotification(); |
| 815 } | 811 } |
| 816 | 812 |
| 817 void ExtensionSettingsHandler::OnExtensionManagementSettingsChanged() { | 813 void ExtensionSettingsHandler::OnExtensionManagementSettingsChanged() { |
| 818 MaybeUpdateAfterNotification(); | 814 MaybeUpdateAfterNotification(); |
| 819 } | 815 } |
| 820 | 816 |
| 821 void ExtensionSettingsHandler::ExtensionUninstallAccepted() { | |
| 822 DCHECK(!extension_id_prompting_.empty()); | |
| 823 | |
| 824 bool was_terminated = false; | |
| 825 | |
| 826 // The extension can be uninstalled in another window while the UI was | |
| 827 // showing. Do nothing in that case. | |
| 828 const Extension* extension = | |
| 829 extension_service_->GetExtensionById(extension_id_prompting_, true); | |
| 830 if (!extension) { | |
| 831 extension = | |
| 832 ExtensionRegistry::Get(Profile::FromWebUI(web_ui()))->GetExtensionById( | |
| 833 extension_id_prompting_, ExtensionRegistry::TERMINATED); | |
| 834 was_terminated = true; | |
| 835 } | |
| 836 if (!extension) | |
| 837 return; | |
| 838 | |
| 839 extension_service_->UninstallExtension( | |
| 840 extension_id_prompting_, | |
| 841 extensions::UNINSTALL_REASON_USER_INITIATED, | |
| 842 base::Bind(&base::DoNothing), | |
| 843 NULL); // Error. | |
| 844 extension_id_prompting_ = ""; | |
| 845 | |
| 846 // There will be no EXTENSION_UNLOADED notification for terminated | |
| 847 // extensions as they were already unloaded. | |
| 848 if (was_terminated) | |
| 849 HandleRequestExtensionsData(NULL); | |
| 850 } | |
| 851 | |
| 852 void ExtensionSettingsHandler::ExtensionUninstallCanceled() { | |
| 853 extension_id_prompting_ = ""; | |
| 854 } | |
| 855 | |
| 856 void ExtensionSettingsHandler::ExtensionWarningsChanged() { | 817 void ExtensionSettingsHandler::ExtensionWarningsChanged() { |
| 857 MaybeUpdateAfterNotification(); | 818 MaybeUpdateAfterNotification(); |
| 858 } | 819 } |
| 859 | 820 |
| 860 // This is called when the user clicks "Revoke File/Device Access." | 821 // This is called when the user clicks "Revoke File/Device Access." |
| 861 void ExtensionSettingsHandler::InstallUIProceed() { | 822 void ExtensionSettingsHandler::InstallUIProceed() { |
| 862 Profile* profile = Profile::FromWebUI(web_ui()); | 823 Profile* profile = Profile::FromWebUI(web_ui()); |
| 863 extensions::DevicePermissionsManager::Get(profile) | 824 extensions::DevicePermissionsManager::Get(profile) |
| 864 ->Clear(extension_id_prompting_); | 825 ->Clear(extension_id_prompting_); |
| 865 apps::SavedFilesService::Get(profile)->ClearQueue( | 826 apps::SavedFilesService::Get(profile)->ClearQueue( |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 CHECK_EQ(2u, args->GetSize()); | 1099 CHECK_EQ(2u, args->GetSize()); |
| 1139 std::string extension_id; | 1100 std::string extension_id; |
| 1140 std::string allow_str; | 1101 std::string allow_str; |
| 1141 CHECK(args->GetString(0, &extension_id)); | 1102 CHECK(args->GetString(0, &extension_id)); |
| 1142 CHECK(args->GetString(1, &allow_str)); | 1103 CHECK(args->GetString(1, &allow_str)); |
| 1143 util::SetAllowedScriptingOnAllUrls(extension_id, | 1104 util::SetAllowedScriptingOnAllUrls(extension_id, |
| 1144 extension_service_->GetBrowserContext(), | 1105 extension_service_->GetBrowserContext(), |
| 1145 allow_str == "true"); | 1106 allow_str == "true"); |
| 1146 } | 1107 } |
| 1147 | 1108 |
| 1148 void ExtensionSettingsHandler::HandleUninstallMessage( | |
| 1149 const base::ListValue* args) { | |
| 1150 CHECK_EQ(1U, args->GetSize()); | |
| 1151 std::string extension_id; | |
| 1152 CHECK(args->GetString(0, &extension_id)); | |
| 1153 const Extension* extension = | |
| 1154 extension_service_->GetInstalledExtension(extension_id); | |
| 1155 if (!extension) | |
| 1156 return; | |
| 1157 | |
| 1158 if (!management_policy_->UserMayModifySettings(extension, NULL) || | |
| 1159 management_policy_->MustRemainInstalled(extension, NULL)) { | |
| 1160 LOG(ERROR) << "An attempt was made to uninstall an extension that is " | |
| 1161 << "non-usermanagable. Extension id : " << extension->id(); | |
| 1162 return; | |
| 1163 } | |
| 1164 | |
| 1165 if (!extension_id_prompting_.empty()) | |
| 1166 return; // Only one prompt at a time. | |
| 1167 | |
| 1168 extension_id_prompting_ = extension_id; | |
| 1169 | |
| 1170 GetExtensionUninstallDialog()->ConfirmUninstall(extension); | |
| 1171 } | |
| 1172 | |
| 1173 void ExtensionSettingsHandler::HandleOptionsMessage( | 1109 void ExtensionSettingsHandler::HandleOptionsMessage( |
| 1174 const base::ListValue* args) { | 1110 const base::ListValue* args) { |
| 1175 const Extension* extension = GetActiveExtension(args); | 1111 const Extension* extension = GetActiveExtension(args); |
| 1176 if (!extension || OptionsPageInfo::GetOptionsPage(extension).is_empty()) | 1112 if (!extension || OptionsPageInfo::GetOptionsPage(extension).is_empty()) |
| 1177 return; | 1113 return; |
| 1178 ExtensionTabUtil::OpenOptionsPage(extension, | 1114 ExtensionTabUtil::OpenOptionsPage(extension, |
| 1179 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents())); | 1115 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents())); |
| 1180 } | 1116 } |
| 1181 | 1117 |
| 1182 void ExtensionSettingsHandler::HandlePermissionsMessage( | 1118 void ExtensionSettingsHandler::HandlePermissionsMessage( |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1454 (web_contents->GetURL() == BackgroundInfo::GetBackgroundURL(extension)); | 1390 (web_contents->GetURL() == BackgroundInfo::GetBackgroundURL(extension)); |
| 1455 result->push_back( | 1391 result->push_back( |
| 1456 ExtensionPage(web_contents->GetURL(), | 1392 ExtensionPage(web_contents->GetURL(), |
| 1457 process->GetID(), | 1393 process->GetID(), |
| 1458 host->GetRoutingID(), | 1394 host->GetRoutingID(), |
| 1459 process->GetBrowserContext()->IsOffTheRecord(), | 1395 process->GetBrowserContext()->IsOffTheRecord(), |
| 1460 is_background_page && has_generated_background_page)); | 1396 is_background_page && has_generated_background_page)); |
| 1461 } | 1397 } |
| 1462 } | 1398 } |
| 1463 | 1399 |
| 1464 ExtensionUninstallDialog* | |
| 1465 ExtensionSettingsHandler::GetExtensionUninstallDialog() { | |
| 1466 if (!extension_uninstall_dialog_.get()) { | |
| 1467 Browser* browser = chrome::FindBrowserWithWebContents( | |
| 1468 web_ui()->GetWebContents()); | |
| 1469 extension_uninstall_dialog_.reset( | |
| 1470 ExtensionUninstallDialog::Create(extension_service_->profile(), | |
| 1471 browser->window()->GetNativeWindow(), | |
| 1472 this)); | |
| 1473 } | |
| 1474 return extension_uninstall_dialog_.get(); | |
| 1475 } | |
| 1476 | |
| 1477 void ExtensionSettingsHandler::OnReinstallComplete( | 1400 void ExtensionSettingsHandler::OnReinstallComplete( |
| 1478 bool success, | 1401 bool success, |
| 1479 const std::string& error, | 1402 const std::string& error, |
| 1480 webstore_install::Result result) { | 1403 webstore_install::Result result) { |
| 1481 MaybeUpdateAfterNotification(); | 1404 MaybeUpdateAfterNotification(); |
| 1482 } | 1405 } |
| 1483 | 1406 |
| 1484 } // namespace extensions | 1407 } // namespace extensions |
| OLD | NEW |