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

Side by Side Diff: components/offline_pages/core/offline_page_model_impl.cc

Issue 2489443002: Move all components/offline_pages/ files into component/offline_pages/core (Closed)
Patch Set: update 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/offline_pages/offline_page_model_impl.h" 5 #include "components/offline_pages/core/offline_page_model_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/files/file_util.h" 11 #include "base/files/file_util.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/metrics/histogram_macros.h" 14 #include "base/metrics/histogram_macros.h"
15 #include "base/rand_util.h" 15 #include "base/rand_util.h"
16 #include "base/sequenced_task_runner.h" 16 #include "base/sequenced_task_runner.h"
17 #include "base/strings/string16.h" 17 #include "base/strings/string16.h"
18 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
19 #include "base/threading/thread_task_runner_handle.h" 19 #include "base/threading/thread_task_runner_handle.h"
20 #include "base/time/clock.h" 20 #include "base/time/clock.h"
21 #include "base/time/time.h" 21 #include "base/time/time.h"
22 #include "components/offline_pages/archive_manager.h" 22 #include "components/offline_pages/core/archive_manager.h"
23 #include "components/offline_pages/client_namespace_constants.h" 23 #include "components/offline_pages/core/client_namespace_constants.h"
24 #include "components/offline_pages/client_policy_controller.h" 24 #include "components/offline_pages/core/client_policy_controller.h"
25 #include "components/offline_pages/offline_page_item.h" 25 #include "components/offline_pages/core/offline_page_item.h"
26 #include "components/offline_pages/offline_page_model_query.h" 26 #include "components/offline_pages/core/offline_page_model_query.h"
27 #include "components/offline_pages/offline_page_storage_manager.h" 27 #include "components/offline_pages/core/offline_page_storage_manager.h"
28 #include "url/gurl.h" 28 #include "url/gurl.h"
29 29
30 using ArchiverResult = offline_pages::OfflinePageArchiver::ArchiverResult; 30 using ArchiverResult = offline_pages::OfflinePageArchiver::ArchiverResult;
31 using ClearStorageCallback = 31 using ClearStorageCallback =
32 offline_pages::OfflinePageStorageManager::ClearStorageCallback; 32 offline_pages::OfflinePageStorageManager::ClearStorageCallback;
33 using ClearStorageResult = 33 using ClearStorageResult =
34 offline_pages::OfflinePageStorageManager::ClearStorageResult; 34 offline_pages::OfflinePageStorageManager::ClearStorageResult;
35 35
36 namespace offline_pages { 36 namespace offline_pages {
37 37
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 1.0 * storage_stats.total_archives_size / 121 1.0 * storage_stats.total_archives_size /
122 (storage_stats.total_archives_size + storage_stats.free_disk_space) * 122 (storage_stats.total_archives_size + storage_stats.free_disk_space) *
123 100); 123 100);
124 UMA_HISTOGRAM_PERCENTAGE( 124 UMA_HISTOGRAM_PERCENTAGE(
125 "OfflinePages.DeletePage.TotalPageSizeAsPercentageOfFreeSpace", 125 "OfflinePages.DeletePage.TotalPageSizeAsPercentageOfFreeSpace",
126 percentage_of_free); 126 percentage_of_free);
127 } 127 }
128 } 128 }
129 129
130 void ReportSavePageResultHistogramAfterSave(const ClientId& client_id, 130 void ReportSavePageResultHistogramAfterSave(const ClientId& client_id,
131 SavePageResult result) { 131 SavePageResult result) {
132 // The histogram below is an expansion of the UMA_HISTOGRAM_ENUMERATION 132 // The histogram below is an expansion of the UMA_HISTOGRAM_ENUMERATION
133 // macro adapted to allow for a dynamically suffixed histogram name. 133 // macro adapted to allow for a dynamically suffixed histogram name.
134 // Note: The factory creates and owns the histogram. 134 // Note: The factory creates and owns the histogram.
135 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( 135 base::HistogramBase* histogram = base::LinearHistogram::FactoryGet(
136 AddHistogramSuffix(client_id, "OfflinePages.SavePageResult"), 136 AddHistogramSuffix(client_id, "OfflinePages.SavePageResult"), 1,
137 1,
138 static_cast<int>(SavePageResult::RESULT_COUNT), 137 static_cast<int>(SavePageResult::RESULT_COUNT),
139 static_cast<int>(SavePageResult::RESULT_COUNT) + 1, 138 static_cast<int>(SavePageResult::RESULT_COUNT) + 1,
140 base::HistogramBase::kUmaTargetedHistogramFlag); 139 base::HistogramBase::kUmaTargetedHistogramFlag);
141 histogram->Add(static_cast<int>(result)); 140 histogram->Add(static_cast<int>(result));
142 } 141 }
143 142
144 // Goes through the list of offline pages, compiling the following two metrics: 143 // Goes through the list of offline pages, compiling the following two metrics:
145 // - a count of the pages with the same URL 144 // - a count of the pages with the same URL
146 // - The difference between the |created_before| time and the creation time of 145 // - The difference between the |created_before| time and the creation time of
147 // the page with the closest creation time before |created_before|. 146 // the page with the closest creation time before |created_before|.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 AddHistogramSuffix(offline_page.client_id, "OfflinePages.SavePageTime"), 192 AddHistogramSuffix(offline_page.client_id, "OfflinePages.SavePageTime"),
194 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10), 193 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10),
195 50, base::HistogramBase::kUmaTargetedHistogramFlag); 194 50, base::HistogramBase::kUmaTargetedHistogramFlag);
196 histogram->AddTime(save_time - offline_page.creation_time); 195 histogram->AddTime(save_time - offline_page.creation_time);
197 196
198 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 197 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
199 // macro adapted to allow for a dynamically suffixed histogram name. 198 // macro adapted to allow for a dynamically suffixed histogram name.
200 // Note: The factory creates and owns the histogram. 199 // Note: The factory creates and owns the histogram.
201 // Reported as Kb between 1Kb and 10Mb. 200 // Reported as Kb between 1Kb and 10Mb.
202 histogram = base::Histogram::FactoryGet( 201 histogram = base::Histogram::FactoryGet(
203 AddHistogramSuffix(offline_page.client_id, "OfflinePages.PageSize"), 202 AddHistogramSuffix(offline_page.client_id, "OfflinePages.PageSize"), 1,
204 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); 203 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag);
205 histogram->Add(offline_page.file_size / 1024); 204 histogram->Add(offline_page.file_size / 1024);
206 205
207 if (offline_page.client_id.name_space == kDownloadNamespace) { 206 if (offline_page.client_id.name_space == kDownloadNamespace) {
208 int matching_url_count; 207 int matching_url_count;
209 base::TimeDelta time_since_most_recent_duplicate; 208 base::TimeDelta time_since_most_recent_duplicate;
210 if (GetMatchingURLCountAndMostRecentCreationTime( 209 if (GetMatchingURLCountAndMostRecentCreationTime(
211 offline_pages, offline_page.client_id.name_space, offline_page.url, 210 offline_pages, offline_page.client_id.name_space, offline_page.url,
212 offline_page.creation_time, &matching_url_count, 211 offline_page.creation_time, &matching_url_count,
213 &time_since_most_recent_duplicate)) { 212 &time_since_most_recent_duplicate)) {
214 // Using CUSTOM_COUNTS instead of time-oriented histogram to record 213 // Using CUSTOM_COUNTS instead of time-oriented histogram to record
(...skipping 27 matching lines...) Expand all
242 &remaining_pages_with_url, nullptr); 241 &remaining_pages_with_url, nullptr);
243 UMA_HISTOGRAM_CUSTOM_COUNTS( 242 UMA_HISTOGRAM_CUSTOM_COUNTS(
244 "OfflinePages.DownloadDeletedPageDuplicateCount", 243 "OfflinePages.DownloadDeletedPageDuplicateCount",
245 remaining_pages_with_url, 1, 20, 10); 244 remaining_pages_with_url, 1, 20, 10);
246 } 245 }
247 246
248 // The histograms below are an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 247 // The histograms below are an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
249 // macro adapted to allow for a dynamically suffixed histogram name. 248 // macro adapted to allow for a dynamically suffixed histogram name.
250 // Note: The factory creates and owns the histogram. 249 // Note: The factory creates and owns the histogram.
251 base::HistogramBase* histogram = base::Histogram::FactoryGet( 250 base::HistogramBase* histogram = base::Histogram::FactoryGet(
252 AddHistogramSuffix(client_id, "OfflinePages.PageLifetime"), 251 AddHistogramSuffix(client_id, "OfflinePages.PageLifetime"), 1,
253 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); 252 max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag);
254 histogram->Add((delete_time - page.creation_time).InMinutes()); 253 histogram->Add((delete_time - page.creation_time).InMinutes());
255 254
256 histogram = base::Histogram::FactoryGet( 255 histogram = base::Histogram::FactoryGet(
257 AddHistogramSuffix( 256 AddHistogramSuffix(client_id,
258 client_id, "OfflinePages.DeletePage.TimeSinceLastOpen"), 257 "OfflinePages.DeletePage.TimeSinceLastOpen"),
259 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); 258 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag);
260 histogram->Add((delete_time - page.last_access_time).InMinutes()); 259 histogram->Add((delete_time - page.last_access_time).InMinutes());
261 260
262 histogram = base::Histogram::FactoryGet( 261 histogram = base::Histogram::FactoryGet(
263 AddHistogramSuffix( 262 AddHistogramSuffix(client_id,
264 client_id, "OfflinePages.DeletePage.LastOpenToCreated"), 263 "OfflinePages.DeletePage.LastOpenToCreated"),
265 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); 264 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag);
266 histogram->Add((page.last_access_time - page.creation_time).InMinutes()); 265 histogram->Add((page.last_access_time - page.creation_time).InMinutes());
267 266
268 // Reported as Kb between 1Kb and 10Mb. 267 // Reported as Kb between 1Kb and 10Mb.
269 histogram = base::Histogram::FactoryGet( 268 histogram = base::Histogram::FactoryGet(
270 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.PageSize"), 269 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.PageSize"), 1,
271 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); 270 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag);
272 histogram->Add(page.file_size / 1024); 271 histogram->Add(page.file_size / 1024);
273 272
274 histogram = base::Histogram::FactoryGet( 273 histogram = base::Histogram::FactoryGet(
275 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.AccessCount"), 274 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.AccessCount"), 1,
276 1, 1000000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); 275 1000000, 50, base::HistogramBase::kUmaTargetedHistogramFlag);
277 histogram->Add(page.access_count); 276 histogram->Add(page.access_count);
278 } 277 }
279 278
280 if (deleted_pages.size() > 1) { 279 if (deleted_pages.size() > 1) {
281 UMA_HISTOGRAM_COUNTS("OfflinePages.BatchDelete.Count", 280 UMA_HISTOGRAM_COUNTS("OfflinePages.BatchDelete.Count",
282 static_cast<int32_t>(deleted_pages.size())); 281 static_cast<int32_t>(deleted_pages.size()));
283 UMA_HISTOGRAM_MEMORY_KB( 282 UMA_HISTOGRAM_MEMORY_KB("OfflinePages.BatchDelete.TotalPageSize",
284 "OfflinePages.BatchDelete.TotalPageSize", total_size / 1024); 283 total_size / 1024);
285 } 284 }
286 } 285 }
287 286
288 void ReportPageHistogramsAfterAccess(const OfflinePageItem& offline_page_item, 287 void ReportPageHistogramsAfterAccess(const OfflinePageItem& offline_page_item,
289 const base::Time& access_time) { 288 const base::Time& access_time) {
290 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 289 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
291 // macro adapted to allow for a dynamically suffixed histogram name. 290 // macro adapted to allow for a dynamically suffixed histogram name.
292 // Note: The factory creates and owns the histogram. 291 // Note: The factory creates and owns the histogram.
293 base::HistogramBase* histogram = base::Histogram::FactoryGet( 292 base::HistogramBase* histogram = base::Histogram::FactoryGet(
294 AddHistogramSuffix( 293 AddHistogramSuffix(offline_page_item.client_id,
295 offline_page_item.client_id, 294 offline_page_item.access_count == 0
296 offline_page_item.access_count == 0 ? 295 ? "OfflinePages.FirstOpenSinceCreated"
297 "OfflinePages.FirstOpenSinceCreated" : 296 : "OfflinePages.OpenSinceLastOpen"),
298 "OfflinePages.OpenSinceLastOpen"), 297 1, kMaxOpenedPageHistogramBucket.InMinutes(), 50,
299 1, kMaxOpenedPageHistogramBucket.InMinutes(), 50, 298 base::HistogramBase::kUmaTargetedHistogramFlag);
300 base::HistogramBase::kUmaTargetedHistogramFlag);
301 histogram->Add( 299 histogram->Add(
302 (access_time - offline_page_item.last_access_time).InMinutes()); 300 (access_time - offline_page_item.last_access_time).InMinutes());
303 } 301 }
304 302
305 } // namespace 303 } // namespace
306 304
307 // protected 305 // protected
308 OfflinePageModelImpl::OfflinePageModelImpl() 306 OfflinePageModelImpl::OfflinePageModelImpl()
309 : OfflinePageModel(), is_loaded_(false), weak_ptr_factory_(this) {} 307 : OfflinePageModel(), is_loaded_(false), weak_ptr_factory_(this) {}
310 308
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 380
383 // Make a copy of the cached item and update it. The cached item should only 381 // Make a copy of the cached item and update it. The cached item should only
384 // be updated upon the successful store operation. 382 // be updated upon the successful store operation.
385 OfflinePageItem offline_page_item = iter->second; 383 OfflinePageItem offline_page_item = iter->second;
386 384
387 ReportPageHistogramsAfterAccess(offline_page_item, GetCurrentTime()); 385 ReportPageHistogramsAfterAccess(offline_page_item, GetCurrentTime());
388 386
389 offline_page_item.last_access_time = GetCurrentTime(); 387 offline_page_item.last_access_time = GetCurrentTime();
390 offline_page_item.access_count++; 388 offline_page_item.access_count++;
391 389
392 std::vector<OfflinePageItem> items = { offline_page_item }; 390 std::vector<OfflinePageItem> items = {offline_page_item};
393 store_->UpdateOfflinePages( 391 store_->UpdateOfflinePages(
394 items, base::Bind(&OfflinePageModelImpl::OnMarkPageAccesseDone, 392 items, base::Bind(&OfflinePageModelImpl::OnMarkPageAccesseDone,
395 weak_ptr_factory_.GetWeakPtr(), offline_page_item)); 393 weak_ptr_factory_.GetWeakPtr(), offline_page_item));
396 } 394 }
397 395
398 void OfflinePageModelImpl::DeletePagesByOfflineId( 396 void OfflinePageModelImpl::DeletePagesByOfflineId(
399 const std::vector<int64_t>& offline_ids, 397 const std::vector<int64_t>& offline_ids,
400 const DeletePageCallback& callback) { 398 const DeletePageCallback& callback) {
401 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoDeletePagesByOfflineId, 399 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoDeletePagesByOfflineId,
402 weak_ptr_factory_.GetWeakPtr(), offline_ids, 400 weak_ptr_factory_.GetWeakPtr(), offline_ids,
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 616
619 void OfflinePageModelImpl::GetPagesByOnlineURLWhenLoadDone( 617 void OfflinePageModelImpl::GetPagesByOnlineURLWhenLoadDone(
620 const GURL& online_url, 618 const GURL& online_url,
621 const MultipleOfflinePageItemCallback& callback) const { 619 const MultipleOfflinePageItemCallback& callback) const {
622 std::vector<OfflinePageItem> result; 620 std::vector<OfflinePageItem> result;
623 621
624 GURL::Replacements remove_params; 622 GURL::Replacements remove_params;
625 remove_params.ClearRef(); 623 remove_params.ClearRef();
626 624
627 GURL online_url_without_fragment = 625 GURL online_url_without_fragment =
628 online_url.ReplaceComponents(remove_params); 626 online_url.ReplaceComponents(remove_params);
629 627
630 for (const auto& id_page_pair : offline_pages_) { 628 for (const auto& id_page_pair : offline_pages_) {
631 if (id_page_pair.second.IsExpired()) 629 if (id_page_pair.second.IsExpired())
632 continue; 630 continue;
633 if (online_url == id_page_pair.second.url) { 631 if (online_url == id_page_pair.second.url) {
634 result.push_back(id_page_pair.second); 632 result.push_back(id_page_pair.second);
635 continue; 633 continue;
636 } 634 }
637 // If the full URL does not match, try with the fragment identifier 635 // If the full URL does not match, try with the fragment identifier
638 // stripped. 636 // stripped.
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 } 1087 }
1090 1088
1091 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); 1089 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task);
1092 } 1090 }
1093 1091
1094 base::Time OfflinePageModelImpl::GetCurrentTime() const { 1092 base::Time OfflinePageModelImpl::GetCurrentTime() const {
1095 return testing_clock_ ? testing_clock_->Now() : base::Time::Now(); 1093 return testing_clock_ ? testing_clock_->Now() : base::Time::Now();
1096 } 1094 }
1097 1095
1098 } // namespace offline_pages 1096 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698