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