| // Copyright (c) 2012 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. |
| |
| // The methods in this file belong conceptually to rlz_lib.cc. However, some |
| // programs depend on rlz only to call ClearAllProductEvents(), so this file |
| // contains this in fairly self-contained form to make it easier for linkers |
| // to strip away most of rlz. In particular, this file should not reference any |
| // symbols defined in financial_ping.cc. |
| |
| #include "rlz/lib/rlz_lib.h" |
| |
| #include "base/lazy_instance.h" |
| #include "rlz/lib/assert.h" |
| #include "rlz/lib/rlz_value_store.h" |
| |
| namespace rlz_lib { |
| |
| bool ClearAllProductEvents(Product product) { |
| rlz_lib::ScopedRlzValueStoreLock lock; |
| rlz_lib::RlzValueStore* store = lock.GetStore(); |
| if (!store || !store->HasAccess(rlz_lib::RlzValueStore::kWriteAccess)) |
| return false; |
| |
| bool result; |
| result = store->ClearAllProductEvents(product); |
| result &= store->ClearAllStatefulEvents(product); |
| return result; |
| } |
| |
| void ClearProductState(Product product, const AccessPoint* access_points) { |
| rlz_lib::ScopedRlzValueStoreLock lock; |
| rlz_lib::RlzValueStore* store = lock.GetStore(); |
| if (!store || !store->HasAccess(rlz_lib::RlzValueStore::kWriteAccess)) |
| return; |
| |
| // Delete all product specific state. |
| VERIFY(ClearAllProductEvents(product)); |
| VERIFY(store->ClearPingTime(product)); |
| |
| // Delete all RLZ's for access points being uninstalled. |
| if (access_points) { |
| for (int i = 0; access_points[i] != NO_ACCESS_POINT; i++) { |
| VERIFY(store->ClearAccessPointRlz(access_points[i])); |
| } |
| } |
| |
| store->CollectGarbage(); |
| } |
| |
| static base::LazyInstance<std::string>::Leaky g_supplemental_branding; |
| |
| SupplementaryBranding::SupplementaryBranding(const char* brand) |
| : lock_(new ScopedRlzValueStoreLock) { |
| if (!lock_->GetStore()) |
| return; |
| |
| if (!g_supplemental_branding.Get().empty()) { |
| ASSERT_STRING("ProductBranding: existing brand is not empty"); |
| return; |
| } |
| |
| if (brand == NULL || brand[0] == 0) { |
| ASSERT_STRING("ProductBranding: new brand is empty"); |
| return; |
| } |
| |
| g_supplemental_branding.Get() = brand; |
| } |
| |
| SupplementaryBranding::~SupplementaryBranding() { |
| if (lock_->GetStore()) |
| g_supplemental_branding.Get().clear(); |
| delete lock_; |
| } |
| |
| // static |
| const std::string& SupplementaryBranding::GetBrand() { |
| return g_supplemental_branding.Get(); |
| } |
| |
| } // namespace rlz_lib |