Title: [141128] trunk/Source
Revision
141128
Author
[email protected]
Date
2013-01-29 09:58:07 -0800 (Tue, 29 Jan 2013)

Log Message

[Chromium] IndexedDB: Let callers specify reason (error) for aborting transaction
https://bugs.webkit.org/show_bug.cgi?id=107851

Reviewed by Tony Chang.

Source/WebCore:

Internal to the back-end, callers are able to abort transactions and specify a reason
as an IDBDatabaseError, e.g. ConstraintError. Expose this to the WebKit/chromium/public
API so that intermediate layers can specify reasons as well, e.g. QuotaExceededError.

Test will land in Chromium as fix for crbug.com/113118

* Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
(WebCore::IDBDatabaseBackendImpl::abort): Added overload that takes error.
* Modules/indexeddb/IDBDatabaseBackendImpl.h: Ditto.
* Modules/indexeddb/IDBDatabaseBackendInterface.h: Ditto.

Source/WebKit/chromium:

Let Chromium call abort() on a transaction and specify a reason, specifically for
QuotaExceededError.

* public/WebIDBDatabase.h:
(WebKit::WebIDBDatabase::abort): New overload for abort() that takes an error.
* public/WebIDBDatabaseError.h:
(WebKit::WebIDBDatabaseError::WebIDBDatabaseError): Overloaded constructor/assign that takes error.
* src/IDBDatabaseBackendProxy.cpp:
(WebKit::IDBDatabaseBackendProxy::abort): New overload for abort() that takes an error.
* src/IDBDatabaseBackendProxy.h:
(IDBDatabaseBackendProxy): Ditto.
* src/WebIDBDatabaseError.cpp: Implementation of overload ctor/assign.
* src/WebIDBDatabaseImpl.cpp:
(WebKit::WebIDBDatabaseImpl::abort): New overload for abort() that takes an error.
* src/WebIDBDatabaseImpl.h: Ditto.
* tests/IDBDatabaseBackendTest.cpp: Overload stubs for Mock class.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (141127 => 141128)


--- trunk/Source/WebCore/ChangeLog	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebCore/ChangeLog	2013-01-29 17:58:07 UTC (rev 141128)
@@ -1,3 +1,21 @@
+2013-01-29  Joshua Bell  <[email protected]>
+
+        [Chromium] IndexedDB: Let callers specify reason (error) for aborting transaction
+        https://bugs.webkit.org/show_bug.cgi?id=107851
+
+        Reviewed by Tony Chang.
+
+        Internal to the back-end, callers are able to abort transactions and specify a reason
+        as an IDBDatabaseError, e.g. ConstraintError. Expose this to the WebKit/chromium/public
+        API so that intermediate layers can specify reasons as well, e.g. QuotaExceededError.
+
+        Test will land in Chromium as fix for crbug.com/113118
+
+        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
+        (WebCore::IDBDatabaseBackendImpl::abort): Added overload that takes error.
+        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Ditto.
+        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Ditto.
+
 2013-01-29  Victor Carbune  <[email protected]>
 
         Heap-use-after-free in WebCore::RenderTextTrackCue::layout

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp (141127 => 141128)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp	2013-01-29 17:58:07 UTC (rev 141128)
@@ -672,6 +672,13 @@
         m_transactions.get(transactionId)->abort();
 }
 
+void IDBDatabaseBackendImpl::abort(int64_t transactionId, PassRefPtr<IDBDatabaseError> error)
+{
+    // If the transaction is unknown, then it has already been aborted by the backend before this call so it is safe to ignore it.
+    if (m_transactions.contains(transactionId))
+        m_transactions.get(transactionId)->abort(error);
+}
+
 void IDBDatabaseBackendImpl::get(int64_t transactionId, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, bool keyOnly, PassRefPtr<IDBCallbacks> callbacks)
 {
     IDB_TRACE("IDBDatabaseBackendImpl::get");

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h (141127 => 141128)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h	2013-01-29 17:58:07 UTC (rev 141128)
@@ -72,6 +72,7 @@
 
     virtual void commit(int64_t transactionId);
     virtual void abort(int64_t transactionId);
+    virtual void abort(int64_t transactionId, PassRefPtr<IDBDatabaseError>);
 
     virtual void createIndex(int64_t transactionId, int64_t objectStoreId, int64_t indexId, const String& name, const IDBKeyPath&, bool unique, bool multiEntry);
     virtual void deleteIndex(int64_t transactionId, int64_t objectStoreId, int64_t indexId);

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendInterface.h (141127 => 141128)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendInterface.h	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendInterface.h	2013-01-29 17:58:07 UTC (rev 141128)
@@ -63,6 +63,7 @@
     // Transaction-specific operations.
     virtual void commit(int64_t transactionId) = 0;
     virtual void abort(int64_t transactionId) = 0;
+    virtual void abort(int64_t transactionId, PassRefPtr<IDBDatabaseError>) = 0;
 
     virtual void createIndex(int64_t transactionId, int64_t objectStoreId, int64_t indexId, const String& name, const IDBKeyPath&, bool unique, bool multiEntry) = 0;
     virtual void deleteIndex(int64_t transactionId, int64_t objectStoreId, int64_t indexId) = 0;

Modified: trunk/Source/WebKit/chromium/ChangeLog (141127 => 141128)


--- trunk/Source/WebKit/chromium/ChangeLog	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/ChangeLog	2013-01-29 17:58:07 UTC (rev 141128)
@@ -1,3 +1,27 @@
+2013-01-29  Joshua Bell  <[email protected]>
+
+        [Chromium] IndexedDB: Let callers specify reason (error) for aborting transaction
+        https://bugs.webkit.org/show_bug.cgi?id=107851
+
+        Reviewed by Tony Chang.
+
+        Let Chromium call abort() on a transaction and specify a reason, specifically for
+        QuotaExceededError.
+
+        * public/WebIDBDatabase.h:
+        (WebKit::WebIDBDatabase::abort): New overload for abort() that takes an error.
+        * public/WebIDBDatabaseError.h:
+        (WebKit::WebIDBDatabaseError::WebIDBDatabaseError): Overloaded constructor/assign that takes error.
+        * src/IDBDatabaseBackendProxy.cpp:
+        (WebKit::IDBDatabaseBackendProxy::abort): New overload for abort() that takes an error.
+        * src/IDBDatabaseBackendProxy.h:
+        (IDBDatabaseBackendProxy): Ditto.
+        * src/WebIDBDatabaseError.cpp: Implementation of overload ctor/assign.
+        * src/WebIDBDatabaseImpl.cpp:
+        (WebKit::WebIDBDatabaseImpl::abort): New overload for abort() that takes an error.
+        * src/WebIDBDatabaseImpl.h: Ditto.
+        * tests/IDBDatabaseBackendTest.cpp: Overload stubs for Mock class.
+
 2013-01-29  Florin Malita  <[email protected]>
 
         [Chromium] Unreviewed gardening.

Modified: trunk/Source/WebKit/chromium/public/WebIDBDatabase.h (141127 => 141128)


--- trunk/Source/WebKit/chromium/public/WebIDBDatabase.h	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/public/WebIDBDatabase.h	2013-01-29 17:58:07 UTC (rev 141128)
@@ -37,6 +37,7 @@
 class WebFrame;
 class WebIDBCallbacks;
 class WebIDBDatabaseCallbacks;
+class WebIDBDatabaseError;
 class WebIDBKey;
 class WebIDBKeyPath;
 class WebIDBKeyRange;
@@ -61,6 +62,7 @@
     virtual void forceClose() { WEBKIT_ASSERT_NOT_REACHED(); }
 
     virtual void abort(long long transactionId) { WEBKIT_ASSERT_NOT_REACHED(); }
+    virtual void abort(long long transactionId, const WebIDBDatabaseError&) { WEBKIT_ASSERT_NOT_REACHED(); }
     virtual void commit(long long transactionId) { WEBKIT_ASSERT_NOT_REACHED(); }
 
     virtual void createIndex(long long transactionId, long long objectStoreId, long long indexId, const WebString& name, const WebIDBKeyPath&, bool unique, bool multiEntry) { WEBKIT_ASSERT_NOT_REACHED(); }

Modified: trunk/Source/WebKit/chromium/public/WebIDBDatabaseError.h (141127 => 141128)


--- trunk/Source/WebKit/chromium/public/WebIDBDatabaseError.h	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/public/WebIDBDatabaseError.h	2013-01-29 17:58:07 UTC (rev 141128)
@@ -42,6 +42,7 @@
 public:
     ~WebIDBDatabaseError() { reset(); }
 
+    WebIDBDatabaseError(unsigned short code) { assign(code); }
     WebIDBDatabaseError(unsigned short code, const WebString& message) { assign(code, message); }
     WebIDBDatabaseError(const WebIDBDatabaseError& error) { assign(error); }
     WebIDBDatabaseError& operator=(const WebIDBDatabaseError& error)
@@ -63,6 +64,7 @@
 #endif
 
 private:
+    WEBKIT_EXPORT void assign(unsigned short code);
     WEBKIT_EXPORT void assign(unsigned short code, const WebString& message);
 
     WebPrivatePtr<WebCore::IDBDatabaseError> m_private;

Modified: trunk/Source/WebKit/chromium/src/IDBDatabaseBackendProxy.cpp (141127 => 141128)


--- trunk/Source/WebKit/chromium/src/IDBDatabaseBackendProxy.cpp	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/src/IDBDatabaseBackendProxy.cpp	2013-01-29 17:58:07 UTC (rev 141128)
@@ -103,6 +103,11 @@
     m_webIDBDatabase->abort(transactionId);
 }
 
+void IDBDatabaseBackendProxy::abort(int64_t transactionId, PassRefPtr<IDBDatabaseError> error)
+{
+    m_webIDBDatabase->abort(transactionId, error);
+}
+
 void IDBDatabaseBackendProxy::openCursor(int64_t transactionId, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, unsigned short direction, bool keyOnly, TaskType taskType, PassRefPtr<IDBCallbacks> callbacks)
 {
     m_webIDBDatabase->openCursor(transactionId, objectStoreId, indexId, keyRange, static_cast<WebIDBCursor::Direction>(direction), keyOnly, static_cast<WebIDBDatabase::TaskType>(taskType), new WebIDBCallbacksImpl(callbacks));

Modified: trunk/Source/WebKit/chromium/src/IDBDatabaseBackendProxy.h (141127 => 141128)


--- trunk/Source/WebKit/chromium/src/IDBDatabaseBackendProxy.h	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/src/IDBDatabaseBackendProxy.h	2013-01-29 17:58:07 UTC (rev 141128)
@@ -53,6 +53,7 @@
 
     virtual void commit(int64_t);
     virtual void abort(int64_t);
+    virtual void abort(int64_t, PassRefPtr<WebCore::IDBDatabaseError>);
 
     virtual void get(int64_t transactionId, int64_t objectStoreId, int64_t indexId, PassRefPtr<WebCore::IDBKeyRange>, bool keyOnly, PassRefPtr<WebCore::IDBCallbacks>) OVERRIDE;
     virtual void put(int64_t transactionId, int64_t objectStoreId, Vector<uint8_t>* value, PassRefPtr<WebCore::IDBKey>, PutMode, PassRefPtr<WebCore::IDBCallbacks>, const Vector<int64_t>& indexIds, const Vector<IndexKeys>&) OVERRIDE;

Modified: trunk/Source/WebKit/chromium/src/WebIDBDatabaseError.cpp (141127 => 141128)


--- trunk/Source/WebKit/chromium/src/WebIDBDatabaseError.cpp	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/src/WebIDBDatabaseError.cpp	2013-01-29 17:58:07 UTC (rev 141128)
@@ -45,6 +45,11 @@
     m_private = value.m_private;
 }
 
+void WebIDBDatabaseError::assign(unsigned short code)
+{
+    m_private = IDBDatabaseError::create(code);
+}
+
 void WebIDBDatabaseError::assign(unsigned short code, const WebString& message)
 {
     m_private = IDBDatabaseError::create(code, message);

Modified: trunk/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp (141127 => 141128)


--- trunk/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp	2013-01-29 17:58:07 UTC (rev 141128)
@@ -38,6 +38,7 @@
 #include "IDBTransactionBackendInterface.h"
 #include "WebIDBCallbacks.h"
 #include "WebIDBDatabaseCallbacks.h"
+#include "WebIDBDatabaseError.h"
 #include "WebIDBKey.h"
 #include "WebIDBKeyRange.h"
 #include "WebIDBMetadata.h"
@@ -118,6 +119,12 @@
         m_databaseBackend->abort(transactionId);
 }
 
+void WebIDBDatabaseImpl::abort(long long transactionId, const WebIDBDatabaseError& error)
+{
+    if (m_databaseBackend)
+        m_databaseBackend->abort(transactionId, error);
+}
+
 void WebIDBDatabaseImpl::commit(long long transactionId)
 {
     if (m_databaseBackend)

Modified: trunk/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h (141127 => 141128)


--- trunk/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h	2013-01-29 17:58:07 UTC (rev 141128)
@@ -41,6 +41,7 @@
 namespace WebKit {
 
 class WebIDBDatabaseCallbacks;
+class WebIDBDatabaseError;
 class WebIDBDatabaseMetadata;
 class WebIDBTransaction;
 
@@ -60,6 +61,7 @@
     virtual void forceClose();
     virtual void close();
     virtual void abort(long long transactionId);
+    virtual void abort(long long transactionId, const WebIDBDatabaseError&);
     virtual void commit(long long transactionId);
 
     virtual void get(long long transactionId, long long objectStoreId, long long indexId, const WebIDBKeyRange&, bool keyOnly, WebIDBCallbacks*) OVERRIDE;

Modified: trunk/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp (141127 => 141128)


--- trunk/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp	2013-01-29 17:52:17 UTC (rev 141127)
+++ trunk/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp	2013-01-29 17:58:07 UTC (rev 141128)
@@ -149,6 +149,7 @@
     }
 
     virtual void abort(int64_t transactionId) OVERRIDE { }
+    virtual void abort(int64_t transactionId, PassRefPtr<IDBDatabaseError>) OVERRIDE { }
     virtual void commit(int64_t transactionId) OVERRIDE { }
 
     virtual void openCursor(int64_t transactionId, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange>, unsigned short direction, bool keyOnly, TaskType, PassRefPtr<IDBCallbacks>) OVERRIDE { }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to