1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/extensions/activity_log/ad_network_database.h" 6 7#include "base/lazy_instance.h" 8#include "chrome/browser/extensions/activity_log/hashed_ad_network_database.h" 9 10namespace extensions { 11 12namespace { 13 14class AdNetworkDatabaseFactory { 15 public: 16 AdNetworkDatabaseFactory(); 17 ~AdNetworkDatabaseFactory(); 18 19 const AdNetworkDatabase* GetDatabase(); 20 void SetDatabase(scoped_ptr<AdNetworkDatabase> database); 21 22 private: 23 scoped_ptr<AdNetworkDatabase> database_; 24}; 25 26AdNetworkDatabaseFactory::AdNetworkDatabaseFactory() {} 27AdNetworkDatabaseFactory::~AdNetworkDatabaseFactory() {} 28 29const AdNetworkDatabase* AdNetworkDatabaseFactory::GetDatabase() { 30 // Construct a new database, if we don't have one. 31 if (!database_.get()) 32 database_.reset(new HashedAdNetworkDatabase()); 33 34 return database_.get(); 35} 36 37void AdNetworkDatabaseFactory::SetDatabase( 38 scoped_ptr<AdNetworkDatabase> database) { 39 database_.reset(database.release()); 40} 41 42base::LazyInstance<AdNetworkDatabaseFactory> g_factory = 43 LAZY_INSTANCE_INITIALIZER; 44 45} // namespace 46 47AdNetworkDatabase::~AdNetworkDatabase() {} 48 49// static 50const AdNetworkDatabase* AdNetworkDatabase::Get() { 51 return g_factory.Get().GetDatabase(); 52} 53 54// static 55void AdNetworkDatabase::SetForTesting(scoped_ptr<AdNetworkDatabase> database) { 56 g_factory.Get().SetDatabase(database.Pass()); 57} 58 59} // namespace extensions 60