summaryrefslogtreecommitdiff
path: root/platform/darwin
diff options
context:
space:
mode:
authorFabian Guerra Soto <fabian.guerra@mapbox.com>2019-02-18 13:16:20 -0800
committerGitHub <noreply@github.com>2019-02-18 13:16:20 -0800
commit1fc7a9b82ea0c064c20247f0902b3854fff1942f (patch)
tree7f518f198ec241c55666fb6c9baa7b3179945c80 /platform/darwin
parent1c99b199c62f239ef2a9e1f2f23b0d10533b381a (diff)
downloadqtlocation-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.json1
-rw-r--r--platform/darwin/src/MGLNetworkConfiguration.h29
-rw-r--r--platform/darwin/src/MGLNetworkConfiguration.m52
-rw-r--r--platform/darwin/src/http_file_source.mm10
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();