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 18 namespace blink { 19 20 class RequestInit; 21 struct ResourceLoaderOptions; 22 class ResourceRequest; 23 struct ThreadableLoaderOptions; 24 class WebServiceWorkerRequest; 25 26 class Request FINAL : public Body { 27 DEFINE_WRAPPERTYPEINFO(); 28 public: ~Request()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 request()40 const FetchRequestData* request() { return m_request; } 41 42 String method() const; 43 String url() const; headers()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 57 private: 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