// 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