Title: [90825] trunk/Source/WebCore
Revision
90825
Author
[email protected]
Date
2011-07-12 10:51:16 -0700 (Tue, 12 Jul 2011)

Log Message

Reviewed by David Kilzer.

Add NSURLResponse wrapper in ResourceResponse when USE(CFNETWORK) is enabled
https://bugs.webkit.org/show_bug.cgi?id=63286

When USE(CFNETWORK) is enabled on Mac, keep an NSURLResponse object along with the
CFURLResponseRef so that WebKit can continue using the NSURLResponse.

No new tests because no change in functionality and option is not enabled on Mac.

* platform/network/cf/ResourceResponse.h:
(WebCore::ResourceResponse::ResourceResponse):
* platform/network/mac/ResourceResponseMac.mm:
(WebCore::ResourceResponse::initNSURLResponse):
(WebCore::ResourceResponse::nsURLResponse):
(WebCore::ResourceResponse::ResourceResponse):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (90824 => 90825)


--- trunk/Source/WebCore/ChangeLog	2011-07-12 17:50:59 UTC (rev 90824)
+++ trunk/Source/WebCore/ChangeLog	2011-07-12 17:51:16 UTC (rev 90825)
@@ -1,3 +1,22 @@
+2011-07-12  Pratik Solanki  <[email protected]>
+
+        Reviewed by David Kilzer.
+
+        Add NSURLResponse wrapper in ResourceResponse when USE(CFNETWORK) is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=63286
+
+        When USE(CFNETWORK) is enabled on Mac, keep an NSURLResponse object along with the
+        CFURLResponseRef so that WebKit can continue using the NSURLResponse.
+
+        No new tests because no change in functionality and option is not enabled on Mac.
+
+        * platform/network/cf/ResourceResponse.h:
+        (WebCore::ResourceResponse::ResourceResponse):
+        * platform/network/mac/ResourceResponseMac.mm:
+        (WebCore::ResourceResponse::initNSURLResponse):
+        (WebCore::ResourceResponse::nsURLResponse):
+        (WebCore::ResourceResponse::ResourceResponse):
+
 2011-07-12  Pavel Podivilov  <[email protected]>
 
         Web Inspector: Cancelling an empty edit fails.
@@ -87,7 +106,7 @@
         (WebCore::HTMLInputElement::updateCheckedRadioButtons):
         (WebCore::HTMLInputElement::setChecked):
 
-2011-06-23  Pratik Solanki  <[email protected]>
+2011-07-11  Pratik Solanki  <[email protected]>
 
         Reviewed by David Kilzer.
 

Modified: trunk/Source/WebCore/platform/network/cf/ResourceResponse.h (90824 => 90825)


--- trunk/Source/WebCore/platform/network/cf/ResourceResponse.h	2011-07-12 17:50:59 UTC (rev 90824)
+++ trunk/Source/WebCore/platform/network/cf/ResourceResponse.h	2011-07-12 17:51:16 UTC (rev 90825)
@@ -31,13 +31,13 @@
 
 #if USE(CFNETWORK)
 typedef struct _CFURLResponse* CFURLResponseRef;
-#else
+#endif
+
 #ifdef __OBJC__
 @class NSURLResponse;
 #else
 class NSURLResponse;
 #endif
-#endif
 
 namespace WebCore {
 
@@ -55,8 +55,11 @@
     {
         m_isNull = !cfResponse;
     }
+#if PLATFORM(MAC)
+    ResourceResponse(NSURLResponse *);
+#endif
 #else
-    ResourceResponse(NSURLResponse* nsResponse)
+    ResourceResponse(NSURLResponse *nsResponse)
         : m_nsResponse(nsResponse)
         , m_initLevel(Uninitialized)
     {
@@ -84,7 +87,8 @@
 
 #if USE(CFNETWORK)
     CFURLResponseRef cfURLResponse() const;
-#else
+#endif
+#if PLATFORM(MAC)
     NSURLResponse *nsURLResponse() const;
 #endif
 
@@ -94,12 +98,16 @@
     void platformLazyInit(InitLevel);
     PassOwnPtr<CrossThreadResourceResponseData> doPlatformCopyData(PassOwnPtr<CrossThreadResourceResponseData> data) const { return data; }
     void doPlatformAdopt(PassOwnPtr<CrossThreadResourceResponseData>) { }
+#if PLATFORM(MAC)
+    void initNSURLResponse() const;
+#endif
 
     static bool platformCompare(const ResourceResponse& a, const ResourceResponse& b);
 
 #if USE(CFNETWORK)
     mutable RetainPtr<CFURLResponseRef> m_cfResponse;
-#else
+#endif
+#if PLATFORM(MAC)
     mutable RetainPtr<NSURLResponse> m_nsResponse;
 #endif
     InitLevel m_initLevel;

Modified: trunk/Source/WebCore/platform/network/mac/ResourceResponseMac.mm (90824 => 90825)


--- trunk/Source/WebCore/platform/network/mac/ResourceResponseMac.mm	2011-07-12 17:50:59 UTC (rev 90824)
+++ trunk/Source/WebCore/platform/network/mac/ResourceResponseMac.mm	2011-07-12 17:51:16 UTC (rev 90825)
@@ -26,8 +26,6 @@
 #import "config.h"
 #import "ResourceResponse.h"
 
-#if !USE(CFNETWORK)
-
 #import "HTTPParsers.h"
 #import "WebCoreURLResponse.h"
 #import "WebCoreSystemInterface.h"
@@ -36,8 +34,13 @@
 #import <limits>
 #include <wtf/text/CString.h>
 
-@interface NSURLResponse (FoundationSecretsWebCoreKnowsAbout)
+using namespace std;
+
+@interface NSURLResponse (WebNSURLResponseDetails)
 - (NSTimeInterval)_calculatedExpiration;
+- (id)_initWithCFURLResponse:(CFURLResponseRef)response;
+- (CFURLResponseRef) _CFURLResponse;
++ (id)_responseWithCFURLResponse:(CFURLResponseRef)response;
 @end
 
 
@@ -48,22 +51,54 @@
 };
 static const int numCommonHeaderFields = sizeof(commonHeaderFields) / sizeof(AtomicString*);
 
+void ResourceResponse::initNSURLResponse() const
+{
+    // Work around a mistake in the NSURLResponse class - <rdar://problem/3346574>.
+    // The init function takes an NSInteger, even though the accessor returns a long long.
+    // For values that won't fit in an NSInteger, pass -1 instead.
+    NSInteger expectedContentLength;
+    if (m_expectedContentLength < 0 || m_expectedContentLength > numeric_limits<NSInteger>::max())
+        expectedContentLength = -1;
+    else
+        expectedContentLength = static_cast<NSInteger>(m_expectedContentLength);
+    m_nsResponse.adoptNS([[NSURLResponse alloc] initWithURL:m_url MIMEType:m_mimeType expectedContentLength:expectedContentLength textEncodingName:m_textEncodingName]);
+}
+
+#if USE(CFNETWORK)
+
 NSURLResponse *ResourceResponse::nsURLResponse() const
 {
-    if (!m_nsResponse && !m_isNull) {
-        // Work around a mistake in the NSURLResponse class.
-        // The init function takes an NSInteger, even though the accessor returns a long long.
-        // For values that won't fit in an NSInteger, pass -1 instead.
-        NSInteger expectedContentLength;
-        if (m_expectedContentLength < 0 || m_expectedContentLength > std::numeric_limits<NSInteger>::max())
-            expectedContentLength = -1;
-        else
-            expectedContentLength = static_cast<NSInteger>(m_expectedContentLength);
-        const_cast<ResourceResponse*>(this)->m_nsResponse.adoptNS([[NSURLResponse alloc] initWithURL:m_url MIMEType:m_mimeType expectedContentLength:expectedContentLength textEncodingName:m_textEncodingName]);
+    if (!m_nsResponse && !m_cfResponse && !m_isNull) {
+        initNSURLResponse();
+        m_cfResponse = [m_nsResponse.get() _CFURLResponse];
     }
+
+    if (!m_cfResponse)
+        return nil;
+
+    if (!m_nsResponse)
+        m_nsResponse.adoptNS([[NSURLResponse _responseWithCFURLResponse:m_cfResponse.get()] retain]);
+
     return m_nsResponse.get();
 }
 
+ResourceResponse::ResourceResponse(NSURLResponse* nsResponse)
+    : m_cfResponse([nsResponse _CFURLResponse])
+    , m_nsResponse(nsResponse)
+    , m_initLevel(Uninitialized)
+{
+    m_isNull = !nsResponse;
+}
+
+#else
+
+NSURLResponse *ResourceResponse::nsURLResponse() const
+{
+    if (!m_nsResponse && !m_isNull)
+        initNSURLResponse();
+    return m_nsResponse.get();
+}
+
 void ResourceResponse::platformLazyInit(InitLevel initLevel)
 {
     if (m_initLevel >= initLevel)
@@ -136,6 +171,7 @@
     return a.nsURLResponse() == b.nsURLResponse();
 }
 
+#endif // USE(CFNETWORK)
+
 } // namespace WebCore
 
-#endif // !USE(CFNETWORK)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to