Commit f4859e36 authored by Karan Bhatia's avatar Karan Bhatia Committed by Commit Bot

SandboxedUnpacker: Prevent unnecessary PostTask while reporting failure.

SandboxedUnpacker::ReportUnpackingError posts a task on the
|unpacker_io_task_runner_| to report unpacking failures. However, all its
callers are on |unpacker_io_task_runner_| itself. Prevent unnecessarily posting
a task by merging ReportUnpackingError and UnpackExtensionFailed methods.

BUG=None

Change-Id: Id229392333d0236fd60a5cce0cf642f3aa436ab8
Reviewed-on: https://chromium-review.googlesource.com/1108574
Commit-Queue: Karan Bhatia <karandeepb@chromium.org>
Reviewed-by: default avatarJay Civelli <jcivelli@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#569167}
parent 9362ad07
......@@ -437,11 +437,11 @@ void SandboxedUnpacker::ReadManifestDone(
const base::Optional<std::string>& error) {
DCHECK(unpacker_io_task_runner_->RunsTasksInCurrentSequence());
if (error) {
ReportUnpackingError(*error);
ReportUnpackExtensionFailed(*error);
return;
}
if (!manifest || !manifest->is_dict()) {
ReportUnpackingError(manifest_errors::kInvalidManifest);
ReportUnpackExtensionFailed(manifest_errors::kInvalidManifest);
return;
}
......@@ -454,13 +454,13 @@ void SandboxedUnpacker::ReadManifestDone(
Extension::Create(extension_root_, location_, *manifest_dict,
creation_flags_, extension_id_, &error_msg));
if (!extension) {
ReportUnpackingError(error_msg);
ReportUnpackExtensionFailed(error_msg);
return;
}
std::vector<InstallWarning> warnings;
if (!file_util::ValidateExtension(extension.get(), &error_msg, &warnings)) {
ReportUnpackingError(error_msg);
ReportUnpackExtensionFailed(error_msg);
return;
}
extension->AddInstallWarnings(warnings);
......@@ -702,12 +702,13 @@ void SandboxedUnpacker::ReadJSONRulesetDone(
DCHECK(unpacker_io_task_runner_->RunsTasksInCurrentSequence());
if (error) {
ReportUnpackingError(*error);
ReportUnpackExtensionFailed(*error);
return;
}
if (json_ruleset && !json_ruleset->is_list()) {
ReportUnpackingError(manifest_errors::kDeclarativeNetRequestListNotPassed);
ReportUnpackExtensionFailed(
manifest_errors::kDeclarativeNetRequestListNotPassed);
return;
}
......@@ -776,17 +777,11 @@ data_decoder::mojom::JsonParser* SandboxedUnpacker::GetJsonParserPtr() {
return json_parser_ptr_.get();
}
void SandboxedUnpacker::ReportUnpackingError(base::StringPiece error) {
unpacker_io_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&SandboxedUnpacker::UnpackExtensionFailed, this,
base::UTF8ToUTF16(error)));
}
void SandboxedUnpacker::UnpackExtensionFailed(const base::string16& error) {
void SandboxedUnpacker::ReportUnpackExtensionFailed(base::StringPiece error) {
DCHECK(unpacker_io_task_runner_->RunsTasksInCurrentSequence());
ReportFailure(
SandboxedUnpackerFailureReason::UNPACKER_CLIENT_FAILED,
l10n_util::GetStringFUTF16(IDS_EXTENSION_PACKAGE_ERROR_MESSAGE, error));
ReportFailure(SandboxedUnpackerFailureReason::UNPACKER_CLIENT_FAILED,
l10n_util::GetStringFUTF16(IDS_EXTENSION_PACKAGE_ERROR_MESSAGE,
base::UTF8ToUTF16(error)));
}
base::string16 SandboxedUnpacker::FailureReasonToString16(
......
......@@ -62,6 +62,9 @@ class SandboxedUnpackerClient
// dnr_ruleset_checksum - Checksum for the indexed ruleset corresponding to
// the Declarative Net Request API. Optional since it's only valid for
// extensions which provide a declarative ruleset.
//
// Note: OnUnpackSuccess/Failure may be called either synchronously or
// asynchronously from SandboxedUnpacker::StartWithCrx/Directory.
virtual void OnUnpackSuccess(
const base::FilePath& temp_dir,
const base::FilePath& extension_root,
......@@ -163,9 +166,9 @@ class SandboxedUnpacker : public base::RefCountedThreadSafe<SandboxedUnpacker> {
const base::Optional<std::string>& error);
void UnpackExtensionSucceeded(
std::unique_ptr<base::DictionaryValue> manifest);
void UnpackExtensionFailed(const base::string16& error);
void ReportUnpackingError(base::StringPiece error);
// Helper which calls ReportFailure.
void ReportUnpackExtensionFailed(base::StringPiece error);
void ImageSanitizationDone(std::unique_ptr<base::DictionaryValue> manifest,
ImageSanitizer::Status status,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment