From c972a251da6e6bc5dadf243045181462ffb01700 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 23 Dec 2015 14:16:15 -0800 Subject: [PATCH] [core] Remove `Resource` dependency from low-level classes These classes should not be coupled to domain-specific resource types. --- platform/android/src/http_request_android.cpp | 15 +++++++-------- platform/darwin/http_request_nsurl.mm | 15 +++++++-------- platform/default/asset_request_fs.cpp | 12 +++++------- platform/default/asset_request_zip.cpp | 13 ++++++------- platform/default/http_request_curl.cpp | 15 +++++++-------- platform/default/online_file_source.cpp | 4 ++-- src/mbgl/storage/asset_context_base.hpp | 2 +- src/mbgl/storage/http_context_base.hpp | 2 +- src/mbgl/storage/http_request_base.hpp | 4 ++-- src/mbgl/storage/request_base.hpp | 8 ++++---- 10 files changed, 42 insertions(+), 48 deletions(-) diff --git a/platform/android/src/http_request_android.cpp b/platform/android/src/http_request_android.cpp index 03f4f8061..a3803ee11 100644 --- a/platform/android/src/http_request_android.cpp +++ b/platform/android/src/http_request_android.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include #include "jni.hpp" @@ -25,7 +24,7 @@ public: explicit HTTPAndroidContext(); ~HTTPAndroidContext(); - HTTPRequestBase* createRequest(const Resource&, + HTTPRequestBase* createRequest(const std::string& url, RequestBase::Callback, std::shared_ptr) final; @@ -36,7 +35,7 @@ public: class HTTPAndroidRequest : public HTTPRequestBase { public: HTTPAndroidRequest(HTTPAndroidContext*, - const Resource&, + const std::string& url, Callback, std::shared_ptr); ~HTTPAndroidRequest(); @@ -110,14 +109,14 @@ HTTPAndroidContext::~HTTPAndroidContext() { vm = nullptr; } -HTTPRequestBase* HTTPAndroidContext::createRequest(const Resource& resource, +HTTPRequestBase* HTTPAndroidContext::createRequest(const std::string& url, RequestBase::Callback callback, std::shared_ptr response) { - return new HTTPAndroidRequest(this, resource, callback, response); + return new HTTPAndroidRequest(this, url, callback, response); } -HTTPAndroidRequest::HTTPAndroidRequest(HTTPAndroidContext* context_, const Resource& resource_, Callback callback_, std::shared_ptr response_) - : HTTPRequestBase(resource_, callback_), +HTTPAndroidRequest::HTTPAndroidRequest(HTTPAndroidContext* context_, const std::string& url_, Callback callback_, std::shared_ptr response_) + : HTTPRequestBase(url_, callback_), context(context_), existingResponse(response_), async([this] { finish(); }) { @@ -135,7 +134,7 @@ HTTPAndroidRequest::HTTPAndroidRequest(HTTPAndroidContext* context_, const Resou JNIEnv *env = nullptr; bool detach = mbgl::android::attach_jni_thread(context->vm, &env, "HTTPAndroidContext::HTTPAndroidRequest()"); - jstring resourceUrl = mbgl::android::std_string_to_jstring(env, resource.url); + jstring resourceUrl = mbgl::android::std_string_to_jstring(env, url); jstring userAgent = mbgl::android::std_string_to_jstring(env, "MapboxGL/1.0"); jstring etag = mbgl::android::std_string_to_jstring(env, etagStr); jstring modified = mbgl::android::std_string_to_jstring(env, modifiedStr); diff --git a/platform/darwin/http_request_nsurl.mm b/platform/darwin/http_request_nsurl.mm index 372fa8d61..11c8100e6 100644 --- a/platform/darwin/http_request_nsurl.mm +++ b/platform/darwin/http_request_nsurl.mm @@ -1,6 +1,5 @@ #include #include -#include #include #include @@ -19,7 +18,7 @@ class HTTPNSURLContext; class HTTPNSURLRequest : public HTTPRequestBase { public: HTTPNSURLRequest(HTTPNSURLContext*, - const Resource&, + const std::string& url, Callback, std::shared_ptr); ~HTTPNSURLRequest(); @@ -45,7 +44,7 @@ public: HTTPNSURLContext(); ~HTTPNSURLContext(); - HTTPRequestBase* createRequest(const Resource&, + HTTPRequestBase* createRequest(const std::string& url, RequestBase::Callback, std::shared_ptr) final; @@ -81,24 +80,24 @@ HTTPNSURLContext::~HTTPNSURLContext() { userAgent = nullptr; } -HTTPRequestBase* HTTPNSURLContext::createRequest(const Resource& resource, +HTTPRequestBase* HTTPNSURLContext::createRequest(const std::string& url, RequestBase::Callback callback, std::shared_ptr response) { - return new HTTPNSURLRequest(this, resource, callback, response); + return new HTTPNSURLRequest(this, url, callback, response); } // ------------------------------------------------------------------------------------------------- HTTPNSURLRequest::HTTPNSURLRequest(HTTPNSURLContext* context_, - const Resource& resource_, + const std::string& url_, Callback callback_, std::shared_ptr existingResponse_) - : HTTPRequestBase(resource_, callback_), + : HTTPRequestBase(url_, callback_), context(context_), existingResponse(existingResponse_), async([this] { handleResponse(); }) { @autoreleasepool { - NSURL* url = [NSURL URLWithString:@(resource.url.c_str())]; + NSURL* url = [NSURL URLWithString:@(url_.c_str())]; if (context->accountType == 0 && ([url.host isEqualToString:@"mapbox.com"] || [url.host hasSuffix:@".mapbox.com"])) { NSString* absoluteString = [url.absoluteString diff --git a/platform/default/asset_request_fs.cpp b/platform/default/asset_request_fs.cpp index 3ff0e62cf..2ef22f958 100644 --- a/platform/default/asset_request_fs.cpp +++ b/platform/default/asset_request_fs.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -67,7 +66,7 @@ class AssetRequest : public RequestBase { MBGL_STORE_THREAD(tid) public: - AssetRequest(const Resource&, Callback, const std::string& assetRoot, + AssetRequest(const std::string& url, Callback, const std::string& assetRoot, util::Thread *worker); ~AssetRequest(); @@ -100,10 +99,10 @@ public: : worker({"FileIOWorker", util::ThreadType::Worker, util::ThreadPriority::Regular}) {} private: - RequestBase* createRequest(const Resource& resource, + RequestBase* createRequest(const std::string& url, RequestBase::Callback callback, const std::string& assetRoot) final { - return new AssetRequest(resource, callback, assetRoot, &worker); + return new AssetRequest(url, callback, assetRoot, &worker); } util::Thread worker; @@ -113,12 +112,11 @@ AssetRequest::~AssetRequest() { MBGL_VERIFY_THREAD(tid); } -AssetRequest::AssetRequest(const Resource& resource_, Callback callback_, +AssetRequest::AssetRequest(const std::string& url_, Callback callback_, const std::string& assetRoot_, util::Thread *worker_) - : RequestBase(resource_, callback_), + : RequestBase(url_, callback_), assetRoot(assetRoot_), worker(worker_) { - const auto &url = resource.url; std::string path; if (url.size() <= 8 || url[8] == '/') { // This is an empty or absolute path. diff --git a/platform/default/asset_request_zip.cpp b/platform/default/asset_request_zip.cpp index b29166f67..76bf8bba1 100644 --- a/platform/default/asset_request_zip.cpp +++ b/platform/default/asset_request_zip.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -97,7 +96,7 @@ class AssetRequest : public RequestBase { MBGL_STORE_THREAD(tid) public: - AssetRequest(const Resource&, Callback, const std::string& assetRoot, + AssetRequest(const std::string& url, Callback, const std::string& assetRoot, AssetZipContext* context, util::Thread* worker); ~AssetRequest(); @@ -136,10 +135,10 @@ public: AssetZipContext(); ~AssetZipContext(); - RequestBase* createRequest(const Resource& resource, + RequestBase* createRequest(const std::string& url, RequestBase::Callback callback, const std::string& assetRoot) final { - return new AssetRequest(resource, callback, assetRoot, this, &worker); + return new AssetRequest(url, callback, assetRoot, this, &worker); } struct zip *getHandle(const std::string &path); @@ -182,11 +181,11 @@ void AssetZipContext::returnHandle(const std::string &path, struct zip* archive) handles[path].push_front(archive); } -AssetRequest::AssetRequest(const Resource& resource_, Callback callback_, +AssetRequest::AssetRequest(const std::string& url_, Callback callback_, const std::string& assetRoot, AssetZipContext* context_, util::Thread* worker_) - : RequestBase(resource_, callback_), + : RequestBase(url_, callback_), root(assetRoot), - path(std::string("assets/") + resource.url.substr(8)), + path(std::string("assets/") + url.substr(8)), context(context_), worker(worker_) { archive = context->getHandle(root); diff --git a/platform/default/http_request_curl.cpp b/platform/default/http_request_curl.cpp index 065b90501..e1ea931fb 100644 --- a/platform/default/http_request_curl.cpp +++ b/platform/default/http_request_curl.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include @@ -47,7 +46,7 @@ public: HTTPCURLContext(); ~HTTPCURLContext(); - HTTPRequestBase* createRequest(const Resource&, + HTTPRequestBase* createRequest(const std::string& url, RequestBase::Callback, std::shared_ptr) final; @@ -80,7 +79,7 @@ class HTTPCURLRequest : public HTTPRequestBase { public: HTTPCURLRequest(HTTPCURLContext*, - const Resource&, + const std::string& url, Callback, std::shared_ptr); ~HTTPCURLRequest(); @@ -139,10 +138,10 @@ HTTPCURLContext::~HTTPCURLContext() { timeout.stop(); } -HTTPRequestBase* HTTPCURLContext::createRequest(const Resource& resource, +HTTPRequestBase* HTTPCURLContext::createRequest(const std::string& url, RequestBase::Callback callback, std::shared_ptr response) { - return new HTTPCURLRequest(this, resource, callback, response); + return new HTTPCURLRequest(this, url, callback, response); } CURL *HTTPCURLContext::getHandle() { @@ -353,8 +352,8 @@ static CURLcode sslctx_function(CURL * /* curl */, void *sslctx, void * /* parm } #endif -HTTPCURLRequest::HTTPCURLRequest(HTTPCURLContext* context_, const Resource& resource_, Callback callback_, std::shared_ptr response_) - : HTTPRequestBase(resource_, callback_), +HTTPCURLRequest::HTTPCURLRequest(HTTPCURLContext* context_, const std::string& url_, Callback callback_, std::shared_ptr response_) + : HTTPRequestBase(url_, callback_), context(context_), existingResponse(response_), handle(context->getHandle()) { @@ -387,7 +386,7 @@ HTTPCURLRequest::HTTPCURLRequest(HTTPCURLContext* context_, const Resource& reso handleError(curl_easy_setopt(handle, CURLOPT_CAINFO, "ca-bundle.crt")); #endif handleError(curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1)); - handleError(curl_easy_setopt(handle, CURLOPT_URL, resource.url.c_str())); + handleError(curl_easy_setopt(handle, CURLOPT_URL, url.c_str())); handleError(curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writeCallback)); handleError(curl_easy_setopt(handle, CURLOPT_WRITEDATA, this)); handleError(curl_easy_setopt(handle, CURLOPT_HEADERFUNCTION, headerCallback)); diff --git a/platform/default/online_file_source.cpp b/platform/default/online_file_source.cpp index 22c3684e7..59cebbe54 100644 --- a/platform/default/online_file_source.cpp +++ b/platform/default/online_file_source.cpp @@ -301,10 +301,10 @@ void OnlineFileSource::Impl::startRealRequest(OnlineFileRequestImpl& request) { if (algo::starts_with(request.resource.url, "asset://")) { request.realRequest = - assetContext->createRequest(request.resource, callback, assetRoot); + assetContext->createRequest(request.resource.url, callback, assetRoot); } else { request.realRequest = - httpContext->createRequest(request.resource, callback, request.getResponse()); + httpContext->createRequest(request.resource.url, callback, request.getResponse()); } } diff --git a/src/mbgl/storage/asset_context_base.hpp b/src/mbgl/storage/asset_context_base.hpp index 4a6ca0b6f..92138615b 100644 --- a/src/mbgl/storage/asset_context_base.hpp +++ b/src/mbgl/storage/asset_context_base.hpp @@ -10,7 +10,7 @@ public: static std::unique_ptr createContext(); virtual ~AssetContextBase() = default; - virtual RequestBase* createRequest(const Resource&, + virtual RequestBase* createRequest(const std::string& url, RequestBase::Callback, const std::string& assetRoot) = 0; }; diff --git a/src/mbgl/storage/http_context_base.hpp b/src/mbgl/storage/http_context_base.hpp index 7fbef719f..f2d15e291 100644 --- a/src/mbgl/storage/http_context_base.hpp +++ b/src/mbgl/storage/http_context_base.hpp @@ -14,7 +14,7 @@ public: static std::unique_ptr createContext(); virtual ~HTTPContextBase() = default; - virtual HTTPRequestBase* createRequest(const Resource&, + virtual HTTPRequestBase* createRequest(const std::string& url, RequestBase::Callback, std::shared_ptr) = 0; }; diff --git a/src/mbgl/storage/http_request_base.hpp b/src/mbgl/storage/http_request_base.hpp index eeefdf28d..a17284e78 100644 --- a/src/mbgl/storage/http_request_base.hpp +++ b/src/mbgl/storage/http_request_base.hpp @@ -8,8 +8,8 @@ namespace mbgl { class HTTPRequestBase : public RequestBase { public: - HTTPRequestBase(const Resource& resource_, Callback notify_) - : RequestBase(resource_, notify_) + HTTPRequestBase(const std::string& url_, Callback notify_) + : RequestBase(url_, notify_) , cancelled(false) { } diff --git a/src/mbgl/storage/request_base.hpp b/src/mbgl/storage/request_base.hpp index 5e99041cd..a0476d49b 100644 --- a/src/mbgl/storage/request_base.hpp +++ b/src/mbgl/storage/request_base.hpp @@ -3,11 +3,11 @@ #include #include -#include #include #include #include +#include namespace mbgl { @@ -17,8 +17,8 @@ class RequestBase : private util::noncopyable { public: using Callback = std::function response)>; - RequestBase(const Resource& resource_, Callback notify_) - : resource(resource_) + RequestBase(const std::string& url_, Callback notify_) + : url(url_) , notify(std::move(notify_)) { } @@ -26,7 +26,7 @@ public: virtual void cancel() = 0; protected: - Resource resource; + std::string url; Callback notify; };