diff options
-rw-r--r-- | include/mbgl/storage/default_file_source.hpp | 18 | ||||
-rw-r--r-- | platform/default/default_file_source.cpp | 10 | ||||
-rw-r--r-- | test/storage/default_file_source.test.cpp | 16 |
3 files changed, 40 insertions, 4 deletions
diff --git a/include/mbgl/storage/default_file_source.hpp b/include/mbgl/storage/default_file_source.hpp index effc60745e..9262e0a1bc 100644 --- a/include/mbgl/storage/default_file_source.hpp +++ b/include/mbgl/storage/default_file_source.hpp @@ -115,7 +115,23 @@ public: */ void setOfflineMapboxTileCountLimit(uint64_t) const; + /* + * Pause file request activity. + * + * If pause is called then no revalidation or network request activity + * will occur. + * + * Note: Calling pause and then calling getAPIBaseURL or getAccessToken + * will lock the thread that those calls are made on. + */ void pause(); + + /* + * Resume file request activity. + * + * Calling resume will unpause the file source and process any tasks that + * expired while the file source was paused. + */ void resume(); // For testing only. @@ -127,6 +143,8 @@ private: const std::unique_ptr<util::Thread<Impl>> thread; const std::unique_ptr<FileSource> assetFileSource; const std::unique_ptr<FileSource> localFileSource; + std::string cachedBaseURL = mbgl::util::API_BASE_URL; + std::string cachedAccessToken; }; } // namespace mbgl diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp index 46178dbb8a..20a3eadc8b 100644 --- a/platform/default/default_file_source.cpp +++ b/platform/default/default_file_source.cpp @@ -176,19 +176,21 @@ DefaultFileSource::DefaultFileSource(const std::string& cachePath, DefaultFileSource::~DefaultFileSource() = default; void DefaultFileSource::setAPIBaseURL(const std::string& baseURL) { - thread->invokeSync(&Impl::setAPIBaseURL, baseURL); + thread->invoke(&Impl::setAPIBaseURL, baseURL); + cachedBaseURL = baseURL; } std::string DefaultFileSource::getAPIBaseURL() const { - return thread->invokeSync(&Impl::getAPIBaseURL); + return cachedBaseURL; } void DefaultFileSource::setAccessToken(const std::string& accessToken) { - thread->invokeSync(&Impl::setAccessToken, accessToken); + thread->invoke(&Impl::setAccessToken, accessToken); + cachedAccessToken = accessToken; } std::string DefaultFileSource::getAccessToken() const { - return thread->invokeSync(&Impl::getAccessToken); + return cachedAccessToken; } void DefaultFileSource::setResourceTransform(std::function<std::string(Resource::Kind, std::string&&)> transform) { diff --git a/test/storage/default_file_source.test.cpp b/test/storage/default_file_source.test.cpp index ffbeea1096..03f1076559 100644 --- a/test/storage/default_file_source.test.cpp +++ b/test/storage/default_file_source.test.cpp @@ -267,6 +267,22 @@ TEST(DefaultFileSource, OptionalExpired) { loop.run(); } +TEST(DefaultFileSource, GetBaseURLAndAccessTokenWhilePaused) { + util::RunLoop loop; + DefaultFileSource fs(":memory:", "."); + + fs.pause(); + + auto baseURL = "http://url"; + auto accessToken = "access_token"; + + fs.setAPIBaseURL(baseURL); + fs.setAccessToken(accessToken); + + EXPECT_EQ(fs.getAPIBaseURL(), baseURL); + EXPECT_EQ(fs.getAccessToken(), accessToken); +} + TEST(DefaultFileSource, OptionalNotFound) { util::RunLoop loop; DefaultFileSource fs(":memory:", "."); |