[core] Remove Resource dependency from low-level classes

These classes should not be coupled to domain-specific resource types.
This commit is contained in:
John Firebaugh
2015-12-23 14:16:15 -08:00
parent 16de579d7c
commit c972a251da
10 changed files with 42 additions and 48 deletions

View File

@@ -1,6 +1,5 @@
#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/platform/log.hpp>
#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<const Response>) final;
@@ -36,7 +35,7 @@ public:
class HTTPAndroidRequest : public HTTPRequestBase {
public:
HTTPAndroidRequest(HTTPAndroidContext*,
const Resource&,
const std::string& url,
Callback,
std::shared_ptr<const Response>);
~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<const Response> 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<const Response> response_)
: HTTPRequestBase(resource_, callback_),
HTTPAndroidRequest::HTTPAndroidRequest(HTTPAndroidContext* context_, const std::string& url_, Callback callback_, std::shared_ptr<const Response> 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);

View File

@@ -1,6 +1,5 @@
#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>
@@ -19,7 +18,7 @@ class HTTPNSURLContext;
class HTTPNSURLRequest : public HTTPRequestBase {
public:
HTTPNSURLRequest(HTTPNSURLContext*,
const Resource&,
const std::string& url,
Callback,
std::shared_ptr<const Response>);
~HTTPNSURLRequest();
@@ -45,7 +44,7 @@ public:
HTTPNSURLContext();
~HTTPNSURLContext();
HTTPRequestBase* createRequest(const Resource&,
HTTPRequestBase* createRequest(const std::string& url,
RequestBase::Callback,
std::shared_ptr<const Response>) 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<const Response> 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<const Response> 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

View File

@@ -1,5 +1,4 @@
#include <mbgl/storage/asset_context_base.hpp>
#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/response.hpp>
#include <mbgl/util/string.hpp>
#include <mbgl/util/thread.hpp>
@@ -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<FileIOWorker> *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<FileIOWorker> 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<FileIOWorker> *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.

View File

@@ -1,5 +1,4 @@
#include <mbgl/storage/asset_context_base.hpp>
#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/response.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/util.hpp>
@@ -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<ZipIOWorker>* 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<ZipIOWorker>* 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);

View File

@@ -1,6 +1,5 @@
#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/platform/log.hpp>
@@ -47,7 +46,7 @@ public:
HTTPCURLContext();
~HTTPCURLContext();
HTTPRequestBase* createRequest(const Resource&,
HTTPRequestBase* createRequest(const std::string& url,
RequestBase::Callback,
std::shared_ptr<const Response>) final;
@@ -80,7 +79,7 @@ class HTTPCURLRequest : public HTTPRequestBase {
public:
HTTPCURLRequest(HTTPCURLContext*,
const Resource&,
const std::string& url,
Callback,
std::shared_ptr<const Response>);
~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<const Response> 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<const Response> response_)
: HTTPRequestBase(resource_, callback_),
HTTPCURLRequest::HTTPCURLRequest(HTTPCURLContext* context_, const std::string& url_, Callback callback_, std::shared_ptr<const Response> 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));

View File

@@ -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());
}
}

View File

@@ -10,7 +10,7 @@ public:
static std::unique_ptr<AssetContextBase> createContext();
virtual ~AssetContextBase() = default;
virtual RequestBase* createRequest(const Resource&,
virtual RequestBase* createRequest(const std::string& url,
RequestBase::Callback,
const std::string& assetRoot) = 0;
};

View File

@@ -14,7 +14,7 @@ public:
static std::unique_ptr<HTTPContextBase> createContext();
virtual ~HTTPContextBase() = default;
virtual HTTPRequestBase* createRequest(const Resource&,
virtual HTTPRequestBase* createRequest(const std::string& url,
RequestBase::Callback,
std::shared_ptr<const Response>) = 0;
};

View File

@@ -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) {
}

View File

@@ -3,11 +3,11 @@
#include <mbgl/util/noncopyable.hpp>
#include <mbgl/storage/file_cache.hpp>
#include <mbgl/storage/resource.hpp>
#include <memory>
#include <functional>
#include <utility>
#include <string>
namespace mbgl {
@@ -17,8 +17,8 @@ class RequestBase : private util::noncopyable {
public:
using Callback = std::function<void (std::shared_ptr<const Response> 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;
};