#ifndef SERVICES_NETWORK_ORB_ORB_IMPL_H_
#define SERVICES_NETWORK_ORB_ORB_IMPL_H_
#include <optional>
#include <string_view>
#include "base/component_export.h"
#include "base/memory/raw_ref.h"
#include "services/network/public/cpp/orb/orb_api.h"
#include "services/network/public/mojom/fetch_api.mojom.h"
#include "services/network/public/mojom/url_response_head.mojom-forward.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace network::orb {
class COMPONENT_EXPORT(NETWORK_SERVICE) OpaqueResponseBlockingAnalyzer final
: public ResponseAnalyzer {
public:
explicit OpaqueResponseBlockingAnalyzer(PerFactoryState* state);
OpaqueResponseBlockingAnalyzer(const OpaqueResponseBlockingAnalyzer&) =
delete;
OpaqueResponseBlockingAnalyzer& operator=(
const OpaqueResponseBlockingAnalyzer&) = delete;
~OpaqueResponseBlockingAnalyzer() override;
Decision Init(const GURL& request_url,
const std::optional<url::Origin>& request_initiator,
mojom::RequestMode request_mode,
mojom::RequestDestination request_destination_from_renderer,
const network::mojom::URLResponseHead& response) override;
Decision Sniff(std::string_view data) override;
Decision HandleEndOfSniffableResponseBody() override;
bool ShouldReportBlockedResponse() const override;
BlockedResponseHandling ShouldHandleBlockedResponseAs() const override;
enum class BlockingDecisionReason {
kInvalid = 0,
kNeverSniffedMimeType = 1,
kNoSniffHeader = 2,
kUnexpectedRangeResponse = 3,
kSniffedAsHtml = 4,
kSniffedAsXml = 5,
kSniffedAsJson = 6,
kMaxValue = kSniffedAsJson,
};
private:
void StoreAllowedAudioVideoRequest(const GURL& media_url);
bool IsAllowedAudioVideoRequest(const GURL& media_url);
std::string mime_type_;
bool is_http_status_okay_ = true;
bool is_no_sniff_header_present_ = true;
GURL final_request_url_;
bool is_empty_response_ = false;
bool is_attribution_response_ = false;
raw_ref<PerFactoryState> per_factory_state_;
BlockingDecisionReason blocking_decision_reason_ =
BlockingDecisionReason::kInvalid;
mojom::RequestDestination request_destination_from_renderer_ =
mojom::RequestDestination::kEmpty;
};
}
#endif