| 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 69d31bc879d316fa912ce2463b18f61f24d0db35..dca4feff54c2e9afef5891db05cbd505f3e832bb 100644
|
| --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
|
| +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
|
| @@ -29,6 +29,7 @@
|
| #include "chrome/browser/extensions/extension_ui_util.h"
|
| #include "chrome/browser/extensions/extension_util.h"
|
| #include "chrome/browser/extensions/install_verifier.h"
|
| +#include "chrome/browser/extensions/path_util.h"
|
| #include "chrome/browser/extensions/scripting_permissions_modifier.h"
|
| #include "chrome/browser/extensions/shared_module_service.h"
|
| #include "chrome/browser/extensions/unpacked_installer.h"
|
| @@ -42,6 +43,7 @@
|
| #include "chrome/browser/ui/extensions/app_launch_params.h"
|
| #include "chrome/browser/ui/extensions/application_launch.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| +#include "chrome/browser/ui/webui/extensions/extension_loader_handler.h"
|
| #include "chrome/common/extensions/api/developer_private.h"
|
| #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
|
| #include "chrome/common/pref_names.h"
|
| @@ -723,9 +725,7 @@ void DeveloperPrivateShowPermissionsDialogFunction::Finish() {
|
| Respond(NoArguments());
|
| }
|
|
|
| -DeveloperPrivateLoadUnpackedFunction::DeveloperPrivateLoadUnpackedFunction()
|
| - : fail_quietly_(false) {
|
| -}
|
| +DeveloperPrivateLoadUnpackedFunction::DeveloperPrivateLoadUnpackedFunction() {}
|
|
|
| ExtensionFunction::ResponseAction DeveloperPrivateLoadUnpackedFunction::Run() {
|
| std::unique_ptr<developer::LoadUnpacked::Params> params(
|
| @@ -744,6 +744,9 @@ ExtensionFunction::ResponseAction DeveloperPrivateLoadUnpackedFunction::Run() {
|
| params->options->fail_quietly &&
|
| *params->options->fail_quietly;
|
|
|
| + populate_error_ = params->options && params->options->populate_error &&
|
| + *params->options->populate_error;
|
| +
|
| AddRef(); // Balanced in FileSelected / FileSelectionCanceled.
|
| return RespondLater();
|
| }
|
| @@ -773,7 +776,35 @@ void DeveloperPrivateLoadUnpackedFunction::OnLoadComplete(
|
| const Extension* extension,
|
| const base::FilePath& file_path,
|
| const std::string& error) {
|
| - Respond(extension ? NoArguments() : Error(error));
|
| + if (extension || !populate_error_) {
|
| + Respond(extension ? NoArguments() : Error(error));
|
| + return;
|
| + }
|
| +
|
| + ExtensionLoaderHandler::GetManifestError(
|
| + error, file_path,
|
| + base::Bind(&DeveloperPrivateLoadUnpackedFunction::OnGotManifestError,
|
| + this));
|
| +}
|
| +
|
| +void DeveloperPrivateLoadUnpackedFunction::OnGotManifestError(
|
| + const base::FilePath& file_path,
|
| + const std::string& error,
|
| + size_t line_number,
|
| + const std::string& manifest) {
|
| + base::FilePath prettified_path = path_util::PrettifyPath(file_path);
|
| +
|
| + SourceHighlighter highlighter(manifest, line_number);
|
| + developer::LoadError response;
|
| + response.error = error;
|
| + response.path = base::UTF16ToUTF8(prettified_path.LossyDisplayName());
|
| +
|
| + response.source = base::MakeUnique<developer::ErrorFileSource>();
|
| + response.source->before_highlight = highlighter.GetBeforeFeature();
|
| + response.source->highlight = highlighter.GetFeature();
|
| + response.source->after_highlight = highlighter.GetAfterFeature();
|
| +
|
| + Respond(OneArgument(response.ToValue()));
|
| }
|
|
|
| bool DeveloperPrivateChooseEntryFunction::ShowPicker(
|
|
|