summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/webdatabase/DatabaseManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/Modules/webdatabase/DatabaseManager.h')
-rw-r--r--Source/WebCore/Modules/webdatabase/DatabaseManager.h131
1 files changed, 31 insertions, 100 deletions
diff --git a/Source/WebCore/Modules/webdatabase/DatabaseManager.h b/Source/WebCore/Modules/webdatabase/DatabaseManager.h
index 805b32c94..2ca2d077c 100644
--- a/Source/WebCore/Modules/webdatabase/DatabaseManager.h
+++ b/Source/WebCore/Modules/webdatabase/DatabaseManager.h
@@ -20,144 +20,75 @@
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef DatabaseManager_h
-#define DatabaseManager_h
+#pragma once
-#if ENABLE(SQL_DATABASE)
-
-#include "DatabaseBasicTypes.h"
#include "DatabaseDetails.h"
-#include "DatabaseError.h"
-#include <mutex>
+#include "ExceptionOr.h"
#include <wtf/Assertions.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
-#include <wtf/PassRefPtr.h>
+#include <wtf/Lock.h>
#include <wtf/Threading.h>
namespace WebCore {
-class AbstractDatabaseServer;
class Database;
-class DatabaseBackendBase;
class DatabaseCallback;
class DatabaseContext;
class DatabaseManagerClient;
-class DatabaseSync;
class DatabaseTaskSynchronizer;
+class Exception;
class SecurityOrigin;
class ScriptExecutionContext;
+struct SecurityOriginData;
class DatabaseManager {
- WTF_MAKE_NONCOPYABLE(DatabaseManager); WTF_MAKE_FAST_ALLOCATED;
+ WTF_MAKE_NONCOPYABLE(DatabaseManager);
+ friend class WTF::NeverDestroyed<DatabaseManager>;
public:
- static DatabaseManager& manager();
+ WEBCORE_EXPORT static DatabaseManager& singleton();
- void initialize(const String& databasePath);
- void setClient(DatabaseManagerClient*);
- String databaseDirectoryPath() const;
- void setDatabaseDirectoryPath(const String&);
+ WEBCORE_EXPORT void initialize(const String& databasePath);
+ WEBCORE_EXPORT void setClient(DatabaseManagerClient*);
bool isAvailable();
- void setIsAvailable(bool);
+ WEBCORE_EXPORT void setIsAvailable(bool);
// This gets a DatabaseContext for the specified ScriptExecutionContext.
// If one doesn't already exist, it will create a new one.
- PassRefPtr<DatabaseContext> databaseContextFor(ScriptExecutionContext*);
-
- // These 2 methods are for DatabaseContext (un)registration, and should only
- // be called by the DatabaseContext constructor and destructor.
- void registerDatabaseContext(DatabaseContext*);
- void unregisterDatabaseContext(DatabaseContext*);
+ Ref<DatabaseContext> databaseContext(ScriptExecutionContext&);
-#if !ASSERT_DISABLED
- void didConstructDatabaseContext();
- void didDestructDatabaseContext();
-#else
- void didConstructDatabaseContext() { }
- void didDestructDatabaseContext() { }
-#endif
+ ExceptionOr<Ref<Database>> openDatabase(ScriptExecutionContext&, const String& name, const String& expectedVersion, const String& displayName, unsigned estimatedSize, RefPtr<DatabaseCallback>&&);
- static ExceptionCode exceptionCodeForDatabaseError(DatabaseError);
+ WEBCORE_EXPORT bool hasOpenDatabases(ScriptExecutionContext&);
+ void stopDatabases(ScriptExecutionContext&, DatabaseTaskSynchronizer*);
- PassRefPtr<Database> openDatabase(ScriptExecutionContext*, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, PassRefPtr<DatabaseCallback>, DatabaseError&);
- PassRefPtr<DatabaseSync> openDatabaseSync(ScriptExecutionContext*, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, PassRefPtr<DatabaseCallback>, DatabaseError&);
+ String fullPathForDatabase(SecurityOrigin&, const String& name, bool createIfDoesNotExist = true);
- bool hasOpenDatabases(ScriptExecutionContext*);
- void stopDatabases(ScriptExecutionContext*, DatabaseTaskSynchronizer*);
+ WEBCORE_EXPORT DatabaseDetails detailsForNameAndOrigin(const String&, SecurityOrigin&);
- String fullPathForDatabase(SecurityOrigin*, const String& name, bool createIfDoesNotExist = true);
-
- bool hasEntryForOrigin(SecurityOrigin*);
- void origins(Vector<RefPtr<SecurityOrigin>>& result);
- bool databaseNamesForOrigin(SecurityOrigin*, Vector<String>& result);
- DatabaseDetails detailsForNameAndOrigin(const String&, SecurityOrigin*);
+private:
+ DatabaseManager() = default;
+ ~DatabaseManager() = delete;
- unsigned long long usageForOrigin(SecurityOrigin*);
- unsigned long long quotaForOrigin(SecurityOrigin*);
+ enum OpenAttempt { FirstTryToOpenDatabase, RetryOpenDatabase };
+ ExceptionOr<Ref<Database>> openDatabaseBackend(ScriptExecutionContext&, const String& name, const String& expectedVersion, const String& displayName, unsigned estimatedSize, bool setVersionInNewDatabase);
+ ExceptionOr<Ref<Database>> tryToOpenDatabaseBackend(ScriptExecutionContext&, const String& name, const String& expectedVersion, const String& displayName, unsigned estimatedSize, bool setVersionInNewDatabase, OpenAttempt);
- void setQuota(SecurityOrigin*, unsigned long long);
+ class ProposedDatabase;
+ void addProposedDatabase(ProposedDatabase&);
+ void removeProposedDatabase(ProposedDatabase&);
- void deleteAllDatabases();
- bool deleteOrigin(SecurityOrigin*);
- bool deleteDatabase(SecurityOrigin*, const String& name);
+ static void logErrorMessage(ScriptExecutionContext&, const String& message);
- void interruptAllDatabasesForContext(ScriptExecutionContext*);
+ DatabaseManagerClient* m_client { nullptr };
+ bool m_databaseIsAvailable { true };
-private:
- class ProposedDatabase {
- public:
- ProposedDatabase(DatabaseManager&, SecurityOrigin*,
- const String& name, const String& displayName, unsigned long estimatedSize);
- ~ProposedDatabase();
-
- SecurityOrigin* origin() { return m_origin.get(); }
- DatabaseDetails& details() { return m_details; }
-
- private:
- DatabaseManager& m_manager;
- RefPtr<SecurityOrigin> m_origin;
- DatabaseDetails m_details;
- };
-
- DatabaseManager();
- ~DatabaseManager() { }
-
- // This gets a DatabaseContext for the specified ScriptExecutionContext if
- // it already exist previously. Otherwise, it returns 0.
- PassRefPtr<DatabaseContext> existingDatabaseContextFor(ScriptExecutionContext*);
-
- PassRefPtr<DatabaseBackendBase> openDatabaseBackend(ScriptExecutionContext*,
- DatabaseType, const String& name, const String& expectedVersion, const String& displayName,
- unsigned long estimatedSize, bool setVersionInNewDatabase, DatabaseError&, String& errorMessage);
-
- void addProposedDatabase(ProposedDatabase*);
- void removeProposedDatabase(ProposedDatabase*);
-
- static void logErrorMessage(ScriptExecutionContext*, const String& message);
-
- AbstractDatabaseServer* m_server;
- DatabaseManagerClient* m_client;
- bool m_databaseIsAvailable;
-
- // Access to the following fields require locking m_lock below:
- typedef HashMap<ScriptExecutionContext*, DatabaseContext*> ContextMap;
- ContextMap m_contextMap;
-#if !ASSERT_DISABLED
- int m_databaseContextRegisteredCount;
- int m_databaseContextInstanceCount;
-#endif
+ Lock m_proposedDatabasesMutex;
HashSet<ProposedDatabase*> m_proposedDatabases;
-
- // This mutex protects m_contextMap, and m_proposedDatabases.
- std::mutex m_mutex;
};
} // namespace WebCore
-
-#endif // ENABLE(SQL_DATABASE)
-
-#endif // DatabaseManager_h