| // Copyright 2011 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_TABLE_H_ |
| #define COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_TABLE_H_ |
| |
| #include "base/memory/raw_ptr.h" |
| #include "components/webdata/common/webdata_export.h" |
| |
| namespace os_crypt_async { |
| class Encryptor; |
| } |
| |
| namespace sql { |
| class Database; |
| class MetaTable; |
| } // namespace sql |
| |
| // An abstract base class representing a table within a WebDatabase. |
| // Each table should subclass this, adding type-specific methods as needed. |
| class WEBDATA_EXPORT WebDatabaseTable { |
| public: |
| // To look up a WebDatabaseTable of a certain type from WebDatabase, |
| // we use a void* key, so that we can simply use the address of one |
| // of the type's statics. |
| typedef void* TypeKey; |
| |
| // The object is not ready for use until Init() has been called. |
| WebDatabaseTable(); |
| |
| WebDatabaseTable(const WebDatabaseTable&) = delete; |
| WebDatabaseTable& operator=(const WebDatabaseTable&) = delete; |
| |
| virtual ~WebDatabaseTable(); |
| |
| // Retrieves the TypeKey for the concrete subtype. |
| virtual TypeKey GetTypeKey() const = 0; |
| |
| // Stores the passed members as instance variables. |
| void Init(sql::Database* db, |
| sql::MetaTable* meta_table, |
| const os_crypt_async::Encryptor* encryptor); |
| |
| // Resets the members stored during `Init()`. |
| void Shutdown(); |
| |
| // Create all of the expected SQL tables if they do not already exist. |
| // Returns true on success, false on failure. |
| virtual bool CreateTablesIfNecessary() = 0; |
| |
| // Migrates this table to |version|. Returns false if there was |
| // migration work to do and it failed, true otherwise. |
| // |
| // Implementations may set |*update_compatible_version| to true if the |
| // compatible version should be changed to |version|, i.e., if the change will |
| // break previous versions when they try to use the updated database. |
| // Implementations should otherwise not modify this parameter. |
| virtual bool MigrateToVersion(int version, |
| bool* update_compatible_version) = 0; |
| |
| protected: |
| sql::Database* db() const { return db_; } |
| |
| sql::MetaTable* meta_table() const { return meta_table_; } |
| |
| const os_crypt_async::Encryptor* encryptor() const { return encryptor_; } |
| |
| private: |
| // Non-null, except before `Init()` and after `Shutdown()`. Effectively, this |
| // means that they are non-null except during the constructor and destructor. |
| // They point to objects owned by `WebDatabase` whose lifetime is slightly |
| // shorter than that of the `WebDatabaseBackend` owning `this`. |
| raw_ptr<sql::Database> db_; |
| raw_ptr<sql::MetaTable> meta_table_; |
| // Non-null, except before `Init()` and after `Shutdown()`. This object is |
| // owned by the `WebdatabaseBackend` owning `this`. |
| raw_ptr<const os_crypt_async::Encryptor> encryptor_; |
| }; |
| |
| #endif // COMPONENTS_WEBDATA_COMMON_WEB_DATABASE_TABLE_H_ |