summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-16 11:19:49 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-16 11:07:37 +0000
commit9bab2acc924790b0a01a08e76f9216acc2d6528b (patch)
treedf7a9ce6407cd33f6ebb86d015d9174534eaaab5
parent81d2b329ec8eeab9212214fdaba00cf61ae232eb (diff)
downloadqtwebengine-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>
-rw-r--r--chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp2
-rw-r--r--chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp21
-rw-r--r--chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h21
-rw-r--r--chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp19
-rw-r--r--chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp19
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);
}