Changeset 158927 in webkit
- Timestamp:
- Nov 8, 2013 10:28:06 AM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r158895 r158927 1 2013-11-08 Anders Carlsson <andersca@apple.com> 2 3 Encode and decode NSURLRequests using NSCoder 4 https://bugs.webkit.org/show_bug.cgi?id=124051 5 6 Reviewed by Sam Weinig. 7 8 * Shared/mac/WebCoreArgumentCodersMac.mm: 9 (CoreIPC::archiveAndEncodeObject): 10 (CoreIPC::decodeAndUnarchiveObject): 11 (CoreIPC::::encodePlatformData): 12 (CoreIPC::::decodePlatformData): 13 1 14 2013-11-07 Anders Carlsson <andersca@apple.com> 2 15 -
trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
r158895 r158927 40 40 namespace CoreIPC { 41 41 42 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 43 static void archiveAndEncodeObject(ArgumentEncoder& encoder, id object, NSString *key) 44 { 45 RetainPtr<NSMutableData> data = adoptNS([[NSMutableData alloc] init]); 46 RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]); 47 48 [archiver setRequiresSecureCoding:YES]; 49 [archiver.get() encodeObject:object forKey:key]; 50 [archiver finishEncoding]; 51 encoder << CoreIPC::DataReference(static_cast<const uint8_t*>([data bytes]), [data length]); 52 } 53 54 template<typename T> 55 static bool decodeAndUnarchiveObject(ArgumentDecoder& decoder, NSString *key, RetainPtr<T>& result) 56 { 57 CoreIPC::DataReference dataReference; 58 if (!decoder.decode(dataReference)) 59 return false; 60 61 RetainPtr<NSData> data = adoptNS([[NSData alloc] initWithBytesNoCopy:const_cast<uint8_t*>(dataReference.data()) length:dataReference.size() freeWhenDone:NO]); 62 RetainPtr<NSKeyedUnarchiver> unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:data.get()]); 63 [unarchiver setRequiresSecureCoding:YES]; 64 result = [unarchiver decodeObjectOfClass:[T class] forKey:key]; 65 return true; 66 } 67 #endif 68 42 69 void ArgumentCoder<ResourceRequest>::encodePlatformData(ArgumentEncoder& encoder, const ResourceRequest& resourceRequest) 43 70 { … … 52 79 // We don't send HTTP body over IPC for better performance. 53 80 // Also, it's not always possible to do, as streams can only be created in process that does networking. 54 if ([requestToSerialize.get() HTTPBody] || [requestToSerialize.get() HTTPBodyStream]) { 55 requestToSerialize = adoptNS([requestToSerialize.get() mutableCopy]); 56 [(NSMutableURLRequest *)requestToSerialize.get() setHTTPBody:nil]; 57 [(NSMutableURLRequest *)requestToSerialize.get() setHTTPBodyStream:nil]; 58 } 59 81 if ([requestToSerialize HTTPBody] || [requestToSerialize HTTPBodyStream]) { 82 requestToSerialize = adoptNS([requestToSerialize mutableCopy]); 83 [(NSMutableURLRequest *)requestToSerialize setHTTPBody:nil]; 84 [(NSMutableURLRequest *)requestToSerialize setHTTPBodyStream:nil]; 85 } 86 87 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 88 archiveAndEncodeObject(encoder, requestToSerialize.get(), @"request"); 89 #else 60 90 RetainPtr<CFDictionaryRef> dictionary = adoptCF(WKNSURLRequestCreateSerializableRepresentation(requestToSerialize.get(), CoreIPC::tokenNullTypeRef())); 61 91 CoreIPC::encode(encoder, dictionary.get()); 92 #endif 62 93 63 94 // The fallback array is part of NSURLRequest, but it is not encoded by WKNSURLRequestCreateSerializableRepresentation. … … 76 107 } 77 108 109 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 110 RetainPtr<NSURLRequest> nsURLRequest; 111 if (!decodeAndUnarchiveObject(decoder, @"request", nsURLRequest)) 112 return false; 113 #else 78 114 RetainPtr<CFDictionaryRef> dictionary; 79 115 if (!CoreIPC::decode(decoder, dictionary)) 80 116 return false; 81 117 82 NSURLRequest *nsURLRequest = WKNSURLRequestFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef());118 RetainPtr<NSURLRequest> nsURLRequest = WKNSURLRequestFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef()); 83 119 if (!nsURLRequest) 84 120 return false; 85 86 resourceRequest = ResourceRequest(nsURLRequest); 121 #endif 122 123 resourceRequest = ResourceRequest(nsURLRequest.get()); 87 124 88 125 Vector<String> responseContentDispositionEncodingFallbackArray; … … 108 145 109 146 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 110 RetainPtr<NSMutableData> data = adoptNS([[NSMutableData alloc] init]); 111 RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]); 112 113 [archiver setRequiresSecureCoding:YES]; 114 [archiver.get() encodeObject:resourceResponse.nsURLResponse() forKey:@"response"]; 115 [archiver finishEncoding]; 116 117 encoder << CoreIPC::DataReference(static_cast<const uint8_t*>([data bytes]), [data length]); 147 archiveAndEncodeObject(encoder, resourceResponse.nsURLResponse(), @"response"); 118 148 #else 119 149 RetainPtr<CFDictionaryRef> dictionary = adoptCF(WKNSURLResponseCreateSerializableRepresentation(resourceResponse.nsURLResponse(), CoreIPC::tokenNullTypeRef())); … … 134 164 135 165 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 136 CoreIPC::DataReference dataReference; 137 if (!decoder.decode(dataReference)) 138 return false; 139 140 RetainPtr<NSData> data = adoptNS([[NSData alloc] initWithBytesNoCopy:const_cast<uint8_t*>(dataReference.data()) length:dataReference.size() freeWhenDone:NO]); 141 RetainPtr<NSKeyedUnarchiver> unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:data.get()]); 142 143 [unarchiver setRequiresSecureCoding:YES]; 144 NSURLResponse *nsURLResponse = [unarchiver.get() decodeObjectOfClass:[NSURLResponse class] forKey:@"response"]; 166 RetainPtr<NSURLResponse> nsURLResponse; 167 if (!decodeAndUnarchiveObject(decoder, @"response", nsURLResponse)) 168 return false; 145 169 #else 146 170 RetainPtr<CFDictionaryRef> dictionary; … … 148 172 return false; 149 173 150 NSURLResponse *nsURLResponse = WKNSURLResponseFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef());174 RetainPtr<NSURLResponse> nsURLResponse = WKNSURLResponseFromSerializableRepresentation(dictionary.get(), CoreIPC::tokenNullTypeRef()); 151 175 #endif 152 176 … … 154 178 return false; 155 179 156 resourceResponse = ResourceResponse(nsURLResponse );180 resourceResponse = ResourceResponse(nsURLResponse.get()); 157 181 return true; 158 182 }
Note: See TracChangeset
for help on using the changeset viewer.