From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- .../WebCore/Modules/webdatabase/DatabaseManager.h | 131 +++++---------------- 1 file changed, 31 insertions(+), 100 deletions(-) (limited to 'Source/WebCore/Modules/webdatabase/DatabaseManager.h') 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 +#include "ExceptionOr.h" #include #include #include -#include +#include #include 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; 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 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(ScriptExecutionContext&); -#if !ASSERT_DISABLED - void didConstructDatabaseContext(); - void didDestructDatabaseContext(); -#else - void didConstructDatabaseContext() { } - void didDestructDatabaseContext() { } -#endif + ExceptionOr> openDatabase(ScriptExecutionContext&, const String& name, const String& expectedVersion, const String& displayName, unsigned estimatedSize, RefPtr&&); - static ExceptionCode exceptionCodeForDatabaseError(DatabaseError); + WEBCORE_EXPORT bool hasOpenDatabases(ScriptExecutionContext&); + void stopDatabases(ScriptExecutionContext&, DatabaseTaskSynchronizer*); - PassRefPtr openDatabase(ScriptExecutionContext*, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, PassRefPtr, DatabaseError&); - PassRefPtr openDatabaseSync(ScriptExecutionContext*, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, PassRefPtr, 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>& result); - bool databaseNamesForOrigin(SecurityOrigin*, Vector& 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> openDatabaseBackend(ScriptExecutionContext&, const String& name, const String& expectedVersion, const String& displayName, unsigned estimatedSize, bool setVersionInNewDatabase); + ExceptionOr> 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 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 existingDatabaseContextFor(ScriptExecutionContext*); - - PassRefPtr 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 ContextMap; - ContextMap m_contextMap; -#if !ASSERT_DISABLED - int m_databaseContextRegisteredCount; - int m_databaseContextInstanceCount; -#endif + Lock m_proposedDatabasesMutex; HashSet m_proposedDatabases; - - // This mutex protects m_contextMap, and m_proposedDatabases. - std::mutex m_mutex; }; } // namespace WebCore - -#endif // ENABLE(SQL_DATABASE) - -#endif // DatabaseManager_h -- cgit v1.2.1