blob: 240a1ba0a2b83a7198b4e3667c5f5cbf827febf0 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// 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_PARSE_INFO_H_
#define EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_PARSE_INFO_H_
#include <stddef.h>
#include <string>
#include <vector>
#include "base/check.h"
#include "base/containers/span.h"
#include "extensions/browser/api/declarative_net_request/constants.h"
#include "third_party/flatbuffers/src/include/flatbuffers/flatbuffers.h"
namespace extensions::declarative_net_request {
// Holds the result of indexing a JSON ruleset.
class ParseInfo {
public:
struct RuleWarning {
int rule_id;
std::string message;
};
// Constructor to be used on success.
ParseInfo(size_t rules_count,
size_t regex_rules_count,
std::vector<RuleWarning> rule_ignored_warnings,
flatbuffers::DetachedBuffer buffer,
int ruleset_checksum);
// Constructor to be used on error.
ParseInfo(ParseResult error_reason, int rule_id);
ParseInfo(ParseInfo&&);
ParseInfo& operator=(ParseInfo&&);
~ParseInfo();
bool has_error() const { return has_error_; }
ParseResult error_reason() const {
DCHECK(has_error_);
return error_reason_;
}
const std::string& error() const {
DCHECK(has_error_);
return error_;
}
const std::vector<RuleWarning>& rule_ignored_warnings() const {
DCHECK(!has_error_);
return rule_ignored_warnings_;
}
size_t rules_count() const {
DCHECK(!has_error_);
return rules_count_;
}
size_t regex_rules_count() const {
DCHECK(!has_error_);
return regex_rules_count_;
}
int ruleset_checksum() const {
DCHECK(!has_error_);
return ruleset_checksum_;
}
base::span<const uint8_t> GetBuffer() const { return buffer_; }
private:
bool has_error_ = false;
// Only valid iff `has_error_` is true.
std::string error_;
ParseResult error_reason_ = ParseResult::NONE;
// Only valid iff `has_error_` is false.
size_t rules_count_ = 0;
size_t regex_rules_count_ = 0;
flatbuffers::DetachedBuffer buffer_;
int ruleset_checksum_ = -1;
// Warnings for rules which could not be parsed and were therefore ignored.
std::vector<RuleWarning> rule_ignored_warnings_;
};
} // namespace extensions::declarative_net_request
#endif // EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_PARSE_INFO_H_