summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/storage/default_file_source.hpp18
-rw-r--r--platform/default/default_file_source.cpp10
-rw-r--r--test/storage/default_file_source.test.cpp16
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:", ".");