blob: c1f8a8bca8428febb42f697d7d34eb8359dd5168 [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.
#include "third_party/blink/public/platform/modules/service_worker/web_service_worker_request.h"
#include "base/unguessable_token.h"
#include "third_party/blink/public/platform/web_http_body.h"
#include "third_party/blink/public/platform/web_http_header_visitor.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_url_request.h"
#include "third_party/blink/renderer/platform/network/encoded_form_data.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/ref_counted.h"
namespace blink {
class WebServiceWorkerRequestPrivate
: public RefCounted<WebServiceWorkerRequestPrivate> {
public:
WebURL url_;
WebString method_;
HTTPHeaderMap headers_;
scoped_refptr<EncodedFormData> http_body;
Referrer referrer_;
network::mojom::FetchRequestMode mode_ =
network::mojom::FetchRequestMode::kNoCors;
bool is_main_resource_load_ = false;
network::mojom::FetchCredentialsMode credentials_mode_ =
network::mojom::FetchCredentialsMode::kOmit;
mojom::FetchCacheMode cache_mode_ = mojom::FetchCacheMode::kDefault;
network::mojom::FetchRedirectMode redirect_mode_ =
network::mojom::FetchRedirectMode::kFollow;
mojom::RequestContextType request_context_ =
mojom::RequestContextType::UNSPECIFIED;
network::mojom::RequestContextFrameType frame_type_ =
network::mojom::RequestContextFrameType::kNone;
WebString integrity_;
WebURLRequest::Priority priority_ = WebURLRequest::Priority::kUnresolved;
bool keepalive_ = false;
WebString client_id_;
bool is_reload_ = false;
bool is_history_navigation_ = false;
base::UnguessableToken window_id_;
};
WebServiceWorkerRequest::WebServiceWorkerRequest()
: private_(base::AdoptRef(new WebServiceWorkerRequestPrivate)) {}
void WebServiceWorkerRequest::Reset() {
private_.Reset();
}
void WebServiceWorkerRequest::Assign(const WebServiceWorkerRequest& other) {
private_ = other.private_;
}
void WebServiceWorkerRequest::SetURL(const WebURL& url) {
private_->url_ = url;
}
const WebString& WebServiceWorkerRequest::Integrity() const {
return private_->integrity_;
}
WebURLRequest::Priority WebServiceWorkerRequest::Priority() const {
return private_->priority_;
}
bool WebServiceWorkerRequest::Keepalive() const {
return private_->keepalive_;
}
const WebURL& WebServiceWorkerRequest::Url() const {
return private_->url_;
}
void WebServiceWorkerRequest::SetMethod(const WebString& method) {
private_->method_ = method;
}
const WebString& WebServiceWorkerRequest::Method() const {
return private_->method_;
}
void WebServiceWorkerRequest::SetHeader(const WebString& key,
const WebString& value) {
if (DeprecatedEqualIgnoringCase(key, "referer"))
return;
private_->headers_.Set(key, value);
}
void WebServiceWorkerRequest::AppendHeader(const WebString& key,
const WebString& value) {
if (DeprecatedEqualIgnoringCase(key, "referer"))
return;
HTTPHeaderMap::AddResult result = private_->headers_.Add(key, value);
if (!result.is_new_entry)
result.stored_value->value =
result.stored_value->value + ", " + String(value);
}
void WebServiceWorkerRequest::VisitHTTPHeaderFields(
WebHTTPHeaderVisitor* header_visitor) const {
for (HTTPHeaderMap::const_iterator i = private_->headers_.begin(),
end = private_->headers_.end();
i != end; ++i)
header_visitor->VisitHeader(i->key, i->value);
}
const HTTPHeaderMap& WebServiceWorkerRequest::Headers() const {
return private_->headers_;
}
void WebServiceWorkerRequest::SetBody(const WebHTTPBody& body) {
private_->http_body = body;
}
WebHTTPBody WebServiceWorkerRequest::Body() const {
return private_->http_body;
}
void WebServiceWorkerRequest::SetReferrer(
const WebString& web_referrer,
network::mojom::ReferrerPolicy referrer_policy) {
// WebString doesn't have the distinction between empty and null. We use
// the null WTFString for referrer.
DCHECK_EQ(Referrer::NoReferrer(), String());
String referrer =
web_referrer.IsEmpty() ? Referrer::NoReferrer() : String(web_referrer);
private_->referrer_ = Referrer(referrer, referrer_policy);
}
WebURL WebServiceWorkerRequest::ReferrerUrl() const {
return KURL(private_->referrer_.referrer);
}
network::mojom::ReferrerPolicy WebServiceWorkerRequest::GetReferrerPolicy()
const {
return private_->referrer_.referrer_policy;
}
const Referrer& WebServiceWorkerRequest::GetReferrer() const {
return private_->referrer_;
}
void WebServiceWorkerRequest::SetMode(network::mojom::FetchRequestMode mode) {
private_->mode_ = mode;
}
network::mojom::FetchRequestMode WebServiceWorkerRequest::Mode() const {
return private_->mode_;
}
void WebServiceWorkerRequest::SetIsMainResourceLoad(
bool is_main_resource_load) {
private_->is_main_resource_load_ = is_main_resource_load;
}
bool WebServiceWorkerRequest::IsMainResourceLoad() const {
return private_->is_main_resource_load_;
}
void WebServiceWorkerRequest::SetCredentialsMode(
network::mojom::FetchCredentialsMode credentials_mode) {
private_->credentials_mode_ = credentials_mode;
}
void WebServiceWorkerRequest::SetIntegrity(const WebString& integrity) {
private_->integrity_ = integrity;
}
void WebServiceWorkerRequest::SetPriority(WebURLRequest::Priority priority) {
private_->priority_ = priority;
}
void WebServiceWorkerRequest::SetKeepalive(bool keepalive) {
private_->keepalive_ = keepalive;
}
network::mojom::FetchCredentialsMode WebServiceWorkerRequest::CredentialsMode()
const {
return private_->credentials_mode_;
}
void WebServiceWorkerRequest::SetCacheMode(mojom::FetchCacheMode cache_mode) {
private_->cache_mode_ = cache_mode;
}
mojom::FetchCacheMode WebServiceWorkerRequest::CacheMode() const {
return private_->cache_mode_;
}
void WebServiceWorkerRequest::SetRedirectMode(
network::mojom::FetchRedirectMode redirect_mode) {
private_->redirect_mode_ = redirect_mode;
}
network::mojom::FetchRedirectMode WebServiceWorkerRequest::RedirectMode()
const {
return private_->redirect_mode_;
}
void WebServiceWorkerRequest::SetRequestContext(
mojom::RequestContextType request_context) {
private_->request_context_ = request_context;
}
mojom::RequestContextType WebServiceWorkerRequest::GetRequestContext() const {
return private_->request_context_;
}
void WebServiceWorkerRequest::SetFrameType(
network::mojom::RequestContextFrameType frame_type) {
private_->frame_type_ = frame_type;
}
network::mojom::RequestContextFrameType WebServiceWorkerRequest::GetFrameType()
const {
return private_->frame_type_;
}
void WebServiceWorkerRequest::SetClientId(const WebString& client_id) {
private_->client_id_ = client_id;
}
const WebString& WebServiceWorkerRequest::ClientId() const {
return private_->client_id_;
}
void WebServiceWorkerRequest::SetIsReload(bool is_reload) {
private_->is_reload_ = is_reload;
}
bool WebServiceWorkerRequest::IsReload() const {
return private_->is_reload_;
}
void WebServiceWorkerRequest::SetIsHistoryNavigation(bool b) {
private_->is_history_navigation_ = b;
}
bool WebServiceWorkerRequest::IsHistoryNavigation() const {
return private_->is_history_navigation_;
}
void WebServiceWorkerRequest::SetWindowId(const base::UnguessableToken& id) {
private_->window_id_ = id;
}
const base::UnguessableToken& WebServiceWorkerRequest::GetWindowId() const {
return private_->window_id_;
}
} // namespace blink