Commit c1d76e1f authored by Karandeep Bhatia's avatar Karandeep Bhatia Committed by Commit Bot

DNR: Fix installation through webstore.

Extension installation through the webstore involves creation of a dummy
extension with an empty extension root path. The empty extension root
path causes DNRManifestHandler::Parse to incorrectly raise an error
while validating the paths for the extensions' ruleset files. This
happens because ExtensionResource::empty() just checks whether the
extension root path is empty.

Fix this by replacing the ExtensionResource::empty() check with a more
comprehensive check.

BUG=1087348
TEST=Ensure
https://chrome.google.com/webstore/detail/ajfdfkmbjmdjekckfgibicedaabjoong
installs correctly.
TBR=rdevlin.chronin@chromium.org

Change-Id: I4e58cef19da771b17cc1d1541ccc7424b5b6f3af
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2219779
Commit-Queue: Karan Bhatia <karandeepb@chromium.org>
Auto-Submit: Karan Bhatia <karandeepb@chromium.org>
Reviewed-by: default avatarKelvin Jiang <kelvinjiang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#772963}
parent d808c4ea
......@@ -28,6 +28,19 @@ namespace dnr_api = api::declarative_net_request;
namespace declarative_net_request {
namespace {
bool IsEmptyExtensionResource(const ExtensionResource& resource) {
// Note that just checking for ExtensionResource::empty() isn't correct since
// it checks |ExtensionResource::extension_root()::empty()| which can return
// true for a dummy extension created as part of the webstore installation
// flow. See crbug.com/1087348.
return resource.extension_id().empty() && resource.extension_root().empty() &&
resource.relative_path().empty();
}
} // namespace
DNRManifestHandler::DNRManifestHandler() = default;
DNRManifestHandler::~DNRManifestHandler() = default;
......@@ -83,7 +96,8 @@ bool DNRManifestHandler::Parse(Extension* extension, base::string16* error) {
int index, DNRManifestData::RulesetInfo* info) {
// Path validation.
ExtensionResource resource = extension->GetResource(rulesets[index].path);
if (resource.empty() || resource.relative_path().ReferencesParent()) {
if (IsEmptyExtensionResource(resource) ||
resource.relative_path().ReferencesParent()) {
*error = ErrorUtils::FormatErrorMessageUTF16(
errors::kRulesFileIsInvalid, keys::kDeclarativeNetRequestKey,
keys::kDeclarativeRuleResourcesKey, rulesets[index].path);
......
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