Title: [141142] trunk/Source
Revision
141142
Author
alecfl...@chromium.org
Date
2013-01-29 12:32:51 -0800 (Tue, 29 Jan 2013)

Log Message

IndexedDB: Pass metadata in to IDBOpenDBRequest.onUpgradeNeeded/onSuccess
https://bugs.webkit.org/show_bug.cgi?id=103920

Reviewed by Dimitri Glazkov.

Source/WebCore:

Update IDBCallbacks::onSuccess and IDBCallbacks::onUpgradeNeeded to
pass through a metadata parameter. While there, remove the unused
IDBTransactionBackendInterface parameter to onUpgradeNeeded.

As this is another step in the IDB refactor, I've simplified future cleanup
work by making the WebKit API code still use the old API. This
will make it possible to outright remove code on the chromium side rather
than another three-step checkin.

No new tests, as this is more refactoring.

* Modules/indexeddb/IDBCallbacks.h:
(WebCore::IDBCallbacks::onUpgradeNeeded): new method signature.
(WebCore::IDBCallbacks::onSuccess): new method signature.
* Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
(WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
(WebCore::IDBDatabaseBackendImpl::processPendingCalls):
(WebCore::IDBDatabaseBackendImpl::openConnection):
* Modules/indexeddb/IDBOpenDBRequest.cpp:
(WebCore::IDBOpenDBRequest::onUpgradeNeeded): use passed-in metadata.
(WebCore::IDBOpenDBRequest::onSuccess): use passed-in metadata.
* Modules/indexeddb/IDBOpenDBRequest.h:
(IDBOpenDBRequest):

Source/WebKit/chromium:

Support the new IDBCallbacks::onSuccess and IDBCallbacks::onUpgradeNeeded
while maintaining chromium compatibility by shimming in the old API
in the WebKit side. Future code will clean this up so that it is just a
pass-through as it was before.

* public/WebIDBCallbacks.h:
(WebKit):
(WebKit::WebIDBCallbacks::onSuccess): new method signature.
(WebKit::WebIDBCallbacks::onUpgradeNeeded): new method signature.
* src/IDBCallbacksProxy.cpp:
(WebKit::IDBCallbacksProxy::onSuccess): call on new method signature proxies through old API.
(WebKit):
(WebKit::IDBCallbacksProxy::onUpgradeNeeded): call on new method signature proxies through old API.
* src/IDBCallbacksProxy.h:
(IDBCallbacksProxy):
* src/WebIDBCallbacksImpl.cpp:
(WebKit::WebIDBCallbacksImpl::onSuccess): call on old WebKit proxy signature calls new API.
(WebKit):
(WebKit::WebIDBCallbacksImpl::onUpgradeNeeded): call on old WebKit proxy signature calls new API.
* src/WebIDBCallbacksImpl.h:
(WebIDBCallbacksImpl):
* tests/IDBAbortOnCorruptTest.cpp: new method signature.
(WebCore::MockIDBCallbacks::onSuccess):
* tests/IDBDatabaseBackendTest.cpp: new method signature.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (141141 => 141142)


--- trunk/Source/WebCore/ChangeLog	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebCore/ChangeLog	2013-01-29 20:32:51 UTC (rev 141142)
@@ -1,3 +1,34 @@
+2013-01-29  Alec Flett  <alecfl...@chromium.org>
+
+        IndexedDB: Pass metadata in to IDBOpenDBRequest.onUpgradeNeeded/onSuccess
+        https://bugs.webkit.org/show_bug.cgi?id=103920
+
+        Reviewed by Dimitri Glazkov.
+
+        Update IDBCallbacks::onSuccess and IDBCallbacks::onUpgradeNeeded to
+        pass through a metadata parameter. While there, remove the unused
+        IDBTransactionBackendInterface parameter to onUpgradeNeeded.
+
+        As this is another step in the IDB refactor, I've simplified future cleanup
+        work by making the WebKit API code still use the old API. This
+        will make it possible to outright remove code on the chromium side rather
+        than another three-step checkin.
+
+        No new tests, as this is more refactoring.
+
+        * Modules/indexeddb/IDBCallbacks.h:
+        (WebCore::IDBCallbacks::onUpgradeNeeded): new method signature.
+        (WebCore::IDBCallbacks::onSuccess): new method signature.
+        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
+        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
+        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
+        (WebCore::IDBDatabaseBackendImpl::openConnection):
+        * Modules/indexeddb/IDBOpenDBRequest.cpp:
+        (WebCore::IDBOpenDBRequest::onUpgradeNeeded): use passed-in metadata.
+        (WebCore::IDBOpenDBRequest::onSuccess): use passed-in metadata.
+        * Modules/indexeddb/IDBOpenDBRequest.h:
+        (IDBOpenDBRequest):
+
 2013-01-29  Dirk Schulze  <dschu...@adobe.com>
 
         Canvas support for isPointInStroke

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCallbacks.h (141141 => 141142)


--- trunk/Source/WebCore/Modules/indexeddb/IDBCallbacks.h	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCallbacks.h	2013-01-29 20:32:51 UTC (rev 141142)
@@ -71,8 +71,8 @@
     // From IDBFactory.open()/deleteDatabase()
     virtual void onBlocked(int64_t existingVersion) { ASSERT_NOT_REACHED(); }
     // From IDBFactory.open()
-    virtual void onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBTransactionBackendInterface>, PassRefPtr<IDBDatabaseBackendInterface>) { ASSERT_NOT_REACHED(); }
-    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>) { ASSERT_NOT_REACHED(); }
+    virtual void onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBDatabaseBackendInterface>, const IDBDatabaseMetadata&) { ASSERT_NOT_REACHED(); }
+    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>, const IDBDatabaseMetadata&) { ASSERT_NOT_REACHED(); }
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp (141141 => 141142)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp	2013-01-29 20:32:51 UTC (rev 141142)
@@ -1073,7 +1073,7 @@
     }
     ASSERT(!m_database->m_pendingSecondHalfOpen);
     m_database->m_pendingSecondHalfOpen = PendingOpenCall::create(m_callbacks, m_databaseCallbacks, m_transactionId, m_version);
-    m_callbacks->onUpgradeNeeded(oldVersion, transaction, m_database);
+    m_callbacks->onUpgradeNeeded(oldVersion, m_database, m_database->metadata());
 }
 
 void IDBDatabaseBackendImpl::transactionStarted(PassRefPtr<IDBTransactionBackendImpl> prpTransaction)
@@ -1130,7 +1130,7 @@
     if (m_pendingSecondHalfOpen) {
         ASSERT(m_pendingSecondHalfOpen->version() == m_metadata.intVersion);
         ASSERT(m_metadata.id != InvalidId);
-        m_pendingSecondHalfOpen->callbacks()->onSuccess(this);
+        m_pendingSecondHalfOpen->callbacks()->onSuccess(this, this->metadata());
         m_pendingSecondHalfOpen.release();
         // Fall through when complete, as pending deletes may be (partially) unblocked.
     }
@@ -1211,14 +1211,14 @@
         // For unit tests only - skip upgrade steps. Calling from script with DefaultIntVersion throws exception.
         ASSERT(isNewDatabase);
         m_databaseCallbacksSet.add(databaseCallbacks);
-        callbacks->onSuccess(this);
+        callbacks->onSuccess(this, this->metadata());
         return;
     }
 
     if (version == IDBDatabaseMetadata::NoIntVersion) {
         if (!isNewDatabase) {
             m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(databaseCallbacks));
-            callbacks->onSuccess(this);
+            callbacks->onSuccess(this, this->metadata());
             return;
         }
         // Spec says: If no version is specified and no database exists, set database version to 1.
@@ -1235,7 +1235,7 @@
     }
     ASSERT(version == m_metadata.intVersion);
     m_databaseCallbacksSet.add(databaseCallbacks);
-    callbacks->onSuccess(this);
+    callbacks->onSuccess(this, this->metadata());
 }
 
 void IDBDatabaseBackendImpl::runIntVersionChangeTransaction(PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> prpDatabaseCallbacks, int64_t transactionId, int64_t requestedVersion)

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp (141141 => 141142)


--- trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp	2013-01-29 20:32:51 UTC (rev 141142)
@@ -70,7 +70,7 @@
     enqueueEvent(IDBVersionChangeEvent::create(IDBAny::create(oldVersion), newVersionAny.release(), eventNames().blockedEvent));
 }
 
-void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBTransactionBackendInterface>, PassRefPtr<IDBDatabaseBackendInterface> prpDatabaseBackend)
+void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBDatabaseBackendInterface> prpDatabaseBackend, const IDBDatabaseMetadata& metadata)
 {
     IDB_TRACE("IDBOpenDBRequest::onUpgradeNeeded()");
     if (m_contextStopped || !scriptExecutionContext()) {
@@ -85,9 +85,6 @@
     ASSERT(m_databaseCallbacks);
 
     RefPtr<IDBDatabaseBackendInterface> databaseBackend = prpDatabaseBackend;
-    // FIXME: This potentially expensive (synchronous) call into the backend could be removed if the metadata
-    // were passed in during the (asynchronous) onUpgradeNeeded call from the backend. http://wkbug.com/103920
-    IDBDatabaseMetadata metadata = databaseBackend->metadata();
 
     RefPtr<IDBDatabase> idbDatabase = IDBDatabase::create(scriptExecutionContext(), databaseBackend, m_databaseCallbacks);
     idbDatabase->setMetadata(metadata);
@@ -98,9 +95,10 @@
         // This database hasn't had an integer version before.
         oldVersion = IDBDatabaseMetadata::DefaultIntVersion;
     }
-    metadata.intVersion = oldVersion;
+    IDBDatabaseMetadata oldMetadata(metadata);
+    oldMetadata.intVersion = oldVersion;
 
-    m_transaction = IDBTransaction::create(scriptExecutionContext(), m_transactionId, idbDatabase.get(), this, metadata);
+    m_transaction = IDBTransaction::create(scriptExecutionContext(), m_transactionId, idbDatabase.get(), this, oldMetadata);
     m_result = IDBAny::create(idbDatabase.release());
 
     if (m_version == IDBDatabaseMetadata::NoIntVersion)
@@ -108,16 +106,13 @@
     enqueueEvent(IDBVersionChangeEvent::create(IDBAny::create(oldVersion), IDBAny::create(m_version), eventNames().upgradeneededEvent));
 }
 
-void IDBOpenDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> prpBackend)
+void IDBOpenDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> prpBackend, const IDBDatabaseMetadata& metadata)
 {
     IDB_TRACE("IDBOpenDBRequest::onSuccess()");
     if (!shouldEnqueueEvent())
         return;
 
     RefPtr<IDBDatabaseBackendInterface> backend = prpBackend;
-    // FIXME: This potentially expensive (synchronous) call into the backend could be removed if the metadata
-    // were passed in during the (asynchronous) onSuccess call from the backend. http://wkbug.com/103920
-    IDBDatabaseMetadata metadata = backend->metadata();
     RefPtr<IDBDatabase> idbDatabase;
     if (m_result) {
         idbDatabase = m_result->idbDatabase();

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h (141141 => 141142)


--- trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h	2013-01-29 20:32:51 UTC (rev 141142)
@@ -42,8 +42,8 @@
     using IDBRequest::onSuccess;
 
     virtual void onBlocked(int64_t existingVersion) OVERRIDE;
-    virtual void onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBTransactionBackendInterface>, PassRefPtr<IDBDatabaseBackendInterface>) OVERRIDE;
-    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>) OVERRIDE;
+    virtual void onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBDatabaseBackendInterface>, const IDBDatabaseMetadata&) OVERRIDE;
+    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>, const IDBDatabaseMetadata&) OVERRIDE;
 
     // EventTarget
     virtual const AtomicString& interfaceName() const;

Modified: trunk/Source/WebKit/chromium/ChangeLog (141141 => 141142)


--- trunk/Source/WebKit/chromium/ChangeLog	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/ChangeLog	2013-01-29 20:32:51 UTC (rev 141142)
@@ -1,3 +1,35 @@
+2013-01-29  Alec Flett  <alecfl...@chromium.org>
+
+        IndexedDB: Pass metadata in to IDBOpenDBRequest.onUpgradeNeeded/onSuccess
+        https://bugs.webkit.org/show_bug.cgi?id=103920
+
+        Reviewed by Dimitri Glazkov.
+
+        Support the new IDBCallbacks::onSuccess and IDBCallbacks::onUpgradeNeeded
+        while maintaining chromium compatibility by shimming in the old API
+        in the WebKit side. Future code will clean this up so that it is just a
+        pass-through as it was before.
+
+        * public/WebIDBCallbacks.h:
+        (WebKit):
+        (WebKit::WebIDBCallbacks::onSuccess): new method signature.
+        (WebKit::WebIDBCallbacks::onUpgradeNeeded): new method signature.
+        * src/IDBCallbacksProxy.cpp:
+        (WebKit::IDBCallbacksProxy::onSuccess): call on new method signature proxies through old API.
+        (WebKit):
+        (WebKit::IDBCallbacksProxy::onUpgradeNeeded): call on new method signature proxies through old API.
+        * src/IDBCallbacksProxy.h:
+        (IDBCallbacksProxy):
+        * src/WebIDBCallbacksImpl.cpp:
+        (WebKit::WebIDBCallbacksImpl::onSuccess): call on old WebKit proxy signature calls new API.
+        (WebKit):
+        (WebKit::WebIDBCallbacksImpl::onUpgradeNeeded): call on old WebKit proxy signature calls new API.
+        * src/WebIDBCallbacksImpl.h:
+        (WebIDBCallbacksImpl):
+        * tests/IDBAbortOnCorruptTest.cpp: new method signature.
+        (WebCore::MockIDBCallbacks::onSuccess):
+        * tests/IDBDatabaseBackendTest.cpp: new method signature.
+
 2013-01-29  Alexandre Elias  <ael...@chromium.org>
 
         [chromium] Fix contents size calculation for page scale initialization

Modified: trunk/Source/WebKit/chromium/public/WebIDBCallbacks.h (141141 => 141142)


--- trunk/Source/WebKit/chromium/public/WebIDBCallbacks.h	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/public/WebIDBCallbacks.h	2013-01-29 20:32:51 UTC (rev 141142)
@@ -40,6 +40,7 @@
 class WebIDBIndex;
 class WebIDBTransaction;
 class WebSerializedScriptValue;
+struct WebIDBMetadata;
 
 class WebIDBCallbacks {
 public:
@@ -51,6 +52,7 @@
     virtual void onSuccess(const WebDOMStringList&) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void onSuccess(WebIDBCursor*, const WebIDBKey& key, const WebIDBKey& primaryKey, const WebSerializedScriptValue&) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void onSuccess(WebIDBDatabase*) { WEBKIT_ASSERT_NOT_REACHED(); }
+    virtual void onSuccess(WebIDBDatabase*, const WebIDBMetadata&) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void onSuccess(const WebIDBKey&) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void onSuccess(const WebSerializedScriptValue&) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void onSuccess(const WebSerializedScriptValue&, const WebIDBKey&, const WebIDBKeyPath&) { WEBKIT_ASSERT_NOT_REACHED(); }
@@ -62,6 +64,7 @@
     virtual void onBlocked(long long oldVersion) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void onSuccessWithPrefetch(const WebVector<WebIDBKey>& keys, const WebVector<WebIDBKey>& primaryKeys, const WebVector<WebSerializedScriptValue>& values) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void onUpgradeNeeded(long long oldVersion, WebIDBTransaction*, WebIDBDatabase*) { WEBKIT_ASSERT_NOT_REACHED(); }
+    virtual void onUpgradeNeeded(long long oldVersion, WebIDBDatabase*, const WebIDBMetadata&) { WEBKIT_ASSERT_NOT_REACHED(); }
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/chromium/src/IDBCallbacksProxy.cpp (141141 => 141142)


--- trunk/Source/WebKit/chromium/src/IDBCallbacksProxy.cpp	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/src/IDBCallbacksProxy.cpp	2013-01-29 20:32:51 UTC (rev 141142)
@@ -37,6 +37,7 @@
 #include "IDBDatabaseBackendProxy.h"
 #include "IDBDatabaseCallbacksProxy.h"
 #include "IDBDatabaseError.h"
+#include "IDBMetadata.h"
 #include "IDBTransactionBackendInterface.h"
 #include "WebIDBCallbacks.h"
 #include "WebIDBCursorImpl.h"
@@ -91,6 +92,14 @@
     m_callbacks->onSuccess(impl);
 }
 
+void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> backend, const IDBDatabaseMetadata&)
+{
+    ASSERT(m_databaseCallbacks.get());
+    m_didComplete = true;
+    WebIDBDatabaseImpl* impl = m_didCreateProxy ? 0 : new WebIDBDatabaseImpl(backend, m_databaseCallbacks.release());
+    m_callbacks->onSuccess(impl);
+}
+
 void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBKey> idbKey)
 {
     m_didComplete = true;
@@ -159,10 +168,18 @@
 void IDBCallbacksProxy::onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBTransactionBackendInterface> transaction, PassRefPtr<IDBDatabaseBackendInterface> database)
 {
     ASSERT(m_databaseCallbacks);
+    ASSERT(!transaction);
     m_didCreateProxy = true;
-    m_callbacks->onUpgradeNeeded(oldVersion, new WebIDBTransactionImpl(transaction), new WebIDBDatabaseImpl(database, m_databaseCallbacks));
+    m_callbacks->onUpgradeNeeded(oldVersion, 0, new WebIDBDatabaseImpl(database, m_databaseCallbacks));
 }
 
+void IDBCallbacksProxy::onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBDatabaseBackendInterface> database, const IDBDatabaseMetadata&)
+{
+    ASSERT(m_databaseCallbacks);
+    m_didCreateProxy = true;
+    m_callbacks->onUpgradeNeeded(oldVersion, 0, new WebIDBDatabaseImpl(database, m_databaseCallbacks));
+}
+
 void IDBCallbacksProxy::setDatabaseCallbacks(PassRefPtr<IDBDatabaseCallbacksProxy> databaseCallbacks)
 {
     ASSERT(!m_databaseCallbacks);

Modified: trunk/Source/WebKit/chromium/src/IDBCallbacksProxy.h (141141 => 141142)


--- trunk/Source/WebKit/chromium/src/IDBCallbacksProxy.h	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/src/IDBCallbacksProxy.h	2013-01-29 20:32:51 UTC (rev 141142)
@@ -50,6 +50,7 @@
     virtual void onSuccess(PassRefPtr<WebCore::DOMStringList>);
     virtual void onSuccess(PassRefPtr<WebCore::IDBCursorBackendInterface>, PassRefPtr<WebCore::IDBKey>, PassRefPtr<WebCore::IDBKey> primaryKey, PassRefPtr<WebCore::SerializedScriptValue>);
     virtual void onSuccess(PassRefPtr<WebCore::IDBDatabaseBackendInterface>);
+    virtual void onSuccess(PassRefPtr<WebCore::IDBDatabaseBackendInterface>, const WebCore::IDBDatabaseMetadata&);
     virtual void onSuccess(PassRefPtr<WebCore::IDBKey>);
     virtual void onSuccess(PassRefPtr<WebCore::SerializedScriptValue>);
     virtual void onSuccess(PassRefPtr<WebCore::SerializedScriptValue>, PassRefPtr<WebCore::IDBKey>, const WebCore::IDBKeyPath&);
@@ -59,6 +60,7 @@
     virtual void onSuccessWithPrefetch(const Vector<RefPtr<WebCore::IDBKey> >& keys, const Vector<RefPtr<WebCore::IDBKey> >& primaryKeys, const Vector<RefPtr<WebCore::SerializedScriptValue> >& values);
     virtual void onBlocked(int64_t existingVersion);
     virtual void onUpgradeNeeded(int64_t oldVersion, PassRefPtr<WebCore::IDBTransactionBackendInterface>, PassRefPtr<WebCore::IDBDatabaseBackendInterface>);
+    virtual void onUpgradeNeeded(int64_t oldVersion, PassRefPtr<WebCore::IDBDatabaseBackendInterface>, const WebCore::IDBDatabaseMetadata&);
 
     void setDatabaseCallbacks(PassRefPtr<IDBDatabaseCallbacksProxy>);
 

Modified: trunk/Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp (141141 => 141142)


--- trunk/Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp	2013-01-29 20:32:51 UTC (rev 141142)
@@ -74,12 +74,25 @@
 void WebIDBCallbacksImpl::onSuccess(WebIDBDatabase* webKitInstance)
 {
     if (m_databaseProxy) {
-        m_callbacks->onSuccess(m_databaseProxy.release());
+        IDBDatabaseMetadata metadata = m_databaseProxy->metadata();
+        m_callbacks->onSuccess(m_databaseProxy.release(), metadata);
         return;
     }
-    m_callbacks->onSuccess(IDBDatabaseBackendProxy::create(adoptPtr(webKitInstance)));
+    RefPtr<IDBDatabaseBackendInterface> localDatabaseProxy = IDBDatabaseBackendProxy::create(adoptPtr(webKitInstance));
+    IDBDatabaseMetadata metadata = localDatabaseProxy->metadata();
+    m_callbacks->onSuccess(localDatabaseProxy.release(), metadata);
 }
 
+void WebIDBCallbacksImpl::onSuccess(WebIDBDatabase* webKitInstance, const WebIDBMetadata& metadata)
+{
+    if (m_databaseProxy) {
+        m_callbacks->onSuccess(m_databaseProxy.release(), metadata);
+        return;
+    }
+    RefPtr<IDBDatabaseBackendInterface> localDatabaseProxy = IDBDatabaseBackendProxy::create(adoptPtr(webKitInstance));
+    m_callbacks->onSuccess(localDatabaseProxy.release(), metadata);
+}
+
 void WebIDBCallbacksImpl::onSuccess(const WebIDBKey& key)
 {
     m_callbacks->onSuccess(key);
@@ -115,12 +128,18 @@
     m_callbacks->onBlocked(oldVersion);
 }
 
-void WebIDBCallbacksImpl::onUpgradeNeeded(long long oldVersion, WebIDBTransaction* transaction, WebIDBDatabase* database)
+void WebIDBCallbacksImpl::onUpgradeNeeded(long long oldVersion, WebIDBTransaction*, WebIDBDatabase* database)
 {
     m_databaseProxy = IDBDatabaseBackendProxy::create(adoptPtr(database));
-    m_callbacks->onUpgradeNeeded(oldVersion, IDBTransactionBackendProxy::create(adoptPtr(transaction)), m_databaseProxy);
+    m_callbacks->onUpgradeNeeded(oldVersion, m_databaseProxy, m_databaseProxy->metadata());
 }
 
+void WebIDBCallbacksImpl::onUpgradeNeeded(long long oldVersion, WebIDBDatabase* database, const WebIDBMetadata& metadata)
+{
+    m_databaseProxy = IDBDatabaseBackendProxy::create(adoptPtr(database));
+    m_callbacks->onUpgradeNeeded(oldVersion, m_databaseProxy, metadata);
+}
+
 } // namespace WebKit
 
 #endif // ENABLE(INDEXED_DATABASE)

Modified: trunk/Source/WebKit/chromium/src/WebIDBCallbacksImpl.h (141141 => 141142)


--- trunk/Source/WebKit/chromium/src/WebIDBCallbacksImpl.h	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/src/WebIDBCallbacksImpl.h	2013-01-29 20:32:51 UTC (rev 141142)
@@ -50,6 +50,7 @@
     virtual void onSuccess(const WebDOMStringList&);
     virtual void onSuccess(WebIDBCursor*, const WebIDBKey&, const WebIDBKey& primaryKey, const WebSerializedScriptValue&);
     virtual void onSuccess(WebIDBDatabase*);
+    virtual void onSuccess(WebIDBDatabase*, const WebIDBMetadata&);
     virtual void onSuccess(const WebIDBKey&);
     virtual void onSuccess(const WebSerializedScriptValue&);
     virtual void onSuccess(const WebSerializedScriptValue&, const WebIDBKey&, const WebIDBKeyPath&);
@@ -58,6 +59,7 @@
     virtual void onSuccess();
     virtual void onBlocked(long long oldVersion);
     virtual void onUpgradeNeeded(long long oldVersion, WebIDBTransaction*, WebIDBDatabase*);
+    virtual void onUpgradeNeeded(long long oldVersion, WebIDBDatabase*, const WebIDBMetadata&);
 
 private:
     RefPtr<WebCore::IDBCallbacks> m_callbacks;

Modified: trunk/Source/WebKit/chromium/tests/IDBAbortOnCorruptTest.cpp (141141 => 141142)


--- trunk/Source/WebKit/chromium/tests/IDBAbortOnCorruptTest.cpp	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/tests/IDBAbortOnCorruptTest.cpp	2013-01-29 20:32:51 UTC (rev 141142)
@@ -57,7 +57,7 @@
     }
     virtual void onSuccess(PassRefPtr<DOMStringList>) { }
     virtual void onSuccess(PassRefPtr<IDBCursorBackendInterface>, PassRefPtr<IDBKey>, PassRefPtr<IDBKey>, PassRefPtr<SerializedScriptValue>) { }
-    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>)
+    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>, const IDBDatabaseMetadata&)
     {
         EXPECT_TRUE(false);
     }

Modified: trunk/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp (141141 => 141142)


--- trunk/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp	2013-01-29 20:26:29 UTC (rev 141141)
+++ trunk/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp	2013-01-29 20:32:51 UTC (rev 141142)
@@ -69,7 +69,7 @@
     virtual void onError(PassRefPtr<IDBDatabaseError>) OVERRIDE { }
     virtual void onSuccess(PassRefPtr<DOMStringList>) OVERRIDE { }
     virtual void onSuccess(PassRefPtr<IDBCursorBackendInterface>, PassRefPtr<IDBKey>, PassRefPtr<IDBKey>, PassRefPtr<SerializedScriptValue>) OVERRIDE { }
-    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>) OVERRIDE
+    virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>, const IDBDatabaseMetadata&) OVERRIDE
     {
         m_wasSuccessDBCalled = true;
     }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to