File: strike_database_base.h

package info (click to toggle)
chromium 141.0.7390.107-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,246,132 kB
  • sloc: cpp: 35,264,965; ansic: 7,169,920; javascript: 4,250,185; python: 1,460,635; asm: 950,788; xml: 751,751; pascal: 187,972; sh: 89,459; perl: 88,691; objc: 79,953; sql: 53,924; cs: 44,622; fortran: 24,137; makefile: 22,313; tcl: 15,277; php: 14,018; yacc: 8,995; ruby: 7,553; awk: 3,720; lisp: 3,096; lex: 1,330; ada: 727; jsp: 228; sed: 36
file content (89 lines) | stat: -rw-r--r-- 3,098 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_STRIKE_DATABASE_STRIKE_DATABASE_BASE_H_
#define COMPONENTS_STRIKE_DATABASE_STRIKE_DATABASE_BASE_H_

#include <stdint.h>

#include <map>
#include <string>
#include <string_view>
#include <vector>

#include "components/keyed_service/core/keyed_service.h"

namespace base {
class Time;
}

namespace autofill {

class StrikeData;

// Interface for the StrikeDatabase which is used by the
// StrikeDatabaseIntegratorBase that is oblivious to the underlying database
// specifics. This class is also used to allow for simpler testing.
class StrikeDatabaseBase : public KeyedService {
 public:
  StrikeDatabaseBase();
  ~StrikeDatabaseBase() override;

  // Increases in-memory cache by `strikes_increase` and updates underlying
  // ProtoDatabase.
  virtual int AddStrikes(int strikes_increase, const std::string& key) = 0;

  // Removes `strikes_decrease` in-memory cache strikes, updates
  // last_update_timestamp, and updates underlying ProtoDatabase.
  virtual int RemoveStrikes(int strikes_decrease, const std::string& key) = 0;

  // Returns strike count from in-memory cache.
  virtual int GetStrikes(const std::string& key) = 0;

  // Removes database entry for `key` from in-memory cache and underlying
  // ProtoDatabase.
  virtual void ClearStrikes(const std::string& key) = 0;

  // Returns all strike keys for `project_prefix`.
  // The returned keys still contain the `project_prefix`.
  virtual std::vector<std::string> GetAllStrikeKeysForProject(
      const std::string& project_prefix) = 0;

  // Removes database entry for keys in `keys_to_remove` from in-memory cache
  // and the underlying ProtoDatabase.
  virtual void ClearStrikesForKeys(
      const std::vector<std::string>& keys_to_remove) = 0;

  // Removes all database entries from in-memory cache and underlying
  // ProtoDatabase for the whole project.
  virtual void ClearAllStrikesForProject(const std::string& project_prefix) = 0;

  // Removes all database entries from in-memory cache and underlying
  // ProtoDatabase.
  virtual void ClearAllStrikes() = 0;

  // Extracts per-project prefix from `key`.
  virtual std::string GetPrefixFromKey(const std::string& key) const = 0;

  // Updates the StrikeData for `key` in the cache and ProtoDatabase to have
  // `num_strikes`, and the current time as timestamp.
  virtual void SetStrikeData(const std::string& key, int num_strikes) = 0;

  // Returns the timestamp when the records for `key` were last updated.
  virtual base::Time GetLastUpdatedTimestamp(const std::string& key) = 0;

 protected:
  friend class StrikeDatabaseIntegratorBase;

  // The deliminator that separates the project identifier and the id in the
  // strike key.
  static constexpr std::string_view kKeyDeliminator = "__";

  // Returns a pointer to the internal cache.
  virtual std::map<std::string, StrikeData>& GetStrikeCache() = 0;
};

}  // namespace autofill

#endif  // COMPONENTS_STRIKE_DATABASE_STRIKE_DATABASE_BASE_H_