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

Side by Side Diff: components/offline_pages/offline_page_storage_manager.cc

Issue 1947323002: [Offline Pages] Implement OfflinePageStorageManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More comments. Created 4 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/offline_pages/offline_page_storage_manager.h"
6
7 #include "base/bind.h"
8 #include "components/offline_pages/client_policy_controller.h"
9 #include "components/offline_pages/offline_page_client_policy.h"
10 #include "components/offline_pages/offline_page_item.h"
11 #include "components/offline_pages/offline_page_model.h"
12
13 using DeletePageResult = offline_pages::OfflinePageModel::DeletePageResult;
14 using MultipleOfflinePageItemResult =
15 offline_pages::OfflinePageModel::MultipleOfflinePageItemResult;
16
17 namespace offline_pages {
18
19 OfflinePageStorageManager::OfflinePageStorageManager(OfflinePageModel* model)
20 : model_(model),
21 policy_controller_(model->GetPolicyController()),
22 in_progress_(false),
23 weak_ptr_factory_(this) {
24 }
25
26 OfflinePageStorageManager::~OfflinePageStorageManager() {
27 }
28
29 void OfflinePageStorageManager::ClearPagesIfNeeded(
30 const ClearPageCallback& callback) {
31 if (!ShouldClearPages())
32 return;
33 in_progress_ = true;
34 model_->GetAllPages(base::Bind(&OfflinePageStorageManager::PurgePages,
35 weak_ptr_factory_.GetWeakPtr(), callback));
36 }
37
38 void OfflinePageStorageManager::PurgePages(
39 const ClearPageCallback& callback,
40 const MultipleOfflinePageItemResult& pages) {
fgorski 2016/05/06 05:57:24 DCHECK(in_progress_);
romax 2016/05/07 02:22:42 Done.
41 std::vector<int64_t> offline_ids;
42 GetExpiredPageIds(pages, offline_ids);
43 model_->DeletePagesByOfflineId(
44 offline_ids,
45 base::Bind(&OfflinePageStorageManager::OnExpiredPagesDeleted,
46 weak_ptr_factory_.GetWeakPtr(), callback, offline_ids.size()));
47 }
48
49 void OfflinePageStorageManager::GetExpiredPageIds(
50 const MultipleOfflinePageItemResult& pages,
51 std::vector<int64_t>& offline_ids) {
52 for (const auto& page : pages) {
53 if (IsPageExpired(page))
54 offline_ids.push_back(page.offline_id);
55 }
56 }
57
58 void OfflinePageStorageManager::OnExpiredPagesDeleted(
59 const ClearPageCallback& callback,
60 int pages_cleared,
61 DeletePageResult result) {
fgorski 2016/05/06 05:57:24 in_progress_ = false;
romax 2016/05/07 02:22:42 Done.
62 callback.Run(pages_cleared, result);
63 }
64
65 bool OfflinePageStorageManager::ShouldClearPages() {
66 return !in_progress_ && model_->is_loaded();
67 }
68
69 bool OfflinePageStorageManager::IsPageExpired(const OfflinePageItem& page) {
70 base::Time now = base::Time::Now();
71 LifetimePolicy policy =
fgorski 2016/05/06 05:57:24 const ref
romax 2016/05/07 02:22:42 Done.
72 policy_controller_->GetPolicy(page.client_id.name_space).lifetime_policy;
73 return now - page.last_access_time > policy.expiration_period;
74 }
75
76 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698