// Copyright 2019 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 RLZ_LIB_SUPPLEMENTARY_BRANDING_H_ #define RLZ_LIB_SUPPLEMENTARY_BRANDING_H_ #include #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 lock_; }; } // namespace rlz_lib #endif // RLZ_LIB_SUPPLEMENTARY_BRANDING_H_