Clean up ChunkedUpdateDrawingAreaProxy
[WebKit-https.git] / WebKitTools / DumpRenderTree / mac / WebArchiveDumpSupportMac.mm
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
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 AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "WebArchiveDumpSupport.h"
27
28 #import <CFNetwork/CFHTTPMessage.h>
29 #import <Foundation/Foundation.h>
30 #import <WebKit/WebHTMLRepresentation.h>
31 #import <wtf/RetainPtr.h>
32
33 extern "C" {
34
35 enum CFURLCacheStoragePolicy {
36   kCFURLCacheStorageAllowed = 0,
37   kCFURLCacheStorageAllowedInMemoryOnly = 1,
38   kCFURLCacheStorageNotAllowed = 2
39 };
40 typedef enum CFURLCacheStoragePolicy CFURLCacheStoragePolicy;
41
42 extern const CFStringRef kCFHTTPVersion1_1;
43
44 CFURLResponseRef CFURLResponseCreate(CFAllocatorRef alloc, CFURLRef URL, CFStringRef mimeType, SInt64 expectedContentLength, CFStringRef textEncodingName, CFURLCacheStoragePolicy recommendedPolicy);
45 CFURLResponseRef CFURLResponseCreateWithHTTPResponse(CFAllocatorRef alloc, CFURLRef URL, CFHTTPMessageRef httpResponse, CFURLCacheStoragePolicy recommendedPolicy);
46 void CFURLResponseSetExpectedContentLength(CFURLResponseRef response, SInt64 length);
47 void CFURLResponseSetMIMEType(CFURLResponseRef response, CFStringRef mimeType);
48
49 }
50
51 CFURLResponseRef createCFURLResponseFromResponseData(CFDataRef responseData)
52 {
53     // Decode NSURLResponse
54     RetainPtr<NSKeyedUnarchiver> unarchiver(AdoptNS, [[NSKeyedUnarchiver alloc] initForReadingWithData:(NSData *)responseData]);
55     NSURLResponse *response = [unarchiver.get() decodeObjectForKey:@"WebResourceResponse"]; // WebResourceResponseKey in WebResource.m
56     [unarchiver.get() finishDecoding];
57
58     if (![response isKindOfClass:[NSHTTPURLResponse class]])
59         return CFURLResponseCreate(kCFAllocatorDefault, (CFURLRef)[response URL], (CFStringRef)[response MIMEType], [response expectedContentLength], (CFStringRef)[response textEncodingName], kCFURLCacheStorageAllowed);
60
61     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
62
63     // NSURLResponse is not toll-free bridged to CFURLResponse.
64     RetainPtr<CFHTTPMessageRef> httpMessage(AdoptCF, CFHTTPMessageCreateResponse(kCFAllocatorDefault, [httpResponse statusCode], 0, kCFHTTPVersion1_1));
65
66     NSDictionary *headerFields = [httpResponse allHeaderFields];
67     for (NSString *headerField in [headerFields keyEnumerator])
68         CFHTTPMessageSetHeaderFieldValue(httpMessage.get(), (CFStringRef)headerField, (CFStringRef)[headerFields objectForKey:headerField]);
69
70     return CFURLResponseCreateWithHTTPResponse(kCFAllocatorDefault, (CFURLRef)[response URL], httpMessage.get(), kCFURLCacheStorageAllowed);
71 }
72
73 CFArrayRef supportedNonImageMIMETypes()
74 {
75     return (CFArrayRef)[WebHTMLRepresentation supportedNonImageMIMETypes];
76 }