Chromium Code Reviews| 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 4d55e56bc09c21c44bfe9402d0af230f05a678a6..1449abf01d5eafbd2d62c92ffc730b342a661132 100644 |
| --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| @@ -4,8 +4,6 @@ |
| #include "chrome/browser/extensions/api/developer_private/developer_private_api.h" |
| -#include "apps/app_load_service.h" |
| -#include "apps/saved_files_service.h" |
| #include "base/base64.h" |
| #include "base/bind.h" |
| #include "base/files/file_util.h" |
| @@ -17,6 +15,7 @@ |
| #include "chrome/browser/extensions/api/developer_private/developer_private_mangle.h" |
| #include "chrome/browser/extensions/api/developer_private/entry_picker.h" |
| #include "chrome/browser/extensions/api/developer_private/extension_info_generator.h" |
| +#include "chrome/browser/extensions/api/developer_private/show_permissions_dialog_helper.h" |
| #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" |
| #include "chrome/browser/extensions/devtools_util.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| @@ -39,7 +38,6 @@ |
| #include "content/public/browser/site_instance.h" |
| #include "content/public/browser/storage_partition.h" |
| #include "content/public/browser/web_contents.h" |
| -#include "extensions/browser/api/device_permissions_manager.h" |
| #include "extensions/browser/app_window/app_window.h" |
| #include "extensions/browser/app_window/app_window_registry.h" |
| #include "extensions/browser/extension_error.h" |
| @@ -88,6 +86,8 @@ const char kNoSuchRendererError[] = "No such renderer."; |
| const char kInvalidPathError[] = "Invalid path."; |
| const char kManifestKeyIsRequiredError[] = |
| "The 'manifestKey' argument is required for manifest files."; |
| +const char kCouldNotFindWebContentsError[] = |
| + "Could not find a valid web contents."; |
| const char kUnpackedAppsFolder[] = "apps_target"; |
| const char kManifestFile[] = "manifest.json"; |
| @@ -540,6 +540,8 @@ DeveloperPrivateAllowIncognitoFunction::Run() { |
| DeveloperPrivateAllowIncognitoFunction:: |
| ~DeveloperPrivateAllowIncognitoFunction() {} |
| +DeveloperPrivateReloadFunction::~DeveloperPrivateReloadFunction() {} |
| + |
| ExtensionFunction::ResponseAction DeveloperPrivateReloadFunction::Run() { |
| scoped_ptr<Reload::Params> params(Reload::Params::Create(*args_)); |
| EXTENSION_FUNCTION_VALIDATE(params.get()); |
| @@ -563,71 +565,40 @@ ExtensionFunction::ResponseAction DeveloperPrivateReloadFunction::Run() { |
| return RespondNow(NoArguments()); |
| } |
| -bool DeveloperPrivateShowPermissionsDialogFunction::RunSync() { |
| - EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &extension_id_)); |
| - CHECK(!extension_id_.empty()); |
| - AppWindowRegistry* registry = AppWindowRegistry::Get(GetProfile()); |
| - DCHECK(registry); |
| - AppWindow* app_window = |
| - registry->GetAppWindowForRenderViewHost(render_view_host()); |
| - prompt_.reset(new ExtensionInstallPrompt(app_window->web_contents())); |
| - const Extension* extension = |
| - ExtensionRegistry::Get(GetProfile()) |
| - ->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING); |
| +DeveloperPrivateShowPermissionsDialogFunction:: |
| +DeveloperPrivateShowPermissionsDialogFunction() {} |
| - if (!extension) |
| - return false; |
| +DeveloperPrivateShowPermissionsDialogFunction:: |
| +~DeveloperPrivateShowPermissionsDialogFunction() {} |
| - // Released by InstallUIAbort or InstallUIProceed. |
| - AddRef(); |
| - std::vector<base::FilePath> retained_file_paths; |
| - if (extension->permissions_data()->HasAPIPermission( |
| - APIPermission::kFileSystem)) { |
| - std::vector<apps::SavedFileEntry> retained_file_entries = |
| - apps::SavedFilesService::Get(GetProfile()) |
| - ->GetAllFileEntries(extension_id_); |
| - for (size_t i = 0; i < retained_file_entries.size(); i++) { |
| - retained_file_paths.push_back(retained_file_entries[i].path); |
| - } |
| - } |
| - std::vector<base::string16> retained_device_messages; |
| - if (extension->permissions_data()->HasAPIPermission(APIPermission::kUsb)) { |
| - retained_device_messages = |
| - extensions::DevicePermissionsManager::Get(GetProfile()) |
| - ->GetPermissionMessageStrings(extension_id_); |
| - } |
| - prompt_->ReviewPermissions( |
| - this, extension, retained_file_paths, retained_device_messages); |
| - return true; |
| -} |
| +ExtensionFunction::ResponseAction |
| +DeveloperPrivateShowPermissionsDialogFunction::Run() { |
| + scoped_ptr<developer::ShowPermissionsDialog::Params> params( |
| + developer::ShowPermissionsDialog::Params::Create(*args_)); |
| + EXTENSION_FUNCTION_VALIDATE(params); |
| -DeveloperPrivateReloadFunction::~DeveloperPrivateReloadFunction() {} |
| + const Extension* target_extension = GetExtensionById(params->extension_id); |
| + if (!target_extension) |
| + return RespondNow(Error(kNoSuchExtensionError)); |
| -// This is called when the user clicks "Revoke File Access." |
| -void DeveloperPrivateShowPermissionsDialogFunction::InstallUIProceed() { |
| - Profile* profile = GetProfile(); |
| - extensions::DevicePermissionsManager::Get(profile)->Clear(extension_id_); |
| - const Extension* extension = ExtensionRegistry::Get( |
| - profile)->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING); |
| - apps::SavedFilesService::Get(profile)->ClearQueue(extension); |
| - apps::AppLoadService::Get(profile) |
| - ->RestartApplicationIfRunning(extension_id_); |
| - SendResponse(true); |
| - Release(); |
| + content::WebContents* web_contents = GetSenderWebContents(); |
| + if (!web_contents) |
| + return RespondNow(Error(kCouldNotFindWebContentsError)); |
| + |
| + show_permissions_dialog_helper_.reset(new ShowPermissionsDialogHelper()); |
|
not at google - send to devlin
2015/03/13 23:52:31
Is this a leak?
- This class holds onto a (the) re
Devlin
2015/03/16 16:42:17
Done.
|
| + show_permissions_dialog_helper_->Show( |
| + web_contents, |
| + browser_context(), |
| + target_extension, |
| + extension() == nullptr, // From extensions page if no calling extension. |
| + base::Bind(&DeveloperPrivateShowPermissionsDialogFunction::Finish, this)); |
| + return RespondLater(); |
| } |
| -void DeveloperPrivateShowPermissionsDialogFunction::InstallUIAbort( |
| - bool user_initiated) { |
| - SendResponse(true); |
| - Release(); |
| +void DeveloperPrivateShowPermissionsDialogFunction::Finish() { |
| + Respond(NoArguments()); |
| } |
| -DeveloperPrivateShowPermissionsDialogFunction:: |
| - DeveloperPrivateShowPermissionsDialogFunction() {} |
| - |
| -DeveloperPrivateShowPermissionsDialogFunction:: |
| - ~DeveloperPrivateShowPermissionsDialogFunction() {} |
| - |
| ExtensionFunction::ResponseAction DeveloperPrivateInspectFunction::Run() { |
| scoped_ptr<developer::Inspect::Params> params( |
| developer::Inspect::Params::Create(*args_)); |