summaryrefslogtreecommitdiff
path: root/platform/darwin/http_request_nsurl.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/http_request_nsurl.mm')
-rw-r--r--platform/darwin/http_request_nsurl.mm60
1 files changed, 17 insertions, 43 deletions
diff --git a/platform/darwin/http_request_nsurl.mm b/platform/darwin/http_request_nsurl.mm
index 2421c69c66..0166564727 100644
--- a/platform/darwin/http_request_nsurl.mm
+++ b/platform/darwin/http_request_nsurl.mm
@@ -1,5 +1,6 @@
#include <mbgl/storage/http_context_base.hpp>
#include <mbgl/storage/http_request_base.hpp>
+#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/response.hpp>
#include <mbgl/util/async_task.hpp>
@@ -16,10 +17,7 @@ class HTTPNSURLContext;
class HTTPNSURLRequest : public HTTPRequestBase {
public:
- HTTPNSURLRequest(HTTPNSURLContext*,
- const std::string& url,
- Callback,
- std::shared_ptr<const Response>);
+ HTTPNSURLRequest(HTTPNSURLContext*, const Resource&, Callback);
~HTTPNSURLRequest();
void cancel() final;
@@ -32,7 +30,6 @@ private:
bool cancelled = false;
NSURLSessionDataTask *task = nullptr;
std::unique_ptr<Response> response;
- const std::shared_ptr<const Response> existingResponse;
util::AsyncTask async;
};
@@ -43,9 +40,7 @@ public:
HTTPNSURLContext();
~HTTPNSURLContext();
- HTTPRequestBase* createRequest(const std::string& url,
- HTTPRequestBase::Callback,
- std::shared_ptr<const Response>) final;
+ HTTPRequestBase* createRequest(const Resource&, HTTPRequestBase::Callback) final;
NSURLSession *session = nil;
NSString *userAgent = nil;
@@ -79,21 +74,17 @@ HTTPNSURLContext::~HTTPNSURLContext() {
userAgent = nullptr;
}
-HTTPRequestBase* HTTPNSURLContext::createRequest(const std::string& url,
- HTTPRequestBase::Callback callback,
- std::shared_ptr<const Response> response) {
- return new HTTPNSURLRequest(this, url, callback, response);
+HTTPRequestBase* HTTPNSURLContext::createRequest(const Resource& resource, HTTPRequestBase::Callback callback) {
+ return new HTTPNSURLRequest(this, resource, callback);
}
// -------------------------------------------------------------------------------------------------
HTTPNSURLRequest::HTTPNSURLRequest(HTTPNSURLContext* context_,
- const std::string& url_,
- Callback callback_,
- std::shared_ptr<const Response> existingResponse_)
- : HTTPRequestBase(url_, callback_),
+ const Resource& resource_,
+ Callback callback_)
+ : HTTPRequestBase(resource_, callback_),
context(context_),
- existingResponse(existingResponse_),
async([this] { handleResponse(); }) {
// Hold the main loop alive until the request returns. This
// is needed because completion handler runs in another
@@ -101,7 +92,7 @@ HTTPNSURLRequest::HTTPNSURLRequest(HTTPNSURLContext* context_,
util::RunLoop::Get()->ref();
@autoreleasepool {
- NSURL* url = [NSURL URLWithString:@(url_.c_str())];
+ NSURL* url = [NSURL URLWithString:@(resource.url.c_str())];
if (context->accountType == 0 &&
([url.host isEqualToString:@"mapbox.com"] || [url.host hasSuffix:@".mapbox.com"])) {
NSString* absoluteString = [url.absoluteString
@@ -110,14 +101,12 @@ HTTPNSURLRequest::HTTPNSURLRequest(HTTPNSURLContext* context_,
}
NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL:url];
- if (existingResponse) {
- if (existingResponse->etag) {
- [req addValue:@((*existingResponse->etag).c_str())
- forHTTPHeaderField:@"If-None-Match"];
- } else if (existingResponse->modified) {
- [req addValue:@(util::rfc1123(*existingResponse->modified).c_str())
- forHTTPHeaderField:@"If-Modified-Since"];
- }
+ if (resource.priorEtag) {
+ [req addValue:@(resource.priorEtag->c_str())
+ forHTTPHeaderField:@"If-None-Match"];
+ } else if (resource.priorModified) {
+ [req addValue:@(util::rfc1123(*resource.priorModified).c_str())
+ forHTTPHeaderField:@"If-Modified-Since"];
}
[req addValue:context->userAgent forHTTPHeaderField:@"User-Agent"];
@@ -145,7 +134,7 @@ void HTTPNSURLRequest::handleResponse() {
if (!cancelled) {
// Actually return the response.
- notify(std::move(response));
+ notify(*response);
}
delete this;
@@ -232,22 +221,7 @@ void HTTPNSURLRequest::handleResult(NSData *data, NSURLResponse *res, NSError *e
// Nothing to do; this is what we want.
} else if (responseCode == 304) {
response->notModified = true;
-
- if (existingResponse) {
- response->data = existingResponse->data;
-
- if (!response->expires) {
- response->expires = existingResponse->expires;
- }
-
- if (!response->modified) {
- response->modified = existingResponse->modified;
- }
-
- if (!response->etag) {
- response->etag = existingResponse->etag;
- }
- }
+ response->data.reset();
} else if (responseCode == 404) {
response->error =
std::make_unique<Error>(Error::Reason::NotFound, "HTTP status code 404");