breadcrumb_manager_keyed_service.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2019 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_BREADCRUMBS_CORE_BREADCRUMB_MANAGER_KEYED_SERVICE_H_
  5. #define COMPONENTS_BREADCRUMBS_CORE_BREADCRUMB_MANAGER_KEYED_SERVICE_H_
  6. #include <list>
  7. #include <memory>
  8. #include <string>
  9. #include "base/memory/raw_ptr.h"
  10. #include "components/keyed_service/core/keyed_service.h"
  11. namespace breadcrumbs {
  12. class BreadcrumbManager;
  13. class BreadcrumbManagerObserver;
  14. class BreadcrumbPersistentStorageManager;
  15. // Associates a BreadcrumbManager instance with a browser (BrowserState on iOS,
  16. // BrowserContext on Desktop) - either incognito or normal.
  17. class BreadcrumbManagerKeyedService : public KeyedService {
  18. public:
  19. explicit BreadcrumbManagerKeyedService(bool is_off_the_record);
  20. BreadcrumbManagerKeyedService(const BreadcrumbManagerKeyedService&) = delete;
  21. BreadcrumbManagerKeyedService& operator=(
  22. const BreadcrumbManagerKeyedService&) = delete;
  23. ~BreadcrumbManagerKeyedService() override;
  24. // Logs a breadcrumb |event| associated with the browser. Prepends the
  25. // |browsing_mode_| identifier to the event before passing it to the
  26. // |breadcrumb_manager_|.
  27. void AddEvent(const std::string& event);
  28. // Adds and removes observers to the underlying |breadcrumb_manager_|.
  29. void AddObserver(BreadcrumbManagerObserver* observer);
  30. void RemoveObserver(BreadcrumbManagerObserver* observer);
  31. // Returns up to |event_count_limit| events from the underlying
  32. // |breadcrumb_manager|. See |BreadcrumbManager::GetEvents| for returned event
  33. // details.
  34. const std::list<std::string> GetEvents(size_t event_count_limit) const;
  35. // Persists all events logged to |breadcrumb_manager_| to
  36. // |persistent_storage_manager|. If StartPersisting has already been called,
  37. // breadcrumbs will no longer be persisted to the previous
  38. // |persistent_storage_manager|.
  39. // NOTE: |persistent_storage_manager| must be non-null.
  40. void StartPersisting(
  41. BreadcrumbPersistentStorageManager* persistent_storage_manager);
  42. // Stops persisting events to |persistent_storage_manager_|. No-op if
  43. // |persistent_storage_manager_| is not set.
  44. void StopPersisting();
  45. // Returns the current |persistent_storage_manager_|.
  46. BreadcrumbPersistentStorageManager* GetPersistentStorageManager();
  47. private:
  48. // A short string identifying the browser used to initialize the receiver. For
  49. // example, "I" for "I"ncognito browsing mode. This value is prepended to
  50. // events sent to |AddEvent| in order to differentiate the browser associated
  51. // with each event.
  52. // Note: Normal browsing mode uses an empty string in order to prevent
  53. // prepending most events with the same static value.
  54. std::string browsing_mode_;
  55. // The associated BreadcrumbManager to store events added with |AddEvent|.
  56. std::unique_ptr<BreadcrumbManager> breadcrumb_manager_;
  57. // The current BreadcrumbPersistentStorageManager persisting events logged to
  58. // |breadcrumb_manager_|, set by StartPersisting. May be null.
  59. raw_ptr<BreadcrumbPersistentStorageManager> persistent_storage_manager_ =
  60. nullptr;
  61. };
  62. } // namespace breadcrumbs
  63. #endif // COMPONENTS_BREADCRUMBS_CORE_BREADCRUMB_MANAGER_KEYED_SERVICE_H_