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

DNR: Split FileBackedRulesetSource into RulesetSource & FileBackedRulesetSource.

In preparation of adding support for session scoped rules (which are not
file backed), split the class FileBackedRulesetSource into two classes:
a RulesetSource base class and a FileBackedRulesetSource derived class.
Since the session scoped ruleset will not be file backed, it will use
the RulesetSource class.

BUG=1043200

Change-Id: Ia06d4b2ca956de516a542aa3dc69bc70cbe1829d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2495787
Commit-Queue: Karan Bhatia <karandeepb@chromium.org>
Reviewed-by: default avatarKelvin Jiang <kelvinjiang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827760}
parent ca4be8b8
...@@ -77,6 +77,8 @@ source_set("core") { ...@@ -77,6 +77,8 @@ source_set("core") {
"parse_info.h", "parse_info.h",
"ruleset_install_pref.cc", "ruleset_install_pref.cc",
"ruleset_install_pref.h", "ruleset_install_pref.h",
"ruleset_source.cc",
"ruleset_source.h",
"utils.cc", "utils.cc",
"utils.h", "utils.h",
] ]
......
...@@ -398,9 +398,9 @@ FileBackedRulesetSource& FileBackedRulesetSource::operator=( ...@@ -398,9 +398,9 @@ FileBackedRulesetSource& FileBackedRulesetSource::operator=(
FileBackedRulesetSource&&) = default; FileBackedRulesetSource&&) = default;
FileBackedRulesetSource FileBackedRulesetSource::Clone() const { FileBackedRulesetSource FileBackedRulesetSource::Clone() const {
return FileBackedRulesetSource(json_path_, indexed_path_, id_, return FileBackedRulesetSource(json_path_, indexed_path_, id(),
rule_count_limit_, extension_id_, rule_count_limit(), extension_id(),
enabled_by_default_); enabled_by_default());
} }
IndexAndPersistJSONRulesetResult IndexAndPersistJSONRulesetResult
...@@ -436,7 +436,7 @@ void FileBackedRulesetSource::IndexAndPersistJSONRuleset( ...@@ -436,7 +436,7 @@ void FileBackedRulesetSource::IndexAndPersistJSONRuleset(
ParseInfo FileBackedRulesetSource::IndexAndPersistRules( ParseInfo FileBackedRulesetSource::IndexAndPersistRules(
std::vector<dnr_api::Rule> rules) const { std::vector<dnr_api::Rule> rules) const {
DCHECK_LE(rules.size(), rule_count_limit_); DCHECK_LE(rules.size(), rule_count_limit());
DCHECK(IsAPIAvailable()); DCHECK(IsAPIAvailable());
FlatRulesetIndexer indexer; FlatRulesetIndexer indexer;
...@@ -447,7 +447,7 @@ ParseInfo FileBackedRulesetSource::IndexAndPersistRules( ...@@ -447,7 +447,7 @@ ParseInfo FileBackedRulesetSource::IndexAndPersistRules(
std::vector<int> large_regex_rule_ids; std::vector<int> large_regex_rule_ids;
{ {
std::set<int> id_set; // Ensure all ids are distinct. std::set<int> id_set; // Ensure all ids are distinct.
const GURL base_url = Extension::GetBaseURLFromExtensionId(extension_id_); const GURL base_url = Extension::GetBaseURLFromExtensionId(extension_id());
for (auto& rule : rules) { for (auto& rule : rules) {
int rule_id = rule.id; int rule_id = rule.id;
bool inserted = id_set.insert(rule_id).second; bool inserted = id_set.insert(rule_id).second;
...@@ -509,13 +509,13 @@ ReadJSONRulesResult FileBackedRulesetSource::ReadJSONRulesUnsafe() const { ...@@ -509,13 +509,13 @@ ReadJSONRulesResult FileBackedRulesetSource::ReadJSONRulesUnsafe() const {
Status::kJSONParseError, std::move(value_with_error.error_message)); Status::kJSONParseError, std::move(value_with_error.error_message));
} }
return ParseRulesFromJSON(id_, json_path(), *value_with_error.value, return ParseRulesFromJSON(id(), json_path(), *value_with_error.value,
rule_count_limit_, is_dynamic_ruleset()); rule_count_limit(), is_dynamic_ruleset());
} }
bool FileBackedRulesetSource::WriteRulesToJSON( bool FileBackedRulesetSource::WriteRulesToJSON(
const std::vector<dnr_api::Rule>& rules) const { const std::vector<dnr_api::Rule>& rules) const {
DCHECK_LE(rules.size(), rule_count_limit_); DCHECK_LE(rules.size(), rule_count_limit());
std::unique_ptr<base::Value> rules_value = std::unique_ptr<base::Value> rules_value =
json_schema_compiler::util::CreateValueFromArray(rules); json_schema_compiler::util::CreateValueFromArray(rules);
...@@ -542,12 +542,12 @@ FileBackedRulesetSource::FileBackedRulesetSource(base::FilePath json_path, ...@@ -542,12 +542,12 @@ FileBackedRulesetSource::FileBackedRulesetSource(base::FilePath json_path,
size_t rule_count_limit, size_t rule_count_limit,
ExtensionId extension_id, ExtensionId extension_id,
bool enabled_by_default) bool enabled_by_default)
: json_path_(std::move(json_path)), : RulesetSource(id,
indexed_path_(std::move(indexed_path)), rule_count_limit,
id_(id), std::move(extension_id),
rule_count_limit_(rule_count_limit), enabled_by_default),
extension_id_(std::move(extension_id)), json_path_(std::move(json_path)),
enabled_by_default_(enabled_by_default) {} indexed_path_(std::move(indexed_path)) {}
} // namespace declarative_net_request } // namespace declarative_net_request
} // namespace extensions } // namespace extensions
...@@ -12,10 +12,9 @@ ...@@ -12,10 +12,9 @@
#include "base/callback_forward.h" #include "base/callback_forward.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "extensions/browser/api/declarative_net_request/ruleset_source.h"
#include "extensions/common/api/declarative_net_request.h" #include "extensions/common/api/declarative_net_request.h"
#include "extensions/common/api/declarative_net_request/constants.h"
#include "extensions/common/api/declarative_net_request/dnr_manifest_data.h" #include "extensions/common/api/declarative_net_request/dnr_manifest_data.h"
#include "extensions/common/extension_id.h"
namespace content { namespace content {
class BrowserContext; class BrowserContext;
...@@ -135,8 +134,8 @@ struct ReadJSONRulesResult { ...@@ -135,8 +134,8 @@ struct ReadJSONRulesResult {
DISALLOW_COPY_AND_ASSIGN(ReadJSONRulesResult); DISALLOW_COPY_AND_ASSIGN(ReadJSONRulesResult);
}; };
// Holds paths for an extension ruleset. // A Ruleset source which is backed on disk.
class FileBackedRulesetSource { class FileBackedRulesetSource : public RulesetSource {
public: public:
// Creates FileBackedRulesetSources corresponding to the static rulesets in // Creates FileBackedRulesetSources corresponding to the static rulesets in
// the extension package. // the extension package.
...@@ -162,7 +161,7 @@ class FileBackedRulesetSource { ...@@ -162,7 +161,7 @@ class FileBackedRulesetSource {
size_t rule_count_limit, size_t rule_count_limit,
ExtensionId extension_id); ExtensionId extension_id);
~FileBackedRulesetSource(); ~FileBackedRulesetSource() override;
FileBackedRulesetSource(FileBackedRulesetSource&&); FileBackedRulesetSource(FileBackedRulesetSource&&);
FileBackedRulesetSource& operator=(FileBackedRulesetSource&&); FileBackedRulesetSource& operator=(FileBackedRulesetSource&&);
...@@ -174,20 +173,7 @@ class FileBackedRulesetSource { ...@@ -174,20 +173,7 @@ class FileBackedRulesetSource {
// Path to the indexed flatbuffer rules. // Path to the indexed flatbuffer rules.
const base::FilePath& indexed_path() const { return indexed_path_; } const base::FilePath& indexed_path() const { return indexed_path_; }
// Each ruleset source within an extension has a distinct ID. bool is_dynamic_ruleset() const { return id() == kDynamicRulesetID; }
RulesetID id() const { return id_; }
bool is_dynamic_ruleset() const { return id_ == kDynamicRulesetID; }
// The maximum number of rules that will be indexed from this source.
size_t rule_count_limit() const { return rule_count_limit_; }
// The ID of the extension from which the ruleset originates from.
const ExtensionId& extension_id() const { return extension_id_; }
// Whether the ruleset is enabled by default (as specified in the extension
// manifest for a static ruleset). Always true for a dynamic ruleset.
bool enabled_by_default() const { return enabled_by_default_; }
// Indexes and persists the JSON ruleset. This is potentially unsafe since the // Indexes and persists the JSON ruleset. This is potentially unsafe since the
// JSON rules file is parsed in-process. Note: This must be called on a // JSON rules file is parsed in-process. Note: This must be called on a
...@@ -228,12 +214,6 @@ class FileBackedRulesetSource { ...@@ -228,12 +214,6 @@ class FileBackedRulesetSource {
base::FilePath json_path_; base::FilePath json_path_;
base::FilePath indexed_path_; base::FilePath indexed_path_;
RulesetID id_;
size_t rule_count_limit_;
ExtensionId extension_id_;
bool enabled_by_default_;
DISALLOW_COPY_AND_ASSIGN(FileBackedRulesetSource);
}; };
} // namespace declarative_net_request } // namespace declarative_net_request
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/browser/api/declarative_net_request/ruleset_source.h"
namespace extensions {
namespace declarative_net_request {
RulesetSource::RulesetSource(RulesetID id,
size_t rule_count_limit,
ExtensionId extension_id,
bool enabled)
: id_(id),
rule_count_limit_(rule_count_limit),
extension_id_(std::move(extension_id)),
enabled_by_default_(enabled) {}
RulesetSource::~RulesetSource() = default;
RulesetSource::RulesetSource(RulesetSource&&) = default;
RulesetSource& RulesetSource::operator=(RulesetSource&&) = default;
} // namespace declarative_net_request
} // namespace extensions
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_RULESET_SOURCE_H_
#define EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_RULESET_SOURCE_H_
#include "extensions/common/api/declarative_net_request/constants.h"
#include "extensions/common/extension_id.h"
namespace extensions {
namespace declarative_net_request {
// Encapsulates information for a single extension ruleset.
class RulesetSource {
public:
RulesetSource(RulesetID id,
size_t rule_count_limit,
ExtensionId extension_id,
bool enabled);
virtual ~RulesetSource();
RulesetSource(RulesetSource&&);
RulesetSource& operator=(RulesetSource&&);
RulesetSource(const RulesetSource&) = delete;
RulesetSource& operator=(const RulesetSource&) = delete;
// Each ruleset source within an extension has a distinct ID.
RulesetID id() const { return id_; }
// The maximum number of rules that will be indexed from this source.
size_t rule_count_limit() const { return rule_count_limit_; }
// The ID of the extension from which the ruleset originates from.
const ExtensionId& extension_id() const { return extension_id_; }
// Whether the ruleset is enabled by default (as specified in the extension
// manifest for a static ruleset). Always true for a dynamic ruleset.
bool enabled_by_default() const { return enabled_by_default_; }
private:
RulesetID id_;
size_t rule_count_limit_;
ExtensionId extension_id_;
bool enabled_by_default_;
};
} // namespace declarative_net_request
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_RULESET_SOURCE_H_
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