1// Copyright (c) 2012 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#ifndef CHROME_BROWSER_PREDICTORS_PREDICTOR_TABLE_BASE_H_
6#define CHROME_BROWSER_PREDICTORS_PREDICTOR_TABLE_BASE_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/synchronization/cancellation_flag.h"
10
11namespace sql {
12class Connection;
13}
14
15namespace predictors {
16
17// Base class for all tables in the PredictorDatabase.
18//
19// Refcounted as it is created and destroyed in the UI thread but all database
20// related functions need to happen in the database thread.
21class PredictorTableBase
22    : public base::RefCountedThreadSafe<PredictorTableBase> {
23 protected:
24  PredictorTableBase();
25  virtual ~PredictorTableBase();
26
27  // DB thread functions.
28  virtual void CreateTableIfNonExistent() = 0;
29  virtual void LogDatabaseStats() = 0;
30  void Initialize(sql::Connection* db);
31  void SetCancelled();
32  sql::Connection* DB();
33  void ResetDB();
34
35  bool CantAccessDatabase();
36
37 private:
38  base::CancellationFlag cancelled_;
39
40  friend class base::RefCountedThreadSafe<PredictorTableBase>;
41
42  sql::Connection* db_;
43
44  DISALLOW_COPY_AND_ASSIGN(PredictorTableBase);
45};
46
47}  // namespace predictors
48
49#endif  // CHROME_BROWSER_PREDICTORS_PREDICTOR_TABLE_BASE_H_
50