blob: a9bc7a6bb61f7a169af3089c13e2f30811f6c567 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_URL_REQUEST_EXTRA_DATA_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_URL_REQUEST_EXTRA_DATA_H_
#include <memory>
#include "base/memory/ref_counted.h"
#include "base/optional.h"
#include "third_party/blink/public/common/loader/url_loader_throttle.h"
#include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/public/platform/web_frame_request_blocker.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_vector.h"
#include "ui/base/page_transition_types.h"
namespace network {
struct ResourceRequest;
}
namespace blink {
class BLINK_PLATFORM_EXPORT WebURLRequestExtraData
: public base::RefCounted<WebURLRequestExtraData> {
public:
WebURLRequestExtraData();
WebURLRequestExtraData(const WebURLRequestExtraData&) = delete;
WebURLRequestExtraData& operator=(const WebURLRequestExtraData&) = delete;
void set_render_frame_id(int render_frame_id) {
render_frame_id_ = render_frame_id;
}
void set_is_main_frame(bool is_main_frame) { is_main_frame_ = is_main_frame; }
ui::PageTransition transition_type() const { return transition_type_; }
void set_transition_type(ui::PageTransition transition_type) {
transition_type_ = transition_type;
}
// The request is for a prefetch-only client (i.e. running NoStatePrefetch)
// and should use LOAD_PREFETCH network flags.
bool is_for_no_state_prefetch() const { return is_for_no_state_prefetch_; }
void set_is_for_no_state_prefetch(bool prefetch) {
is_for_no_state_prefetch_ = prefetch;
}
// true if the request originated from within a service worker e.g. due to
// a fetch() in the service worker script.
void set_originated_from_service_worker(bool originated_from_service_worker) {
originated_from_service_worker_ = originated_from_service_worker;
}
// |custom_user_agent| is used to communicate an overriding custom user agent
// to |RenderViewImpl::willSendRequest()|; set to a null string to indicate no
// override and an empty string to indicate that there should be no user
// agent.
const WebString& custom_user_agent() const { return custom_user_agent_; }
void set_custom_user_agent(const WebString& custom_user_agent) {
custom_user_agent_ = custom_user_agent;
}
WebVector<std::unique_ptr<URLLoaderThrottle>> TakeURLLoaderThrottles() {
return std::move(url_loader_throttles_);
}
void set_url_loader_throttles(
WebVector<std::unique_ptr<URLLoaderThrottle>> throttles) {
url_loader_throttles_ = std::move(throttles);
}
void set_frame_request_blocker(
scoped_refptr<WebFrameRequestBlocker> frame_request_blocker) {
frame_request_blocker_ = frame_request_blocker;
}
scoped_refptr<WebFrameRequestBlocker> frame_request_blocker() {
return frame_request_blocker_;
}
bool allow_cross_origin_auth_prompt() const {
return allow_cross_origin_auth_prompt_;
}
void set_allow_cross_origin_auth_prompt(bool allow_cross_origin_auth_prompt) {
allow_cross_origin_auth_prompt_ = allow_cross_origin_auth_prompt;
}
void CopyToResourceRequest(network::ResourceRequest* request) const;
protected:
friend class base::RefCounted<WebURLRequestExtraData>;
virtual ~WebURLRequestExtraData();
private:
base::Optional<int> render_frame_id_;
bool is_main_frame_ = false;
ui::PageTransition transition_type_ = ui::PAGE_TRANSITION_LINK;
bool is_for_no_state_prefetch_ = false;
bool originated_from_service_worker_ = false;
WebString custom_user_agent_;
WebVector<std::unique_ptr<URLLoaderThrottle>> url_loader_throttles_;
scoped_refptr<WebFrameRequestBlocker> frame_request_blocker_;
bool allow_cross_origin_auth_prompt_ = false;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_URL_REQUEST_EXTRA_DATA_H_