diff --git a/platform/default/mbgl/storage/offline_download.cpp b/platform/default/mbgl/storage/offline_download.cpp index dc16ab10f..36b6f5d50 100644 --- a/platform/default/mbgl/storage/offline_download.cpp +++ b/platform/default/mbgl/storage/offline_download.cpp @@ -222,6 +222,10 @@ void OfflineDownload::ensureResource(const Resource& resource, std::functionsecond; observer->statusChanged(status); + + if (status.complete()) { + setState(OfflineRegionDownloadState::Inactive); + } return; } @@ -251,6 +255,10 @@ void OfflineDownload::ensureResource(const Resource& resource, std::functionstatusChanged(status); + + if (status.complete()) { + setState(OfflineRegionDownloadState::Inactive); + } }); }); } diff --git a/test/storage/offline_download.cpp b/test/storage/offline_download.cpp index 1b35d561b..26d0fb29e 100644 --- a/test/storage/offline_download.cpp +++ b/test/storage/offline_download.cpp @@ -71,13 +71,22 @@ TEST(OfflineDownload, NoSubresources) { auto observer = std::make_unique(); + bool expectsInactiveStatus = false; observer->statusChangedFn = [&] (OfflineRegionStatus status) { if (status.complete()) { - EXPECT_EQ(OfflineRegionDownloadState::Active, status.downloadState); - EXPECT_EQ(1, status.completedResourceCount); - EXPECT_EQ(test.size, status.completedResourceSize); - EXPECT_TRUE(status.requiredResourceCountIsPrecise); - test.loop.stop(); + if (!expectsInactiveStatus) { + expectsInactiveStatus = true; + EXPECT_EQ(OfflineRegionDownloadState::Active, status.downloadState); + EXPECT_EQ(1, status.completedResourceCount); + EXPECT_EQ(test.size, status.completedResourceSize); + EXPECT_TRUE(status.requiredResourceCountIsPrecise); + } else { + EXPECT_EQ(OfflineRegionDownloadState::Inactive, status.downloadState); + EXPECT_EQ(1, status.completedResourceCount); + EXPECT_EQ(test.size, status.completedResourceSize); + EXPECT_TRUE(status.requiredResourceCountIsPrecise); + test.loop.stop(); + } } }; @@ -478,7 +487,7 @@ TEST(OfflineDownload, ReactivatePreviouslyCompletedDownload) { test.loop.run(); - ASSERT_EQ(3, statusesAfterReactivate.size()); + ASSERT_EQ(4, statusesAfterReactivate.size()); EXPECT_EQ(OfflineRegionDownloadState::Active, statusesAfterReactivate[0].downloadState); EXPECT_FALSE(statusesAfterReactivate[0].requiredResourceCountIsPrecise);