blob: 1db691f0d02fb4651a118d13a30855c59b786f9c [file] [log] [blame]
// Copyright 2014 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_RENDERER_CORE_FETCH_FETCH_REQUEST_DATA_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FETCH_FETCH_REQUEST_DATA_H_
#include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "base/unguessable_token.h"
#include "services/network/public/mojom/fetch_api.mojom-blink.h"
#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
#include "third_party/blink/public/platform/modules/fetch/fetch_api_request.mojom-blink.h"
#include "third_party/blink/public/platform/modules/service_worker/web_service_worker_request.h"
#include "third_party/blink/public/platform/web_url_request.h"
#include "third_party/blink/renderer/core/fetch/body_stream_buffer.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_load_priority.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/weborigin/referrer.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
#include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
class ExceptionState;
class FetchHeaderList;
class SecurityOrigin;
class ScriptState;
class WebServiceWorkerRequest;
class FetchRequestData final
: public GarbageCollectedFinalized<FetchRequestData> {
public:
enum Tainting { kBasicTainting, kCorsTainting, kOpaqueTainting };
static FetchRequestData* Create();
static FetchRequestData* Create(ScriptState*, const WebServiceWorkerRequest&);
static FetchRequestData* Create(ScriptState*,
const mojom::blink::FetchAPIRequest&);
// Call Request::refreshBody() after calling clone() or pass().
FetchRequestData* Clone(ScriptState*, ExceptionState&);
FetchRequestData* Pass(ScriptState*, ExceptionState&);
FetchRequestData();
~FetchRequestData();
void SetMethod(AtomicString method) { method_ = method; }
const AtomicString& Method() const { return method_; }
void SetURL(const KURL& url) { url_ = url; }
const KURL& Url() const { return url_; }
mojom::RequestContextType Context() const { return context_; }
void SetContext(mojom::RequestContextType context) { context_ = context; }
scoped_refptr<const SecurityOrigin> Origin() { return origin_; }
void SetOrigin(scoped_refptr<const SecurityOrigin> origin) {
origin_ = std::move(origin);
}
bool SameOriginDataURLFlag() { return same_origin_data_url_flag_; }
void SetSameOriginDataURLFlag(bool flag) {
same_origin_data_url_flag_ = flag;
}
const AtomicString& ReferrerString() const { return referrer_string_; }
void SetReferrerString(const AtomicString& s) { referrer_string_ = s; }
network::mojom::ReferrerPolicy GetReferrerPolicy() const {
return referrer_policy_;
}
void SetReferrerPolicy(network::mojom::ReferrerPolicy p) {
referrer_policy_ = p;
}
void SetMode(network::mojom::FetchRequestMode mode) { mode_ = mode; }
network::mojom::FetchRequestMode Mode() const { return mode_; }
void SetCredentials(network::mojom::FetchCredentialsMode credentials) {
credentials_ = credentials;
}
network::mojom::FetchCredentialsMode Credentials() const {
return credentials_;
}
void SetCacheMode(mojom::FetchCacheMode cache_mode) {
cache_mode_ = cache_mode;
}
mojom::FetchCacheMode CacheMode() const { return cache_mode_; }
void SetRedirect(network::mojom::FetchRedirectMode redirect) {
redirect_ = redirect;
}
network::mojom::FetchRedirectMode Redirect() const { return redirect_; }
void SetImportance(mojom::FetchImportanceMode importance) {
importance_ = importance;
}
mojom::FetchImportanceMode Importance() const { return importance_; }
void SetResponseTainting(Tainting tainting) { response_tainting_ = tainting; }
Tainting ResponseTainting() const { return response_tainting_; }
FetchHeaderList* HeaderList() const { return header_list_.Get(); }
void SetHeaderList(FetchHeaderList* header_list) {
header_list_ = header_list;
}
BodyStreamBuffer* Buffer() const { return buffer_; }
// Call Request::refreshBody() after calling setBuffer().
void SetBuffer(BodyStreamBuffer* buffer) { buffer_ = buffer; }
String MimeType() const { return mime_type_; }
void SetMIMEType(const String& type) { mime_type_ = type; }
String Integrity() const { return integrity_; }
void SetIntegrity(const String& integrity) { integrity_ = integrity; }
ResourceLoadPriority Priority() const { return priority_; }
void SetPriority(ResourceLoadPriority priority) { priority_ = priority; }
bool Keepalive() const { return keepalive_; }
void SetKeepalive(bool b) { keepalive_ = b; }
bool IsHistoryNavigation() const { return is_history_navigation_; }
void SetIsHistoryNavigation(bool b) { is_history_navigation_ = b; }
network::mojom::blink::URLLoaderFactory* URLLoaderFactory() const {
return url_loader_factory_.get();
}
void SetURLLoaderFactory(network::mojom::blink::URLLoaderFactoryPtr factory) {
url_loader_factory_ = std::move(factory);
}
const base::UnguessableToken& WindowId() const { return window_id_; }
void SetWindowId(const base::UnguessableToken& id) { window_id_ = id; }
void Trace(blink::Visitor*);
private:
FetchRequestData* CloneExceptBody();
AtomicString method_;
KURL url_;
Member<FetchHeaderList> header_list_;
// FIXME: Support m_skipServiceWorkerFlag;
mojom::RequestContextType context_;
scoped_refptr<const SecurityOrigin> origin_;
// FIXME: Support m_forceOriginHeaderFlag;
bool same_origin_data_url_flag_;
AtomicString referrer_string_;
network::mojom::ReferrerPolicy referrer_policy_;
// FIXME: Support m_authenticationFlag;
// FIXME: Support m_synchronousFlag;
network::mojom::FetchRequestMode mode_;
network::mojom::FetchCredentialsMode credentials_;
// TODO(yiyix): |cache_mode_| is exposed but does not yet affect fetch
// behavior. We must transfer the mode to the network layer and service
// worker.
mojom::FetchCacheMode cache_mode_;
network::mojom::FetchRedirectMode redirect_;
mojom::FetchImportanceMode importance_;
// FIXME: Support m_useURLCredentialsFlag;
// FIXME: Support m_redirectCount;
Tainting response_tainting_;
TraceWrapperMember<BodyStreamBuffer> buffer_;
String mime_type_;
String integrity_;
ResourceLoadPriority priority_;
bool keepalive_;
bool is_history_navigation_ = false;
// A specific factory that should be used for this request instead of whatever
// the system would otherwise decide to use to load this request.
// Currently used for blob: URLs, to ensure they can still be loaded even if
// the URL got revoked after creating the request.
network::mojom::blink::URLLoaderFactoryPtr url_loader_factory_;
base::UnguessableToken window_id_;
DISALLOW_COPY_AND_ASSIGN(FetchRequestData);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FETCH_FETCH_REQUEST_DATA_H_