Commit 8eb36210 authored by mjs's avatar mjs

Reviewed by Adele.

        - replaced receivedRedirect with new willSendRequest delegate
        - removed most mac-specific loader functions
        - use ResourceResponse more in loader code

        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]): Adapted
        for CachedResource method renames.
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        Ditto.
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify): simplified
        based on ResourceResponse
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage): adapt for ResourceResponse
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): store a ResourceResponse;
        platform response is now called platformResponse and expiration date
        is removed.
        (WebCore::CachedResource::~CachedResource): ditto
        (WebCore::CachedResource::isExpired): ditto
        * loader/CachedResource.h:
        (WebCore::CachedResource::platformResponse): ditto
        (WebCore::CachedResource::setResponse): ditto
        (WebCore::CachedResource::canDelete): ditto
        * loader/LoaderFunctions.h:
        * loader/loader.cpp:
        (WebCore::Loader::receivedResponse): Adjusted for renames.
        (WebCore::Loader::didReceiveResponse): Store whole ResourceResponse
        in the CachedResource.
        * loader/loader.h:
        * loader/mac/FormDataStream.h:
        * loader/mac/FormDataStream.m:
        (WebCore::getStreamFormDatas): Rearranged things so it's
        possible to get a FormData back out of a form data stream.
        (WebCore::formCreate): ditto
        (WebCore::formFinalize): ditto
        (WebCore::httpBodyFromStream): ditto
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad): s/response/platformResponse/
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus): ditto
        (WebCore::CachedResource::setPlatformResponse): ditto
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest): send redirect
        to client appropriately
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willSendRequest): new entry
        point for SubresourceLoader, dispatch to client.
        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::allowHTTPCookies): implemented
        (WebCore::ResourceRequest::setAllowHTTPCookies): ditto
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse): initialize expiration
        date(!)
        * platform/network/cf/FormDataStreamCFNet.cpp: Added.
        (WebCore::getStreamFormDatas): Added this, ported from NSURL version.
        (WebCore::openNextStream): ditto
        (WebCore::formCreate): ditto
        (WebCore::formFinalize): ditto
        (WebCore::formCanRead): ditto
        (WebCore::formEventCallback): ditto
        (WebCore::setHTTPBody): ditto
        (WebCore::httpBodyFromStream): ditto
        * platform/network/cf/FormDataStreamCFNet.h: Added.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest): implemented
        (WebCore::ResourceHandle::start): use new ResourceRequest stuff
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::getResourceResponse): do nothing for a null response
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest): Implemented; dispatch to client.
        * platform/network/mac/ResourceRequestMac.h: Added.
        * platform/network/mac/ResourceRequestMac.mm: Added.
        (WebCore::getResourceRequest): Added way to convert an NSURLRequest
        to a ResourceRequest.
        (WebCore::nsURLRequest): Opposite of the above.
        * platform/network/cf/ResourceRequestCFNet.h: Added.
        * platform/network/cf/ResourceRequestCFNet.cpp: Added.
        (WebCore::getResourceRequest): Added way to convert an CFURLRequest
        to a ResourceRequest.
        (WebCore::cfURLRequest): Opposite of the above.
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::willSendRequest): Renamed from receivedRedirect,
        adjusted.
        * xml/xmlhttprequest.h:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@17595 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent aae55e2f
2006-11-03 Maciej Stachowiak <mjs@apple.com>
Reviewed by Adele.
- replaced receivedRedirect with new willSendRequest delegate
- removed most mac-specific loader functions
- use ResourceResponse more in loader code
* WebCore.xcodeproj/project.pbxproj: Add new files.
* bridge/mac/WebCoreFrameBridge.mm:
(-[WebCoreFrameBridge getData:andResponse:forURL:]): Adapted
for CachedResource method renames.
(-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
Ditto.
* loader/CachedCSSStyleSheet.cpp:
(WebCore::CachedCSSStyleSheet::checkNotify): simplified
based on ResourceResponse
* loader/CachedImage.cpp:
(WebCore::CachedImage::createImage): adapt for ResourceResponse
* loader/CachedResource.cpp:
(WebCore::CachedResource::CachedResource): store a ResourceResponse;
platform response is now called platformResponse and expiration date
is removed.
(WebCore::CachedResource::~CachedResource): ditto
(WebCore::CachedResource::isExpired): ditto
* loader/CachedResource.h:
(WebCore::CachedResource::platformResponse): ditto
(WebCore::CachedResource::setResponse): ditto
(WebCore::CachedResource::canDelete): ditto
* loader/LoaderFunctions.h:
* loader/loader.cpp:
(WebCore::Loader::receivedResponse): Adjusted for renames.
(WebCore::Loader::didReceiveResponse): Store whole ResourceResponse
in the CachedResource.
* loader/loader.h:
* loader/mac/FormDataStream.h:
* loader/mac/FormDataStream.m:
(WebCore::getStreamFormDatas): Rearranged things so it's
possible to get a FormData back out of a form data stream.
(WebCore::formCreate): ditto
(WebCore::formFinalize): ditto
(WebCore::httpBodyFromStream): ditto
* loader/mac/ImageDocumentMac.mm:
(WebCore::finishImageLoad): s/response/platformResponse/
* loader/mac/LoaderFunctionsMac.mm:
(WebCore::CheckCacheObjectStatus): ditto
(WebCore::CachedResource::setPlatformResponse): ditto
* loader/mac/SubresourceLoaderMac.mm:
(WebCore::SubresourceLoader::willSendRequest): send redirect
to client appropriately
* platform/network/ResourceHandle.h:
* platform/network/ResourceHandleClient.h:
(WebCore::ResourceHandleClient::willSendRequest): new entry
point for SubresourceLoader, dispatch to client.
* platform/network/ResourceRequest.h:
(WebCore::ResourceRequest::allowHTTPCookies): implemented
(WebCore::ResourceRequest::setAllowHTTPCookies): ditto
* platform/network/ResourceResponse.h:
(WebCore::ResourceResponse::ResourceResponse): initialize expiration
date(!)
* platform/network/cf/FormDataStreamCFNet.cpp: Added.
(WebCore::getStreamFormDatas): Added this, ported from NSURL version.
(WebCore::openNextStream): ditto
(WebCore::formCreate): ditto
(WebCore::formFinalize): ditto
(WebCore::formCanRead): ditto
(WebCore::formEventCallback): ditto
(WebCore::setHTTPBody): ditto
(WebCore::httpBodyFromStream): ditto
* platform/network/cf/FormDataStreamCFNet.h: Added.
* platform/network/cf/ResourceHandleCFNet.cpp:
(WebCore::willSendRequest): implemented
(WebCore::ResourceHandle::start): use new ResourceRequest stuff
* platform/network/cf/ResourceResponseCFNet.cpp:
(WebCore::getResourceResponse): do nothing for a null response
* platform/network/mac/ResourceHandleMac.mm:
(WebCore::ResourceHandle::willSendRequest): Implemented; dispatch to client.
* platform/network/mac/ResourceRequestMac.h: Added.
* platform/network/mac/ResourceRequestMac.mm: Added.
(WebCore::getResourceRequest): Added way to convert an NSURLRequest
to a ResourceRequest.
(WebCore::nsURLRequest): Opposite of the above.
* platform/network/cf/ResourceRequestCFNet.h: Added.
* platform/network/cf/ResourceRequestCFNet.cpp: Added.
(WebCore::getResourceRequest): Added way to convert an CFURLRequest
to a ResourceRequest.
(WebCore::cfURLRequest): Opposite of the above.
* xml/xmlhttprequest.cpp:
(WebCore::XMLHttpRequest::willSendRequest): Renamed from receivedRedirect,
adjusted.
* xml/xmlhttprequest.h:
2006-11-04 Darin Adler <darin@apple.com>
Change suggested by Mitz.
......@@ -280,6 +280,8 @@
51F11E150A48C2920034A24E /* SQLTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F11E140A48C2920034A24E /* SQLTransaction.cpp */; };
550A0BC9085F6039007353D6 /* QualifiedName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 550A0BC7085F6039007353D6 /* QualifiedName.cpp */; };
550A0BCA085F6039007353D6 /* QualifiedName.h in Headers */ = {isa = PBXBuildFile; fileRef = 550A0BC8085F6039007353D6 /* QualifiedName.h */; settings = {ATTRIBUTES = (Private, ); }; };
650E3F690AF6C168001FA3AD /* ResourceRequestMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 650E3F670AF6C168001FA3AD /* ResourceRequestMac.h */; };
650E3F6A0AF6C168001FA3AD /* ResourceRequestMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 650E3F680AF6C168001FA3AD /* ResourceRequestMac.mm */; };
650F53DC09D15DDA00C9B0C8 /* CSSGrammar.h in Headers */ = {isa = PBXBuildFile; fileRef = 650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */; };
650F53DD09D15DDF00C9B0C8 /* CSSGrammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6565814409D13043000E61D7 /* CSSGrammar.cpp */; };
651B4D8509AC83370029F1EF /* DeprecatedStringList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */; };
......@@ -301,7 +303,7 @@
6550B6A6099DF0270090D781 /* Text.h in Headers */ = {isa = PBXBuildFile; fileRef = 6550B69C099DF0270090D781 /* Text.h */; settings = {ATTRIBUTES = (Private, ); }; };
6552E7AA096AA11B0006F248 /* WebCoreFrameNamespaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 6552E7A8096AA11B0006F248 /* WebCoreFrameNamespaces.h */; settings = {ATTRIBUTES = (Private, ); }; };
6552E7AB096AA11B0006F248 /* WebCoreFrameNamespaces.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6552E7A9096AA11B0006F248 /* WebCoreFrameNamespaces.mm */; };
655A81BE0AEF67E6000975F0 /* HTTPHeaderMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 655A81BD0AEF67E6000975F0 /* HTTPHeaderMap.h */; };
655A81BE0AEF67E6000975F0 /* HTTPHeaderMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 655A81BD0AEF67E6000975F0 /* HTTPHeaderMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
6563A9A70ADF4094000ED2CD /* LoaderNSURLRequestExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 6563A9A50ADF4094000ED2CD /* LoaderNSURLRequestExtras.h */; };
6563A9A80ADF4094000ED2CD /* LoaderNSURLRequestExtras.m in Sources */ = {isa = PBXBuildFile; fileRef = 6563A9A60ADF4094000ED2CD /* LoaderNSURLRequestExtras.m */; };
656580F409D12B20000E61D7 /* CSSPropertyNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 656580EF09D12B20000E61D7 /* CSSPropertyNames.h */; };
......@@ -369,7 +371,7 @@
6582A16309999D6D00BEEB6D /* SystemTimeMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6582A15509999D6D00BEEB6D /* SystemTimeMac.cpp */; };
6582A17809999EA000BEEB6D /* DeprecatedStringMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6582A17709999EA000BEEB6D /* DeprecatedStringMac.mm */; };
658436860AE01B7400E53753 /* FrameLoadRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 658436850AE01B7400E53753 /* FrameLoadRequest.h */; };
658821660AF4CDF700F01D1F /* ResourceResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 658821650AF4CDF700F01D1F /* ResourceResponse.h */; };
658821660AF4CDF700F01D1F /* ResourceResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 658821650AF4CDF700F01D1F /* ResourceResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
6588216B0AF4CE1200F01D1F /* ResourceResponseMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 658821680AF4CE1200F01D1F /* ResourceResponseMac.h */; };
6588216C0AF4CE1200F01D1F /* ResourceResponseMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 658821690AF4CE1200F01D1F /* ResourceResponseMac.mm */; };
65901A4409FC6039005BD752 /* WebCoreStringTruncator.h in Headers */ = {isa = PBXBuildFile; fileRef = 65901A4209FC6039005BD752 /* WebCoreStringTruncator.h */; settings = {ATTRIBUTES = (Private, ); }; };
......@@ -3186,6 +3188,8 @@
55998A5B052B59CC0017A6C1 /* WebCoreAXObject.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreAXObject.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
55998A5C052B59CC0017A6C1 /* AXObjectCache.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = AXObjectCache.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
55998A5D052B59CC0017A6C1 /* AXObjectCacheMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AXObjectCacheMac.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
650E3F670AF6C168001FA3AD /* ResourceRequestMac.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceRequestMac.h; sourceTree = "<group>"; };
650E3F680AF6C168001FA3AD /* ResourceRequestMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceRequestMac.mm; sourceTree = "<group>"; };
650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSGrammar.h; sourceTree = "<group>"; };
651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DeprecatedStringList.cpp; sourceTree = "<group>"; };
651B4D8409AC83370029F1EF /* DeprecatedStringList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DeprecatedStringList.h; sourceTree = "<group>"; };
......@@ -6383,6 +6387,8 @@
isa = PBXGroup;
children = (
656B84EA0AEA1DDA00A095B4 /* ResourceHandleMac.mm */,
650E3F670AF6C168001FA3AD /* ResourceRequestMac.h */,
650E3F680AF6C168001FA3AD /* ResourceRequestMac.mm */,
658821680AF4CE1200F01D1F /* ResourceResponseMac.h */,
658821690AF4CE1200F01D1F /* ResourceResponseMac.mm */,
);
......@@ -10505,6 +10511,7 @@
93E22A730AF5E94C00D48324 /* PageState.h in Headers */,
658821660AF4CDF700F01D1F /* ResourceResponse.h in Headers */,
6588216B0AF4CE1200F01D1F /* ResourceResponseMac.h in Headers */,
650E3F690AF6C168001FA3AD /* ResourceRequestMac.h in Headers */,
93CCF0270AF6C52900018E89 /* NavigationAction.h in Headers */,
B2A015A90AF6CD53006BCE0E /* GraphicsContext.h in Headers */,
B2A015AB0AF6CD53006BCE0E /* GraphicsTypes.h in Headers */,
......@@ -11746,6 +11753,7 @@
93E227E30AF589AD00D48324 /* ResourceLoader.cpp in Sources */,
93E227E40AF589AD00D48324 /* SubresourceLoader.cpp in Sources */,
93E22A6F0AF5E94100D48324 /* PageState.cpp in Sources */,
650E3F6A0AF6C168001FA3AD /* ResourceRequestMac.mm in Sources */,
93CCF0580AF6C9FE00018E89 /* NavigationActionMac.mm in Sources */,
93CCF0600AF6CA7600018E89 /* NavigationAction.cpp in Sources */,
B2A015A80AF6CD53006BCE0E /* GraphicsContext.cpp in Sources */,
......@@ -1763,7 +1763,7 @@ static NSCharacterSet *_getPostSmartSet(void)
return NO;
*data = resource->allData();
*response = resource->response();
*response = resource->platformResponse();
return YES;
}
......@@ -1785,7 +1785,7 @@ static NSCharacterSet *_getPostSmartSet(void)
HashMap<String, CachedResource*>::const_iterator end = allResources.end();
for (HashMap<String, CachedResource*>::const_iterator it = allResources.begin(); it != end; ++it) {
[d addObject:it->second->allData()];
[r addObject:it->second->response()];
[r addObject:it->second->platformResponse()];
}
*datas = [d autorelease];
......
......@@ -86,12 +86,8 @@ void CachedCSSStyleSheet::checkNotify()
return;
CachedResourceClientWalker w(m_clients);
while (CachedResourceClient *c = w.next()) {
if (m_response && !IsResponseURLEqualToURL(m_response, m_url))
c->setCSSStyleSheet(ResponseURL(m_response), m_decoder->encoding().name(), m_sheet);
else
c->setCSSStyleSheet(m_url, m_decoder->encoding().name(), m_sheet);
}
while (CachedResourceClient *c = w.next())
c->setCSSStyleSheet(m_response.url().url(), m_decoder->encoding().name(), m_sheet);
}
void CachedCSSStyleSheet::error()
......
......@@ -135,7 +135,7 @@ inline void CachedImage::createImage()
{
// Create the image if it doesn't yet exist.
if (!m_image)
m_image = new Image(this, ResponseMIMEType(m_response) == "application/pdf");
m_image = new Image(this, m_response.mimeType() == "application/pdf");
}
Vector<char>& CachedImage::bufferData(const char* bytes, int addedSize, Request* request)
......
......@@ -40,7 +40,7 @@
namespace WebCore {
CachedResource::CachedResource(const String& URL, Type type, CachePolicy cachePolicy, time_t expireDate, unsigned size)
CachedResource::CachedResource(const String& URL, Type type, CachePolicy cachePolicy, unsigned size)
{
m_url = URL;
m_type = type;
......@@ -49,9 +49,8 @@ CachedResource::CachedResource(const String& URL, Type type, CachePolicy cachePo
m_inCache = false;
m_cachePolicy = cachePolicy;
m_request = 0;
m_response = 0;
m_platformResponse = 0;
m_allData = 0;
m_expireDate = expireDate;
m_expireDateChanged = false;
m_accessCount = 0;
m_nextInLRUList = 0;
......@@ -69,7 +68,7 @@ CachedResource::~CachedResource()
#ifndef NDEBUG
m_deleted = true;
#endif
setResponse(0);
setPlatformResponse(0);
setAllData(0);
}
......@@ -93,25 +92,12 @@ void CachedResource::finish()
m_expireDateChanged = false;
}
void CachedResource::setExpireDate(time_t expireDate, bool changeHttpCache)
{
if (expireDate == m_expireDate)
return;
if (m_status == Cached)
finish();
m_expireDate = expireDate;
if (changeHttpCache && m_expireDate)
m_expireDateChanged = true;
}
bool CachedResource::isExpired() const
{
if (!m_expireDate)
if (!m_response.expirationDate())
return false;
time_t now = time(0);
return (difftime(now, m_expireDate) >= 0);
return (difftime(now, m_response.expirationDate()) >= 0);
}
void CachedResource::setRequest(Request* request)
......
......@@ -31,6 +31,7 @@
#include "CachePolicy.h"
#include "PlatformString.h"
#include "ResourceHandleClient.h" // defines PlatformResponse and PlatformData
#include "ResourceResponse.h"
#include <wtf/HashSet.h>
#include <wtf/Vector.h>
#include <time.h>
......@@ -77,7 +78,7 @@ public:
Cached // regular case
};
CachedResource(const String& URL, Type type, CachePolicy cachePolicy, time_t expireDate, unsigned size = 0);
CachedResource(const String& URL, Type type, CachePolicy cachePolicy, unsigned size = 0);
virtual ~CachedResource();
virtual void setEncoding(const String&) { }
......@@ -120,14 +121,14 @@ public:
void setRequest(Request*);
PlatformResponse response() const { return m_response; }
void setResponse(PlatformResponse);
PlatformResponse platformResponse() const { return m_platformResponse; }
void setPlatformResponse(PlatformResponse);
PlatformData allData() const { return m_allData; }
void setAllData(PlatformData);
bool canDelete() const { return !referenced() && !m_request; }
void setResponse(const ResourceResponse& response) { m_response = response; }
void setExpireDate(time_t expireDate, bool changeHttpCache);
bool canDelete() const { return !referenced() && !m_request; }
bool isExpired() const;
......@@ -155,7 +156,8 @@ protected:
RetainPtr<NSURLRequest> m_nsURLRequest;
#endif
PlatformResponse m_response;
ResourceResponse m_response;
PlatformResponse m_platformResponse;
PlatformData m_allData;
Type m_type;
......@@ -166,7 +168,6 @@ private:
unsigned m_accessCount;
protected:
time_t m_expireDate;
CachePolicy m_cachePolicy;
bool m_inCache;
bool m_loading;
......
......@@ -55,10 +55,5 @@ Vector<char> ServeSynchronousRequest(Loader*, DocLoader*, const ResourceRequest&
void CheckCacheObjectStatus(DocLoader*, CachedResource*);
bool CheckIfReloading(DocLoader*);
bool IsResponseURLEqualToURL(PlatformResponse , const String& URL);
DeprecatedString ResponseURL(PlatformResponse);
DeprecatedString ResponseMIMEType(PlatformResponse);
bool ResponseIsMultipart(PlatformResponse);
NSString* HeaderStringFromDictionary(NSDictionary* headers, int statusCode);
}
......@@ -127,14 +127,14 @@ void Loader::receivedResponse(ResourceHandle* handle, PlatformResponse response)
// FIXME: the win32 platform does not have PlatformResponse yet.
ASSERT(response);
#endif
req->cachedResource()->setResponse(response);
req->cachedResource()->setPlatformResponse(response);
}
void Loader::didReceivedResponse(ResourceHandle* handle, const ResourceResponse& response)
void Loader::didReceiveResponse(ResourceHandle* handle, const ResourceResponse& response)
{
Request* req = m_requestsLoading.get(handle);
ASSERT(req);
req->cachedResource()->setExpireDate(response.expirationDate(), false);
req->cachedResource()->setResponse(response);
String encoding = response.textEncodingName();
if (!encoding.isNull())
......
......@@ -64,7 +64,7 @@ namespace WebCore {
private:
virtual void receivedResponse(ResourceHandle*, PlatformResponse);
virtual void didReceivedResponse(ResourceHandle* handle, const ResourceResponse& response);
virtual void didReceiveResponse(ResourceHandle* handle, const ResourceResponse& response);
virtual void didReceiveData(ResourceHandle*, const char*, int);
virtual void receivedAllData(ResourceHandle*, PlatformData);
......
......@@ -31,4 +31,5 @@
namespace WebCore {
class FormData;
void setHTTPBody(NSMutableURLRequest *, const FormData&);
const FormData* httpBodyFromStream(NSInputStream* stream);
}
......@@ -37,9 +37,19 @@
#import <sys/stat.h>
#import <sys/types.h>
#import <wtf/Assertions.h>
#import <wtf/HashMap.h>
namespace WebCore {
static HashMap<CFReadStreamRef, const FormData*>* streamFormDatas = 0;
static HashMap<CFReadStreamRef, const FormData*>* getStreamFormDatas()
{
if (!streamFormDatas)
streamFormDatas = new HashMap<CFReadStreamRef, const FormData*>();
return streamFormDatas;
}
static void formEventCallback(CFReadStreamRef stream, CFStreamEventType type, void* context);
struct FormStreamFields {
......@@ -172,6 +182,8 @@ static void openNextStream(FormStreamFields* form)
for (size_t i = 0; i < size; ++i)
newInfo->remainingElements.append(formData->elements()[size - i - 1]);
getStreamFormDatas()->set(stream, new FormData(*formData));
return newInfo;
}
......@@ -179,6 +191,9 @@ static void formFinalize(CFReadStreamRef stream, void* context)
{
FormStreamFields* form = static_cast<FormStreamFields*>(context);
delete getStreamFormDatas()->get(stream);
getStreamFormDatas()->remove(stream);
closeCurrentStream(form);
CFRelease(form->scheduledRunLoopPairs);
delete form;
......@@ -330,4 +345,10 @@ void setHTTPBody(NSMutableURLRequest *request, const FormData& formData)
CFRelease(stream);
}
const FormData* httpBodyFromStream(NSInputStream* stream)
{
return getStreamFormDatas()->get((CFReadStreamRef)stream);
}
}
......@@ -45,7 +45,7 @@ void finishImageLoad(Document* document, CachedImage* image, const void* imageDa
Frame* frame = document->frame();
NSURLResponse *response = frame->loader()->documentLoader()->response();
image->setResponse(response);
image->setPlatformResponse(response);
IntSize size = image->imageSize();
if (size.width())
......
......@@ -130,7 +130,7 @@ void CheckCacheObjectStatus(DocLoader *loader, CachedResource *cachedResource)
return;
}
ASSERT(cachedResource->response());
ASSERT(cachedResource->platformResponse());
// Notify the caller that we "loaded".
FrameMac *frame = static_cast<FrameMac *>(loader->frame());
......@@ -139,7 +139,7 @@ void CheckCacheObjectStatus(DocLoader *loader, CachedResource *cachedResource)
return;
NSURLRequest *request = cachedResource->getNSURLRequest();
NSURLResponse *response = cachedResource->response();
NSURLResponse *response = cachedResource->platformResponse();
NSData *data = cachedResource->allData();
// FIXME: If the WebKit client changes or cancels the request, WebCore does not respect this and continues the load.
......@@ -196,14 +196,14 @@ bool ResponseIsMultipart(PlatformResponse response)
return false;
}
void CachedResource::setResponse(PlatformResponse response)
void CachedResource::setPlatformResponse(PlatformResponse response)
{
HardRetain(response);
BEGIN_BLOCK_OBJC_EXCEPTIONS;
HardRelease(m_response);
HardRelease(m_platformResponse);
END_BLOCK_OBJC_EXCEPTIONS;
m_response = response;
m_platformResponse = response;
}
void CachedResource::setAllData(PlatformData allData)
......
......@@ -109,7 +109,7 @@ NSURLRequest *SubresourceLoader::willSendRequest(NSURLRequest *newRequest, NSURL
NSURL *oldURL = [request() URL];
NSURLRequest *clientRequest = ResourceLoader::willSendRequest(newRequest, redirectResponse);
if (clientRequest && oldURL != [clientRequest URL] && ![oldURL isEqual:[clientRequest URL]])
m_handle->redirectedToURL([clientRequest URL]);
clientRequest = m_handle->willSendRequest(clientRequest, redirectResponse);
return clientRequest;
}
......
......@@ -48,8 +48,12 @@ typedef LONG_PTR LRESULT;
#if PLATFORM(MAC)
#ifdef __OBJC__
@class WebCoreResourceLoaderImp;
@class NSURLRequest;
@class NSURLResponse;
#else
class WebCoreResourceLoaderImp;
class NSURLRequest;
class NSURLResponse;
#endif
#endif
......@@ -78,7 +82,7 @@ public:
void kill();
#if PLATFORM(MAC)
void redirectedToURL(NSURL *url);
NSURLRequest *willSendRequest(NSURLRequest *, NSURLResponse *);
void addData(NSData *data);
void finishJobAndHandle(NSData *data);
void reportError();
......
......@@ -74,6 +74,7 @@ namespace WebCore {
class KURL;
class ResourceHandle;
class ResourceRequest;
class ResourceResponse;
class ResourceHandleClient {
......@@ -81,7 +82,7 @@ namespace WebCore {
virtual ~ResourceHandleClient() { }
// request may be modified
// void willSendRequest(ResourceHandle*, Request&, const ResourceResonse& redirectResponse) { }
virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse& redirectResponse) { }
// void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&) { }
// void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&) { }
......@@ -95,7 +96,6 @@ namespace WebCore {
// void willCacheResponse(ResourceHandle*, CachedResourceResponse&) { }
// old-style methods
virtual void receivedRedirect(ResourceHandle*, const KURL&) { }
virtual void receivedResponse(ResourceHandle*, PlatformResponse) { }
virtual void receivedAllData(ResourceHandle*, PlatformData) { }
};
......
......@@ -117,8 +117,8 @@ namespace WebCore {
FormData& httpBody() { return m_httpBody; }
void setHTTPBody(const FormData& httpBody) { m_httpBody = httpBody; }
bool allowHTTPCookies() const;
void setAllowHTTPCookies(bool);
bool allowHTTPCookies() const { return m_allowHTTPCookies; }
void setAllowHTTPCookies(bool allowHTTPCookies) { m_allowHTTPCookies = allowHTTPCookies; }
private:
static const int defaultTimeoutInterval = 60;
......
......@@ -35,7 +35,12 @@ namespace WebCore {
class ResourceResponse {
public:
ResourceResponse() : m_expectedContentLength(0), m_httpStatusCode(0) {}
ResourceResponse()
: m_expectedContentLength(0)
, m_httpStatusCode(0)
, m_expirationDate(0)
{
}
ResourceResponse(const KURL& url, const String& mimeType, long long expectedLength, const String& textEncodingName, const String& filename)
: m_url(url)
......@@ -44,6 +49,7 @@ public:
, m_textEncodingName(textEncodingName)
, m_suggestedFilename(filename)
, m_httpStatusCode(0)
, m_expirationDate(0)
{
}
......@@ -63,9 +69,6 @@ public:
const HTTPHeaderMap& httpHeaderFields() const { return m_httpHeaderFields; }
HTTPHeaderMap& httpHeaderFields() { return m_httpHeaderFields; }
// possibly add calculated expiration info
// lastModifiedDate (date)
bool isMultipart() const { return m_mimeType == "multipart/x-mixed-replace"; }
void setExpirationDate(time_t expirationDate) { m_expirationDate = expirationDate; }
......
This diff is collapsed.
/*
* Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef FormDataStreamCFNet_h_
#define FormDataStreamCFNet_h_
#include <CoreFoundation/CoreFoundation.h>
typedef struct _CFURLRequest* CFMutableURLRequestRef;
namespace WebCore {
class FormData;
void setHTTPBody(CFMutableURLRequestRef, const FormData&);
const FormData* httpBodyFromStream(CFReadStreamRef);
}
#endif FormDataStreamCFNet_h_
......@@ -31,6 +31,7 @@
#include "Frame.h"
#include "ResourceHandle.h"
#include "ResourceHandleInternal.h"
#include "ResourceRequestCFNet.h"
#include "ResourceResponse.h"
#include "ResourceResponseCFNet.h"
......@@ -47,35 +48,24 @@
namespace WebCore {
CFURLRequestRef willSendRequest(CFURLConnectionRef conn, CFURLRequestRef request, CFURLResponseRef redirectionResponse, const void* clientInfo)
CFURLRequestRef willSendRequest(CFURLConnectionRef conn, CFURLRequestRef cfRequest, CFURLResponseRef cfRedirectResponse, const void* clientInfo)
{
ResourceHandle* job = (ResourceHandle*)clientInfo;
CFURLRef url = CFURLRequestGetURL(request);
CFStringRef urlString = CFURLGetString(url);
const char *bytes = CFStringGetCStringPtr(urlString, kCFStringEncodingUTF8);
bool freeBytes = false;
ResourceHandle* handle = (ResourceHandle*)clientInfo;
#if defined(LOG_RESOURCELOADER_EVENTS)
CFStringRef str = CFStringCreateWithFormat(0, 0, CFSTR("willSendRequest(conn=%p, job = %p)\n"), conn, job);
CFStringRef str = CFStringCreateWithFormat(0, 0, CFSTR("willSendRequest(conn=%p, job = %p)\n"), conn, handle);
CFShow(str);
CFRelease(str);
#endif
if (!bytes) {
CFIndex numBytes, urlLength = CFStringGetLength(urlString);
UInt8* newBytes;
CFStringGetBytes(urlString, CFRangeMake(0, urlLength), kCFStringEncodingUTF8, 0, FALSE, 0, 0, &numBytes);
newBytes = (UInt8*)malloc(numBytes + 1);
CFStringGetBytes(urlString, CFRangeMake(0, urlLength), kCFStringEncodingUTF8, 0, FALSE, newBytes, numBytes, &numBytes);
newBytes[numBytes] = 0;