permission_auditing_service.cc 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // Copyright 2020 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. #include "components/permissions/permission_auditing_service.h"
  5. #include "base/bind.h"
  6. #include "base/callback.h"
  7. #include "base/files/file_util.h"
  8. #include "components/permissions/permission_auditing_database.h"
  9. namespace {
  10. // Specifies the permissions usage session lifetime. Each session older
  11. // than this value is to be deleted.
  12. constexpr base::TimeDelta kUsageSessionMaxAge = base::Days(90);
  13. // Specifies the time period between the regular sessions deletions.
  14. constexpr base::TimeDelta kUsageSessionCullingInterval = base::Minutes(30);
  15. } // namespace
  16. namespace permissions {
  17. PermissionAuditingService::PermissionAuditingService(
  18. scoped_refptr<base::SequencedTaskRunner> backend_task_runner)
  19. : backend_task_runner_(backend_task_runner) {}
  20. PermissionAuditingService::~PermissionAuditingService() {
  21. if (db_) {
  22. backend_task_runner_->DeleteSoon(FROM_HERE, db_.get());
  23. db_ = nullptr;
  24. }
  25. }
  26. void PermissionAuditingService::Init(const base::FilePath& database_path) {
  27. DCHECK(!db_);
  28. db_ = new PermissionAuditingDatabase();
  29. backend_task_runner_->PostTask(
  30. FROM_HERE,
  31. base::BindOnce(base::IgnoreResult(&PermissionAuditingDatabase::Init),
  32. base::Unretained(db_), database_path));
  33. }
  34. void PermissionAuditingService::StartPeriodicCullingOfExpiredSessions() {
  35. timer_.Start(
  36. FROM_HERE, kUsageSessionCullingInterval,
  37. base::BindRepeating(&PermissionAuditingService::ExpireOldSessions,
  38. this->AsWeakPtr()));
  39. }
  40. void PermissionAuditingService::StorePermissionUsage(
  41. const PermissionUsageSession& session) {
  42. DCHECK(db_);
  43. backend_task_runner_->PostTask(
  44. FROM_HERE,
  45. base::BindOnce(
  46. base::IgnoreResult(&PermissionAuditingDatabase::StorePermissionUsage),
  47. base::Unretained(db_), session));
  48. }
  49. void PermissionAuditingService::GetPermissionUsageHistory(
  50. ContentSettingsType type,
  51. const url::Origin& origin,
  52. base::Time start_time,
  53. PermissionUsageHistoryCallback result_callback) {
  54. DCHECK(db_);
  55. backend_task_runner_->PostTaskAndReplyWithResult(
  56. FROM_HERE,
  57. base::BindOnce(&PermissionAuditingDatabase::GetPermissionUsageHistory,
  58. base::Unretained(db_), type, origin, start_time),
  59. std::move(result_callback));
  60. }
  61. void PermissionAuditingService::GetLastPermissionUsageTime(
  62. ContentSettingsType type,
  63. const url::Origin& origin,
  64. LastPermissionUsageTimeCallback result_callback) {
  65. DCHECK(db_);
  66. backend_task_runner_->PostTaskAndReplyWithResult(
  67. FROM_HERE,
  68. base::BindOnce(&PermissionAuditingDatabase::GetLastPermissionUsageTime,
  69. base::Unretained(db_), type, origin),
  70. std::move(result_callback));
  71. }
  72. void PermissionAuditingService::UpdateEndTime(ContentSettingsType type,
  73. const url::Origin& origin,
  74. base::Time start_time,
  75. base::Time new_end_time) {
  76. DCHECK(db_);
  77. backend_task_runner_->PostTask(
  78. FROM_HERE,
  79. base::BindOnce(
  80. base::IgnoreResult(&PermissionAuditingDatabase::UpdateEndTime),
  81. base::Unretained(db_), type, origin, start_time, new_end_time));
  82. }
  83. void PermissionAuditingService::DeleteSessionsBetween(base::Time start,
  84. base::Time end) {
  85. DCHECK(db_);
  86. backend_task_runner_->PostTask(
  87. FROM_HERE,
  88. base::BindOnce(base::IgnoreResult(
  89. &PermissionAuditingDatabase::DeleteSessionsBetween),
  90. base::Unretained(db_), start, end));
  91. }
  92. void PermissionAuditingService::ExpireOldSessions() {
  93. DCHECK(db_);
  94. backend_task_runner_->PostTask(
  95. FROM_HERE,
  96. base::BindOnce(base::IgnoreResult(
  97. &PermissionAuditingDatabase::DeleteSessionsBetween),
  98. base::Unretained(db_), base::Time(),
  99. base::Time::Now() - kUsageSessionMaxAge));
  100. }
  101. // static
  102. base::TimeDelta PermissionAuditingService::GetUsageSessionMaxAge() {
  103. return kUsageSessionMaxAge;
  104. }
  105. // static
  106. base::TimeDelta PermissionAuditingService::GetUsageSessionCullingInterval() {
  107. return kUsageSessionCullingInterval;
  108. }
  109. } // namespace permissions