Index: chrome/browser/extensions/api/developer_private/developer_private_api.cc |
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
index d09f8a471de9a114bcbfd4cc9f56611dddc344bc..bf09f0bd94d2e8b022c93ac345d4305087e1705e 100644 |
--- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
@@ -90,11 +90,15 @@ namespace developer_private = api::developer_private; |
namespace { |
const char kNoSuchExtensionError[] = "No such extension."; |
+const char kCannotModifyPolicyExtensionError[] = |
+ "Cannot modify the extension by policy."; |
+const char kRequiresUserGestureError[] = |
+ "This action requires a user gesture."; |
const char kUnpackedAppsFolder[] = "apps_target"; |
-ExtensionService* GetExtensionService(Profile* profile) { |
- return ExtensionSystem::Get(profile)->extension_service(); |
+ExtensionService* GetExtensionService(content::BrowserContext* context) { |
+ return ExtensionSystem::Get(context)->extension_service(); |
} |
ExtensionUpdater* GetExtensionUpdater(Profile* profile) { |
@@ -671,33 +675,33 @@ bool DeveloperPrivateGetItemsInfoFunction::RunAsync() { |
DeveloperPrivateGetItemsInfoFunction::~DeveloperPrivateGetItemsInfoFunction() {} |
-bool DeveloperPrivateAllowFileAccessFunction::RunSync() { |
+ExtensionFunction::ResponseAction |
+DeveloperPrivateAllowFileAccessFunction::Run() { |
scoped_ptr<AllowFileAccess::Params> params( |
AllowFileAccess::Params::Create(*args_)); |
EXTENSION_FUNCTION_VALIDATE(params.get()); |
- EXTENSION_FUNCTION_VALIDATE(user_gesture_); |
- |
- ExtensionSystem* system = ExtensionSystem::Get(GetProfile()); |
- ManagementPolicy* management_policy = system->management_policy(); |
const Extension* extension = |
- ExtensionRegistry::Get(GetProfile()) |
+ ExtensionRegistry::Get(browser_context()) |
->GetExtensionById(params->item_id, ExtensionRegistry::EVERYTHING); |
- bool result = true; |
- if (!extension) { |
- result = false; |
- } else if (!management_policy->UserMayModifySettings(extension, NULL)) { |
+ if (!extension) |
+ return RespondNow(Error(kNoSuchExtensionError)); |
+ |
+ if (!user_gesture()) |
+ return RespondNow(Error(kRequiresUserGestureError)); |
+ |
+ ManagementPolicy* management_policy = |
+ ExtensionSystem::Get(browser_context())->management_policy(); |
+ if (!management_policy->UserMayModifySettings(extension, nullptr)) { |
LOG(ERROR) << "Attempt to change allow file access of an extension that " |
<< "non-usermanagable was made. Extension id : " |
<< extension->id(); |
- result = false; |
- } else { |
- util::SetAllowFileAccess(extension->id(), GetProfile(), params->allow); |
- result = true; |
+ return RespondNow(Error(kCannotModifyPolicyExtensionError)); |
} |
- return result; |
+ util::SetAllowFileAccess(extension->id(), browser_context(), params->allow); |
+ return RespondNow(NoArguments()); |
} |
DeveloperPrivateAllowFileAccessFunction:: |
@@ -716,6 +720,9 @@ DeveloperPrivateAllowIncognitoFunction::Run() { |
if (!extension) |
return RespondNow(Error(kNoSuchExtensionError)); |
+ if (!user_gesture()) |
not at google - send to devlin
2015/02/26 00:56:47
... drive by I guess?
Devlin
2015/02/26 01:14:03
Yes. :)
|
+ return RespondNow(Error(kRequiresUserGestureError)); |
+ |
// Should this take into account policy settings? |
util::SetIsIncognitoEnabled( |
extension->id(), browser_context(), params->allow); |
@@ -726,14 +733,31 @@ DeveloperPrivateAllowIncognitoFunction::Run() { |
DeveloperPrivateAllowIncognitoFunction:: |
~DeveloperPrivateAllowIncognitoFunction() {} |
-bool DeveloperPrivateReloadFunction::RunSync() { |
+ExtensionFunction::ResponseAction DeveloperPrivateReloadFunction::Run() { |
scoped_ptr<Reload::Params> params(Reload::Params::Create(*args_)); |
EXTENSION_FUNCTION_VALIDATE(params.get()); |
- CHECK(!params->item_id.empty()); |
- ExtensionService* service = GetExtensionService(GetProfile()); |
- service->ReloadExtension(params->item_id); |
- return true; |
+ const Extension* extension = |
+ ExtensionRegistry::Get(browser_context()) |
+ ->GetExtensionById(params->item_id, ExtensionRegistry::EVERYTHING); |
not at google - send to devlin
2015/02/26 00:56:47
Can we pull this huge 3-line "get me installed ext
Devlin
2015/02/26 01:14:03
Was meaning to do that for awhile. Done.
|
+ if (!extension) |
+ return RespondNow(Error(kNoSuchExtensionError)); |
+ |
+ // Default to failing "noisily". |
not at google - send to devlin
2015/02/26 00:56:47
comment unnecssary
Devlin
2015/02/26 01:14:03
Done.
|
+ bool fail_quietly = |
+ params->options.get() && |
+ params->options->fail_quietly.get() && |
+ *params->options->fail_quietly; |
+ |
+ ExtensionService* service = GetExtensionService(browser_context()); |
+ if (fail_quietly) |
+ service->ReloadExtensionWithQuietFailure(params->item_id); |
+ else |
+ service->ReloadExtension(params->item_id); |
+ |
+ // TODO(devlin): We shouldn't return until the extension has finished trying |
+ // to reload (and then we could also return the error). |
+ return RespondNow(NoArguments()); |
} |
bool DeveloperPrivateShowPermissionsDialogFunction::RunSync() { |