#ifndef EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_REQUEST_PARAMS_H_
#define EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_REQUEST_PARAMS_H_
#include <optional>
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "components/url_pattern_index/url_pattern_index.h"
#include "content/public/browser/global_routing_id.h"
#include "extensions/browser/api/declarative_net_request/regex_rules_matcher.h"
#include "net/http/http_response_headers.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
class RenderFrameHost;
}
namespace extensions {
struct WebRequestInfo;
namespace declarative_net_request {
class CompositeMatcher;
struct RequestParams {
RequestParams(const WebRequestInfo& info,
scoped_refptr<const net::HttpResponseHeaders> response_headers);
RequestParams(content::RenderFrameHost* host,
bool is_post_navigation,
scoped_refptr<const net::HttpResponseHeaders> response_headers);
RequestParams(
const GURL& url,
const url::Origin& initiator,
const url::Origin& top_origin,
const api::declarative_net_request::ResourceType request_type,
const api::declarative_net_request::RequestMethod request_method,
int tab_id,
scoped_refptr<const net::HttpResponseHeaders> response_headers);
RequestParams();
RequestParams(const RequestParams&) = delete;
RequestParams& operator=(const RequestParams&) = delete;
~RequestParams();
raw_ptr<const GURL> url = nullptr;
url::Origin first_party_origin;
url_pattern_index::flat::ElementType element_type =
url_pattern_index::flat::ElementType_OTHER;
bool is_third_party = false;
url_pattern_index::flat::RequestMethod method =
url_pattern_index::flat::RequestMethod_NONE;
content::GlobalRenderFrameHostId parent_routing_id;
url_pattern_index::UrlPatternIndexMatcher::EmbedderConditionsMatcher
embedder_conditions_matcher;
mutable base::flat_map<ExtensionId, std::optional<RequestAction>>
max_priority_allow_action;
mutable std::optional<std::string> lower_cased_url_spec;
mutable base::flat_map<RegexRulesMatcher::RegexMatchKey,
std::vector<RegexRuleInfo>>
potential_regex_matches;
};
}
}
#endif