Reviewed by Darin.
[WebKit-https.git] / WebCore / platform / network / mac / ResourceResponseMac.mm
1 // -*- mode: c++; c-basic-offset: 4 -*-
2 /*
3  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
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 COMPUTER, 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 COMPUTER, 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 #import "config.h"
28 #import "ResourceResponse.h"
29
30 #import <Foundation/Foundation.h>
31 #import <limits>
32
33 @interface NSURLResponse (FoundationSecretsWebCoreKnowsAbout)
34 - (NSTimeInterval)_calculatedExpiration;
35 @end
36
37 namespace WebCore {
38
39 void ResourceResponse::doUpdateResourceResponse()
40 {
41     m_url = [m_nsResponse.get() URL];
42     m_mimeType = [m_nsResponse.get() MIMEType];
43     m_expectedContentLength = [m_nsResponse.get() expectedContentLength];
44     m_textEncodingName = [m_nsResponse.get() textEncodingName];
45     m_suggestedFilename = [m_nsResponse.get() suggestedFilename];
46     
47     const time_t maxTime = std::numeric_limits<time_t>::max();
48     
49     NSTimeInterval expiration = [m_nsResponse.get() _calculatedExpiration];
50     expiration += kCFAbsoluteTimeIntervalSince1970;
51     m_expirationDate = expiration > maxTime ? maxTime : static_cast<time_t>(expiration);
52     
53     if ([m_nsResponse.get() isKindOfClass:[NSHTTPURLResponse class]]) {
54         NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)m_nsResponse.get();
55         
56         m_httpStatusCode = [httpResponse statusCode];
57         
58         // FIXME: it would be nice to have a way to get the real status text eventually.
59         m_httpStatusText = "OK";
60         
61         NSDictionary *headers = [httpResponse allHeaderFields];
62         NSEnumerator *e = [headers keyEnumerator];
63         while (NSString *name = [e nextObject])
64             m_httpHeaderFields.set(name, [headers objectForKey:name]);
65     } else
66         m_httpStatusCode = 0;
67 }
68
69 }