local_page_entities_metadata_provider.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright 2021 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. #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_LOCAL_PAGE_ENTITIES_METADATA_PROVIDER_H_
  5. #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_LOCAL_PAGE_ENTITIES_METADATA_PROVIDER_H_
  6. #include "base/callback.h"
  7. #include "base/memory/weak_ptr.h"
  8. #include "base/sequence_checker.h"
  9. #include "components/leveldb_proto/public/proto_database.h"
  10. #include "components/leveldb_proto/public/proto_database_provider.h"
  11. #include "components/optimization_guide/core/entity_metadata_provider.h"
  12. #include "components/optimization_guide/proto/page_entities_metadata.pb.h"
  13. #include "third_party/abseil-cpp/absl/types/optional.h"
  14. namespace optimization_guide {
  15. // Provides EntityMetadata given an entity id by looking up entries in a local
  16. // database on-disk.
  17. class LocalPageEntitiesMetadataProvider : public EntityMetadataProvider {
  18. public:
  19. LocalPageEntitiesMetadataProvider();
  20. ~LocalPageEntitiesMetadataProvider() override;
  21. LocalPageEntitiesMetadataProvider(const LocalPageEntitiesMetadataProvider&) =
  22. delete;
  23. LocalPageEntitiesMetadataProvider& operator=(
  24. const LocalPageEntitiesMetadataProvider&) = delete;
  25. // Initializes this class, setting |database_| and |background_task_runner_|.
  26. void Initialize(
  27. leveldb_proto::ProtoDatabaseProvider* database_provider,
  28. const base::FilePath& database_dir,
  29. scoped_refptr<base::SequencedTaskRunner> background_task_runner);
  30. // Directly sets |database_| and |background_task_runner_| for tests.
  31. void InitializeForTesting(
  32. std::unique_ptr<
  33. leveldb_proto::ProtoDatabase<proto::EntityMetadataStorage>> database,
  34. scoped_refptr<base::SequencedTaskRunner> background_task_runner);
  35. // EntityMetadataProvider:
  36. void GetMetadataForEntityId(
  37. const std::string& entity_id,
  38. EntityMetadataRetrievedCallback callback) override;
  39. private:
  40. void OnDatabaseInitialized(leveldb_proto::Enums::InitStatus status);
  41. void OnGotEntry(const std::string& entity_id,
  42. EntityMetadataRetrievedCallback callback,
  43. bool success,
  44. std::unique_ptr<proto::EntityMetadataStorage> entry);
  45. std::unique_ptr<leveldb_proto::ProtoDatabase<proto::EntityMetadataStorage>>
  46. database_;
  47. scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
  48. SEQUENCE_CHECKER(sequence_checker_);
  49. base::WeakPtrFactory<LocalPageEntitiesMetadataProvider> weak_ptr_factory_{
  50. this};
  51. };
  52. } // namespace optimization_guide
  53. #endif // COMPONENTS_OPTIMIZATION_GUIDE_CORE_LOCAL_PAGE_ENTITIES_METADATA_PROVIDER_H_