diff options
author | Jesse Bounds <jesse@rebounds.net> | 2017-02-27 12:02:06 -0800 |
---|---|---|
committer | Jesse Bounds <jesse@rebounds.net> | 2017-03-01 08:25:44 -0800 |
commit | e1546644b55dab8ea0171f415fe491ae21d5d89b (patch) | |
tree | 3b28c1860667ef75bb4dbf33a93e63daa094d146 | |
parent | c689eed2737cf07f38c2e6f63560a92a58875f19 (diff) | |
download | qtlocation-mapboxgl-e1546644b55dab8ea0171f415fe491ae21d5d89b.tar.gz |
[core] Cache file source base URL and access token
This caches the base URL and access token values when they are set
so that they can still be retrieved even when the thread is paused.
-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:", "."); |