// 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.

#ifndef CHROME_BROWSER_PREDICTORS_PREDICTOR_TABLE_BASE_H_
#define CHROME_BROWSER_PREDICTORS_PREDICTOR_TABLE_BASE_H_

#include "base/memory/ref_counted.h"
#include "base/synchronization/cancellation_flag.h"

namespace sql {
class Connection;
}

namespace predictors {

// Base class for all tables in the PredictorDatabase.
//
// Refcounted as it is created and destroyed in the UI thread but all database
// related functions need to happen in the database thread.
class PredictorTableBase
    : public base::RefCountedThreadSafe<PredictorTableBase> {
 protected:
  PredictorTableBase();
  virtual ~PredictorTableBase();

  // DB thread functions.
  virtual void CreateTableIfNonExistent() = 0;
  virtual void LogDatabaseStats() = 0;
  void Initialize(sql::Connection* db);
  void SetCancelled();
  sql::Connection* DB();
  void ResetDB();

  bool CantAccessDatabase();

 private:
  base::CancellationFlag cancelled_;

  friend class base::RefCountedThreadSafe<PredictorTableBase>;

  sql::Connection* db_;

  DISALLOW_COPY_AND_ASSIGN(PredictorTableBase);
};

}  // namespace predictors

#endif  // CHROME_BROWSER_PREDICTORS_PREDICTOR_TABLE_BASE_H_
