1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_URL_REWRITE_COMMON_URL_LOADER_THROTTLE_H_
#define COMPONENTS_URL_REWRITE_COMMON_URL_LOADER_THROTTLE_H_
#include <string_view>
#include "components/url_rewrite/common/url_request_rewrite_rules.h"
#include "third_party/blink/public/common/loader/url_loader_throttle.h"
namespace network {
struct ResourceRequest;
}
namespace url_rewrite {
// Implements a URLLoaderThrottle that applies network request rewrites provided
// through the |UrlRequestRewriteRules| rules.
class URLLoaderThrottle : public blink::URLLoaderThrottle {
public:
// A callback that checks if provided header is CORS exempt. The
// implementation must be case-insensitive.
using IsHeaderCorsExemptCallback =
base::RepeatingCallback<bool(std::string_view)>;
URLLoaderThrottle(scoped_refptr<UrlRequestRewriteRules> rules,
IsHeaderCorsExemptCallback is_header_cors_exempt_callback);
~URLLoaderThrottle() override;
URLLoaderThrottle(const URLLoaderThrottle&) = delete;
URLLoaderThrottle& operator=(const URLLoaderThrottle&) = delete;
// blink::URLLoaderThrottle implementation.
void DetachFromCurrentSequence() override;
void WillStartRequest(network::ResourceRequest* request,
bool* defer) override;
private:
// Applies transformations specified by |rule| to |request|, conditional on
// the matching criteria of |rule|.
void ApplyRule(network::ResourceRequest* request,
const mojom::UrlRequestRulePtr& rule);
// Applies |rewrite| transformations to |request|.
void ApplyRewrite(network::ResourceRequest* request,
const mojom::UrlRequestActionPtr& rewrite);
// Adds HTTP headers from |add_headers| to |request|.
void ApplyAddHeaders(
network::ResourceRequest* request,
const mojom::UrlRequestRewriteAddHeadersPtr& add_headers);
scoped_refptr<UrlRequestRewriteRules> rules_;
IsHeaderCorsExemptCallback is_header_cors_exempt_callback_;
};
} // namespace url_rewrite
#endif // COMPONENTS_URL_REWRITE_COMMON_URL_LOADER_THROTTLE_H_
|