diff options
author | Fabian Guerra Soto <fabian.guerra@mapbox.com> | 2019-02-18 13:16:20 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-18 13:16:20 -0800 |
commit | 1fc7a9b82ea0c064c20247f0902b3854fff1942f (patch) | |
tree | 7f518f198ec241c55666fb6c9baa7b3179945c80 /platform/darwin | |
parent | 1c99b199c62f239ef2a9e1f2f23b0d10533b381a (diff) | |
download | qtlocation-mapboxgl-1fc7a9b82ea0c064c20247f0902b3854fff1942f.tar.gz |
[ios, macos] Expose the url session configuration object. (#13886)
The `MGLNetworkConfiguration` class was make public, and added `sessionConfiguration` property to let developers customize the `NSURLSessionConfiguration` object that is used to make HTTP requests in the SDK.
Diffstat (limited to 'platform/darwin')
-rw-r--r-- | platform/darwin/filesource-files.json | 1 | ||||
-rw-r--r-- | platform/darwin/src/MGLNetworkConfiguration.h | 29 | ||||
-rw-r--r-- | platform/darwin/src/MGLNetworkConfiguration.m | 52 | ||||
-rw-r--r-- | platform/darwin/src/http_file_source.mm | 10 |
4 files changed, 69 insertions, 23 deletions
diff --git a/platform/darwin/filesource-files.json b/platform/darwin/filesource-files.json index f435c43877..3ee96f9b95 100644 --- a/platform/darwin/filesource-files.json +++ b/platform/darwin/filesource-files.json @@ -2,6 +2,7 @@ "//": "This file can be edited manually and is the canonical source.", "sources": [ "platform/darwin/src/MGLLoggingConfiguration.m", + "platform/darwin/src/MGLNetworkConfiguration.m", "platform/darwin/src/http_file_source.mm", "platform/default/src/mbgl/storage/sqlite3.cpp" ], diff --git a/platform/darwin/src/MGLNetworkConfiguration.h b/platform/darwin/src/MGLNetworkConfiguration.h index aaac5a330c..6c56050aae 100644 --- a/platform/darwin/src/MGLNetworkConfiguration.h +++ b/platform/darwin/src/MGLNetworkConfiguration.h @@ -1,18 +1,37 @@ #import <Foundation/Foundation.h> +#import "MGLFoundation.h" + NS_ASSUME_NONNULL_BEGIN /** - The MGLNetworkConfiguration object provides a global way to set a base API URL for - retrieval of map data, styles, and other resources. - - Currently, MGLNetworkConfiguration is a private API. + The `MGLNetworkConfiguration` object provides a global way to set a base + `NSURLSessionConfiguration`, and other resources. */ +MGL_EXPORT @interface MGLNetworkConfiguration : NSObject -/// Returns the shared instance of the `MGLNetworkConfiguration` class. +/** + Returns the shared instance of the `MGLNetworkConfiguration` class. + */ @property (class, nonatomic, readonly) MGLNetworkConfiguration *sharedManager; +/** + The session configuration object that is used by the `NSURLSession` objects + in this SDK. + + If this property is set to nil or if no session configuration is provided this property + is set to the default session configuration. + + Assign this object before instantiating any `MGLMapView` object. + + @note: `NSURLSession` objects store a copy of this configuration. Any further changes + to mutable properties on this configuration object passed to a session’s initializer + will not affect the behavior of that session. + + */ +@property (atomic, strong, null_resettable) NSURLSessionConfiguration *sessionConfiguration; + @end NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLNetworkConfiguration.m b/platform/darwin/src/MGLNetworkConfiguration.m index 61422f7caa..8262e7eea1 100644 --- a/platform/darwin/src/MGLNetworkConfiguration.m +++ b/platform/darwin/src/MGLNetworkConfiguration.m @@ -1,23 +1,51 @@ #import "MGLNetworkConfiguration.h" +@interface MGLNetworkConfiguration () + +@property (strong) NSURLSessionConfiguration *sessionConfig; + +@end + @implementation MGLNetworkConfiguration + (instancetype)sharedManager { static dispatch_once_t onceToken; static MGLNetworkConfiguration *_sharedManager; - void (^setupBlock)(void) = ^{ - dispatch_once(&onceToken, ^{ - _sharedManager = [[self alloc] init]; - }); - }; - if (![[NSThread currentThread] isMainThread]) { - dispatch_sync(dispatch_get_main_queue(), ^{ - setupBlock(); - }); - } else { - setupBlock(); - } + dispatch_once(&onceToken, ^{ + _sharedManager = [[self alloc] init]; + _sharedManager.sessionConfiguration = nil; + }); + return _sharedManager; } +- (void)setSessionConfiguration:(NSURLSessionConfiguration *)sessionConfiguration { + @synchronized (self) { + if (sessionConfiguration == nil) { + _sessionConfig = [self defaultSessionConfiguration]; + } else { + _sessionConfig = sessionConfiguration; + } + } +} + +- (NSURLSessionConfiguration *)sessionConfiguration { + NSURLSessionConfiguration *sessionConfig = nil; + @synchronized (self) { + sessionConfig = _sessionConfig; + } + return sessionConfig; +} + +- (NSURLSessionConfiguration *)defaultSessionConfiguration { + NSURLSessionConfiguration* sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; + + sessionConfiguration.timeoutIntervalForResource = 30; + sessionConfiguration.HTTPMaximumConnectionsPerHost = 8; + sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData; + sessionConfiguration.URLCache = nil; + + return sessionConfiguration; +} + @end diff --git a/platform/darwin/src/http_file_source.mm b/platform/darwin/src/http_file_source.mm index f11d44ea54..c3918ad62b 100644 --- a/platform/darwin/src/http_file_source.mm +++ b/platform/darwin/src/http_file_source.mm @@ -8,6 +8,7 @@ #import <Foundation/Foundation.h> #import "MGLLoggingConfiguration_Private.h" +#import "MGLNetworkConfiguration.h" #include <mutex> #include <chrono> @@ -82,13 +83,10 @@ class HTTPFileSource::Impl { public: Impl() { @autoreleasepool { - NSURLSessionConfiguration* sessionConfig = - [NSURLSessionConfiguration defaultSessionConfiguration]; - sessionConfig.timeoutIntervalForResource = 30; - sessionConfig.HTTPMaximumConnectionsPerHost = 8; - sessionConfig.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData; - sessionConfig.URLCache = nil; + NSURLSessionConfiguration *sessionConfig = + [MGLNetworkConfiguration sharedManager].sessionConfiguration; + session = [NSURLSession sessionWithConfiguration:sessionConfig]; userAgent = getUserAgent(); |