diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-16 11:19:49 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-16 11:07:37 +0000 |
commit | 9bab2acc924790b0a01a08e76f9216acc2d6528b (patch) | |
tree | df7a9ce6407cd33f6ebb86d015d9174534eaaab5 | |
parent | 81d2b329ec8eeab9212214fdaba00cf61ae232eb (diff) | |
download | qtwebengine-chromium-9bab2acc924790b0a01a08e76f9216acc2d6528b.tar.gz |
[Backport] WebSQL: Explicitly initialize SQLite, remove deprecated API usage.
Change-Id: I291dd041c5646c4fdd714ff98dd939566861d921
Reviewed-on: https://chromium-review.googlesource.com/892092
Task-number: QTBUG-75853
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
5 files changed, 56 insertions, 26 deletions
diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp index 13ea7d81812..f78d90a5df8 100644 --- a/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp +++ b/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp @@ -66,7 +66,7 @@ DatabaseTracker& DatabaseTracker::tracker() { } DatabaseTracker::DatabaseTracker() { - SQLiteFileSystem::registerSQLiteVFS(); + SQLiteFileSystem::initializeSQLite(); } bool DatabaseTracker::canEstablishDatabase(DatabaseContext* databaseContext, diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp index 9c25341c57b..2a6e140f9e3 100644 --- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp +++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp @@ -39,9 +39,28 @@ // platform-specific files SQLiteFileSystemChromium{Win|Posix}.cpp namespace blink { -SQLiteFileSystem::SQLiteFileSystem() {} +#if DCHECK_IS_ON() +// static +bool SQLiteFileSystem::initialize_sqlite_called_ = false; +#endif // DCHECK_IS_ON +// static +void SQLiteFileSystem::initializeSQLite() { +#if DCHECK_IS_ON() + DCHECK(!initialize_sqlite_called_) << __func__ << " already called"; + initialize_sqlite_called_ = true; +#endif // DCHECK_IS_ON() + + sqlite3_initialize(); + registerSQLiteVFS(); +} + +// static int SQLiteFileSystem::openDatabase(const String& filename, sqlite3** database) { +#if DCHECK_IS_ON() + DCHECK(initialize_sqlite_called_) + << "InitializeSQLite() must be called before " << __func__; +#endif // DCHECK_IS_ON() SafePointScope scope(BlinkGC::HeapPointersOnStack); return sqlite3_open_v2(filename.utf8().data(), database, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h index 97c0ad83a17..af2bcd92112 100644 --- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h +++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h @@ -42,22 +42,31 @@ namespace blink { // A class that abstracts the file system related operations required // by the WebKit database code. class SQLiteFileSystem { - DISALLOW_NEW(); - public: - // Registers a user-defined SQLite VFS. - static void registerSQLiteVFS(); + // This class is used as a namespace, so instantiating it doesn't make sense. + SQLiteFileSystem() = delete; + + // Initializes SQLite for Blink's use. + // + // This must be called exactly once in each renderer process that uses SQLite. + static void initializeSQLite(); // Opens a database file. // + // initializeSQLite() must be called before this method is called. + // // filemame - The name of the database file. // database - The SQLite structure that represents the database stored // in the given file. static int openDatabase(const String& filename, sqlite3** database); private: - // do not instantiate this class - SQLiteFileSystem(); + // Registers Chromium's VFS with SQLite. + static void registerSQLiteVFS(); + +#if DCHECK_IS_ON() + static bool initialize_sqlite_called_; +#endif // DCHECK_IS_ON() }; // class SQLiteFileSystem } // namespace blink diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp index 77e7b6d9044..20d0fd2e0ea 100644 --- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp +++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp @@ -321,11 +321,6 @@ int chromiumSleep(sqlite3_vfs* vfs, int microseconds) { return wrappedVfs->xSleep(wrappedVfs, microseconds); } -int chromiumCurrentTime(sqlite3_vfs* vfs, double* prNow) { - sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); - return wrappedVfs->xCurrentTime(wrappedVfs, prNow); -} - int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) { // xGetLastError() has never been used by SQLite. The implementation in // os_win.c indicates this is a reasonable implementation. @@ -333,6 +328,11 @@ int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) { return 0; } +int chromiumCurrentTimeInt64(sqlite3_vfs* vfs, sqlite3_int64* now) { + sqlite3_vfs* wrapped_vfs = static_cast<sqlite3_vfs*>(vfs->pAppData); + return wrapped_vfs->xCurrentTimeInt64(wrapped_vfs, now); +} + } // namespace void SQLiteFileSystem::registerSQLiteVFS() { @@ -342,9 +342,9 @@ void SQLiteFileSystem::registerSQLiteVFS() { // TODO(shess): Implement local versions. ASSERT(wrappedVfs->xRandomness); ASSERT(wrappedVfs->xSleep); - ASSERT(wrappedVfs->xCurrentTime); + ASSERT(wrappedVfs->xCurrentTimeInt64); - static sqlite3_vfs chromium_vfs = {1, + static sqlite3_vfs chromium_vfs = {2, sizeof(chromiumVfsFile), wrappedVfs->mxPathname, 0, @@ -360,8 +360,9 @@ void SQLiteFileSystem::registerSQLiteVFS() { chromiumDlClose, chromiumRandomness, chromiumSleep, - chromiumCurrentTime, - chromiumGetLastError}; + nullptr, // CurrentTime is deprecated. + chromiumGetLastError, + chromiumCurrentTimeInt64}; sqlite3_vfs_register(&chromium_vfs, 0); } diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp index 2933df65f63..31103047fd6 100644 --- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp +++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp @@ -148,11 +148,6 @@ int chromiumSleep(sqlite3_vfs* vfs, int microseconds) { return wrappedVfs->xSleep(wrappedVfs, microseconds); } -int chromiumCurrentTime(sqlite3_vfs* vfs, double* prNow) { - sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); - return wrappedVfs->xCurrentTime(wrappedVfs, prNow); -} - int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) { // xGetLastError() has never been used by SQLite. The implementation in // os_win.c indicates this is a reasonable implementation. @@ -160,6 +155,11 @@ int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) { return 0; } +int chromiumCurrentTimeInt64(sqlite3_vfs* vfs, sqlite3_int64* now) { + sqlite3_vfs* wrapped_vfs = static_cast<sqlite3_vfs*>(vfs->pAppData); + return wrapped_vfs->xCurrentTimeInt64(wrapped_vfs, now); +} + } // namespace void SQLiteFileSystem::registerSQLiteVFS() { @@ -169,9 +169,9 @@ void SQLiteFileSystem::registerSQLiteVFS() { // TODO(shess): Implement local versions. ASSERT(wrappedVfs->xRandomness); ASSERT(wrappedVfs->xSleep); - ASSERT(wrappedVfs->xCurrentTime); + ASSERT(wrappedVfs->xCurrentTimeInt64); - static sqlite3_vfs chromium_vfs = {1, + static sqlite3_vfs chromium_vfs = {2, wrappedVfs->szOsFile, wrappedVfs->mxPathname, 0, @@ -187,8 +187,9 @@ void SQLiteFileSystem::registerSQLiteVFS() { chromiumDlClose, chromiumRandomness, chromiumSleep, - chromiumCurrentTime, - chromiumGetLastError}; + nullptr, // CurrentTime is deprecated. + chromiumGetLastError, + chromiumCurrentTimeInt64}; sqlite3_vfs_register(&chromium_vfs, 0); } |