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 { }