1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef Request_h 6#define Request_h 7 8#include "bindings/core/v8/Dictionary.h" 9#include "bindings/core/v8/ScriptWrappable.h" 10#include "modules/serviceworkers/Body.h" 11#include "modules/serviceworkers/FetchRequestData.h" 12#include "modules/serviceworkers/Headers.h" 13#include "platform/heap/Handle.h" 14#include "platform/weborigin/KURL.h" 15#include "wtf/RefPtr.h" 16#include "wtf/text/WTFString.h" 17 18namespace blink { 19 20class RequestInit; 21struct ResourceLoaderOptions; 22class ResourceRequest; 23struct ThreadableLoaderOptions; 24class WebServiceWorkerRequest; 25 26class Request FINAL : public Body { 27 DEFINE_WRAPPERTYPEINFO(); 28public: 29 virtual ~Request() { } 30 static Request* create(ExecutionContext*, const String&, ExceptionState&); 31 static Request* create(ExecutionContext*, const String&, const Dictionary&, ExceptionState&); 32 static Request* create(ExecutionContext*, Request*, ExceptionState&); 33 static Request* create(ExecutionContext*, Request*, const Dictionary&, ExceptionState&); 34 static Request* create(ExecutionContext*, FetchRequestData*); 35 static Request* create(ExecutionContext*, const WebServiceWorkerRequest&); 36 // The 'FetchRequestData' object is shared between requests, as it is 37 // immutable to the user after Request creation. Headers are copied. 38 static Request* create(const Request&); 39 40 const FetchRequestData* request() { return m_request; } 41 42 String method() const; 43 String url() const; 44 Headers* headers() const { return m_headers; } 45 String referrer() const; 46 String mode() const; 47 String credentials() const; 48 49 Request* clone() const; 50 51 void populateWebServiceWorkerRequest(WebServiceWorkerRequest&); 52 53 void setBodyBlobHandle(PassRefPtr<BlobDataHandle>); 54 55 virtual void trace(Visitor*) OVERRIDE; 56 57private: 58 explicit Request(const Request&); 59 Request(ExecutionContext*, FetchRequestData*); 60 Request(ExecutionContext*, const WebServiceWorkerRequest&); 61 62 static Request* createRequestWithRequestData(ExecutionContext*, FetchRequestData*, const RequestInit&, FetchRequestData::Mode, FetchRequestData::Credentials, ExceptionState&); 63 void clearHeaderList(); 64 65 virtual PassRefPtr<BlobDataHandle> blobDataHandle() OVERRIDE; 66 67 const Member<FetchRequestData> m_request; 68 const Member<Headers> m_headers; 69}; 70 71} // namespace blink 72 73#endif // Request_h 74