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