1197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// found in the LICENSE file.
4197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
5197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#ifndef FetchResponseData_h
6197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#define FetchResponseData_h
7197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
8197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "platform/heap/Handle.h"
9197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "platform/weborigin/KURL.h"
10197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "wtf/PassRefPtr.h"
11197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "wtf/text/AtomicString.h"
12197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
14197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
15197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass BlobDataHandle;
16197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass FetchHeaderList;
179e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)class WebServiceWorkerResponse;
18197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass FetchResponseData FINAL : public GarbageCollectedFinalized<FetchResponseData> {
20197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WTF_MAKE_NONCOPYABLE(FetchResponseData);
21197021e6b966cfb06891637935ef33fff06433d1Ben Murdochpublic:
22197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    // "A response has an associated type which is one of basic, CORS, default,
23197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    // error, and opaque. Unless stated otherwise, it is default."
24197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    enum Type { BasicType, CORSType, DefaultType, ErrorType, OpaqueType };
25197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    // "A response can have an associated termination reason which is one of
26197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    // end-user abort, fatal, and timeout."
27197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    enum TerminationReason { EndUserAbortTermination, FatalTermination, TimeoutTermination };
28197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static FetchResponseData* create();
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static FetchResponseData* createNetworkErrorResponse();
31197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    FetchResponseData* createBasicFilteredResponse();
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    FetchResponseData* createCORSFilteredResponse();
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    FetchResponseData* createOpaqueFilteredResponse();
35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    Type type() const { return m_type; }
37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    const KURL& url() const { return m_url; }
38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    unsigned short status() const { return m_status; }
39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    AtomicString statusMessage() const { return m_statusMessage; }
40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    FetchHeaderList* headerList() const { return m_headerList.get(); }
41197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    PassRefPtr<BlobDataHandle> blobDataHandle() const { return m_blobDataHandle; }
42197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void setURL(const KURL& url) { m_url = url; }
44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void setStatus(unsigned short status) { m_status = status; }
45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void setStatusMessage(AtomicString statusMessage) { m_statusMessage = statusMessage; }
46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void setBlobDataHandle(PassRefPtr<BlobDataHandle> blobDataHandle) { m_blobDataHandle = blobDataHandle; }
47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
48197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void populateWebServiceWorkerResponse(blink::WebServiceWorkerResponse&);
49197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
50197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void trace(Visitor*);
51197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
52197021e6b966cfb06891637935ef33fff06433d1Ben Murdochprivate:
53197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    FetchResponseData(Type, unsigned short, AtomicString);
54197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
55197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    Type m_type;
56197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    OwnPtr<TerminationReason> m_terminationReason;
57197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    KURL m_url;
58197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    unsigned short m_status;
59197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    AtomicString m_statusMessage;
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Member<FetchHeaderList> m_headerList;
61197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    RefPtr<BlobDataHandle> m_blobDataHandle;
627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Member<FetchResponseData> m_internalResponse;
63197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch};
64197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
65c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
66197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
67197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif // FetchResponseData_h
68