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

Side by Side Diff: chrome/browser/extensions/api/developer_private/developer_private_api.cc

Issue 953003003: [Extensions] Merge developerPrivate.enable and management.setEnabled functions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Latest master 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/extensions/api/developer_private/developer_private_api. h" 5 #include "chrome/browser/extensions/api/developer_private/developer_private_api. 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/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 scoped_ptr<Event> event(new Event( 156 scoped_ptr<Event> event(new Event(
157 developer_private::OnItemStateChanged::kEventName, args.Pass())); 157 developer_private::OnItemStateChanged::kEventName, args.Pass()));
158 EventRouter::Get(browser_context)->BroadcastEvent(event.Pass()); 158 EventRouter::Get(browser_context)->BroadcastEvent(event.Pass());
159 } 159 }
160 160
161 } // namespace 161 } // namespace
162 162
163 namespace AllowFileAccess = api::developer_private::AllowFileAccess; 163 namespace AllowFileAccess = api::developer_private::AllowFileAccess;
164 namespace AllowIncognito = api::developer_private::AllowIncognito; 164 namespace AllowIncognito = api::developer_private::AllowIncognito;
165 namespace ChoosePath = api::developer_private::ChoosePath; 165 namespace ChoosePath = api::developer_private::ChoosePath;
166 namespace Enable = api::developer_private::Enable;
167 namespace GetItemsInfo = api::developer_private::GetItemsInfo; 166 namespace GetItemsInfo = api::developer_private::GetItemsInfo;
168 namespace Inspect = api::developer_private::Inspect; 167 namespace Inspect = api::developer_private::Inspect;
169 namespace PackDirectory = api::developer_private::PackDirectory; 168 namespace PackDirectory = api::developer_private::PackDirectory;
170 namespace Reload = api::developer_private::Reload; 169 namespace Reload = api::developer_private::Reload;
171 170
172 static base::LazyInstance<BrowserContextKeyedAPIFactory<DeveloperPrivateAPI> > 171 static base::LazyInstance<BrowserContextKeyedAPIFactory<DeveloperPrivateAPI> >
173 g_factory = LAZY_INSTANCE_INITIALIZER; 172 g_factory = LAZY_INSTANCE_INITIALIZER;
174 173
175 // static 174 // static
176 BrowserContextKeyedAPIFactory<DeveloperPrivateAPI>* 175 BrowserContextKeyedAPIFactory<DeveloperPrivateAPI>*
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 SendResponse(true); 789 SendResponse(true);
791 Release(); 790 Release();
792 } 791 }
793 792
794 DeveloperPrivateShowPermissionsDialogFunction:: 793 DeveloperPrivateShowPermissionsDialogFunction::
795 DeveloperPrivateShowPermissionsDialogFunction() {} 794 DeveloperPrivateShowPermissionsDialogFunction() {}
796 795
797 DeveloperPrivateShowPermissionsDialogFunction:: 796 DeveloperPrivateShowPermissionsDialogFunction::
798 ~DeveloperPrivateShowPermissionsDialogFunction() {} 797 ~DeveloperPrivateShowPermissionsDialogFunction() {}
799 798
800 DeveloperPrivateEnableFunction::DeveloperPrivateEnableFunction() {}
801
802 bool DeveloperPrivateEnableFunction::RunSync() {
803 scoped_ptr<Enable::Params> params(Enable::Params::Create(*args_));
804 EXTENSION_FUNCTION_VALIDATE(params.get());
805
806 const std::string& extension_id = params->item_id;
807
808 const Extension* extension =
809 ExtensionRegistry::Get(GetProfile())->GetExtensionById(
810 extension_id, ExtensionRegistry::EVERYTHING);
811 if (!extension) {
812 LOG(ERROR) << "Did not find extension with id " << extension_id;
813 return false;
814 }
815 ExtensionSystem* system = ExtensionSystem::Get(GetProfile());
816 ManagementPolicy* policy = system->management_policy();
817 bool enable = params->enable;
818 if (!policy->UserMayModifySettings(extension, nullptr) ||
819 (!enable && policy->MustRemainEnabled(extension, nullptr)) ||
820 (enable && policy->MustRemainDisabled(extension, nullptr, nullptr))) {
821 LOG(ERROR) << "Attempt to change enable state denied by management policy. "
822 << "Extension id: " << extension_id;
823 return false;
824 }
825
826 ExtensionService* service = system->extension_service();
827 if (enable) {
828 ExtensionPrefs* prefs = ExtensionPrefs::Get(GetProfile());
829 if (prefs->DidExtensionEscalatePermissions(extension_id)) {
830 // If the extension escalated permissions, we have to show a dialog.
831 content::WebContents* web_contents = GetSenderWebContents();
832 if (!web_contents)
833 return false;
834
835 ShowExtensionDisabledDialog(service, web_contents, extension);
836 } else if ((prefs->GetDisableReasons(extension_id) &
837 Extension::DISABLE_UNSUPPORTED_REQUIREMENT)) {
838 // Recheck the requirements.
839 requirements_checker_.reset(new ChromeRequirementsChecker());
840 AddRef(); // Released in OnRequirementsChecked.
841 // TODO(devlin): Uh... asynchronous code in a sync extension function?
842 requirements_checker_->Check(
843 make_scoped_refptr(extension),
844 base::Bind(&DeveloperPrivateEnableFunction::OnRequirementsChecked,
845 this, extension_id));
846 } else {
847 // Otherwise, we're good to re-enable the extension.
848 service->EnableExtension(extension_id);
849 }
850 } else { // !enable (i.e., disable)
851 service->DisableExtension(extension_id, Extension::DISABLE_USER_ACTION);
852 }
853 return true;
854 }
855
856 void DeveloperPrivateEnableFunction::OnRequirementsChecked(
857 const std::string& extension_id,
858 const std::vector<std::string>& requirements_errors) {
859 if (requirements_errors.empty()) {
860 GetExtensionService(GetProfile())->EnableExtension(extension_id);
861 } else {
862 ExtensionErrorReporter::GetInstance()->ReportError(
863 base::UTF8ToUTF16(JoinString(requirements_errors, ' ')),
864 true); // Be noisy.
865 }
866 Release();
867 }
868
869 DeveloperPrivateEnableFunction::~DeveloperPrivateEnableFunction() {}
870
871 bool DeveloperPrivateInspectFunction::RunSync() { 799 bool DeveloperPrivateInspectFunction::RunSync() {
872 scoped_ptr<developer::Inspect::Params> params( 800 scoped_ptr<developer::Inspect::Params> params(
873 developer::Inspect::Params::Create(*args_)); 801 developer::Inspect::Params::Create(*args_));
874 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); 802 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL);
875 const developer::InspectOptions& options = params->options; 803 const developer::InspectOptions& options = params->options;
876 804
877 int render_process_id; 805 int render_process_id;
878 base::StringToInt(options.render_process_id, &render_process_id); 806 base::StringToInt(options.render_process_id, &render_process_id);
879 807
880 if (render_process_id == -1) { 808 if (render_process_id == -1) {
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
1394 } 1322 }
1395 1323
1396 error_ui_util::HandleOpenDevTools(dict); 1324 error_ui_util::HandleOpenDevTools(dict);
1397 1325
1398 return true; 1326 return true;
1399 } 1327 }
1400 1328
1401 } // namespace api 1329 } // namespace api
1402 1330
1403 } // namespace extensions 1331 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698