1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
|
From 9bab2acc924790b0a01a08e76f9216acc2d6528b Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@qt.io>
Date: Thu, 16 May 2019 11:19:49 +0200
Subject: [Backport] WebSQL: Explicitly initialize SQLite, remove deprecated
API usage.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Change-Id: I291dd041c5646c4fdd714ff98dd939566861d921
Reviewed-on: https://chromium-review.googlesource.com/892092
Task-number: QTBUG-75853
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
---
.../Source/modules/webdatabase/DatabaseTracker.cpp | 2 +-
.../modules/webdatabase/sqlite/SQLiteFileSystem.cpp | 21 ++++++++++++++++++++-
.../modules/webdatabase/sqlite/SQLiteFileSystem.h | 21 +++++++++++++++------
.../webdatabase/sqlite/SQLiteFileSystemPosix.cpp | 19 ++++++++++---------
.../webdatabase/sqlite/SQLiteFileSystemWin.cpp | 19 ++++++++++---------
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 13ea7d8181..f78d90a5df 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 9c25341c57..2a6e140f9e 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 97c0ad83a1..af2bcd9211 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 77e7b6d904..20d0fd2e0e 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 2933df65f6..31103047fd 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);
}
--
cgit v1.2.1
|