summaryrefslogtreecommitdiff
path: root/src/mbgl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl')
-rw-r--r--src/mbgl/annotation/annotation_source.cpp2
-rw-r--r--src/mbgl/annotation/annotation_source.hpp6
-rw-r--r--src/mbgl/map/map.cpp11
-rw-r--r--src/mbgl/map/map_impl.cpp8
-rw-r--r--src/mbgl/map/map_impl.hpp11
-rw-r--r--src/mbgl/map/map_options.cpp26
-rw-r--r--src/mbgl/platform/factory.cpp27
-rw-r--r--src/mbgl/renderer/renderer.cpp6
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp11
-rw-r--r--src/mbgl/renderer/renderer_impl.hpp8
-rw-r--r--src/mbgl/renderer/tile_parameters.hpp6
-rw-r--r--src/mbgl/sprite/sprite_loader.cpp10
-rw-r--r--src/mbgl/sprite/sprite_loader.hpp7
-rw-r--r--src/mbgl/style/sources/custom_geometry_source.cpp2
-rw-r--r--src/mbgl/style/sources/geojson_source.cpp4
-rw-r--r--src/mbgl/style/sources/image_source.cpp4
-rw-r--r--src/mbgl/style/sources/raster_source.cpp8
-rw-r--r--src/mbgl/style/sources/vector_source.cpp8
-rw-r--r--src/mbgl/style/style.cpp4
-rw-r--r--src/mbgl/style/style_impl.cpp11
-rw-r--r--src/mbgl/style/style_impl.hpp6
-rw-r--r--src/mbgl/text/glyph_manager.cpp9
-rw-r--r--src/mbgl/text/glyph_manager.hpp6
-rw-r--r--src/mbgl/tile/tile_loader.hpp2
-rw-r--r--src/mbgl/tile/tile_loader_impl.hpp9
25 files changed, 116 insertions, 96 deletions
diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp
index 68f36f2d3a..5746081d22 100644
--- a/src/mbgl/annotation/annotation_source.cpp
+++ b/src/mbgl/annotation/annotation_source.cpp
@@ -13,7 +13,7 @@ AnnotationSource::Impl::Impl()
: Source::Impl(SourceType::Annotations, AnnotationManager::SourceID) {
}
-void AnnotationSource::loadDescription(FileSource&) {
+void AnnotationSource::loadDescription(std::shared_ptr<FileSource>) {
loaded = true;
}
diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp
index 0728f3207e..a0e59227e4 100644
--- a/src/mbgl/annotation/annotation_source.hpp
+++ b/src/mbgl/annotation/annotation_source.hpp
@@ -3,8 +3,12 @@
#include <mbgl/style/source.hpp>
#include <mbgl/style/source_impl.hpp>
+#include <memory>
+
namespace mbgl {
+class FileSource;
+
class AnnotationSource : public style::Source {
public:
AnnotationSource();
@@ -13,7 +17,7 @@ public:
const Impl& impl() const;
private:
- void loadDescription(FileSource&) final;
+ void loadDescription(std::shared_ptr<FileSource>) final;
Mutable<Impl> mutableImpl() const;
};
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 8b90aee492..059746430c 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -9,9 +9,6 @@
#include <mbgl/renderer/update_parameters.hpp>
#include <mbgl/renderer/renderer_frontend.hpp>
#include <mbgl/renderer/renderer_observer.hpp>
-#include <mbgl/storage/file_source.hpp>
-#include <mbgl/storage/resource.hpp>
-#include <mbgl/storage/response.hpp>
#include <mbgl/util/constants.hpp>
#include <mbgl/util/math.hpp>
#include <mbgl/util/exception.hpp>
@@ -30,17 +27,17 @@ Map::Map(RendererFrontend& rendererFrontend,
MapObserver& mapObserver,
const Size size,
const float pixelRatio,
- FileSource& fileSource,
- const MapOptions& options)
+ const MapOptions& options,
+ const FileSourceOptions& fileSourceOptions)
: impl(std::make_unique<Impl>(*this,
rendererFrontend,
mapObserver,
- fileSource,
size,
pixelRatio,
options.mapMode(),
options.viewportMode(),
- options.crossSourceCollisions())) {}
+ options.crossSourceCollisions(),
+ fileSourceOptions)) {}
Map::~Map() = default;
diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp
index 15caa34af4..572e1440e8 100644
--- a/src/mbgl/map/map_impl.cpp
+++ b/src/mbgl/map/map_impl.cpp
@@ -8,21 +8,21 @@ namespace mbgl {
Map::Impl::Impl(Map& map_,
RendererFrontend& frontend,
MapObserver& mapObserver,
- FileSource& fileSource_,
Size size_,
float pixelRatio_,
MapMode mode_,
ViewportMode viewportMode_,
- bool crossSourceCollisions_)
+ bool crossSourceCollisions_,
+ const FileSourceOptions& fileSourceOptions)
: map(map_),
observer(mapObserver),
rendererFrontend(frontend),
- fileSource(fileSource_),
+ fileSource(platform::Factory::sharedFileSource(fileSourceOptions)),
transform(observer, viewportMode_),
mode(mode_),
pixelRatio(pixelRatio_),
crossSourceCollisions(crossSourceCollisions_),
- style(std::make_unique<style::Style>(fileSource, pixelRatio)),
+ style(std::make_unique<style::Style>(pixelRatio, fileSourceOptions)),
annotationManager(*style) {
style->impl->setObserver(this);
diff --git a/src/mbgl/map/map_impl.hpp b/src/mbgl/map/map_impl.hpp
index af64d8c0f6..331ae7a588 100644
--- a/src/mbgl/map/map_impl.hpp
+++ b/src/mbgl/map/map_impl.hpp
@@ -5,9 +5,9 @@
#include <mbgl/map/map_observer.hpp>
#include <mbgl/map/mode.hpp>
#include <mbgl/map/transform.hpp>
+#include <mbgl/platform/factory.hpp>
#include <mbgl/renderer/renderer_frontend.hpp>
#include <mbgl/renderer/renderer_observer.hpp>
-#include <mbgl/storage/file_source.hpp>
#include <mbgl/style/observer.hpp>
#include <mbgl/style/source.hpp>
#include <mbgl/style/style.hpp>
@@ -28,14 +28,15 @@ public:
Impl(Map&,
RendererFrontend&,
MapObserver&,
- FileSource&,
Size size,
float pixelRatio,
MapMode,
ViewportMode,
- bool crossSourceCollisions);
+ bool crossSourceCollisions,
+
+ const FileSourceOptions& fileSourceOptions);
~Impl() final;
@@ -57,7 +58,9 @@ public:
Map& map;
MapObserver& observer;
RendererFrontend& rendererFrontend;
- FileSource& fileSource;
+
+ // Keeps a reference to the initialized file source.
+ std::shared_ptr<FileSource> fileSource;
Transform transform;
diff --git a/src/mbgl/map/map_options.cpp b/src/mbgl/map/map_options.cpp
index 34586f364c..90f81d4b36 100644
--- a/src/mbgl/map/map_options.cpp
+++ b/src/mbgl/map/map_options.cpp
@@ -36,32 +36,6 @@ ViewportMode MapOptions::viewportMode() const {
return impl_->viewportMode;
}
-MapOptions& MapOptions::withCachePath(std::string path) {
- impl_->cachePath = std::move(path);
- return *this;
-}
-
-const std::string& MapOptions::cachePath() const {
- return impl_->cachePath;
-}
-
-MapOptions& MapOptions::withAssetRoot(std::string path) {
- impl_->assetRoot = std::move(path);
- return *this;
-}
-
-const std::string& MapOptions::assetRoot() const {
- return impl_->assetRoot;
-}
-
-MapOptions& MapOptions::withMaximumCacheSize(uint64_t size) {
- impl_->maximumSize = size;
- return *this;
-}
-
-uint64_t MapOptions::maximumCacheSize() const {
- return impl_->maximumSize;
-}
MapOptions& MapOptions::withCrossSourceCollisions(bool enableCollisions) {
impl_->crossSourceCollisions = enableCollisions;
diff --git a/src/mbgl/platform/factory.cpp b/src/mbgl/platform/factory.cpp
new file mode 100644
index 0000000000..6f595f9866
--- /dev/null
+++ b/src/mbgl/platform/factory.cpp
@@ -0,0 +1,27 @@
+#include <mbgl/platform/factory.hpp>
+#include <mbgl/storage/default_file_source.hpp>
+
+namespace mbgl {
+namespace platform {
+
+std::shared_ptr<FileSource> Factory::sharedFileSource(const FileSourceOptions& options, std::shared_ptr<FileSource> initial) {
+ static std::weak_ptr<FileSource> weak;
+
+ if (initial) {
+ // We can only assign a custom initial value if the weak pointer object has zero references.
+ assert(weak.use_count() == 0);
+ weak = initial;
+ }
+
+ std::shared_ptr<FileSource> strong = weak.lock();
+ if (!strong) {
+ auto defaultFileSource = std::make_shared<DefaultFileSource>(options.cachePath(), options.assetRoot(), options.maximumCacheSize());
+ defaultFileSource->setAccessToken(options.accessToken());
+ weak = strong = defaultFileSource;
+ }
+
+ return strong;
+}
+
+} // namespace platform
+} // namespace mbgl
diff --git a/src/mbgl/renderer/renderer.cpp b/src/mbgl/renderer/renderer.cpp
index c8be1d16ef..e5339326dd 100644
--- a/src/mbgl/renderer/renderer.cpp
+++ b/src/mbgl/renderer/renderer.cpp
@@ -9,12 +9,12 @@ namespace mbgl {
Renderer::Renderer(RendererBackend& backend,
float pixelRatio_,
- FileSource& fileSource_,
+ const FileSourceOptions& fileSourceOptions,
GLContextMode contextMode_,
const optional<std::string> programCacheDir_,
const optional<std::string> localFontFamily_)
- : impl(std::make_unique<Impl>(backend, pixelRatio_, fileSource_,
- contextMode_, std::move(programCacheDir_), std::move(localFontFamily_))) {
+ : impl(std::make_unique<Impl>(backend, pixelRatio_,
+ contextMode_, std::move(programCacheDir_), std::move(localFontFamily_), fileSourceOptions)) {
}
Renderer::~Renderer() {
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp
index bfd518c11b..2ec271a444 100644
--- a/src/mbgl/renderer/renderer_impl.cpp
+++ b/src/mbgl/renderer/renderer_impl.cpp
@@ -1,5 +1,6 @@
#include <mbgl/annotation/annotation_manager.hpp>
#include <mbgl/layermanager/layer_manager.hpp>
+#include <mbgl/platform/factory.hpp>
#include <mbgl/renderer/renderer_impl.hpp>
#include <mbgl/renderer/renderer_backend.hpp>
#include <mbgl/renderer/renderer_observer.hpp>
@@ -37,17 +38,17 @@ static RendererObserver& nullObserver() {
Renderer::Impl::Impl(RendererBackend& backend_,
float pixelRatio_,
- FileSource& fileSource_,
GLContextMode contextMode_,
const optional<std::string> programCacheDir_,
- const optional<std::string> localFontFamily_)
+ const optional<std::string> localFontFamily_,
+ const FileSourceOptions& fileSourceOptions)
: backend(backend_)
- , fileSource(fileSource_)
, observer(&nullObserver())
, contextMode(contextMode_)
, pixelRatio(pixelRatio_)
, programCacheDir(programCacheDir_)
- , glyphManager(std::make_unique<GlyphManager>(fileSource, std::make_unique<LocalGlyphRasterizer>(localFontFamily_)))
+ , fileSource(platform::Factory::sharedFileSource(fileSourceOptions))
+ , glyphManager(std::make_unique<GlyphManager>(fileSourceOptions, std::make_unique<LocalGlyphRasterizer>(localFontFamily_)))
, imageManager(std::make_unique<ImageManager>())
, lineAtlas(std::make_unique<LineAtlas>(Size{ 256, 512 }))
, imageImpls(makeMutable<std::vector<Immutable<style::Image::Impl>>>())
@@ -107,9 +108,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
const TileParameters tileParameters {
updateParameters.pixelRatio,
+ fileSource,
updateParameters.debugOptions,
updateParameters.transformState,
- fileSource,
updateParameters.mode,
updateParameters.annotationManager,
*imageManager,
diff --git a/src/mbgl/renderer/renderer_impl.hpp b/src/mbgl/renderer/renderer_impl.hpp
index d820a50789..ded312527a 100644
--- a/src/mbgl/renderer/renderer_impl.hpp
+++ b/src/mbgl/renderer/renderer_impl.hpp
@@ -28,6 +28,7 @@ class RenderStaticData;
class RenderedQueryOptions;
class SourceQueryOptions;
class FileSource;
+class FileSourceOptions;
class GlyphManager;
class ImageManager;
class LineAtlas;
@@ -36,8 +37,8 @@ class CrossTileSymbolIndex;
class Renderer::Impl : public GlyphManagerObserver,
public RenderSourceObserver{
public:
- Impl(RendererBackend&, float pixelRatio_, FileSource&, GLContextMode,
- const optional<std::string> programCacheDir, const optional<std::string> localFontFamily);
+ Impl(RendererBackend&, float pixelRatio_, GLContextMode,
+ const optional<std::string> programCacheDir, const optional<std::string> localFontFamily, const FileSourceOptions&);
~Impl() final;
void markContextLost() {
@@ -89,7 +90,6 @@ private:
friend class Renderer;
RendererBackend& backend;
- FileSource& fileSource;
RendererObserver* observer;
@@ -107,6 +107,8 @@ private:
ZoomHistory zoomHistory;
TransformState transformState;
+ std::shared_ptr<FileSource> fileSource;
+
std::unique_ptr<GlyphManager> glyphManager;
std::unique_ptr<ImageManager> imageManager;
std::unique_ptr<LineAtlas> lineAtlas;
diff --git a/src/mbgl/renderer/tile_parameters.hpp b/src/mbgl/renderer/tile_parameters.hpp
index cbe8dfb3ba..9af7ceb736 100644
--- a/src/mbgl/renderer/tile_parameters.hpp
+++ b/src/mbgl/renderer/tile_parameters.hpp
@@ -2,10 +2,12 @@
#include <mbgl/map/mode.hpp>
+#include <memory>
+
namespace mbgl {
-class TransformState;
class FileSource;
+class TransformState;
class AnnotationManager;
class ImageManager;
class GlyphManager;
@@ -13,9 +15,9 @@ class GlyphManager;
class TileParameters {
public:
const float pixelRatio;
+ std::shared_ptr<FileSource> fileSource;
const MapDebugOptions debugOptions;
const TransformState& transformState;
- FileSource& fileSource;
const MapMode mode;
AnnotationManager& annotationManager;
ImageManager& imageManager;
diff --git a/src/mbgl/sprite/sprite_loader.cpp b/src/mbgl/sprite/sprite_loader.cpp
index d38d7a2715..856e9c69a2 100644
--- a/src/mbgl/sprite/sprite_loader.cpp
+++ b/src/mbgl/sprite/sprite_loader.cpp
@@ -12,6 +12,7 @@
#include <mbgl/storage/response.hpp>
#include <mbgl/actor/actor.hpp>
#include <mbgl/actor/scheduler.hpp>
+#include <mbgl/platform/factory.hpp>
#include <cassert>
@@ -33,14 +34,15 @@ struct SpriteLoader::Loader {
Actor<SpriteLoaderWorker> worker;
};
-SpriteLoader::SpriteLoader(float pixelRatio_)
+SpriteLoader::SpriteLoader(float pixelRatio_, const FileSourceOptions& fileSourceOptions)
: pixelRatio(pixelRatio_)
+ , fileSource(platform::Factory::sharedFileSource(fileSourceOptions))
, observer(&nullObserver) {
}
SpriteLoader::~SpriteLoader() = default;
-void SpriteLoader::load(const std::string& url, FileSource& fileSource) {
+void SpriteLoader::load(const std::string& url) {
if (url.empty()) {
// Treat a non-existent sprite as a successfully loaded empty sprite.
observer->onSpriteLoaded({});
@@ -49,7 +51,7 @@ void SpriteLoader::load(const std::string& url, FileSource& fileSource) {
loader = std::make_unique<Loader>(*this);
- loader->jsonRequest = fileSource.request(Resource::spriteJSON(url, pixelRatio), [this](Response res) {
+ loader->jsonRequest = fileSource->request(Resource::spriteJSON(url, pixelRatio), [this](Response res) {
if (res.error) {
observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message)));
} else if (res.notModified) {
@@ -64,7 +66,7 @@ void SpriteLoader::load(const std::string& url, FileSource& fileSource) {
}
});
- loader->spriteRequest = fileSource.request(Resource::spriteImage(url, pixelRatio), [this](Response res) {
+ loader->spriteRequest = fileSource->request(Resource::spriteImage(url, pixelRatio), [this](Response res) {
if (res.error) {
observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message)));
} else if (res.notModified) {
diff --git a/src/mbgl/sprite/sprite_loader.hpp b/src/mbgl/sprite/sprite_loader.hpp
index 0b7d37fa14..e9b9c12616 100644
--- a/src/mbgl/sprite/sprite_loader.hpp
+++ b/src/mbgl/sprite/sprite_loader.hpp
@@ -13,14 +13,16 @@
namespace mbgl {
class FileSource;
+class FileSourceOptions;
+
class SpriteLoaderObserver;
class SpriteLoader : public util::noncopyable {
public:
- SpriteLoader(float pixelRatio);
+ SpriteLoader(float pixelRatio, const FileSourceOptions&);
~SpriteLoader();
- void load(const std::string& url, FileSource&);
+ void load(const std::string& url);
void setObserver(SpriteLoaderObserver*);
@@ -36,6 +38,7 @@ private:
struct Loader;
std::unique_ptr<Loader> loader;
+ std::shared_ptr<FileSource> fileSource;
SpriteLoaderObserver* observer = nullptr;
};
diff --git a/src/mbgl/style/sources/custom_geometry_source.cpp b/src/mbgl/style/sources/custom_geometry_source.cpp
index 6e9d8d65fb..546feacb8f 100644
--- a/src/mbgl/style/sources/custom_geometry_source.cpp
+++ b/src/mbgl/style/sources/custom_geometry_source.cpp
@@ -22,7 +22,7 @@ const CustomGeometrySource::Impl& CustomGeometrySource::impl() const {
return static_cast<const CustomGeometrySource::Impl&>(*baseImpl);
}
-void CustomGeometrySource::loadDescription(FileSource&) {
+void CustomGeometrySource::loadDescription(std::shared_ptr<FileSource>) {
baseImpl = makeMutable<CustomGeometrySource::Impl>(impl(), loader->self());
loaded = true;
}
diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp
index 4e3478322d..cb83b75ec7 100644
--- a/src/mbgl/style/sources/geojson_source.cpp
+++ b/src/mbgl/style/sources/geojson_source.cpp
@@ -40,7 +40,7 @@ optional<std::string> GeoJSONSource::getURL() const {
return url;
}
-void GeoJSONSource::loadDescription(FileSource& fileSource) {
+void GeoJSONSource::loadDescription(std::shared_ptr<FileSource> fileSource) {
if (!url) {
loaded = true;
return;
@@ -50,7 +50,7 @@ void GeoJSONSource::loadDescription(FileSource& fileSource) {
return;
}
- req = fileSource.request(Resource::source(*url), [this](Response res) {
+ req = fileSource->request(Resource::source(*url), [this](Response res) {
if (res.error) {
observer->onSourceError(
*this, std::make_exception_ptr(std::runtime_error(res.error->message)));
diff --git a/src/mbgl/style/sources/image_source.cpp b/src/mbgl/style/sources/image_source.cpp
index fa268da0ef..da046ba882 100644
--- a/src/mbgl/style/sources/image_source.cpp
+++ b/src/mbgl/style/sources/image_source.cpp
@@ -51,7 +51,7 @@ optional<std::string> ImageSource::getURL() const {
return url;
}
-void ImageSource::loadDescription(FileSource& fileSource) {
+void ImageSource::loadDescription(std::shared_ptr<FileSource> fileSource) {
if (!url) {
loaded = true;
}
@@ -61,7 +61,7 @@ void ImageSource::loadDescription(FileSource& fileSource) {
}
const Resource imageResource { Resource::Image, *url, {} };
- req = fileSource.request(imageResource, [this](Response res) {
+ req = fileSource->request(imageResource, [this](Response res) {
if (res.error) {
observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error(res.error->message)));
} else if (res.notModified) {
diff --git a/src/mbgl/style/sources/raster_source.cpp b/src/mbgl/style/sources/raster_source.cpp
index c2f96dbd55..5faa6a0335 100644
--- a/src/mbgl/style/sources/raster_source.cpp
+++ b/src/mbgl/style/sources/raster_source.cpp
@@ -11,8 +11,8 @@ namespace mbgl {
namespace style {
RasterSource::RasterSource(std::string id, variant<std::string, Tileset> urlOrTileset_, uint16_t tileSize, SourceType sourceType)
- : Source(makeMutable<Impl>(sourceType, std::move(id), tileSize)),
- urlOrTileset(std::move(urlOrTileset_)) {
+ : Source(makeMutable<Impl>(sourceType, std::move(id), tileSize))
+ , urlOrTileset(std::move(urlOrTileset_)) {
}
RasterSource::~RasterSource() = default;
@@ -37,7 +37,7 @@ uint16_t RasterSource::getTileSize() const {
return impl().getTileSize();
}
-void RasterSource::loadDescription(FileSource& fileSource) {
+void RasterSource::loadDescription(std::shared_ptr<FileSource> fileSource) {
if (urlOrTileset.is<Tileset>()) {
baseImpl = makeMutable<Impl>(impl(), urlOrTileset.get<Tileset>());
loaded = true;
@@ -49,7 +49,7 @@ void RasterSource::loadDescription(FileSource& fileSource) {
}
const std::string& url = urlOrTileset.get<std::string>();
- req = fileSource.request(Resource::source(url), [this, url](Response res) {
+ req = fileSource->request(Resource::source(url), [this, url](Response res) {
if (res.error) {
observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error(res.error->message)));
} else if (res.notModified) {
diff --git a/src/mbgl/style/sources/vector_source.cpp b/src/mbgl/style/sources/vector_source.cpp
index 6cede8fae9..b0152974da 100644
--- a/src/mbgl/style/sources/vector_source.cpp
+++ b/src/mbgl/style/sources/vector_source.cpp
@@ -12,8 +12,8 @@ namespace mbgl {
namespace style {
VectorSource::VectorSource(std::string id, variant<std::string, Tileset> urlOrTileset_)
- : Source(makeMutable<Impl>(std::move(id))),
- urlOrTileset(std::move(urlOrTileset_)) {
+ : Source(makeMutable<Impl>(std::move(id)))
+ , urlOrTileset(std::move(urlOrTileset_)) {
}
VectorSource::~VectorSource() = default;
@@ -34,7 +34,7 @@ optional<std::string> VectorSource::getURL() const {
return urlOrTileset.get<std::string>();
}
-void VectorSource::loadDescription(FileSource& fileSource) {
+void VectorSource::loadDescription(std::shared_ptr<FileSource> fileSource) {
if (urlOrTileset.is<Tileset>()) {
baseImpl = makeMutable<Impl>(impl(), urlOrTileset.get<Tileset>());
loaded = true;
@@ -46,7 +46,7 @@ void VectorSource::loadDescription(FileSource& fileSource) {
}
const std::string& url = urlOrTileset.get<std::string>();
- req = fileSource.request(Resource::source(url), [this, url](Response res) {
+ req = fileSource->request(Resource::source(url), [this, url](Response res) {
if (res.error) {
observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error(res.error->message)));
} else if (res.notModified) {
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 783c850097..b70b7ee3be 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -8,8 +8,8 @@
namespace mbgl {
namespace style {
-Style::Style(FileSource& fileSource, float pixelRatio)
- : impl(std::make_unique<Impl>(fileSource, pixelRatio)) {
+Style::Style(float pixelRatio, const FileSourceOptions& fileSourceOptions)
+ : impl(std::make_unique<Impl>(pixelRatio, fileSourceOptions)) {
}
Style::~Style() = default;
diff --git a/src/mbgl/style/style_impl.cpp b/src/mbgl/style/style_impl.cpp
index ebddfbcb22..deb77e2ed6 100644
--- a/src/mbgl/style/style_impl.cpp
+++ b/src/mbgl/style/style_impl.cpp
@@ -1,3 +1,4 @@
+#include <mbgl/platform/factory.hpp>
#include <mbgl/style/style_impl.hpp>
#include <mbgl/style/observer.hpp>
#include <mbgl/style/source_impl.hpp>
@@ -27,9 +28,9 @@ namespace style {
static Observer nullObserver;
-Style::Impl::Impl(FileSource& fileSource_, float pixelRatio)
- : fileSource(fileSource_),
- spriteLoader(std::make_unique<SpriteLoader>(pixelRatio)),
+Style::Impl::Impl(float pixelRatio, const FileSourceOptions& fileSourceOptions)
+ : fileSource(platform::Factory::sharedFileSource(fileSourceOptions)),
+ spriteLoader(std::make_unique<SpriteLoader>(pixelRatio, fileSourceOptions)),
light(std::make_unique<Light>()),
observer(&nullObserver) {
spriteLoader->setObserver(this);
@@ -53,7 +54,7 @@ void Style::Impl::loadURL(const std::string& url_) {
loaded = false;
url = url_;
- styleRequest = fileSource.request(Resource::style(url), [this](Response res) {
+ styleRequest = fileSource->request(Resource::style(url), [this](Response res) {
// Don't allow a loaded, mutated style to be overwritten with a new version.
if (mutated && loaded) {
return;
@@ -110,7 +111,7 @@ void Style::Impl::parse(const std::string& json_) {
setLight(std::make_unique<Light>(parser.light));
spriteLoaded = false;
- spriteLoader->load(parser.spriteURL, fileSource);
+ spriteLoader->load(parser.spriteURL);
glyphURL = parser.glyphURL;
loaded = true;
diff --git a/src/mbgl/style/style_impl.hpp b/src/mbgl/style/style_impl.hpp
index 4c56f6785b..1f62685c34 100644
--- a/src/mbgl/style/style_impl.hpp
+++ b/src/mbgl/style/style_impl.hpp
@@ -25,9 +25,9 @@
namespace mbgl {
-class FileSource;
class AsyncRequest;
class SpriteLoader;
+class FileSourceOptions;
namespace style {
@@ -37,7 +37,7 @@ class Style::Impl : public SpriteLoaderObserver,
public LightObserver,
public util::noncopyable {
public:
- Impl(FileSource&, float pixelRatio);
+ Impl(float pixelRatio, const FileSourceOptions&);
~Impl() override;
void loadJSON(const std::string&);
@@ -97,7 +97,7 @@ public:
private:
void parse(const std::string&);
- FileSource& fileSource;
+ std::shared_ptr<FileSource> fileSource;
std::string url;
std::string json;
diff --git a/src/mbgl/text/glyph_manager.cpp b/src/mbgl/text/glyph_manager.cpp
index b947ef72c8..da1d774797 100644
--- a/src/mbgl/text/glyph_manager.cpp
+++ b/src/mbgl/text/glyph_manager.cpp
@@ -1,7 +1,8 @@
+#include <mbgl/platform/factory.hpp>
#include <mbgl/text/glyph_manager.hpp>
#include <mbgl/text/glyph_manager_observer.hpp>
#include <mbgl/text/glyph_pbf.hpp>
-#include <mbgl/storage/file_source.hpp>
+#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/storage/resource.hpp>
#include <mbgl/storage/response.hpp>
#include <mbgl/util/tiny_sdf.hpp>
@@ -11,8 +12,8 @@ namespace mbgl {
static GlyphManagerObserver nullObserver;
-GlyphManager::GlyphManager(FileSource& fileSource_, std::unique_ptr<LocalGlyphRasterizer> localGlyphRasterizer_)
- : fileSource(fileSource_),
+GlyphManager::GlyphManager(const FileSourceOptions& options, std::unique_ptr<LocalGlyphRasterizer> localGlyphRasterizer_)
+ : fileSource(platform::Factory::sharedFileSource(options)),
observer(&nullObserver),
localGlyphRasterizer(std::move(localGlyphRasterizer_)) {
}
@@ -70,7 +71,7 @@ void GlyphManager::requestRange(GlyphRequest& request, const FontStack& fontStac
return;
}
- request.req = fileSource.request(Resource::glyphs(glyphURL, fontStack, range), [this, fontStack, range](Response res) {
+ request.req = static_cast<DefaultFileSource*>(fileSource.get())->request(Resource::glyphs(glyphURL, fontStack, range), [this, fontStack, range](Response res) {
processResponse(res, fontStack, range);
});
}
diff --git a/src/mbgl/text/glyph_manager.hpp b/src/mbgl/text/glyph_manager.hpp
index 831d84719c..d1c05482e5 100644
--- a/src/mbgl/text/glyph_manager.hpp
+++ b/src/mbgl/text/glyph_manager.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include <mbgl/storage/file_source_options.hpp>
#include <mbgl/text/glyph.hpp>
#include <mbgl/text/glyph_manager_observer.hpp>
#include <mbgl/text/glyph_range.hpp>
@@ -8,6 +9,7 @@
#include <mbgl/util/font_stack.hpp>
#include <mbgl/util/immutable.hpp>
+#include <memory>
#include <string>
#include <unordered_map>
@@ -25,7 +27,7 @@ public:
class GlyphManager : public util::noncopyable {
public:
- GlyphManager(FileSource&, std::unique_ptr<LocalGlyphRasterizer> = std::make_unique<LocalGlyphRasterizer>(optional<std::string>()));
+ GlyphManager(const FileSourceOptions&, std::unique_ptr<LocalGlyphRasterizer> = std::make_unique<LocalGlyphRasterizer>(optional<std::string>()));
~GlyphManager();
// Workers send a `getGlyphs` message to the main thread once they have determined
@@ -48,7 +50,7 @@ public:
private:
Glyph generateLocalSDF(const FontStack& fontStack, GlyphID glyphID);
- FileSource& fileSource;
+ std::shared_ptr<FileSource> fileSource;
std::string glyphURL;
struct GlyphRequest {
diff --git a/src/mbgl/tile/tile_loader.hpp b/src/mbgl/tile/tile_loader.hpp
index 92ca74330f..0e96c5eb25 100644
--- a/src/mbgl/tile/tile_loader.hpp
+++ b/src/mbgl/tile/tile_loader.hpp
@@ -50,7 +50,7 @@ private:
T& tile;
TileNecessity necessity;
Resource resource;
- FileSource& fileSource;
+ std::shared_ptr<FileSource> fileSource;
std::unique_ptr<AsyncRequest> request;
};
diff --git a/src/mbgl/tile/tile_loader_impl.hpp b/src/mbgl/tile/tile_loader_impl.hpp
index 5835858d1a..0bb40434e7 100644
--- a/src/mbgl/tile/tile_loader_impl.hpp
+++ b/src/mbgl/tile/tile_loader_impl.hpp
@@ -1,9 +1,10 @@
#pragma once
+#include <mbgl/platform/factory.hpp>
#include <mbgl/tile/tile_loader.hpp>
-#include <mbgl/storage/file_source.hpp>
#include <mbgl/renderer/tile_parameters.hpp>
#include <mbgl/util/tileset.hpp>
+#include <mbgl/storage/default_file_source.hpp>
#include <cassert>
@@ -27,7 +28,7 @@ TileLoader<T>::TileLoader(T& tile_,
Resource::LoadingMethod::CacheOnly)),
fileSource(parameters.fileSource) {
assert(!request);
- if (fileSource.supportsCacheOnlyRequests()) {
+ if (std::static_pointer_cast<DefaultFileSource>(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
// to load when the TileLoader is later changed from required to optional. If we
@@ -52,7 +53,7 @@ void TileLoader<T>::loadFromCache() {
assert(!request);
resource.loadingMethod = Resource::LoadingMethod::CacheOnly;
- request = fileSource.request(resource, [this](Response res) {
+ request = fileSource->request(resource, [this](Response res) {
request.reset();
tile.setTriedCache();
@@ -118,7 +119,7 @@ void TileLoader<T>::loadFromNetwork() {
// Instead of using Resource::LoadingMethod::All, we're first doing a CacheOnly, and then a
// NetworkOnly request.
resource.loadingMethod = Resource::LoadingMethod::NetworkOnly;
- request = fileSource.request(resource, [this](Response res) { loadedData(res); });
+ request = fileSource->request(resource, [this](Response res) { loadedData(res); });
}
} // namespace mbgl