Home | History | Annotate | Download | only in serviceworkers
      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 FetchRequestData_h
      6 #define FetchRequestData_h
      7 
      8 #include "platform/heap/Handle.h"
      9 #include "platform/weborigin/KURL.h"
     10 #include "platform/weborigin/Referrer.h"
     11 #include "wtf/PassOwnPtr.h"
     12 #include "wtf/PassRefPtr.h"
     13 #include "wtf/text/AtomicString.h"
     14 #include "wtf/text/WTFString.h"
     15 
     16 namespace blink {
     17 
     18 class BlobDataHandle;
     19 class ExecutionContext;
     20 class FetchHeaderList;
     21 struct ResourceLoaderOptions;
     22 class ResourceRequest;
     23 class SecurityOrigin;
     24 struct ThreadableLoaderOptions;
     25 class WebServiceWorkerRequest;
     26 
     27 class FetchRequestData FINAL : public GarbageCollectedFinalized<FetchRequestData> {
     28     WTF_MAKE_NONCOPYABLE(FetchRequestData);
     29 public:
     30     enum Mode { SameOriginMode, NoCORSMode, CORSMode, CORSWithForcedPreflight };
     31     enum Credentials { OmitCredentials, SameOriginCredentials, IncludeCredentials };
     32     enum Context { ChildContext, ConnectContext, DownloadContext, FontContext, FormContext, ImageContext, ManifestContext, MediaContext, NavigateContext, ObjectContext, PingContext, PopupContext, PrefetchContext, ScriptContext, ServiceWorkerContext, SharedWorkerContext, StyleContext, WorkerContext, NullContext };
     33     enum Tainting { BasicTainting, CORSTainting, OpaqueTainting };
     34 
     35     class Referrer FINAL {
     36     public:
     37         Referrer() : m_type(ClientReferrer) { }
     38         bool isNone() const { return m_type == NoneReferrer; }
     39         bool isClient() const { return m_type == ClientReferrer; }
     40         bool isURL() const { return m_type == URLReferrer; }
     41         void setNone()
     42         {
     43             m_referrer = blink::Referrer();
     44             m_type = NoneReferrer;
     45         }
     46         void setClient(const blink::Referrer& referrer)
     47         {
     48             m_referrer = referrer;
     49             m_type = ClientReferrer;
     50         }
     51         void setURL(const blink::Referrer& referrer)
     52         {
     53             m_referrer = referrer;
     54             m_type = URLReferrer;
     55         }
     56         blink::Referrer referrer() const { return m_referrer; }
     57     private:
     58         enum Type { NoneReferrer, ClientReferrer, URLReferrer };
     59         Type m_type;
     60         blink::Referrer m_referrer;
     61     };
     62 
     63     static FetchRequestData* create(ExecutionContext*);
     64     static FetchRequestData* create(const blink::WebServiceWorkerRequest&);
     65     FetchRequestData* createRestrictedCopy(ExecutionContext*, PassRefPtr<SecurityOrigin>) const;
     66     FetchRequestData* createCopy() const;
     67     ~FetchRequestData();
     68 
     69     void setMethod(AtomicString method) { m_method = method; }
     70     const AtomicString method() const { return m_method; }
     71     void setURL(const KURL& url) { m_url = url; }
     72     const KURL& url() const { return m_url; }
     73     bool unsafeRequestFlag() const { return m_unsafeRequestFlag; }
     74     PassRefPtr<SecurityOrigin> origin() { return m_origin; }
     75     bool sameOriginDataURLFlag() { return m_sameOriginDataURLFlag; }
     76     const Referrer& referrer() const { return m_referrer; }
     77     void setMode(Mode mode) { m_mode = mode; }
     78     Mode mode() const { return m_mode; }
     79     void setCredentials(Credentials credentials) { m_credentials = credentials; }
     80     Credentials credentials() const { return m_credentials; }
     81     void setResponseTainting(Tainting tainting) { m_responseTainting = tainting; }
     82     Tainting tainting() const { return m_responseTainting; }
     83     FetchHeaderList* headerList() { return m_headerList.get(); }
     84     PassRefPtr<BlobDataHandle> blobDataHandle() const { return m_blobDataHandle; }
     85     void setBlobDataHandle(PassRefPtr<BlobDataHandle> blobHandle) { m_blobDataHandle = blobHandle; }
     86 
     87     void trace(Visitor*);
     88 
     89 private:
     90     FetchRequestData();
     91 
     92     static FetchRequestData* create();
     93 
     94     AtomicString m_method;
     95     KURL m_url;
     96     Member<FetchHeaderList> m_headerList;
     97     RefPtr<BlobDataHandle> m_blobDataHandle;
     98     bool m_unsafeRequestFlag;
     99     // FIXME: Support m_skipServiceWorkerFlag;
    100     Context m_context;
    101     RefPtr<SecurityOrigin> m_origin;
    102     // FIXME: Support m_forceOriginHeaderFlag;
    103     bool m_sameOriginDataURLFlag;
    104     Referrer m_referrer;
    105     // FIXME: Support m_authenticationFlag;
    106     // FIXME: Support m_synchronousFlag;
    107     Mode m_mode;
    108     Credentials m_credentials;
    109     // FIXME: Support m_useURLCredentialsFlag;
    110     // FIXME: Support m_manualRedirectFlag;
    111     // FIXME: Support m_redirectCount;
    112     Tainting m_responseTainting;
    113 };
    114 
    115 } // namespace blink
    116 
    117 #endif // FetchRequestData_h
    118