Chromium Code Reviews| Index: src/common/mac/HTTPMultipartUpload.m |
| diff --git a/src/common/mac/HTTPMultipartUpload.m b/src/common/mac/HTTPMultipartUpload.m |
| index 2ed1b63226519f09de512521af03a241b83f2e3e..2b4b9bea7301ea2d522a14a96cb83d64b2da975f 100644 |
| --- a/src/common/mac/HTTPMultipartUpload.m |
| +++ b/src/common/mac/HTTPMultipartUpload.m |
| @@ -30,6 +30,62 @@ |
| #import "HTTPMultipartUpload.h" |
| #import "GTMDefines.h" |
| +#include <Availability.h> |
| +#include <AvailabilityMacros.h> |
| + |
| +// As -[NSString stringByAddingPercentEscapesUsingEncoding:] has been |
| +// deprecated with iOS 9.0 / OS X 10.11 SDKs, this function re-implements it |
| +// using -[NSString stringByAddingPercentEncodingWithAllowedCharacters:] when |
| +// using those SDKs. |
| +static NSString *PercentEncodeNSString(NSString *key) { |
| +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && defined(__IPHONE_9_0) && \ |
| + __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0) || \ |
| + (defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \ |
| + defined(MAC_OS_X_VERSION_10_11) && \ |
| + MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11) |
| + return [key stringByAddingPercentEncodingWithAllowedCharacters: |
| + [NSCharacterSet alphanumericCharacterSet]]; |
|
Olivier
2016/01/21 09:12:31
This should be URLQueryAllowedCharacterSet
Using
|
| +#else |
| + return [key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
| +#endif |
| +} |
| + |
| +// As -[NSURLConnection sendSynchronousRequest:returningResponse:error:] has |
| +// been deprecated with iOS 9.0 / OS X 10.11 SDKs, this function re-implements |
| +// it using -[NSURLSession dataTaskWithRequest:completionHandler:] when using |
| +// those SDKs. |
| +static NSData *SendSynchronousNSURLRequest(NSURLRequest *req, |
| + NSURLResponse **response, |
| + NSError **error) { |
| +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && defined(__IPHONE_9_0) && \ |
| + __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0) || \ |
| + (defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \ |
| + defined(MAC_OS_X_VERSION_10_11) && \ |
| + MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11) |
| + __block NSData* result = nil; |
| + dispatch_semaphore_t wait_semaphone = dispatch_semaphore_create(0); |
| + [[[NSURLSession sharedSession] |
| + dataTaskWithRequest:req |
| + completionHandler:^(NSData *data, NSURLResponse *resp, |
| + NSError *err) { |
| + if (error) |
| + *error = err; |
| + if (response) |
| + *response = resp; |
| + if (err == nil) |
| + result = data; |
|
Olivier
2016/01/21 09:12:30
This variable is not retained and will be released
|
| + dispatch_semaphore_signal(wait_semaphone); |
| + }] resume]; |
| + dispatch_semaphore_wait(wait_semaphone, DISPATCH_TIME_FOREVER); |
| + dispatch_release(wait_semaphone); |
| + return result; |
| +#else |
| + return [NSURLConnection sendSynchronousRequest:req |
| + returningResponse:response |
| + error:error]; |
| +#endif |
| +} |
| + |
| @interface HTTPMultipartUpload(PrivateMethods) |
| - (NSString *)multipartBoundary; |
| // Each of the following methods will append the starting multipart boundary, |
| @@ -52,8 +108,7 @@ |
| //============================================================================= |
| - (NSData *)formDataForKey:(NSString *)key value:(NSString *)value { |
| - NSString *escaped = |
| - [key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
| + NSString *escaped = PercentEncodeNSString(key); |
| NSString *fmt = |
| @"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n"; |
| NSString *form = [NSString stringWithFormat:fmt, boundary_, escaped, value]; |
| @@ -64,8 +119,7 @@ |
| //============================================================================= |
| - (NSData *)formDataForFileContents:(NSData *)contents name:(NSString *)name { |
| NSMutableData *data = [NSMutableData data]; |
| - NSString *escaped = |
| - [name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
| + NSString *escaped = PercentEncodeNSString(name); |
| NSString *fmt = @"--%@\r\nContent-Disposition: form-data; name=\"%@\"; " |
| "filename=\"minidump.dmp\"\r\nContent-Type: application/octet-stream\r\n\r\n"; |
| NSString *pre = [NSString stringWithFormat:fmt, boundary_, escaped]; |
| @@ -196,9 +250,7 @@ |
| [[req HTTPBody] writeToURL:[req URL] options:0 error:error]; |
| } else { |
| NSURLResponse *response = nil; |
| - data = [NSURLConnection sendSynchronousRequest:req |
| - returningResponse:&response |
| - error:error]; |
| + data = SendSynchronousNSURLRequest(req, &response, error); |
| response_ = (NSHTTPURLResponse *)[response retain]; |
| } |
| [req release]; |