1/* 2 * Copyright (C) 2003, 2006 Apple Inc. All rights reserved. 3 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#ifndef ResourceRequest_h 28#define ResourceRequest_h 29 30#include "GUniquePtrSoup.h" 31#include "ResourceRequestBase.h" 32#include <libsoup/soup.h> 33#include <wtf/PassOwnPtr.h> 34 35namespace WebCore { 36 37 class ResourceRequest : public ResourceRequestBase { 38 public: 39 ResourceRequest(const String& url) 40 : ResourceRequestBase(URL(ParsedURLString, url), UseProtocolCachePolicy) 41 , m_acceptEncoding(true) 42 , m_soupFlags(static_cast<SoupMessageFlags>(0)) 43 , m_initiatingPageID(0) 44 { 45 } 46 47 ResourceRequest(const URL& url) 48 : ResourceRequestBase(url, UseProtocolCachePolicy) 49 , m_acceptEncoding(true) 50 , m_soupFlags(static_cast<SoupMessageFlags>(0)) 51 , m_initiatingPageID(0) 52 { 53 } 54 55 ResourceRequest(const URL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 56 : ResourceRequestBase(url, policy) 57 , m_acceptEncoding(true) 58 , m_soupFlags(static_cast<SoupMessageFlags>(0)) 59 , m_initiatingPageID(0) 60 { 61 setHTTPReferrer(referrer); 62 } 63 64 ResourceRequest() 65 : ResourceRequestBase(URL(), UseProtocolCachePolicy) 66 , m_acceptEncoding(true) 67 , m_soupFlags(static_cast<SoupMessageFlags>(0)) 68 , m_initiatingPageID(0) 69 { 70 } 71 72 ResourceRequest(SoupMessage* soupMessage) 73 : ResourceRequestBase(URL(), UseProtocolCachePolicy) 74 , m_acceptEncoding(true) 75 , m_soupFlags(static_cast<SoupMessageFlags>(0)) 76 , m_initiatingPageID(0) 77 { 78 updateFromSoupMessage(soupMessage); 79 } 80 81 ResourceRequest(SoupRequest* soupRequest) 82 : ResourceRequestBase(URL(soup_request_get_uri(soupRequest)), UseProtocolCachePolicy) 83 , m_acceptEncoding(true) 84 , m_soupFlags(static_cast<SoupMessageFlags>(0)) 85 , m_initiatingPageID(0) 86 { 87 updateFromSoupRequest(soupRequest); 88 } 89 90 void updateFromDelegatePreservingOldProperties(const ResourceRequest& delegateProvidedRequest) { *this = delegateProvidedRequest; } 91 92 bool acceptEncoding() const { return m_acceptEncoding; } 93 void setAcceptEncoding(bool acceptEncoding) { m_acceptEncoding = acceptEncoding; } 94 95 void updateSoupMessageHeaders(SoupMessageHeaders*) const; 96 void updateFromSoupMessageHeaders(SoupMessageHeaders*); 97 void updateSoupMessage(SoupMessage*) const; 98 SoupMessage* toSoupMessage() const; 99 void updateFromSoupMessage(SoupMessage*); 100 void updateSoupRequest(SoupRequest*) const; 101 void updateFromSoupRequest(SoupRequest*); 102 103 SoupMessageFlags soupMessageFlags() const { return m_soupFlags; } 104 void setSoupMessageFlags(SoupMessageFlags soupFlags) { m_soupFlags = soupFlags; } 105 106 uint64_t initiatingPageID() const { return m_initiatingPageID; } 107 void setInitiatingPageID(uint64_t pageID) { m_initiatingPageID = pageID; } 108 109 GUniquePtr<SoupURI> createSoupURI() const; 110 111 private: 112 friend class ResourceRequestBase; 113 114 bool m_acceptEncoding : 1; 115 SoupMessageFlags m_soupFlags; 116 uint64_t m_initiatingPageID; 117 118 void updateSoupMessageMembers(SoupMessage*) const; 119 void doUpdatePlatformRequest() { } 120 void doUpdateResourceRequest() { } 121 void doUpdatePlatformHTTPBody() { } 122 void doUpdateResourceHTTPBody() { } 123 124 PassOwnPtr<CrossThreadResourceRequestData> doPlatformCopyData(PassOwnPtr<CrossThreadResourceRequestData> data) const { return data; } 125 void doPlatformAdopt(PassOwnPtr<CrossThreadResourceRequestData>) { } 126 }; 127 128 struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase { 129 }; 130 131#if SOUP_CHECK_VERSION(2, 43, 1) 132inline SoupMessagePriority toSoupMessagePriority(ResourceLoadPriority priority) 133{ 134 switch (priority) { 135 case ResourceLoadPriorityUnresolved: 136 return SOUP_MESSAGE_PRIORITY_NORMAL; 137 case ResourceLoadPriorityVeryLow: 138 return SOUP_MESSAGE_PRIORITY_VERY_LOW; 139 case ResourceLoadPriorityLow: 140 return SOUP_MESSAGE_PRIORITY_LOW; 141 case ResourceLoadPriorityMedium: 142 return SOUP_MESSAGE_PRIORITY_NORMAL; 143 case ResourceLoadPriorityHigh: 144 return SOUP_MESSAGE_PRIORITY_HIGH; 145 case ResourceLoadPriorityVeryHigh: 146 return SOUP_MESSAGE_PRIORITY_VERY_HIGH; 147 } 148 149 ASSERT_NOT_REACHED(); 150 return SOUP_MESSAGE_PRIORITY_VERY_LOW; 151} 152#endif 153 154} // namespace WebCore 155 156#endif // ResourceRequest_h 157