Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Unified Diff: components/offline_pages/core/downloads/download_ui_adapter.cc

Issue 2684973014: Only show Last N Pages in the UI when the corresponding tab is visible. (Closed)
Patch Set: Move impl out Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/offline_pages/core/downloads/download_ui_adapter.cc
diff --git a/components/offline_pages/core/downloads/download_ui_adapter.cc b/components/offline_pages/core/downloads/download_ui_adapter.cc
index 118efd999d448fbfa05af0708044a97edab37698..b29a60aade009f78a322447a2d9fcae1b5ff58e3 100644
--- a/components/offline_pages/core/downloads/download_ui_adapter.cc
+++ b/components/offline_pages/core/downloads/download_ui_adapter.cc
@@ -1,4 +1,4 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
+// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -18,19 +18,21 @@
namespace offline_pages {
-DownloadUIAdapter::ItemInfo::ItemInfo(const OfflinePageItem& page)
+DownloadUIAdapter::ItemInfo::ItemInfo(const OfflinePageItem& page,
+ bool temporarily_hidden)
: ui_item(base::MakeUnique<DownloadUIItem>(page)),
is_request(false),
offline_id(page.offline_id),
client_id(page.client_id),
- temporarily_hidden(false) {}
+ temporarily_hidden(temporarily_hidden) {}
-DownloadUIAdapter::ItemInfo::ItemInfo(const SavePageRequest& request)
+DownloadUIAdapter::ItemInfo::ItemInfo(const SavePageRequest& request,
+ bool temporarily_hidden)
: ui_item(base::MakeUnique<DownloadUIItem>(request)),
is_request(true),
offline_id(request.request_id()),
client_id(request.client_id()),
- temporarily_hidden(false) {}
+ temporarily_hidden() {}
DownloadUIAdapter::ItemInfo::~ItemInfo() {}
@@ -42,7 +44,9 @@ DownloadUIAdapter::DownloadUIAdapter(OfflinePageModel* model,
delegate_(std::move(delegate)),
state_(State::NOT_LOADED),
observers_count_(0),
- weak_ptr_factory_(this) {}
+ weak_ptr_factory_(this) {
+ delegate_->SetUIAdapter(this);
+}
DownloadUIAdapter::~DownloadUIAdapter() {}
@@ -85,7 +89,9 @@ void DownloadUIAdapter::OfflinePageAdded(OfflinePageModel* model,
if (!delegate_->IsVisibleInUI(added_page.client_id))
return;
- AddItemHelper(base::MakeUnique<ItemInfo>(added_page));
+ bool temporarily_hidden =
+ delegate_->IsTemporarilyHiddenInUI(added_page.client_id);
+ AddItemHelper(base::MakeUnique<ItemInfo>(added_page, temporarily_hidden));
}
void DownloadUIAdapter::OfflinePageDeleted(int64_t offline_id,
@@ -100,7 +106,9 @@ void DownloadUIAdapter::OnAdded(const SavePageRequest& added_request) {
if (!delegate_->IsVisibleInUI(added_request.client_id()))
return;
- AddItemHelper(base::MakeUnique<ItemInfo>(added_request));
+ bool temporarily_hidden =
+ delegate_->IsTemporarilyHiddenInUI(added_request.client_id());
+ AddItemHelper(base::MakeUnique<ItemInfo>(added_request, temporarily_hidden));
}
// RequestCoordinator::Observer
@@ -123,7 +131,9 @@ void DownloadUIAdapter::OnChanged(const SavePageRequest& request) {
return;
std::string guid = request.client_id().id;
- items_[guid] = base::MakeUnique<ItemInfo>(request);
+ bool temporarily_hidden =
+ delegate_->IsTemporarilyHiddenInUI(request.client_id());
+ items_[guid] = base::MakeUnique<ItemInfo>(request, temporarily_hidden);
if (state_ != State::LOADED)
return;
@@ -186,6 +196,9 @@ void DownloadUIAdapter::DeleteItem(const std::string& guid) {
}
int64_t DownloadUIAdapter::GetOfflineIdByGuid(const std::string& guid) const {
+ if (deleting_item_ && deleting_item_->ui_item->guid == guid)
+ return deleting_item_->offline_id;
+
DownloadUIItems::const_iterator it = items_.find(guid);
if (it != items_.end())
return it->second->offline_id;
@@ -220,9 +233,10 @@ void DownloadUIAdapter::OnOfflinePagesLoaded(
if (delegate_->IsVisibleInUI(page.client_id)) {
std::string guid = page.client_id.id;
DCHECK(items_.find(guid) == items_.end());
- std::unique_ptr<ItemInfo> item = base::MakeUnique<ItemInfo>(page);
- item->temporarily_hidden =
+ bool temporarily_hidden =
delegate_->IsTemporarilyHiddenInUI(page.client_id);
+ std::unique_ptr<ItemInfo> item =
+ base::MakeUnique<ItemInfo>(page, temporarily_hidden);
items_[guid] = std::move(item);
}
}
@@ -245,10 +259,10 @@ void DownloadUIAdapter::OnRequestsLoaded(
if (delegate_->IsVisibleInUI(request->client_id())) {
std::string guid = request->client_id().id;
DCHECK(items_.find(guid) == items_.end());
- std::unique_ptr<ItemInfo> item =
- base::MakeUnique<ItemInfo>(*request.get());
- item->temporarily_hidden =
+ bool temporarily_hidden =
delegate_->IsTemporarilyHiddenInUI(request->client_id());
+ std::unique_ptr<ItemInfo> item =
+ base::MakeUnique<ItemInfo>(*request.get(), temporarily_hidden);
items_[guid] = std::move(item);
}
}
@@ -285,27 +299,35 @@ void DownloadUIAdapter::AddItemHelper(std::unique_ptr<ItemInfo> item_info) {
return;
DownloadUIItem* download_ui_item = items_[guid]->ui_item.get();
+
if (request_to_page_transition) {
download_ui_item->download_state = DownloadUIItem::DownloadState::COMPLETE;
- for (Observer& observer : observers_)
- observer.ItemUpdated(*download_ui_item);
+ if (!items_[guid]->temporarily_hidden) {
+ for (Observer& observer : observers_)
+ observer.ItemUpdated(*download_ui_item);
+ }
} else {
- for (Observer& observer : observers_)
- observer.ItemAdded(*download_ui_item);
+ if (!items_[guid]->temporarily_hidden) {
+ for (Observer& observer : observers_)
+ observer.ItemAdded(*download_ui_item);
+ }
}
}
void DownloadUIAdapter::DeleteItemHelper(const std::string& guid) {
- DownloadUIItems::const_iterator it = items_.find(guid);
+ DownloadUIItems::iterator it = items_.find(guid);
if (it == items_.end())
return;
+ DCHECK(deleting_item_ == nullptr);
+ deleting_item_ = std::move(it->second);
items_.erase(it);
- if (state_ != State::LOADED)
- return;
+ if (!deleting_item_->temporarily_hidden && state_ == State::LOADED) {
+ for (Observer& observer : observers_)
+ observer.ItemDeleted(guid);
+ }
- for (Observer& observer : observers_)
- observer.ItemDeleted(guid);
+ deleting_item_.reset();
}
} // namespace offline_pages

Powered by Google App Engine
This is Rietveld 408576698