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