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

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

Issue 2489443002: Move all components/offline_pages/ files into component/offline_pages/core (Closed)
Patch Set: more rebase Created 4 years, 1 month 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/downloads/download_ui_adapter.cc
diff --git a/components/offline_pages/downloads/download_ui_adapter.cc b/components/offline_pages/downloads/download_ui_adapter.cc
deleted file mode 100644
index bb398cb8f025d372546d0d669b1137e76a555acd..0000000000000000000000000000000000000000
--- a/components/offline_pages/downloads/download_ui_adapter.cc
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2016 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.
-
-#include "components/offline_pages/downloads/download_ui_adapter.h"
-
-#include "base/bind.h"
-#include "base/guid.h"
-#include "base/logging.h"
-#include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "components/offline_pages/client_namespace_constants.h"
-#include "components/offline_pages/client_policy_controller.h"
-#include "components/offline_pages/downloads/download_ui_item.h"
-#include "components/offline_pages/offline_page_model.h"
-
-namespace offline_pages {
-
-namespace {
-const char kDownloadUIAdapterKey[] = "download-ui-adapter";
-}
-
-DownloadUIAdapter::ItemInfo::ItemInfo(const OfflinePageItem& page)
- : ui_item(base::MakeUnique<DownloadUIItem>(page)),
- offline_id(page.offline_id) {}
-
-DownloadUIAdapter::ItemInfo::~ItemInfo() {}
-
-DownloadUIAdapter::DownloadUIAdapter(OfflinePageModel* model)
- : model_(model),
- state_(State::NOT_LOADED),
- observers_count_(0),
- weak_ptr_factory_(this) {
-}
-
-DownloadUIAdapter::~DownloadUIAdapter() { }
-
-// static
-DownloadUIAdapter* DownloadUIAdapter::FromOfflinePageModel(
- OfflinePageModel* offline_page_model) {
- DownloadUIAdapter* adapter = static_cast<DownloadUIAdapter*>(
- offline_page_model->GetUserData(kDownloadUIAdapterKey));
- if (!adapter) {
- adapter = new DownloadUIAdapter(offline_page_model);
- offline_page_model->SetUserData(kDownloadUIAdapterKey, adapter);
- }
- return adapter;
-}
-
-void DownloadUIAdapter::AddObserver(Observer* observer) {
- DCHECK(observer);
- if (observers_.HasObserver(observer))
- return;
- if (observers_count_ == 0)
- LoadCache();
- observers_.AddObserver(observer);
- ++observers_count_;
- // If the items are already loaded, post the notification right away.
- // Don't just invoke it from here to avoid reentrancy in the client.
- if (state_ == State::LOADED) {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(&DownloadUIAdapter::NotifyItemsLoaded,
- weak_ptr_factory_.GetWeakPtr(),
- base::Unretained(observer)));
- }
-}
-
-void DownloadUIAdapter::RemoveObserver(Observer* observer) {
- DCHECK(observer);
- if (!observers_.HasObserver(observer))
- return;
- observers_.RemoveObserver(observer);
- --observers_count_;
- // Once the last observer is gone, clear cached data.
- if (observers_count_ == 0)
- ClearCache();
-}
-
-void DownloadUIAdapter::OfflinePageModelLoaded(OfflinePageModel* model) {
- // This signal is not used here.
-}
-
-void DownloadUIAdapter::OfflinePageModelChanged(OfflinePageModel* model) {
- DCHECK(model == model_);
- model_->GetAllPages(
- base::Bind(&DownloadUIAdapter::OnOfflinePagesChanged,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void DownloadUIAdapter::OfflinePageDeleted(
- int64_t offline_id, const ClientId& client_id) {
- if (!IsVisibleInUI(client_id))
- return;
- std::string guid = client_id.id;
- DownloadUIItems::const_iterator it = items_.find(guid);
- if (it == items_.end())
- return;
- items_.erase(it);
- for (Observer& observer : observers_)
- observer.ItemDeleted(guid);
-}
-
-std::vector<const DownloadUIItem*> DownloadUIAdapter::GetAllItems() const {
- std::vector<const DownloadUIItem*> result;
- for (const auto& item : items_)
- result.push_back(item.second->ui_item.get());
- return result;
-}
-
-const DownloadUIItem*
- DownloadUIAdapter::GetItem(const std::string& guid) const {
- DownloadUIItems::const_iterator it = items_.find(guid);
- if (it == items_.end())
- return nullptr;
- return it->second->ui_item.get();
-}
-
-void DownloadUIAdapter::DeleteItem(const std::string& guid) {
- // TODO(dimich): Also remove pending request from RequestQueue.
- DownloadUIItems::const_iterator it = items_.find(guid);
- if (it == items_.end())
- return;
-
- std::vector<int64_t> page_ids;
- page_ids.push_back(it->second->offline_id);
- // TODO(dimich): This should be ExpirePages(...Now()..) when Expire is
- // firing Observer method. The resulting Observer notification will update
- // local cache.
- model_->DeletePagesByOfflineId(
- page_ids, base::Bind(&DownloadUIAdapter::OnDeletePagesDone,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-int64_t DownloadUIAdapter::GetOfflineIdByGuid(
- const std::string& guid) const {
- // TODO(dimich): when requests are also in the cache, filter them out.
- // Requests do not yet have offline ID.
- DownloadUIItems::const_iterator it = items_.find(guid);
- if (it != items_.end())
- return it->second->offline_id;
- return 0;
-}
-
-// Note that several LoadCache calls may be issued before the async GetAllPages
-// comes back.
-void DownloadUIAdapter::LoadCache() {
- // TODO(dimich): Add fetching from RequestQueue as well.
- state_ = State::LOADING;
- model_->GetAllPages(
- base::Bind(&DownloadUIAdapter::OnOfflinePagesLoaded,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void DownloadUIAdapter::ClearCache() {
- // Once loaded, this class starts to observe the model. Only remove observer
- // if it was added.
- if (state_ == State::LOADED)
- model_->RemoveObserver(this);
- items_.clear();
- state_ = State::NOT_LOADED;
-}
-
-void DownloadUIAdapter::OnOfflinePagesLoaded(
- const MultipleOfflinePageItemResult& pages) {
- // If multiple observers register quickly, the cache might be already loaded
- // by the previous LoadCache call. At the same time, if all observers already
- // left, there is no reason to populate the cache.
- if (state_ != State::LOADING)
- return;
- for (const auto& page : pages) {
- if (IsVisibleInUI(page.client_id)) {
- std::string guid = page.client_id.id;
- DCHECK(items_.find(guid) == items_.end());
- items_[guid] = base::MakeUnique<ItemInfo>(page);
- }
- }
- model_->AddObserver(this);
- state_ = State::LOADED;
- for (Observer& observer : observers_)
- observer.ItemsLoaded();
-}
-
-void DownloadUIAdapter::NotifyItemsLoaded(Observer* observer) {
- if (observer && observers_.HasObserver(observer))
- observer->ItemsLoaded();
-}
-
-// This method is only called by OPM when a single item added.
-// TODO(dimich): change OPM to have real OnPageAdded/OnPageUpdated and
-// simplify this code.
-void DownloadUIAdapter::OnOfflinePagesChanged(
- const MultipleOfflinePageItemResult& pages) {
- std::vector<std::string> added_guids;
- for (const auto& page : pages) {
- if (!IsVisibleInUI(page.client_id)) // Item should be filtered out.
- continue;
- const std::string& guid = page.client_id.id;
- if (items_.find(guid) != items_.end()) // Item already exists.
- continue;
- items_[guid] = base::MakeUnique<ItemInfo>(page);
- added_guids.push_back(guid);
- }
- for (auto& guid : added_guids) {
- const DownloadUIItem& item = *(items_.find(guid)->second->ui_item.get());
- for (Observer& observer : observers_)
- observer.ItemAdded(item);
- }
-}
-
-void DownloadUIAdapter::OnDeletePagesDone(DeletePageResult result) {
- // TODO(dimich): Consider adding UMA to record user actions.
-}
-
-bool DownloadUIAdapter::IsVisibleInUI(const ClientId& client_id) {
- const std::string& name_space = client_id.name_space;
- return model_->GetPolicyController()->IsSupportedByDownload(name_space) &&
- base::IsValidGUID(client_id.id);
-}
-
-} // namespace offline_pages

Powered by Google App Engine
This is Rietveld 408576698