Title: [170685] trunk
Revision
170685
Author
psola...@apple.com
Date
2014-07-01 17:57:52 -0700 (Tue, 01 Jul 2014)

Log Message

Encode/decode CFURLRequestRefs when USE(CFNETWORK) is enabled
https://bugs.webkit.org/show_bug.cgi?id=134454
<rdar://problem/17510980>

Reviewed by Andreas Kling.

Source/WebKit2:
Use new helper methods to serialize/deserialize CFURLRequestRef directly so we can avoid
creating NSURLRequest.

* Shared/mac/WebCoreArgumentCodersMac.mm:
(IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
(IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

WebKitLibraries:
* WebKitSystemInterface.h:
* libWebKitSystemInterfaceMavericks.a:
* libWebKitSystemInterfaceMountainLion.a:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (170684 => 170685)


--- trunk/Source/WebKit2/ChangeLog	2014-07-02 00:49:13 UTC (rev 170684)
+++ trunk/Source/WebKit2/ChangeLog	2014-07-02 00:57:52 UTC (rev 170685)
@@ -1,3 +1,18 @@
+2014-07-01  Pratik Solanki  <psola...@apple.com>
+
+        Encode/decode CFURLRequestRefs when USE(CFNETWORK) is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=134454
+        <rdar://problem/17510980>
+
+        Reviewed by Andreas Kling.
+
+        Use new helper methods to serialize/deserialize CFURLRequestRef directly so we can avoid
+        creating NSURLRequest.
+
+        * Shared/mac/WebCoreArgumentCodersMac.mm:
+        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
+        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
+
 2014-07-01  Benjamin Poulain  <benja...@webkit.org>
 
         [iOS][WK2] Fix a race between the short tap and long tap highlight

Modified: trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm (170684 => 170685)


--- trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm	2014-07-02 00:49:13 UTC (rev 170684)
+++ trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm	2014-07-02 00:57:52 UTC (rev 170685)
@@ -35,12 +35,45 @@
 #import <WebCore/ResourceError.h>
 #import <WebCore/ResourceRequest.h>
 
+#if USE(CFNETWORK)
+#import <CFNetwork/CFURLRequest.h>
+#endif
+
 using namespace WebCore;
 
 namespace IPC {
 
+#if USE(CFNETWORK)
 void ArgumentCoder<ResourceRequest>::encodePlatformData(ArgumentEncoder& encoder, const ResourceRequest& resourceRequest)
 {
+    RetainPtr<CFURLRequestRef> requestToSerialize = resourceRequest.cfURLRequest(DoNotUpdateHTTPBody);
+
+    bool requestIsPresent = requestToSerialize;
+    encoder << requestIsPresent;
+
+    if (!requestIsPresent)
+        return;
+
+    // We don't send HTTP body over IPC for better performance.
+    // Also, it's not always possible to do, as streams can only be created in process that does networking.
+    RetainPtr<CFDataRef> requestHTTPBody = adoptCF(CFURLRequestCopyHTTPRequestBody(requestToSerialize.get()));
+    RetainPtr<CFReadStreamRef> requestHTTPBodyStream = adoptCF(CFURLRequestCopyHTTPRequestBodyStream(requestToSerialize.get()));
+    if (requestHTTPBody || requestHTTPBodyStream) {
+        CFMutableURLRequestRef mutableRequest = CFURLRequestCreateMutableCopy(0, requestToSerialize.get());
+        requestToSerialize = adoptCF(mutableRequest);
+        CFURLRequestSetHTTPRequestBody(mutableRequest, nil);
+        CFURLRequestSetHTTPRequestBodyStream(mutableRequest, nil);
+    }
+
+    RetainPtr<CFDictionaryRef> dictionary = adoptCF(WKCFURLRequestCreateSerializableRepresentation(requestToSerialize.get(), IPC::tokenNullTypeRef()));
+    IPC::encode(encoder, dictionary.get());
+
+    // The fallback array is part of CFURLRequest, but it is not encoded by WKCFURLRequestCreateSerializableRepresentation.
+    encoder << resourceRequest.responseContentDispositionEncodingFallbackArray();
+}
+#else
+void ArgumentCoder<ResourceRequest>::encodePlatformData(ArgumentEncoder& encoder, const ResourceRequest& resourceRequest)
+{
     RetainPtr<NSURLRequest> requestToSerialize = resourceRequest.nsURLRequest(DoNotUpdateHTTPBody);
 
     bool requestIsPresent = requestToSerialize;
@@ -63,6 +96,7 @@
     // The fallback array is part of NSURLRequest, but it is not encoded by WKNSURLRequestCreateSerializableRepresentation.
     encoder << resourceRequest.responseContentDispositionEncodingFallbackArray();
 }
+#endif
 
 bool ArgumentCoder<ResourceRequest>::decodePlatformData(ArgumentDecoder& decoder, ResourceRequest& resourceRequest)
 {
@@ -79,11 +113,19 @@
     if (!IPC::decode(decoder, dictionary))
         return false;
 
+#if USE(CFNETWORK)
+    RetainPtr<CFURLRequestRef> cfURLRequest = adoptCF(WKCreateCFURLRequestFromSerializableRepresentation(dictionary.get(), IPC::tokenNullTypeRef()));
+    if (!cfURLRequest)
+        return false;
+
+    resourceRequest = ResourceRequest(cfURLRequest.get());
+#else
     RetainPtr<NSURLRequest> nsURLRequest = WKNSURLRequestFromSerializableRepresentation(dictionary.get(), IPC::tokenNullTypeRef());
     if (!nsURLRequest)
         return false;
 
     resourceRequest = ResourceRequest(nsURLRequest.get());
+#endif
     
     Vector<String> responseContentDispositionEncodingFallbackArray;
     if (!decoder.decode(responseContentDispositionEncodingFallbackArray))

Modified: trunk/WebKitLibraries/ChangeLog (170684 => 170685)


--- trunk/WebKitLibraries/ChangeLog	2014-07-02 00:49:13 UTC (rev 170684)
+++ trunk/WebKitLibraries/ChangeLog	2014-07-02 00:57:52 UTC (rev 170685)
@@ -1,3 +1,15 @@
+2014-07-01  Pratik Solanki  <psola...@apple.com>
+
+        Encode/decode CFURLRequestRefs when USE(CFNETWORK) is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=134454
+        <rdar://problem/17510980>
+
+        Reviewed by Andreas Kling.
+
+        * WebKitSystemInterface.h:
+        * libWebKitSystemInterfaceMavericks.a:
+        * libWebKitSystemInterfaceMountainLion.a:
+
 2014-06-25  Laszlo Gombos  <l.gom...@samsung.com>
 
         Remove build guard for progress element

Modified: trunk/WebKitLibraries/WebKitSystemInterface.h (170684 => 170685)


--- trunk/WebKitLibraries/WebKitSystemInterface.h	2014-07-02 00:49:13 UTC (rev 170684)
+++ trunk/WebKitLibraries/WebKitSystemInterface.h	2014-07-02 00:57:52 UTC (rev 170685)
@@ -439,6 +439,8 @@
 
 CFDictionaryRef WKNSURLRequestCreateSerializableRepresentation(NSURLRequest *request, CFTypeRef tokenNull);
 NSURLRequest *WKNSURLRequestFromSerializableRepresentation(CFDictionaryRef representation, CFTypeRef tokenNull);
+CFDictionaryRef WKCFURLRequestCreateSerializableRepresentation(CFURLRequestRef cfRequest, CFTypeRef tokenNull);
+CFURLRequestRef WKCreateCFURLRequestFromSerializableRepresentation(CFDictionaryRef representation, CFTypeRef tokenNull);
 
 CFDictionaryRef WKNSURLResponseCreateSerializableRepresentation(NSURLResponse *response, CFTypeRef tokenNull);
 NSURLResponse *WKNSURLResponseFromSerializableRepresentation(CFDictionaryRef representation, CFTypeRef tokenNull);

Modified: trunk/WebKitLibraries/libWebKitSystemInterfaceMavericks.a


(Binary files differ)

Modified: trunk/WebKitLibraries/libWebKitSystemInterfaceMountainLion.a


(Binary files differ)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to