Title: [158927] trunk/Source/WebKit2
Revision
158927
Author
[email protected]
Date
2013-11-08 10:28:06 -0800 (Fri, 08 Nov 2013)

Log Message

Encode and decode NSURLRequests using NSCoder
https://bugs.webkit.org/show_bug.cgi?id=124051

Reviewed by Sam Weinig.

* Shared/mac/WebCoreArgumentCodersMac.mm:
(CoreIPC::archiveAndEncodeObject):
(CoreIPC::decodeAndUnarchiveObject):
(CoreIPC::::encodePlatformData):
(CoreIPC::::decodePlatformData):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (158926 => 158927)


--- trunk/Source/WebKit2/ChangeLog	2013-11-08 18:25:52 UTC (rev 158926)
+++ trunk/Source/WebKit2/ChangeLog	2013-11-08 18:28:06 UTC (rev 158927)
@@ -1,3 +1,16 @@
+2013-11-08  Anders Carlsson  <[email protected]>
+
+        Encode and decode NSURLRequests using NSCoder
+        https://bugs.webkit.org/show_bug.cgi?id=124051
+
+        Reviewed by Sam Weinig.
+
+        * Shared/mac/WebCoreArgumentCodersMac.mm:
+        (CoreIPC::archiveAndEncodeObject):
+        (CoreIPC::decodeAndUnarchiveObject):
+        (CoreIPC::::encodePlatformData):
+        (CoreIPC::::decodePlatformData):
+
 2013-11-07  Anders Carlsson  <[email protected]>
 
         Encode and decode NSURLResponse objects using NSCoder

Modified: trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm (158926 => 158927)


--- trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm	2013-11-08 18:25:52 UTC (rev 158926)
+++ trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm	2013-11-08 18:28:06 UTC (rev 158927)
@@ -39,6 +39,33 @@
 
 namespace CoreIPC {
 
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+static void archiveAndEncodeObject(ArgumentEncoder& encoder, id object, NSString *key)
+{
+    RetainPtr<NSMutableData> data = "" alloc] init]);
+    RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
+
+    [archiver setRequiresSecureCoding:YES];
+    [archiver.get() encodeObject:object forKey:key];
+    [archiver finishEncoding];
+    encoder << CoreIPC::DataReference(static_cast<const uint8_t*>([data bytes]), [data length]);
+}
+
+template<typename T>
+static bool decodeAndUnarchiveObject(ArgumentDecoder& decoder, NSString *key, RetainPtr<T>& result)
+{
+    CoreIPC::DataReference dataReference;
+    if (!decoder.decode(dataReference))
+        return false;
+
+    RetainPtr<NSData> data = "" alloc] initWithBytesNoCopy:const_cast<uint8_t*>(dataReference.data()) length:dataReference.size() freeWhenDone:NO]);
+    RetainPtr<NSKeyedUnarchiver> unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:data.get()]);
+    [unarchiver setRequiresSecureCoding:YES];
+    result = [unarchiver decodeObjectOfClass:[T class] forKey:key];
+    return true;
+}
+#endif
+
 void ArgumentCoder<ResourceRequest>::encodePlatformData(ArgumentEncoder& encoder, const ResourceRequest& resourceRequest)
 {
     RetainPtr<NSURLRequest> requestToSerialize = resourceRequest.nsURLRequest(DoNotUpdateHTTPBody);
@@ -51,14 +78,18 @@
 
     // 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.
-    if ([requestToSerialize.get() HTTPBody] || [requestToSerialize.get() HTTPBodyStream]) {
-        requestToSerialize = adoptNS([requestToSerialize.get() mutableCopy]);
-        [(NSMutableURLRequest *)requestToSerialize.get() setHTTPBody:nil];
-        [(NSMutableURLRequest *)requestToSerialize.get() setHTTPBodyStream:nil];
+    if ([requestToSerialize HTTPBody] || [requestToSerialize HTTPBodyStream]) {
+        requestToSerialize = adoptNS([requestToSerialize mutableCopy]);
+        [(NSMutableURLRequest *)requestToSerialize setHTTPBody:nil];
+        [(NSMutableURLRequest *)requestToSerialize setHTTPBodyStream:nil];
     }
 
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+    archiveAndEncodeObject(encoder, requestToSerialize.get(), @"request");
+#else
     RetainPtr<CFDictionaryRef> dictionary = adoptCF(WKNSURLRequestCreateSerializableRepresentation(requestToSerialize.get(), CoreIPC::tokenNullTypeRef()));
     CoreIPC::encode(encoder, dictionary.get());
+#endif
 
     // The fallback array is part of NSURLRequest, but it is not encoded by WKNSURLRequestCreateSerializableRepresentation.
     encoder << resourceRequest.responseContentDispositionEncodingFallbackArray();
@@ -75,15 +106,21 @@
         return true;
     }
 
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+    RetainPtr<NSURLRequest> nsURLRequest;
+    if (!decodeAndUnarchiveObject(decoder, @"request", nsURLRequest))
+        return false;
+#else
     RetainPtr<CFDictionaryRef> dictionary;
     if (!CoreIPC::decode(decoder, dictionary))
         return false;
 
-    NSURLRequest *nsURLRequest = WKNSURLRequestFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef());
+    RetainPtr<NSURLRequest> nsURLRequest = WKNSURLRequestFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef());
     if (!nsURLRequest)
         return false;
+#endif
 
-    resourceRequest = ResourceRequest(nsURLRequest);
+    resourceRequest = ResourceRequest(nsURLRequest.get());
     
     Vector<String> responseContentDispositionEncodingFallbackArray;
     if (!decoder.decode(responseContentDispositionEncodingFallbackArray))
@@ -107,14 +144,7 @@
         return;
 
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
-    RetainPtr<NSMutableData> data = "" alloc] init]);
-    RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
-
-    [archiver setRequiresSecureCoding:YES];
-    [archiver.get() encodeObject:resourceResponse.nsURLResponse() forKey:@"response"];
-    [archiver finishEncoding];
-
-    encoder << CoreIPC::DataReference(static_cast<const uint8_t*>([data bytes]), [data length]);
+    archiveAndEncodeObject(encoder, resourceResponse.nsURLResponse(), @"response");
 #else
     RetainPtr<CFDictionaryRef> dictionary = adoptCF(WKNSURLResponseCreateSerializableRepresentation(resourceResponse.nsURLResponse(), CoreIPC::tokenNullTypeRef()));
     CoreIPC::encode(encoder, dictionary.get());
@@ -133,27 +163,21 @@
     }
 
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
-    CoreIPC::DataReference dataReference;
-    if (!decoder.decode(dataReference))
+    RetainPtr<NSURLResponse> nsURLResponse;
+    if (!decodeAndUnarchiveObject(decoder, @"response", nsURLResponse))
         return false;
-
-    RetainPtr<NSData> data = "" alloc] initWithBytesNoCopy:const_cast<uint8_t*>(dataReference.data()) length:dataReference.size() freeWhenDone:NO]);
-    RetainPtr<NSKeyedUnarchiver> unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:data.get()]);
-
-    [unarchiver setRequiresSecureCoding:YES];
-    NSURLResponse *nsURLResponse = [unarchiver.get() decodeObjectOfClass:[NSURLResponse class] forKey:@"response"];
 #else
     RetainPtr<CFDictionaryRef> dictionary;
     if (!CoreIPC::decode(decoder, dictionary))
         return false;
 
-    NSURLResponse *nsURLResponse = WKNSURLResponseFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef());
+    RetainPtr<NSURLResponse> nsURLResponse = WKNSURLResponseFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef());
 #endif
 
     if (!nsURLResponse)
         return false;
 
-    resourceResponse = ResourceResponse(nsURLResponse);
+    resourceResponse = ResourceResponse(nsURLResponse.get());
     return true;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to