Title: [163287] trunk/Source
Revision
163287
Author
beid...@apple.com
Date
2014-02-02 22:19:25 -0800 (Sun, 02 Feb 2014)

Log Message

IDB: Cannot open new databases with the default version
https://bugs.webkit.org/show_bug.cgi?id=128096

Reviewed by Tim Horton.

Source/WebCore:

* Modules/indexeddb/IDBDatabaseBackend.cpp:
(WebCore::IDBDatabaseBackend::openConnectionInternal): Update logic to handle the
  current version being NoIntVersion.

* Modules/indexeddb/IDBTransactionBackendOperations.cpp:
(WebCore::IDBDatabaseBackend::VersionChangeOperation::perform): Update ASSERT.

Source/WebKit2:

* DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
(WebKit::UniqueIDBDatabaseBackingStoreSQLite::createAndPopulateInitialMetadata): New databases should
  have the magic "no version set" version.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (163286 => 163287)


--- trunk/Source/WebCore/ChangeLog	2014-02-03 06:18:12 UTC (rev 163286)
+++ trunk/Source/WebCore/ChangeLog	2014-02-03 06:19:25 UTC (rev 163287)
@@ -1,3 +1,17 @@
+2014-02-02  Brady Eidson  <beid...@apple.com>
+
+        IDB: Cannot open new databases with the default version
+        https://bugs.webkit.org/show_bug.cgi?id=128096
+
+        Reviewed by Tim Horton.
+
+        * Modules/indexeddb/IDBDatabaseBackend.cpp:
+        (WebCore::IDBDatabaseBackend::openConnectionInternal): Update logic to handle the
+          current version being NoIntVersion.
+
+        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
+        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform): Update ASSERT.
+
 2014-02-02  Darin Adler  <da...@apple.com>
 
         Fix context save/restore mistake spotted in SVGInlineTextBox::paintTextWithShadows

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp (163286 => 163287)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp	2014-02-03 06:18:12 UTC (rev 163286)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp	2014-02-03 06:19:25 UTC (rev 163287)
@@ -463,31 +463,26 @@
     RefPtr<IDBCallbacks> callbacks = prpCallbacks;
     RefPtr<IDBDatabaseCallbacks> databaseCallbacks = prpDatabaseCallbacks;
 
-    // We infer that the database didn't exist from its lack of either type of version.
+    // We infer that the database didn't exist from its lack of version.
     bool isNewDatabase = m_metadata.version == IDBDatabaseMetadata::NoIntVersion;
 
-    if (version == IDBDatabaseMetadata::DefaultIntVersion) {
+    if (version == IDBDatabaseMetadata::DefaultIntVersion && !isNewDatabase) {
         m_databaseCallbacksSet.add(databaseCallbacks);
         callbacks->onSuccess(this, this->metadata());
         return;
     }
 
-    if (version == IDBDatabaseMetadata::NoIntVersion) {
-        if (!isNewDatabase) {
-            m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(databaseCallbacks));
-            callbacks->onSuccess(this, this->metadata());
-            return;
-        }
+    if (isNewDatabase && version == IDBDatabaseMetadata::DefaultIntVersion) {
         // Spec says: If no version is specified and no database exists, set database version to 1.
         version = 1;
     }
 
-    if (version > m_metadata.version) {
+    if (version > m_metadata.version || m_metadata.version == IDBDatabaseMetadata::NoIntVersion) {
         runIntVersionChangeTransaction(callbacks, databaseCallbacks, transactionId, version);
         return;
     }
 
-    if (version < m_metadata.version) {
+    if (version < m_metadata.version && m_metadata.version != IDBDatabaseMetadata::NoIntVersion) {
         callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::VersionError, String::format("The requested version (%llu) is less than the existing version (%llu).", static_cast<unsigned long long>(version), static_cast<unsigned long long>(m_metadata.version))));
         return;
     }

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp (163286 => 163287)


--- trunk/Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp	2014-02-03 06:18:12 UTC (rev 163286)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp	2014-02-03 06:19:25 UTC (rev 163287)
@@ -243,7 +243,7 @@
 
     uint64_t oldVersion = m_transaction->database().metadata().version;
     RefPtr<IDBDatabaseBackend::VersionChangeOperation> operation(this);
-    ASSERT(static_cast<uint64_t>(m_version) > oldVersion);
+    ASSERT(static_cast<uint64_t>(m_version) > oldVersion || oldVersion == IDBDatabaseMetadata::NoIntVersion);
 
     std::function<void(PassRefPtr<IDBDatabaseError>)> operationCallback = [oldVersion, operation, this, completionCallback](PassRefPtr<IDBDatabaseError> prpError) {
         RefPtr<IDBDatabaseError> error = prpError;

Modified: trunk/Source/WebKit2/ChangeLog (163286 => 163287)


--- trunk/Source/WebKit2/ChangeLog	2014-02-03 06:18:12 UTC (rev 163286)
+++ trunk/Source/WebKit2/ChangeLog	2014-02-03 06:19:25 UTC (rev 163287)
@@ -1,3 +1,14 @@
+2014-02-02  Brady Eidson  <beid...@apple.com>
+
+        IDB: Cannot open new databases with the default version
+        https://bugs.webkit.org/show_bug.cgi?id=128096
+
+        Reviewed by Tim Horton.
+
+        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
+        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createAndPopulateInitialMetadata): New databases should
+          have the magic "no version set" version.
+
 2014-02-02  Sanghyup Lee  <sh53....@samsung.com>
 
         [EFL][WK2] Add a logic for checking multi touch in GestureRecognizer::noGesture

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp (163286 => 163287)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp	2014-02-03 06:18:12 UTC (rev 163286)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp	2014-02-03 06:19:25 UTC (rev 163287)
@@ -140,7 +140,7 @@
         // Therefore we'll store the version as a String.
         SQLiteStatement sql(*m_sqliteDB, ASCIILiteral("INSERT INTO IDBDatabaseInfo VALUES ('DatabaseVersion', ?);"));
         if (sql.prepare() != SQLResultOk
-            || sql.bindText(1, String::number(0)) != SQLResultOk
+            || sql.bindText(1, String::number(IDBDatabaseMetadata::NoIntVersion)) != SQLResultOk
             || sql.step() != SQLResultDone) {
             LOG_ERROR("Could not insert default version into IDBDatabaseInfo table (%i) - %s", m_sqliteDB->lastError(), m_sqliteDB->lastErrorMsg());
             m_sqliteDB = nullptr;
@@ -157,7 +157,7 @@
     // This initial metadata matches the default values we just put into the metadata database.
     auto metadata = std::make_unique<IDBDatabaseMetadata>();
     metadata->name = m_identifier.databaseName();
-    metadata->version = 0;
+    metadata->version = IDBDatabaseMetadata::NoIntVersion;
     metadata->maxObjectStoreId = 1;
 
     return metadata;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to