1 // Copyright (c) 2011 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.
5 #ifndef COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_TABLE_H_
6 #define COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_TABLE_H_
8 #include "base/logging.h"
9 #include "components/webdata/common/webdata_export.h"
16 // An abstract base class representing a table within a WebDatabase.
17 // Each table should subclass this, adding type-specific methods as needed.
18 class WEBDATA_EXPORT WebDatabaseTable {
20 // To look up a WebDatabaseTable of a certain type from WebDatabase,
21 // we use a void* key, so that we can simply use the address of one
22 // of the type's statics.
23 typedef void* TypeKey;
25 // The object is not ready for use until Init() has been called.
27 virtual ~WebDatabaseTable();
29 // Retrieves the TypeKey for the concrete subtype.
30 virtual TypeKey GetTypeKey() const = 0;
32 // Attempts to initialize the table and returns true if successful.
34 // The base class stores the members passed and always return true;
35 // subclasses may perform other initialization as needed.
36 virtual bool Init(sql::Connection* db, sql::MetaTable* meta_table);
38 // In order to encourage developers to think about sync when adding or
39 // or altering new tables, this method must be implemented. Please get in
40 // contact with the sync team if you believe you're making a change that they
41 // should be aware of (or if you could break something).
42 // TODO(andybons): Implement something more robust.
43 virtual bool IsSyncable() = 0;
45 // Migrates this table to |version|. Returns false if there was
46 // migration work to do and it failed, true otherwise.
48 // Implementations may set |*update_compatible_version| to true if
49 // the compatible version should be changed to |version|.
50 // Implementations should otherwise not modify this parameter.
51 virtual bool MigrateToVersion(int version,
52 bool* update_compatible_version) = 0;
55 // Non-owning. These are owned by WebDatabase, valid as long as that
56 // class exists. Since lifetime of WebDatabaseTable objects slightly
57 // exceeds that of WebDatabase, they should not be used in
60 sql::MetaTable* meta_table_;
63 DISALLOW_COPY_AND_ASSIGN(WebDatabaseTable);
66 #endif // COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_TABLE_H_