diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-21 14:10:52 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-21 14:10:52 +0000 |
commit | 0a5e34a5386fa254a3b133f0a5f7667f1f790f67 (patch) | |
tree | d1dd0e80264f900004c56ad5ce6b56efea0bec49 /rlz/lib/rlz_lib_clear.cc | |
parent | b049c382ff842f546e2bcc261ce23438bc8764bf (diff) | |
download | chromium_src-0a5e34a5386fa254a3b133f0a5f7667f1f790f67.zip chromium_src-0a5e34a5386fa254a3b133f0a5f7667f1f790f67.tar.gz chromium_src-0a5e34a5386fa254a3b133f0a5f7667f1f790f67.tar.bz2 |
Check-in rlz code to src\rlz from http://code.google.com/p/rlz/.
Review URL: https://chromiumcodereview.appspot.com/10597002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@143381 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'rlz/lib/rlz_lib_clear.cc')
-rw-r--r-- | rlz/lib/rlz_lib_clear.cc | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/rlz/lib/rlz_lib_clear.cc b/rlz/lib/rlz_lib_clear.cc new file mode 100644 index 0000000..0dd13a4 --- /dev/null +++ b/rlz/lib/rlz_lib_clear.cc @@ -0,0 +1,82 @@ +// 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 |