1545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch/*
2545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
3545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
4545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Copyright (C) 2008 Google, Inc.
5545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *
6545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Redistribution and use in source and binary forms, with or without
7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * modification, are permitted provided that the following conditions
8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * are met:
9545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 1. Redistributions of source code must retain the above copyright
10545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *    notice, this list of conditions and the following disclaimer.
11545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
12545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
13545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *    documentation and/or other materials provided with the distribution.
14545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *
1506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
1606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch */
2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
28545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#ifndef ResourceRequest_h
29545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#define ResourceRequest_h
30545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
31545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "ResourceRequestBase.h"
32545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
33545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochnamespace WebCore {
34545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
35545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    class Frame;
36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    class ResourceRequest : public ResourceRequestBase {
38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    public:
3906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        ResourceRequest(const String& url)
40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            : ResourceRequestBase(KURL(ParsedURLString, url), UseProtocolCachePolicy)
4106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_requestorID(0)
4206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_requestorProcessID(0)
4306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_appCacheHostID(0)
4406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_hasUserGesture(false)
4506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_downloadToFile(false)
4606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        {
4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        }
4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
4906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        ResourceRequest(const KURL& url)
5006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            : ResourceRequestBase(url, UseProtocolCachePolicy)
5106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_requestorID(0)
52545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_requestorProcessID(0)
5306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_appCacheHostID(0)
5406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            , m_hasUserGesture(false)
55545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_downloadToFile(false)
56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        {
57545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
58545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy)
60545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            : ResourceRequestBase(url, policy)
61545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_requestorID(0)
62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_requestorProcessID(0)
63545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_appCacheHostID(0)
64545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_hasUserGesture(false)
65545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_downloadToFile(false)
66545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        {
67545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            setHTTPReferrer(referrer);
68545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
69545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
70545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        ResourceRequest()
71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            : ResourceRequestBase(KURL(), UseProtocolCachePolicy)
72545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_requestorID(0)
73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_requestorProcessID(0)
74545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_appCacheHostID(0)
75545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_hasUserGesture(false)
76545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch            , m_downloadToFile(false)
77545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        {
78545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        }
79545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
80545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // Allows the request to be matched up with its requestor.
81545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        int requestorID() const { return m_requestorID; }
82545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        void setRequestorID(int requestorID) { m_requestorID = requestorID; }
83545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
84545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // The process id of the process from which this request originated. In
85545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // the case of out-of-process plugins, this allows to link back the
86545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // request to the plugin process (as it is processed through a render
87545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // view process).
88545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        int requestorProcessID() const { return m_requestorProcessID; }
89545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        void setRequestorProcessID(int requestorProcessID) { m_requestorProcessID = requestorProcessID; }
90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // Allows the request to be matched up with its app cache host.
92545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        int appCacheHostID() const { return m_appCacheHostID; }
93545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        void setAppCacheHostID(int id) { m_appCacheHostID = id; }
94545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
95545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // True if request was user initiated.
96545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        bool hasUserGesture() const { return m_hasUserGesture; }
97545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        void setHasUserGesture(bool hasUserGesture) { m_hasUserGesture = hasUserGesture; }
98dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
99545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        // True if request should be downloaded to file.
100545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        bool downloadToFile() const { return m_downloadToFile; }
101dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        void setDownloadToFile(bool downloadToFile) { m_downloadToFile = downloadToFile; }
102dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
103dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    private:
104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        friend class ResourceRequestBase;
105545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
106dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        void doUpdatePlatformRequest() {}
107545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        void doUpdateResourceRequest() {}
108545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
109545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        PassOwnPtr<CrossThreadResourceRequestData> doPlatformCopyData(PassOwnPtr<CrossThreadResourceRequestData>) const;
110545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        void doPlatformAdopt(PassOwnPtr<CrossThreadResourceRequestData>);
111545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
112dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        int m_requestorID;
113545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        int m_requestorProcessID;
114545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        int m_appCacheHostID;
115545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        bool m_hasUserGesture;
116545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        bool m_downloadToFile;
117545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    };
118545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
119545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase {
120545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        int m_requestorID;
121545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        int m_requestorProcessID;
122dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        int m_appCacheHostID;
123545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        bool m_hasUserGesture;
124545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        bool m_downloadToFile;
125545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    };
126545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
127545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} // namespace WebCore
128545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
129545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
130545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch