#ifndef EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_INFO_H_
#define EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_INFO_H_
#include <stdint.h>
#include <memory>
#include <string>
#include <vector>
#include "base/functional/callback.h"
#include "base/memory/scoped_refptr.h"
#include "base/values.h"
#include "content/public/browser/global_routing_id.h"
#include "extensions/browser/api/declarative_net_request/request_action.h"
#include "extensions/browser/api/web_request/web_request_resource_type.h"
#include "extensions/browser/extension_api_frame_id_map.h"
#include "ipc/ipc_message.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/mojom/fetch_api.mojom-shared.h"
#include "services/network/public/mojom/url_response_head.mojom-forward.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace extensions {
class ExtensionNavigationUIData;
struct WebRequestInfoInitParams {
WebRequestInfoInitParams();
WebRequestInfoInitParams(
uint64_t request_id,
int render_process_id,
int frame_routing_id,
std::unique_ptr<ExtensionNavigationUIData> navigation_ui_data,
const network::ResourceRequest& request,
bool is_download,
bool is_async,
bool is_service_worker_script,
absl::optional<int64_t> navigation_id,
ukm::SourceIdObj ukm_source_id);
WebRequestInfoInitParams(const WebRequestInfoInitParams&) = delete;
WebRequestInfoInitParams(WebRequestInfoInitParams&& other);
WebRequestInfoInitParams& operator=(const WebRequestInfoInitParams&) = delete;
WebRequestInfoInitParams& operator=(WebRequestInfoInitParams&& other);
~WebRequestInfoInitParams();
uint64_t id = 0;
GURL url;
int render_process_id = -1;
int frame_routing_id = MSG_ROUTING_NONE;
std::string method;
bool is_navigation_request = false;
absl::optional<url::Origin> initiator;
WebRequestResourceType web_request_type = WebRequestResourceType::OTHER;
bool is_async = false;
net::HttpRequestHeaders extra_request_headers;
absl::optional<base::Value::Dict> request_body_data;
bool is_web_view = false;
int web_view_instance_id = -1;
int web_view_rules_registry_id = -1;
int web_view_embedder_process_id = -1;
ExtensionApiFrameIdMap::FrameData frame_data;
bool is_service_worker_script = false;
absl::optional<int64_t> navigation_id;
ukm::SourceIdObj ukm_source_id = ukm::kInvalidSourceIdObj;
content::GlobalRenderFrameHostId parent_routing_id;
private:
void InitializeWebViewAndFrameData(
const ExtensionNavigationUIData* navigation_ui_data);
};
struct WebRequestInfo {
explicit WebRequestInfo(WebRequestInfoInitParams params);
WebRequestInfo(const WebRequestInfo&) = delete;
WebRequestInfo& operator=(const WebRequestInfo&) = delete;
~WebRequestInfo();
void AddResponseInfoFromResourceResponse(
const network::mojom::URLResponseHead& response);
const uint64_t id;
const GURL url;
const int render_process_id;
const int frame_routing_id = MSG_ROUTING_NONE;
const std::string method;
const bool is_navigation_request;
const absl::optional<url::Origin> initiator;
ExtensionApiFrameIdMap::FrameData frame_data;
const WebRequestResourceType web_request_type = WebRequestResourceType::OTHER;
const bool is_async;
const net::HttpRequestHeaders extra_request_headers;
int response_code = -1;
scoped_refptr<net::HttpResponseHeaders> response_headers;
std::string response_ip;
bool response_from_cache = false;
absl::optional<base::Value::Dict> request_body_data;
const bool is_web_view;
const int web_view_instance_id;
const int web_view_rules_registry_id;
const int web_view_embedder_process_id;
mutable absl::optional<std::vector<declarative_net_request::RequestAction>>
dnr_actions;
const bool is_service_worker_script;
const absl::optional<int64_t> navigation_id;
const ukm::SourceIdObj ukm_source_id;
const content::GlobalRenderFrameHostId parent_routing_id;
};
}
#endif