Commit f67da5d7 authored by David Black's avatar David Black Committed by Commit Bot

Wait for download manager init before restoring history.

Previously download manager may not have been initialized before we
attempted to restore downloads to holding space. This resulted in
downloads not being restored.

Bug: 1111995
Change-Id: Ie52832ff798d32a466192926302519e0c93a05da
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2398483
Commit-Queue: David Black <dmblack@google.com>
Reviewed-by: default avatarDavid Black <dmblack@google.com>
Reviewed-by: default avatarAhmed Mehfooz <amehfooz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806738}
parent ed19b0a8
...@@ -47,13 +47,28 @@ void HoldingSpaceDownloadsDelegate::OnHoldingSpaceModelRestored() { ...@@ -47,13 +47,28 @@ void HoldingSpaceDownloadsDelegate::OnHoldingSpaceModelRestored() {
? download_manager_for_testing ? download_manager_for_testing
: content::BrowserContext::GetDownloadManager(profile()); : content::BrowserContext::GetDownloadManager(profile());
if (download_manager->IsManagerInitialized())
OnManagerInitialized();
}
void HoldingSpaceDownloadsDelegate::OnManagerInitialized() {
if (is_restoring())
return;
content::DownloadManager* download_manager =
download_manager_for_testing
? download_manager_for_testing
: content::BrowserContext::GetDownloadManager(profile());
DCHECK(download_manager->IsManagerInitialized());
download::SimpleDownloadManager::DownloadVector downloads; download::SimpleDownloadManager::DownloadVector downloads;
download_manager->GetAllDownloads(&downloads); download_manager->GetAllDownloads(&downloads);
for (auto* download : downloads) { for (auto* download : downloads) {
switch (download->GetState()) { switch (download->GetState()) {
case download::DownloadItem::COMPLETE: case download::DownloadItem::COMPLETE:
item_downloaded_callback_.Run(download->GetFullPath()); OnDownloadCompleted(download);
break; break;
case download::DownloadItem::IN_PROGRESS: case download::DownloadItem::IN_PROGRESS:
download_item_observer_.Add(download); download_item_observer_.Add(download);
......
...@@ -51,6 +51,7 @@ class HoldingSpaceDownloadsDelegate : public HoldingSpaceKeyedServiceDelegate, ...@@ -51,6 +51,7 @@ class HoldingSpaceDownloadsDelegate : public HoldingSpaceKeyedServiceDelegate,
void OnHoldingSpaceModelRestored() override; void OnHoldingSpaceModelRestored() override;
// content::DownloadManager::Observer: // content::DownloadManager::Observer:
void OnManagerInitialized() override;
void ManagerGoingDown(content::DownloadManager* manager) override; void ManagerGoingDown(content::DownloadManager* manager) override;
void OnDownloadCreated(content::DownloadManager* manager, void OnDownloadCreated(content::DownloadManager* manager,
download::DownloadItem* item) override; download::DownloadItem* item) override;
......
...@@ -102,6 +102,12 @@ void HoldingSpaceKeyedService::AddScreenshot( ...@@ -102,6 +102,12 @@ void HoldingSpaceKeyedService::AddScreenshot(
void HoldingSpaceKeyedService::AddDownload( void HoldingSpaceKeyedService::AddDownload(
const base::FilePath& download_file) { const base::FilePath& download_file) {
const bool already_exists =
holding_space_model_.GetItem(HoldingSpaceItem::GetFileBackedItemId(
HoldingSpaceItem::Type::kDownload, download_file));
if (already_exists)
return;
GURL file_system_url = GURL file_system_url =
holding_space_util::ResolveFileSystemUrl(profile_, download_file); holding_space_util::ResolveFileSystemUrl(profile_, download_file);
if (file_system_url.is_empty()) if (file_system_url.is_empty())
......
...@@ -600,6 +600,10 @@ class HoldingSpaceKeyedServiceDownloadsTest ...@@ -600,6 +600,10 @@ class HoldingSpaceKeyedServiceDownloadsTest
MockDownloadManager* mock_download_manager = download_manager(); MockDownloadManager* mock_download_manager = download_manager();
HoldingSpaceDownloadsDelegate::SetDownloadManagerForTesting( HoldingSpaceDownloadsDelegate::SetDownloadManagerForTesting(
mock_download_manager); mock_download_manager);
// Spoof initialization of the `mock_download_manager`.
ON_CALL(*mock_download_manager, IsManagerInitialized)
.WillByDefault(testing::Return(true));
} }
std::unique_ptr<MockDownloadManager> download_manager_; std::unique_ptr<MockDownloadManager> download_manager_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment