Index: rlz/lib/rlz_lib_clear.cc |
=================================================================== |
--- rlz/lib/rlz_lib_clear.cc (revision 0) |
+++ rlz/lib/rlz_lib_clear.cc (revision 0) |
@@ -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 |