blob: 9f207da9d94c1fcdde19e19a9eec9cb84a7c0f74 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASE_INTEGRATOR_BASE_H_
#define COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASE_INTEGRATOR_BASE_H_
#include "components/autofill/core/browser/strike_database.h"
namespace autofill {
namespace {
static const char kSharedId[] = "shared_id";
} // namespace
// Contains virtual functions for per-project implementations of StrikeDatabase
// to interface from, as well as a pointer to StrikeDatabase. This class is
// seperated from StrikeDatabase since we only want StrikeDatabase's cache to
// be loaded once per browser session.
class StrikeDatabaseIntegratorBase {
public:
StrikeDatabaseIntegratorBase(StrikeDatabase* strike_database);
virtual ~StrikeDatabaseIntegratorBase();
// Returns whether or not strike count for |id| has reached the strike limit
// set by GetMaxStrikesLimit().
bool IsMaxStrikesLimitReached(const std::string id = kSharedId);
// Increments in-memory cache and updates underlying ProtoDatabase.
int AddStrike(const std::string id = kSharedId);
// Increases in-memory cache by |strikes_increase| and updates underlying
// ProtoDatabase.
int AddStrikes(int strikes_increase, const std::string id = kSharedId);
// Removes an in-memory cache strike, updates last_update_timestamp, and
// updates underlying ProtoDatabase.
int RemoveStrike(const std::string id = kSharedId);
// Removes |strikes_decrease| in-memory cache strikes, updates
// |last_update_timestamp|, and updates underlying ProtoDatabase.
int RemoveStrikes(int strikes_decrease, const std::string id = kSharedId);
// Returns strike count from in-memory cache.
int GetStrikes(const std::string id = kSharedId);
// Removes all database entries from in-memory cache and underlying
// ProtoDatabase.
void ClearStrikes(const std::string id = kSharedId);
protected:
// Removes all strikes in which it has been longer than GetExpiryTimeMicros()
// past |last_update_timestamp|.
void RemoveExpiredStrikes();
private:
FRIEND_TEST_ALL_PREFIXES(ChromeBrowsingDataRemoverDelegateTest,
StrikeDatabaseEmptyOnAutofillRemoveEverything);
FRIEND_TEST_ALL_PREFIXES(CreditCardSaveStrikeDatabaseTest,
GetKeyForCreditCardSaveTest);
FRIEND_TEST_ALL_PREFIXES(CreditCardSaveStrikeDatabaseTest,
GetIdForCreditCardSaveTest);
FRIEND_TEST_ALL_PREFIXES(CreditCardSaveStrikeDatabaseTest,
RemoveExpiredStrikesTest);
FRIEND_TEST_ALL_PREFIXES(LocalCardMigrationStrikeDatabaseTest,
RemoveExpiredStrikesTest);
friend class StrikeDatabaseTest;
friend class StrikeDatabaseTester;
StrikeDatabase* strike_database_;
// For projects in which strikes don't have unique identifiers, the
// id suffix is set to |kSharedId|. This makes sure that projects requiring
// unique IDs always specify |id| instead of relying on the default shared
// value, while projects where unique IDs are unnecessary always fall back to
// the default shared value.
void CheckIdUniqueness(std::string id) {
DCHECK(UniqueIdsRequired() == (id != kSharedId));
}
// Generates key based on project-specific string identifier.
std::string GetKey(const std::string id);
// Returns a prefix unique to each project, which will be used to create
// database key.
virtual std::string GetProjectPrefix() = 0;
// Returns the maximum number of strikes after which the project's Autofill
// opportunity stops being offered.
virtual int GetMaxStrikesLimit() = 0;
// Returns the time after which the most recent strike should expire.
virtual long long GetExpiryTimeMicros() = 0;
// Returns whether or not a unique string identifier is required for every
// strike in this project.
virtual bool UniqueIdsRequired() = 0;
};
} // namespace autofill
#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASE_INTEGRATOR_BASE_H_