#ifndef EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_UTILS_H_
#define EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_UTILS_H_
#include <stddef.h>
#include <stdint.h>
#include <string>
#include <vector>
#include "base/auto_reset.h"
#include "base/containers/span.h"
#include "extensions/browser/api/declarative_net_request/file_backed_ruleset_source.h"
#include "extensions/browser/api/declarative_net_request/flat/extension_ruleset_generated.h"
#include "extensions/browser/api/web_request/web_request_resource_type.h"
#include "extensions/common/api/declarative_net_request.h"
#include "extensions/common/api/declarative_net_request/constants.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/re2/src/re2/re2.h"
namespace base {
class FilePath;
}
namespace extensions {
struct WebRequestInfo;
namespace declarative_net_request {
class CompositeMatcher;
std::string GetVersionHeaderForTesting();
int GetIndexedRulesetFormatVersionForTesting();
using ScopedIncrementRulesetVersion = base::AutoReset<int>;
ScopedIncrementRulesetVersion CreateScopedIncrementRulesetVersionForTesting();
bool StripVersionHeaderAndParseVersion(std::string* ruleset_data);
int GetChecksum(base::span<const uint8_t> data);
void OverrideGetChecksumForTest(int checksum);
std::string GetIndexedRulesetData(base::span<const uint8_t> data);
bool PersistIndexedRuleset(const base::FilePath& path,
base::span<const uint8_t> data);
void ClearRendererCacheOnNavigation();
void LogReadDynamicRulesStatus(ReadJSONRulesResult::Status status);
WebRequestResourceType GetWebRequestResourceType(
api::declarative_net_request::ResourceType resource_type);
api::declarative_net_request::RequestDetails CreateRequestDetails(
const WebRequestInfo& request);
re2::RE2::Options CreateRE2Options(bool is_case_sensitive,
bool require_capturing);
flat::ActionType ConvertToFlatActionType(
api::declarative_net_request::RuleActionType action_type);
std::string GetPublicRulesetID(const Extension& extension,
RulesetID ruleset_id);
std::vector<std::string> GetPublicRulesetIDs(const Extension& extension,
const CompositeMatcher& matcher);
int GetStaticGuaranteedMinimumRuleCount();
int GetGlobalStaticRuleLimit();
int GetMaximumRulesPerRuleset();
int GetDynamicAndSessionRuleLimit();
int GetRegexRuleLimit();
int GetDisabledStaticRuleLimit();
using ScopedRuleLimitOverride = base::AutoReset<int>;
ScopedRuleLimitOverride CreateScopedStaticGuaranteedMinimumOverrideForTesting(
int minimum);
ScopedRuleLimitOverride CreateScopedGlobalStaticRuleLimitOverrideForTesting(
int limit);
ScopedRuleLimitOverride CreateScopedRegexRuleLimitOverrideForTesting(int limit);
ScopedRuleLimitOverride
CreateScopedDynamicAndSessionRuleLimitOverrideForTesting(int limit);
ScopedRuleLimitOverride CreateScopedDisabledStaticRuleLimitOverrideForTesting(
int limit);
template <typename T>
T CreateString(const flatbuffers::String& str) {
return T(str.c_str(), str.size());
}
size_t GetEnabledStaticRuleCount(const CompositeMatcher* composite_matcher);
bool HasDNRFeedbackPermission(const Extension* extension,
const absl::optional<int>& tab_id);
std::string GetParseError(ParseResult error_reason, int rule_id);
url_pattern_index::flat::ElementType GetElementType(
WebRequestResourceType web_request_type);
url_pattern_index::flat::ElementType GetElementType(
api::declarative_net_request::ResourceType resource_type);
url_pattern_index::flat::RequestMethod GetRequestMethod(
bool http_or_https,
const std::string& method);
url_pattern_index::flat::RequestMethod GetRequestMethod(
api::declarative_net_request::RequestMethod request_method);
url_pattern_index::flat::RequestMethod GetRequestMethod(
bool http_or_https,
api::declarative_net_request::RequestMethod request_method);
}
}
#endif