summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Bounds <jesse@rebounds.net>2017-02-27 12:02:06 -0800
committerJesse Bounds <jesse@rebounds.net>2017-03-01 08:25:44 -0800
commite1546644b55dab8ea0171f415fe491ae21d5d89b (patch)
tree3b28c1860667ef75bb4dbf33a93e63daa094d146
parentc689eed2737cf07f38c2e6f63560a92a58875f19 (diff)
downloadqtlocation-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.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:", ".");