| 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 f2e9ac6ffc95436deb9a29f80f9a6c904bc2bb8b..9470e7821be80f10b1f9df841071588ddfea849e 100644
|
| --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
|
| +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
|
| @@ -756,7 +756,9 @@ ExtensionFunction::ResponseAction DeveloperPrivateReloadFunction::Run() {
|
| if (!extension)
|
| return RespondNow(Error(kNoSuchExtensionError));
|
|
|
| - bool fail_quietly = params->options && params->options->fail_quietly;
|
| + bool fail_quietly = params->options &&
|
| + params->options->fail_quietly &&
|
| + *params->options->fail_quietly;
|
|
|
| ExtensionService* service = GetExtensionService(browser_context());
|
| if (fail_quietly)
|
| @@ -871,7 +873,15 @@ bool DeveloperPrivateInspectFunction::RunSync() {
|
|
|
| DeveloperPrivateInspectFunction::~DeveloperPrivateInspectFunction() {}
|
|
|
| +DeveloperPrivateLoadUnpackedFunction::DeveloperPrivateLoadUnpackedFunction()
|
| + : fail_quietly_(false) {
|
| +}
|
| +
|
| ExtensionFunction::ResponseAction DeveloperPrivateLoadUnpackedFunction::Run() {
|
| + scoped_ptr<developer_private::LoadUnpacked::Params> params(
|
| + developer_private::LoadUnpacked::Params::Create(*args_));
|
| + EXTENSION_FUNCTION_VALIDATE(params);
|
| +
|
| if (!ShowPicker(
|
| ui::SelectFileDialog::SELECT_FOLDER,
|
| l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY),
|
| @@ -880,16 +890,25 @@ ExtensionFunction::ResponseAction DeveloperPrivateLoadUnpackedFunction::Run() {
|
| return RespondNow(Error(kCouldNotShowSelectFileDialogError));
|
| }
|
|
|
| + fail_quietly_ = params->options &&
|
| + params->options->fail_quietly &&
|
| + *params->options->fail_quietly;
|
| +
|
| AddRef(); // Balanced in FileSelected / FileSelectionCanceled.
|
| return RespondLater();
|
| }
|
|
|
| void DeveloperPrivateLoadUnpackedFunction::FileSelected(
|
| const base::FilePath& path) {
|
| - UnpackedInstaller::Create(GetExtensionService(browser_context()))->Load(path);
|
| + scoped_refptr<UnpackedInstaller> installer(
|
| + UnpackedInstaller::Create(GetExtensionService(browser_context())));
|
| + installer->set_be_noisy_on_failure(!fail_quietly_);
|
| + installer->set_completion_callback(
|
| + base::Bind(&DeveloperPrivateLoadUnpackedFunction::OnLoadComplete, this));
|
| + installer->Load(path);
|
| +
|
| DeveloperPrivateAPI::Get(browser_context())->SetLastUnpackedDirectory(path);
|
| - // TODO(devlin): Shouldn't we wait until the extension is loaded?
|
| - Respond(NoArguments());
|
| +
|
| Release(); // Balanced in Run().
|
| }
|
|
|
| @@ -900,6 +919,13 @@ void DeveloperPrivateLoadUnpackedFunction::FileSelectionCanceled() {
|
| Release(); // Balanced in Run().
|
| }
|
|
|
| +void DeveloperPrivateLoadUnpackedFunction::OnLoadComplete(
|
| + const Extension* extension,
|
| + const base::FilePath& file_path,
|
| + const std::string& error) {
|
| + Respond(extension ? NoArguments() : Error(error));
|
| +}
|
| +
|
| bool DeveloperPrivateChooseEntryFunction::ShowPicker(
|
| ui::SelectFileDialog::Type picker_type,
|
| const base::string16& select_title,
|
|
|