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

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

Issue 2340133005: Merge M54: Support serving offline page by offline ID (Closed)
Patch Set: Created 4 years, 3 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
« no previous file with comments | « components/offline_pages/offline_page_model_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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/time.h" 21 #include "base/time/time.h"
21 #include "components/offline_pages/archive_manager.h" 22 #include "components/offline_pages/archive_manager.h"
22 #include "components/offline_pages/client_namespace_constants.h" 23 #include "components/offline_pages/client_namespace_constants.h"
23 #include "components/offline_pages/client_policy_controller.h" 24 #include "components/offline_pages/client_policy_controller.h"
24 #include "components/offline_pages/offline_page_item.h" 25 #include "components/offline_pages/offline_page_item.h"
25 #include "components/offline_pages/offline_page_storage_manager.h" 26 #include "components/offline_pages/offline_page_storage_manager.h"
26 #include "url/gurl.h" 27 #include "url/gurl.h"
27 28
28 using ArchiverResult = offline_pages::OfflinePageArchiver::ArchiverResult; 29 using ArchiverResult = offline_pages::OfflinePageArchiver::ArchiverResult;
29 using ClearStorageCallback = 30 using ClearStorageCallback =
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 if (matching_url_count != nullptr) 187 if (matching_url_count != nullptr)
187 *matching_url_count = count; 188 *matching_url_count = count;
188 if (most_recent_creation_time != nullptr && latest_time != base::Time()) 189 if (most_recent_creation_time != nullptr && latest_time != base::Time())
189 *most_recent_creation_time = created_before - latest_time; 190 *most_recent_creation_time = created_before - latest_time;
190 191
191 return matching_page; 192 return matching_page;
192 } 193 }
193 194
194 void ReportPageHistogramAfterSave( 195 void ReportPageHistogramAfterSave(
195 const std::map<int64_t, OfflinePageItem>& offline_pages, 196 const std::map<int64_t, OfflinePageItem>& offline_pages,
196 const OfflinePageItem& offline_page) { 197 const OfflinePageItem& offline_page,
198 const base::Time& save_time) {
197 // The histogram below is an expansion of the UMA_HISTOGRAM_TIMES 199 // The histogram below is an expansion of the UMA_HISTOGRAM_TIMES
198 // macro adapted to allow for a dynamically suffixed histogram name. 200 // macro adapted to allow for a dynamically suffixed histogram name.
199 // Note: The factory creates and owns the histogram. 201 // Note: The factory creates and owns the histogram.
200 base::HistogramBase* histogram = base::Histogram::FactoryTimeGet( 202 base::HistogramBase* histogram = base::Histogram::FactoryTimeGet(
201 AddHistogramSuffix(offline_page.client_id, "OfflinePages.SavePageTime"), 203 AddHistogramSuffix(offline_page.client_id, "OfflinePages.SavePageTime"),
202 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10), 204 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10),
203 50, base::HistogramBase::kUmaTargetedHistogramFlag); 205 50, base::HistogramBase::kUmaTargetedHistogramFlag);
204 histogram->AddTime(base::Time::Now() - offline_page.creation_time); 206 histogram->AddTime(save_time - offline_page.creation_time);
205 207
206 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 208 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
207 // macro adapted to allow for a dynamically suffixed histogram name. 209 // macro adapted to allow for a dynamically suffixed histogram name.
208 // Note: The factory creates and owns the histogram. 210 // Note: The factory creates and owns the histogram.
209 // Reported as Kb between 1Kb and 10Mb. 211 // Reported as Kb between 1Kb and 10Mb.
210 histogram = base::Histogram::FactoryGet( 212 histogram = base::Histogram::FactoryGet(
211 AddHistogramSuffix(offline_page.client_id, "OfflinePages.PageSize"), 213 AddHistogramSuffix(offline_page.client_id, "OfflinePages.PageSize"),
212 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); 214 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag);
213 histogram->Add(offline_page.file_size / 1024); 215 histogram->Add(offline_page.file_size / 1024);
214 216
(...skipping 12 matching lines...) Expand all
227 base::TimeDelta::FromSeconds(1).InSeconds(), 229 base::TimeDelta::FromSeconds(1).InSeconds(),
228 base::TimeDelta::FromDays(7).InSeconds(), 50); 230 base::TimeDelta::FromDays(7).InSeconds(), 50);
229 } 231 }
230 UMA_HISTOGRAM_CUSTOM_COUNTS("OfflinePages.DownloadSavedPageDuplicateCount", 232 UMA_HISTOGRAM_CUSTOM_COUNTS("OfflinePages.DownloadSavedPageDuplicateCount",
231 matching_url_count, 1, 20, 10); 233 matching_url_count, 1, 20, 10);
232 } 234 }
233 } 235 }
234 236
235 void ReportPageHistogramsAfterDelete( 237 void ReportPageHistogramsAfterDelete(
236 const std::map<int64_t, OfflinePageItem>& offline_pages, 238 const std::map<int64_t, OfflinePageItem>& offline_pages,
237 const std::vector<int64_t>& deleted_offline_ids) { 239 const std::vector<int64_t>& deleted_offline_ids,
240 const base::Time& delete_time) {
238 const int max_minutes = base::TimeDelta::FromDays(365).InMinutes(); 241 const int max_minutes = base::TimeDelta::FromDays(365).InMinutes();
239 base::Time now = base::Time::Now();
240 int64_t total_size = 0; 242 int64_t total_size = 0;
241 for (int64_t offline_id : deleted_offline_ids) { 243 for (int64_t offline_id : deleted_offline_ids) {
242 auto iter = offline_pages.find(offline_id); 244 auto iter = offline_pages.find(offline_id);
243 if (iter == offline_pages.end()) 245 if (iter == offline_pages.end())
244 continue; 246 continue;
245 247
246 total_size += iter->second.file_size; 248 total_size += iter->second.file_size;
247 ClientId client_id = iter->second.client_id; 249 ClientId client_id = iter->second.client_id;
248 250
249 if (client_id.name_space == kDownloadNamespace) { 251 if (client_id.name_space == kDownloadNamespace) {
250 int remaining_pages_with_url; 252 int remaining_pages_with_url;
251 GetMatchingURLCountAndMostRecentCreationTime( 253 GetMatchingURLCountAndMostRecentCreationTime(
252 offline_pages, iter->second.client_id.name_space, iter->second.url, 254 offline_pages, iter->second.client_id.name_space, iter->second.url,
253 base::Time::Max(), &remaining_pages_with_url, nullptr); 255 base::Time::Max(), &remaining_pages_with_url, nullptr);
254 UMA_HISTOGRAM_CUSTOM_COUNTS( 256 UMA_HISTOGRAM_CUSTOM_COUNTS(
255 "OfflinePages.DownloadDeletedPageDuplicateCount", 257 "OfflinePages.DownloadDeletedPageDuplicateCount",
256 remaining_pages_with_url, 1, 20, 10); 258 remaining_pages_with_url, 1, 20, 10);
257 } 259 }
258 260
259 // The histograms below are an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 261 // The histograms below are an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
260 // macro adapted to allow for a dynamically suffixed histogram name. 262 // macro adapted to allow for a dynamically suffixed histogram name.
261 // Note: The factory creates and owns the histogram. 263 // Note: The factory creates and owns the histogram.
262 base::HistogramBase* histogram = base::Histogram::FactoryGet( 264 base::HistogramBase* histogram = base::Histogram::FactoryGet(
263 AddHistogramSuffix(client_id, "OfflinePages.PageLifetime"), 265 AddHistogramSuffix(client_id, "OfflinePages.PageLifetime"),
264 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); 266 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag);
265 histogram->Add((now - iter->second.creation_time).InMinutes()); 267 histogram->Add((delete_time - iter->second.creation_time).InMinutes());
266 268
267 histogram = base::Histogram::FactoryGet( 269 histogram = base::Histogram::FactoryGet(
268 AddHistogramSuffix( 270 AddHistogramSuffix(
269 client_id, "OfflinePages.DeletePage.TimeSinceLastOpen"), 271 client_id, "OfflinePages.DeletePage.TimeSinceLastOpen"),
270 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); 272 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag);
271 histogram->Add((now - iter->second.last_access_time).InMinutes()); 273 histogram->Add((delete_time - iter->second.last_access_time).InMinutes());
272 274
273 histogram = base::Histogram::FactoryGet( 275 histogram = base::Histogram::FactoryGet(
274 AddHistogramSuffix( 276 AddHistogramSuffix(
275 client_id, "OfflinePages.DeletePage.LastOpenToCreated"), 277 client_id, "OfflinePages.DeletePage.LastOpenToCreated"),
276 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); 278 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag);
277 histogram->Add( 279 histogram->Add(
278 (iter->second.last_access_time - iter->second.creation_time). 280 (iter->second.last_access_time - iter->second.creation_time).
279 InMinutes()); 281 InMinutes());
280 282
281 // Reported as Kb between 1Kb and 10Mb. 283 // Reported as Kb between 1Kb and 10Mb.
282 histogram = base::Histogram::FactoryGet( 284 histogram = base::Histogram::FactoryGet(
283 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.PageSize"), 285 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.PageSize"),
284 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); 286 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag);
285 histogram->Add(iter->second.file_size / 1024); 287 histogram->Add(iter->second.file_size / 1024);
286 288
287 histogram = base::Histogram::FactoryGet( 289 histogram = base::Histogram::FactoryGet(
288 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.AccessCount"), 290 AddHistogramSuffix(client_id, "OfflinePages.DeletePage.AccessCount"),
289 1, 1000000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); 291 1, 1000000, 50, base::HistogramBase::kUmaTargetedHistogramFlag);
290 histogram->Add(iter->second.access_count); 292 histogram->Add(iter->second.access_count);
291 } 293 }
292 294
293 if (deleted_offline_ids.size() > 1) { 295 if (deleted_offline_ids.size() > 1) {
294 UMA_HISTOGRAM_COUNTS("OfflinePages.BatchDelete.Count", 296 UMA_HISTOGRAM_COUNTS("OfflinePages.BatchDelete.Count",
295 static_cast<int32_t>(deleted_offline_ids.size())); 297 static_cast<int32_t>(deleted_offline_ids.size()));
296 UMA_HISTOGRAM_MEMORY_KB( 298 UMA_HISTOGRAM_MEMORY_KB(
297 "OfflinePages.BatchDelete.TotalPageSize", total_size / 1024); 299 "OfflinePages.BatchDelete.TotalPageSize", total_size / 1024);
298 } 300 }
299 } 301 }
300 302
301 void ReportPageHistogramsAfterAccess(const OfflinePageItem& offline_page_item) { 303 void ReportPageHistogramsAfterAccess(const OfflinePageItem& offline_page_item,
304 const base::Time& access_time) {
302 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS 305 // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
303 // macro adapted to allow for a dynamically suffixed histogram name. 306 // macro adapted to allow for a dynamically suffixed histogram name.
304 // Note: The factory creates and owns the histogram. 307 // Note: The factory creates and owns the histogram.
305 base::HistogramBase* histogram = base::Histogram::FactoryGet( 308 base::HistogramBase* histogram = base::Histogram::FactoryGet(
306 AddHistogramSuffix( 309 AddHistogramSuffix(
307 offline_page_item.client_id, 310 offline_page_item.client_id,
308 offline_page_item.access_count == 0 ? 311 offline_page_item.access_count == 0 ?
309 "OfflinePages.FirstOpenSinceCreated" : 312 "OfflinePages.FirstOpenSinceCreated" :
310 "OfflinePages.OpenSinceLastOpen"), 313 "OfflinePages.OpenSinceLastOpen"),
311 1, kMaxOpenedPageHistogramBucket.InMinutes(), 50, 314 1, kMaxOpenedPageHistogramBucket.InMinutes(), 50,
312 base::HistogramBase::kUmaTargetedHistogramFlag); 315 base::HistogramBase::kUmaTargetedHistogramFlag);
313 histogram->Add( 316 histogram->Add(
314 (base::Time::Now() - offline_page_item.last_access_time).InMinutes()); 317 (access_time - offline_page_item.last_access_time).InMinutes());
315 } 318 }
316 319
317 } // namespace 320 } // namespace
318 321
319 // protected 322 // protected
320 OfflinePageModelImpl::OfflinePageModelImpl() 323 OfflinePageModelImpl::OfflinePageModelImpl()
321 : OfflinePageModel(), is_loaded_(false), weak_ptr_factory_(this) {} 324 : OfflinePageModel(), is_loaded_(false), weak_ptr_factory_(this) {}
322 325
323 OfflinePageModelImpl::OfflinePageModelImpl( 326 OfflinePageModelImpl::OfflinePageModelImpl(
324 std::unique_ptr<OfflinePageMetadataStore> store, 327 std::unique_ptr<OfflinePageMetadataStore> store,
325 const base::FilePath& archives_dir, 328 const base::FilePath& archives_dir,
326 const scoped_refptr<base::SequencedTaskRunner>& task_runner) 329 const scoped_refptr<base::SequencedTaskRunner>& task_runner)
327 : store_(std::move(store)), 330 : store_(std::move(store)),
328 archives_dir_(archives_dir), 331 archives_dir_(archives_dir),
329 is_loaded_(false), 332 is_loaded_(false),
330 policy_controller_(new ClientPolicyController()), 333 policy_controller_(new ClientPolicyController()),
331 archive_manager_(new ArchiveManager(archives_dir, task_runner)), 334 archive_manager_(new ArchiveManager(archives_dir, task_runner)),
335 testing_clock_(nullptr),
332 weak_ptr_factory_(this) { 336 weak_ptr_factory_(this) {
333 archive_manager_->EnsureArchivesDirCreated( 337 archive_manager_->EnsureArchivesDirCreated(
334 base::Bind(&OfflinePageModelImpl::OnEnsureArchivesDirCreatedDone, 338 base::Bind(&OfflinePageModelImpl::OnEnsureArchivesDirCreatedDone,
335 weak_ptr_factory_.GetWeakPtr(), base::TimeTicks::Now())); 339 weak_ptr_factory_.GetWeakPtr(), base::TimeTicks::Now()));
336 } 340 }
337 341
338 OfflinePageModelImpl::~OfflinePageModelImpl() {} 342 OfflinePageModelImpl::~OfflinePageModelImpl() {}
339 343
340 void OfflinePageModelImpl::AddObserver(Observer* observer) { 344 void OfflinePageModelImpl::AddObserver(Observer* observer) {
341 observers_.AddObserver(observer); 345 observers_.AddObserver(observer);
(...skipping 27 matching lines...) Expand all
369 } 373 }
370 374
371 // If we already have an offline id, use it. If not, generate one. 375 // If we already have an offline id, use it. If not, generate one.
372 if (proposed_offline_id == 0ul) 376 if (proposed_offline_id == 0ul)
373 proposed_offline_id = GenerateOfflineId(); 377 proposed_offline_id = GenerateOfflineId();
374 378
375 archiver->CreateArchive( 379 archiver->CreateArchive(
376 archives_dir_, proposed_offline_id, 380 archives_dir_, proposed_offline_id,
377 base::Bind(&OfflinePageModelImpl::OnCreateArchiveDone, 381 base::Bind(&OfflinePageModelImpl::OnCreateArchiveDone,
378 weak_ptr_factory_.GetWeakPtr(), url, proposed_offline_id, 382 weak_ptr_factory_.GetWeakPtr(), url, proposed_offline_id,
379 client_id, base::Time::Now(), callback)); 383 client_id, GetCurrentTime(), callback));
380 pending_archivers_.push_back(std::move(archiver)); 384 pending_archivers_.push_back(std::move(archiver));
381 } 385 }
382 386
383 void OfflinePageModelImpl::MarkPageAccessed(int64_t offline_id) { 387 void OfflinePageModelImpl::MarkPageAccessed(int64_t offline_id) {
384 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::MarkPageAccessedWhenLoadDone, 388 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::MarkPageAccessedWhenLoadDone,
385 weak_ptr_factory_.GetWeakPtr(), offline_id)); 389 weak_ptr_factory_.GetWeakPtr(), offline_id));
386 } 390 }
387 391
388 void OfflinePageModelImpl::MarkPageAccessedWhenLoadDone(int64_t offline_id) { 392 void OfflinePageModelImpl::MarkPageAccessedWhenLoadDone(int64_t offline_id) {
389 DCHECK(is_loaded_); 393 DCHECK(is_loaded_);
390 394
391 auto iter = offline_pages_.find(offline_id); 395 auto iter = offline_pages_.find(offline_id);
392 if (iter == offline_pages_.end() || iter->second.IsExpired()) 396 if (iter == offline_pages_.end() || iter->second.IsExpired())
393 return; 397 return;
394 398
395 // Make a copy of the cached item and update it. The cached item should only 399 // Make a copy of the cached item and update it. The cached item should only
396 // be updated upon the successful store operation. 400 // be updated upon the successful store operation.
397 OfflinePageItem offline_page_item = iter->second; 401 OfflinePageItem offline_page_item = iter->second;
398 402
399 ReportPageHistogramsAfterAccess(offline_page_item); 403 ReportPageHistogramsAfterAccess(offline_page_item, GetCurrentTime());
400 404
401 offline_page_item.last_access_time = base::Time::Now(); 405 offline_page_item.last_access_time = GetCurrentTime();
402 offline_page_item.access_count++; 406 offline_page_item.access_count++;
403 407
404 store_->AddOrUpdateOfflinePage( 408 store_->AddOrUpdateOfflinePage(
405 offline_page_item, 409 offline_page_item,
406 base::Bind(&OfflinePageModelImpl::OnMarkPageAccesseDone, 410 base::Bind(&OfflinePageModelImpl::OnMarkPageAccesseDone,
407 weak_ptr_factory_.GetWeakPtr(), offline_page_item)); 411 weak_ptr_factory_.GetWeakPtr(), offline_page_item));
408 } 412 }
409 413
410 void OfflinePageModelImpl::DeletePagesByOfflineId( 414 void OfflinePageModelImpl::DeletePagesByOfflineId(
411 const std::vector<int64_t>& offline_ids, 415 const std::vector<int64_t>& offline_ids,
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 806
803 void OfflinePageModelImpl::OnAddOfflinePageDone( 807 void OfflinePageModelImpl::OnAddOfflinePageDone(
804 OfflinePageArchiver* archiver, 808 OfflinePageArchiver* archiver,
805 const SavePageCallback& callback, 809 const SavePageCallback& callback,
806 const OfflinePageItem& offline_page, 810 const OfflinePageItem& offline_page,
807 bool success) { 811 bool success) {
808 SavePageResult result; 812 SavePageResult result;
809 if (success) { 813 if (success) {
810 offline_pages_[offline_page.offline_id] = offline_page; 814 offline_pages_[offline_page.offline_id] = offline_page;
811 result = SavePageResult::SUCCESS; 815 result = SavePageResult::SUCCESS;
812 ReportPageHistogramAfterSave(offline_pages_, offline_page); 816 ReportPageHistogramAfterSave(offline_pages_, offline_page,
817 GetCurrentTime());
813 offline_event_logger_.RecordPageSaved( 818 offline_event_logger_.RecordPageSaved(
814 offline_page.client_id.name_space, offline_page.url.spec(), 819 offline_page.client_id.name_space, offline_page.url.spec(),
815 std::to_string(offline_page.offline_id)); 820 std::to_string(offline_page.offline_id));
816 } else { 821 } else {
817 result = SavePageResult::STORE_FAILURE; 822 result = SavePageResult::STORE_FAILURE;
818 } 823 }
819 InformSavePageDone(callback, result, offline_page.client_id, 824 InformSavePageDone(callback, result, offline_page.client_id,
820 offline_page.offline_id); 825 offline_page.offline_id);
821 if (result == SavePageResult::SUCCESS) { 826 if (result == SavePageResult::SUCCESS) {
822 DeleteExistingPagesWithSameURL(offline_page); 827 DeleteExistingPagesWithSameURL(offline_page);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 store_->RemoveOfflinePages( 966 store_->RemoveOfflinePages(
962 offline_ids, 967 offline_ids,
963 base::Bind(&OfflinePageModelImpl::OnRemoveOfflinePagesDone, 968 base::Bind(&OfflinePageModelImpl::OnRemoveOfflinePagesDone,
964 weak_ptr_factory_.GetWeakPtr(), offline_ids, callback)); 969 weak_ptr_factory_.GetWeakPtr(), offline_ids, callback));
965 } 970 }
966 971
967 void OfflinePageModelImpl::OnRemoveOfflinePagesDone( 972 void OfflinePageModelImpl::OnRemoveOfflinePagesDone(
968 const std::vector<int64_t>& offline_ids, 973 const std::vector<int64_t>& offline_ids,
969 const DeletePageCallback& callback, 974 const DeletePageCallback& callback,
970 bool success) { 975 bool success) {
971 ReportPageHistogramsAfterDelete(offline_pages_, offline_ids); 976 ReportPageHistogramsAfterDelete(
977 offline_pages_, offline_ids, GetCurrentTime());
972 978
973 for (int64_t offline_id : offline_ids) { 979 for (int64_t offline_id : offline_ids) {
974 offline_event_logger_.RecordPageDeleted(std::to_string(offline_id)); 980 offline_event_logger_.RecordPageDeleted(std::to_string(offline_id));
975 auto iter = offline_pages_.find(offline_id); 981 auto iter = offline_pages_.find(offline_id);
976 if (iter == offline_pages_.end()) 982 if (iter == offline_pages_.end())
977 continue; 983 continue;
978 FOR_EACH_OBSERVER( 984 FOR_EACH_OBSERVER(
979 Observer, observers_, 985 Observer, observers_,
980 OfflinePageDeleted(iter->second.offline_id, iter->second.client_id)); 986 OfflinePageDeleted(iter->second.offline_id, iter->second.client_id));
981 offline_pages_.erase(iter); 987 offline_pages_.erase(iter);
(...skipping 28 matching lines...) Expand all
1010 std::vector<int64_t> ids_of_pages_missing_archive_file; 1016 std::vector<int64_t> ids_of_pages_missing_archive_file;
1011 for (const auto& id_page_pair : offline_pages_) { 1017 for (const auto& id_page_pair : offline_pages_) {
1012 if (archive_paths.count(id_page_pair.second.file_path) == 0UL) 1018 if (archive_paths.count(id_page_pair.second.file_path) == 0UL)
1013 ids_of_pages_missing_archive_file.push_back(id_page_pair.first); 1019 ids_of_pages_missing_archive_file.push_back(id_page_pair.first);
1014 } 1020 }
1015 1021
1016 if (ids_of_pages_missing_archive_file.empty()) 1022 if (ids_of_pages_missing_archive_file.empty())
1017 return; 1023 return;
1018 1024
1019 ExpirePages( 1025 ExpirePages(
1020 ids_of_pages_missing_archive_file, base::Time::Now(), 1026 ids_of_pages_missing_archive_file, GetCurrentTime(),
1021 base::Bind(&OfflinePageModelImpl::OnExpirePagesMissingArchiveFileDone, 1027 base::Bind(&OfflinePageModelImpl::OnExpirePagesMissingArchiveFileDone,
1022 weak_ptr_factory_.GetWeakPtr(), 1028 weak_ptr_factory_.GetWeakPtr(),
1023 ids_of_pages_missing_archive_file)); 1029 ids_of_pages_missing_archive_file));
1024 } 1030 }
1025 1031
1026 void OfflinePageModelImpl::OnExpirePagesMissingArchiveFileDone( 1032 void OfflinePageModelImpl::OnExpirePagesMissingArchiveFileDone(
1027 const std::vector<int64_t>& offline_ids, 1033 const std::vector<int64_t>& offline_ids,
1028 bool success) { 1034 bool success) {
1029 UMA_HISTOGRAM_COUNTS("OfflinePages.Consistency.PagesMissingArchiveFileCount", 1035 UMA_HISTOGRAM_COUNTS("OfflinePages.Consistency.PagesMissingArchiveFileCount",
1030 static_cast<int32_t>(offline_ids.size())); 1036 static_cast<int32_t>(offline_ids.size()));
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 1148
1143 void OfflinePageModelImpl::RunWhenLoaded(const base::Closure& task) { 1149 void OfflinePageModelImpl::RunWhenLoaded(const base::Closure& task) {
1144 if (!is_loaded_) { 1150 if (!is_loaded_) {
1145 delayed_tasks_.push_back(task); 1151 delayed_tasks_.push_back(task);
1146 return; 1152 return;
1147 } 1153 }
1148 1154
1149 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); 1155 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task);
1150 } 1156 }
1151 1157
1158 base::Time OfflinePageModelImpl::GetCurrentTime() const {
1159 return testing_clock_ ? testing_clock_->Now() : base::Time::Now();
1160 }
1161
1152 } // namespace offline_pages 1162 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/offline_page_model_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698