summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/tile_loader_impl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile/tile_loader_impl.hpp')
-rw-r--r--src/mbgl/tile/tile_loader_impl.hpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/mbgl/tile/tile_loader_impl.hpp b/src/mbgl/tile/tile_loader_impl.hpp
index 7c02021083..51efbb99e9 100644
--- a/src/mbgl/tile/tile_loader_impl.hpp
+++ b/src/mbgl/tile/tile_loader_impl.hpp
@@ -1,12 +1,19 @@
#pragma once
-#include <mbgl/tile/tile_loader.hpp>
-#include <mbgl/storage/file_source.hpp>
#include <mbgl/renderer/tile_parameters.hpp>
+#include <mbgl/storage/file_source.hpp>
+#include <mbgl/tile/tile_loader.hpp>
+#include <mbgl/util/async_request.hpp>
#include <mbgl/util/tileset.hpp>
#include <cassert>
+namespace {
+inline std::exception_ptr getCantLoadTileError() {
+ return std::make_exception_ptr(std::runtime_error("Can't load tile."));
+}
+} // namespace
+
namespace mbgl {
template <typename T>
@@ -26,6 +33,11 @@ TileLoader<T>::TileLoader(T& tile_,
Resource::LoadingMethod::CacheOnly)),
fileSource(parameters.fileSource) {
assert(!request);
+ if (!fileSource) {
+ tile.setError(getCantLoadTileError());
+ return;
+ }
+
if (fileSource->supportsCacheOnlyRequests()) {
// When supported, the first request is always optional, even if the TileLoader
// is marked as required. That way, we can let the first optional request continue
@@ -49,6 +61,10 @@ TileLoader<T>::~TileLoader() = default;
template <typename T>
void TileLoader<T>::loadFromCache() {
assert(!request);
+ if (!fileSource) {
+ tile.setError(getCantLoadTileError());
+ return;
+ }
resource.loadingMethod = Resource::LoadingMethod::CacheOnly;
request = fileSource->request(resource, [this](Response res) {
@@ -113,6 +129,10 @@ void TileLoader<T>::loadedData(const Response& res) {
template <typename T>
void TileLoader<T>::loadFromNetwork() {
assert(!request);
+ if (!fileSource) {
+ tile.setError(getCantLoadTileError());
+ return;
+ }
// Instead of using Resource::LoadingMethod::All, we're first doing a CacheOnly, and then a
// NetworkOnly request.