blob: c4469a213e18ddd7a1402406e9920c570fc353ea [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 "public/platform/modules/serviceworker/WebServiceWorkerRequest.h"
#include "platform/blob/BlobData.h"
#include "platform/weborigin/KURL.h"
#include "platform/wtf/RefCounted.h"
#include "public/platform/WebHTTPHeaderVisitor.h"
#include "public/platform/WebString.h"
#include "public/platform/WebURLRequest.h"
namespace blink {
class WebServiceWorkerRequestPrivate
: public RefCounted<WebServiceWorkerRequestPrivate> {
public:
WebServiceWorkerRequestPrivate()
: mode_(WebURLRequest::kFetchRequestModeNoCORS),
is_main_resource_load_(false),
credentials_mode_(WebURLRequest::kFetchCredentialsModeOmit),
cache_mode_(WebURLRequest::kFetchRequestCacheModeDefault),
redirect_mode_(WebURLRequest::kFetchRedirectModeFollow),
request_context_(WebURLRequest::kRequestContextUnspecified),
frame_type_(WebURLRequest::kFrameTypeNone),
client_id_(WebString()),
is_reload_(false) {}
WebURL url_;
WebString method_;
HTTPHeaderMap headers_;
RefPtr<BlobDataHandle> blob_data_handle;
Referrer referrer_;
WebURLRequest::FetchRequestMode mode_;
bool is_main_resource_load_;
WebURLRequest::FetchCredentialsMode credentials_mode_;
WebURLRequest::FetchRequestCacheMode cache_mode_;
WebURLRequest::FetchRedirectMode redirect_mode_;
WebURLRequest::RequestContext request_context_;
WebURLRequest::FrameType frame_type_;
WebString integrity_;
WebString client_id_;
bool is_reload_;
};
WebServiceWorkerRequest::WebServiceWorkerRequest()
: private_(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_;
}
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::SetBlob(const WebString& uuid, long long size) {
private_->blob_data_handle = BlobDataHandle::Create(uuid, String(), size);
}
PassRefPtr<BlobDataHandle> WebServiceWorkerRequest::GetBlobDataHandle() const {
return private_->blob_data_handle;
}
void WebServiceWorkerRequest::SetReferrer(const WebString& web_referrer,
WebReferrerPolicy 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, static_cast<ReferrerPolicy>(referrer_policy));
}
WebURL WebServiceWorkerRequest::ReferrerUrl() const {
return KURL(kParsedURLString, private_->referrer_.referrer);
}
WebReferrerPolicy WebServiceWorkerRequest::GetReferrerPolicy() const {
return static_cast<WebReferrerPolicy>(private_->referrer_.referrer_policy);
}
const Referrer& WebServiceWorkerRequest::GetReferrer() const {
return private_->referrer_;
}
void WebServiceWorkerRequest::SetMode(WebURLRequest::FetchRequestMode mode) {
private_->mode_ = mode;
}
WebURLRequest::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(
WebURLRequest::FetchCredentialsMode credentials_mode) {
private_->credentials_mode_ = credentials_mode;
}
void WebServiceWorkerRequest::SetIntegrity(const WebString& integrity) {
private_->integrity_ = integrity;
}
WebURLRequest::FetchCredentialsMode WebServiceWorkerRequest::CredentialsMode()
const {
return private_->credentials_mode_;
}
void WebServiceWorkerRequest::SetCacheMode(
WebURLRequest::FetchRequestCacheMode cache_mode) {
private_->cache_mode_ = cache_mode;
}
WebURLRequest::FetchRequestCacheMode WebServiceWorkerRequest::CacheMode()
const {
return private_->cache_mode_;
}
void WebServiceWorkerRequest::SetRedirectMode(
WebURLRequest::FetchRedirectMode redirect_mode) {
private_->redirect_mode_ = redirect_mode;
}
WebURLRequest::FetchRedirectMode WebServiceWorkerRequest::RedirectMode() const {
return private_->redirect_mode_;
}
void WebServiceWorkerRequest::SetRequestContext(
WebURLRequest::RequestContext request_context) {
private_->request_context_ = request_context;
}
WebURLRequest::RequestContext WebServiceWorkerRequest::GetRequestContext()
const {
return private_->request_context_;
}
void WebServiceWorkerRequest::SetFrameType(
WebURLRequest::FrameType frame_type) {
private_->frame_type_ = frame_type;
}
WebURLRequest::FrameType 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_;
}
} // namespace blink