blob: 83dcd3262071e3e7285abf4fbc8d6df7f68279e6 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_METRICS_CACHED_METRICS_PROFILE_H_
#define CHROME_BROWSER_METRICS_CACHED_METRICS_PROFILE_H_
#include "base/memory/raw_ptr.h"
class Profile;
namespace metrics {
// Caches a user profile to use in metrics providers if needed. Uses the first
// signed-in profile, and sticks with it until that profile becomes invalid.
class CachedMetricsProfile {
public:
CachedMetricsProfile();
CachedMetricsProfile(const CachedMetricsProfile&) = delete;
CachedMetricsProfile& operator=(const CachedMetricsProfile&) = delete;
~CachedMetricsProfile();
// Returns the profile for which metrics will be gathered. Once a suitable
// profile has been found, future calls will continue to return the same
// value so that reported metrics are consistent.
Profile* GetMetricsProfile();
private:
// The profile for which metrics can be gathered. Once a profile is found,
// its value is cached here so that GetMetricsProfile() can return a
// consistent value.
// Note: This may be dangling if the profile being pointed to is deleted
// before |this|. However, this is safe because GetMetricsProfile() above
// verifies that this is still valid before returning it. If new accesses are
// made to this field, care must be taken to ensure that it is still valid.
raw_ptr<Profile, DisableDanglingPtrDetection> cached_profile_ = nullptr;
};
} // namespace metrics
#endif // CHROME_BROWSER_METRICS_CACHED_METRICS_PROFILE_H_