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

Side by Side Diff: chrome/browser/ui/webui/extensions/extension_settings_handler.cc

Issue 948413005: [Extensions] Make chrome://extensions use management.uninstall (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Kalman's Created 5 years, 9 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
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/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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698