Remove Cocoa CFURLConnection loading code
[WebKit-https.git] / Source / WebCore / platform / network / cf / ResourceResponseCFNet.cpp
index f0ad7ef..7f86ab0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2006-2007, 2016 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #include "config.h"
 #include "ResourceResponse.h"
 
-#if USE(CFNETWORK)
+#if USE(CFURLCONNECTION)
+
+#include <pal/spi/cf/CFNetworkSPI.h>
 
 #include "HTTPParsers.h"
 #include "MIMETypeRegistry.h"
-#include <CFNetwork/CFURLResponsePriv.h>
 #include <wtf/RetainPtr.h>
 
-// We would like a better value for a maximum time_t,
-// but there is no way to do that in C with any certainty.
-// INT_MAX should work well enough for our purposes.
-#define MAX_TIME_T ((time_t)INT_MAX)    
-
 namespace WebCore {
 
 static CFStringRef const commonHeaderFields[] = {
     CFSTR("Age"), CFSTR("Cache-Control"), CFSTR("Content-Type"), CFSTR("Date"), CFSTR("Etag"), CFSTR("Expires"), CFSTR("Last-Modified"), CFSTR("Pragma")
 };
-static const int numCommonHeaderFields = sizeof(commonHeaderFields) / sizeof(CFStringRef);
 
 CFURLResponseRef ResourceResponse::cfURLResponse() const
 {
     if (!m_cfResponse && !m_isNull) {
         RetainPtr<CFURLRef> url = m_url.createCFURL();
-
         // FIXME: This creates a very incomplete CFURLResponse, which does not even have a status code.
-
         m_cfResponse = adoptCF(CFURLResponseCreate(0, url.get(), m_mimeType.string().createCFString().get(), m_expectedContentLength, m_textEncodingName.string().createCFString().get(), kCFURLCacheStorageAllowed));
     }
 
     return m_cfResponse.get();
 }
 
+static void addToHTTPHeaderMap(const void* key, const void* value, void* context)
+{
+    HTTPHeaderMap* httpHeaderMap = (HTTPHeaderMap*)context;
+    httpHeaderMap->set((CFStringRef)key, (CFStringRef)value);
+}
+
 void ResourceResponse::platformLazyInit(InitLevel initLevel)
 {
     if (m_initLevel > initLevel)
@@ -81,41 +80,47 @@ void ResourceResponse::platformLazyInit(InitLevel initLevel)
         if (httpResponse) {
             m_httpStatusCode = CFHTTPMessageGetResponseStatusCode(httpResponse);
             
-            RetainPtr<CFDictionaryRef> headers = adoptCF(CFHTTPMessageCopyAllHeaderFields(httpResponse));
-            
-            for (int i = 0; i < numCommonHeaderFields; i++) {
-                CFStringRef value;
-                if (CFDictionaryGetValueIfPresent(headers.get(), commonHeaderFields[i], (const void **)&value))
-                    m_httpHeaderFields.set(commonHeaderFields[i], value);
+            if (initLevel < AllFields) {
+                RetainPtr<CFDictionaryRef> headers = adoptCF(CFHTTPMessageCopyAllHeaderFields(httpResponse));
+                for (auto& commonHeader : commonHeaderFields) {
+                    CFStringRef value;
+                    if (CFDictionaryGetValueIfPresent(headers.get(), commonHeader, (const void **)&value))
+                        m_httpHeaderFields.set(commonHeader, value);
+                }
             }
         } else
             m_httpStatusCode = 0;
     }
 
-    if (m_initLevel < CommonAndUncommonFields && initLevel >= CommonAndUncommonFields) {
+    if (m_initLevel < AllFields && initLevel == AllFields) {
         CFHTTPMessageRef httpResponse = CFURLResponseGetHTTPResponse(m_cfResponse.get());
         if (httpResponse) {
+            m_httpVersion = String(adoptCF(CFHTTPMessageCopyVersion(httpResponse)).get()).convertToASCIIUppercase();
+
             RetainPtr<CFStringRef> statusLine = adoptCF(CFHTTPMessageCopyResponseStatusLine(httpResponse));
             m_httpStatusText = extractReasonPhraseFromHTTPStatusLine(statusLine.get());
 
             RetainPtr<CFDictionaryRef> headers = adoptCF(CFHTTPMessageCopyAllHeaderFields(httpResponse));
-            CFIndex headerCount = CFDictionaryGetCount(headers.get());
-            Vector<const void*, 128> keys(headerCount);
-            Vector<const void*, 128> values(headerCount);
-            CFDictionaryGetKeysAndValues(headers.get(), keys.data(), values.data());
-            for (int i = 0; i < headerCount; ++i)
-                m_httpHeaderFields.set((CFStringRef)keys[i], (CFStringRef)values[i]);
+            CFDictionaryApplyFunction(headers.get(), addToHTTPHeaderMap, &m_httpHeaderFields);
         }
     }
-    
-    if (m_initLevel < AllFields && initLevel >= AllFields) {
-        RetainPtr<CFStringRef> suggestedFilename = adoptCF(CFURLResponseCopySuggestedFilename(m_cfResponse.get()));
-        m_suggestedFilename = suggestedFilename.get();
-    }
 
     m_initLevel = initLevel;
 }
-    
+
+CertificateInfo ResourceResponse::platformCertificateInfo() const
+{
+    return { };
+}
+
+String ResourceResponse::platformSuggestedFilename() const
+{
+    if (!cfURLResponse())
+        return String();
+    RetainPtr<CFStringRef> suggestedFilename = adoptCF(CFURLResponseCopySuggestedFilename(cfURLResponse()));
+    return suggestedFilename.get();
+}
+
 bool ResourceResponse::platformCompare(const ResourceResponse& a, const ResourceResponse& b)
 {
     // CFEqual crashes if you pass it 0 so do an early check before calling it.
@@ -127,4 +132,4 @@ bool ResourceResponse::platformCompare(const ResourceResponse& a, const Resource
 
 } // namespace WebCore
 
-#endif // USE(CFNETWORK)
+#endif // USE(CFURLCONNECTION)