Home | History | Annotate | Download | only in predictors
      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 
     11 namespace sql {
     12 class Connection;
     13 }
     14 
     15 namespace 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.
     21 class 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