| // 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 RLZ_LIB_SUPPLEMENTARY_BRANDING_H_ |
| #define RLZ_LIB_SUPPLEMENTARY_BRANDING_H_ |
| |
| #include <string> |
| |
| #include "base/memory/raw_ptr.h" |
| |
| namespace rlz_lib { |
| |
| class ScopedRlzValueStoreLock; |
| |
| // Segment RLZ persistence based on branding information. |
| // All information for a given product is persisted under keys with the either |
| // product's name or its access point's name. This assumes that only |
| // one instance of the product is installed on the machine, and that only one |
| // product brand is associated with it. |
| // |
| // In some cases, a given product may be using supplementary brands. The RLZ |
| // information must be kept separately for each of these brands. To achieve |
| // this segmentation, scope all RLZ library calls that deal with supplementary |
| // brands within the lifetime of an rlz_lib::ProductBranding instance. |
| // |
| // For example, to record events for a supplementary brand, do the following: |
| // |
| // { |
| // rlz_lib::SupplementaryBranding branding("AAAA"); |
| // // This call to RecordProductEvent is scoped to the AAAA brand. |
| // rlz_lib::RecordProductEvent(rlz_lib::DESKTOP, rlz_lib::GD_DESKBAND, |
| // rlz_lib::INSTALL); |
| // } |
| // |
| // // This call to RecordProductEvent is not scoped to any supplementary brand. |
| // rlz_lib::RecordProductEvent(rlz_lib::DESKTOP, rlz_lib::GD_DESKBAND, |
| // rlz_lib::INSTALL); |
| // |
| // In particular, this affects the recording of stateful events and the sending |
| // of financial pings. In the former case, a stateful event recorded while |
| // scoped to a supplementary brand will be recorded again when scoped to a |
| // different supplementary brand (or not scoped at all). In the latter case, |
| // the time skip check is specific to each supplementary brand. |
| class SupplementaryBranding { |
| public: |
| explicit SupplementaryBranding(const char* brand); |
| ~SupplementaryBranding(); |
| |
| static const std::string& GetBrand(); |
| |
| private: |
| raw_ptr<ScopedRlzValueStoreLock> lock_; |
| }; |
| |
| } // namespace rlz_lib |
| |
| #endif // RLZ_LIB_SUPPLEMENTARY_BRANDING_H_ |