Diff
Modified: trunk/Source/WebCore/ChangeLog (121611 => 121612)
--- trunk/Source/WebCore/ChangeLog 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/ChangeLog 2012-06-30 03:09:32 UTC (rev 121612)
@@ -1,3 +1,45 @@
+2012-06-29 Joshua Bell <[email protected]>
+
+ IndexedDB: Keep direction on IDBCursor to avoid calls to back end
+ https://bugs.webkit.org/show_bug.cgi?id=90114
+
+ Reviewed by Tony Chang.
+
+ Let IDBCursor handle direction() accessor locally, without a call to
+ the IDBCursorBackendImpl which (in some ports) may reside in a different
+ process. Not a heavily called function, but further reduces the surface
+ area exposed by the XXXInterface classes.
+
+ No new tests - no functional changes.
+
+ * Modules/indexeddb/IDBCursor.cpp:
+ (WebCore::IDBCursor::create): Accept direction, known at creation time.
+ (WebCore::IDBCursor::IDBCursor): Stash in member.
+ (WebCore::IDBCursor::direction): Use local copy
+ (WebCore::IDBCursor::stringToDirection): Return enum value, not int.
+ * Modules/indexeddb/IDBCursor.h:
+ (IDBCursor):
+ * Modules/indexeddb/IDBCursorBackendImpl.cpp: Remove accessor.
+ * Modules/indexeddb/IDBCursorBackendImpl.h:
+ (IDBCursorBackendImpl):
+ * Modules/indexeddb/IDBCursorBackendInterface.h: Remove accessor.
+ * Modules/indexeddb/IDBCursorWithValue.cpp:
+ (WebCore::IDBCursorWithValue::create):
+ (WebCore::IDBCursorWithValue::IDBCursorWithValue):
+ * Modules/indexeddb/IDBCursorWithValue.h:
+ (IDBCursorWithValue):
+ * Modules/indexeddb/IDBIndex.cpp: Prep IDBRequest with cursor direction too.
+ (WebCore::IDBIndex::openCursor):
+ (WebCore::IDBIndex::openKeyCursor):
+ * Modules/indexeddb/IDBObjectStore.cpp: Ditto.
+ (WebCore::IDBObjectStore::openCursor):
+ * Modules/indexeddb/IDBRequest.cpp: Stash direction for pending cursor too.
+ (WebCore::IDBRequest::IDBRequest):
+ (WebCore::IDBRequest::setCursorDetails):
+ (WebCore::IDBRequest::onSuccess): Apply stashed direction to new cursor.
+ * Modules/indexeddb/IDBRequest.h:
+ (IDBRequest):
+
2012-06-29 Tony Chang <[email protected]>
Allow align-self: stretch to cause the item size to shrink below its intrinsic size
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCursor.cpp (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBCursor.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCursor.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -42,9 +42,9 @@
namespace WebCore {
-PassRefPtr<IDBCursor> IDBCursor::create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+PassRefPtr<IDBCursor> IDBCursor::create(PassRefPtr<IDBCursorBackendInterface> backend, Direction direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
{
- return adoptRef(new IDBCursor(backend, request, source, transaction));
+ return adoptRef(new IDBCursor(backend, direction, request, source, transaction));
}
const AtomicString& IDBCursor::directionNext()
@@ -72,9 +72,10 @@
}
-IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, Direction direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
: m_backend(backend)
, m_request(request)
+ , m_direction(direction)
, m_source(source)
, m_transaction(transaction)
, m_transactionNotifier(transaction, this)
@@ -95,7 +96,7 @@
{
IDB_TRACE("IDBCursor::direction");
ExceptionCode ec = 0;
- const AtomicString& direction = directionToString(m_backend->direction(), ec);
+ const AtomicString& direction = directionToString(m_direction, ec);
ASSERT(!ec);
return direction;
}
@@ -293,7 +294,7 @@
return index->objectStore();
}
-unsigned short IDBCursor::stringToDirection(const String& directionString, ExceptionCode& ec)
+IDBCursor::Direction IDBCursor::stringToDirection(const String& directionString, ExceptionCode& ec)
{
if (directionString == IDBCursor::directionNext())
return IDBCursor::NEXT;
@@ -305,7 +306,7 @@
return IDBCursor::PREV_NO_DUPLICATE;
ec = IDBDatabaseException::IDB_TYPE_ERR;
- return 0;
+ return IDBCursor::NEXT;
}
const AtomicString& IDBCursor::directionToString(unsigned short direction, ExceptionCode& ec)
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCursor.h (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBCursor.h 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCursor.h 2012-06-30 03:09:32 UTC (rev 121612)
@@ -59,10 +59,10 @@
static const AtomicString& directionPrev();
static const AtomicString& directionPrevUnique();
- static unsigned short stringToDirection(const String& modeString, ExceptionCode&);
+ static IDBCursor::Direction stringToDirection(const String& modeString, ExceptionCode&);
static const AtomicString& directionToString(unsigned short mode, ExceptionCode&);
- static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBAny* source, IDBTransaction*);
+ static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface>, Direction, IDBRequest*, IDBAny* source, IDBTransaction*);
virtual ~IDBCursor();
// FIXME: Try to modify the code generator so this is unneeded.
@@ -90,7 +90,7 @@
bool valueIsDirty() { return m_valueIsDirty; }
protected:
- IDBCursor(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBAny* source, IDBTransaction*);
+ IDBCursor(PassRefPtr<IDBCursorBackendInterface>, Direction, IDBRequest*, IDBAny* source, IDBTransaction*);
virtual bool isKeyCursor() const { return true; }
private:
@@ -98,6 +98,7 @@
RefPtr<IDBCursorBackendInterface> m_backend;
RefPtr<IDBRequest> m_request;
+ const Direction m_direction;
RefPtr<IDBAny> m_source;
RefPtr<IDBTransaction> m_transaction;
IDBTransaction::OpenCursorNotifier m_transactionNotifier;
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -63,12 +63,6 @@
m_objectStore.clear();
}
-unsigned short IDBCursorBackendImpl::direction() const
-{
- IDB_TRACE("IDBCursorBackendImpl::direction");
- return m_direction;
-}
-
PassRefPtr<IDBKey> IDBCursorBackendImpl::key() const
{
IDB_TRACE("IDBCursorBackendImpl::key");
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h 2012-06-30 03:09:32 UTC (rev 121612)
@@ -53,7 +53,6 @@
}
virtual ~IDBCursorBackendImpl();
- virtual unsigned short direction() const;
virtual PassRefPtr<IDBKey> key() const;
virtual PassRefPtr<IDBKey> primaryKey() const;
virtual PassRefPtr<SerializedScriptValue> value() const;
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendInterface.h (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendInterface.h 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCursorBackendInterface.h 2012-06-30 03:09:32 UTC (rev 121612)
@@ -53,7 +53,6 @@
ObjectStoreCursor
};
- virtual unsigned short direction() const = 0;
virtual PassRefPtr<IDBKey> key() const = 0;
virtual PassRefPtr<IDBKey> primaryKey() const = 0;
virtual PassRefPtr<SerializedScriptValue> value() const = 0;
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCursorWithValue.cpp (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBCursorWithValue.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCursorWithValue.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -33,9 +33,9 @@
namespace WebCore {
-PassRefPtr<IDBCursorWithValue> IDBCursorWithValue::create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+PassRefPtr<IDBCursorWithValue> IDBCursorWithValue::create(PassRefPtr<IDBCursorBackendInterface> backend, Direction direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
{
- return adoptRef(new IDBCursorWithValue(backend, request, source, transaction));
+ return adoptRef(new IDBCursorWithValue(backend, direction, request, source, transaction));
}
PassRefPtr<IDBCursorWithValue> IDBCursorWithValue::fromCursor(PassRefPtr<IDBCursor> prpCursor)
@@ -44,8 +44,8 @@
return cursorWithValue.release();
}
-IDBCursorWithValue::IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
- : IDBCursor(backend, request, source, transaction)
+IDBCursorWithValue::IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface> backend, Direction direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+ : IDBCursor(backend, direction, request, source, transaction)
{
}
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBCursorWithValue.h (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBCursorWithValue.h 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBCursorWithValue.h 2012-06-30 03:09:32 UTC (rev 121612)
@@ -34,7 +34,7 @@
class IDBCursorWithValue : public IDBCursor {
public:
- static PassRefPtr<IDBCursorWithValue> create(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBAny* source, IDBTransaction*);
+ static PassRefPtr<IDBCursorWithValue> create(PassRefPtr<IDBCursorBackendInterface>, Direction, IDBRequest*, IDBAny* source, IDBTransaction*);
static PassRefPtr<IDBCursorWithValue> fromCursor(PassRefPtr<IDBCursor>);
virtual ~IDBCursorWithValue();
@@ -45,7 +45,7 @@
virtual bool isKeyCursor() const OVERRIDE { return false; }
private:
- IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBAny* source, IDBTransaction*);
+ IDBCursorWithValue(PassRefPtr<IDBCursorBackendInterface>, Direction, IDBRequest*, IDBAny* source, IDBTransaction*);
};
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBIndex.cpp (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBIndex.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBIndex.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -69,12 +69,12 @@
ec = IDBDatabaseException::TRANSACTION_INACTIVE_ERR;
return 0;
}
- unsigned short direction = IDBCursor::stringToDirection(directionString, ec);
+ IDBCursor::Direction direction = IDBCursor::stringToDirection(directionString, ec);
if (ec)
return 0;
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- request->setCursorType(IDBCursorBackendInterface::IndexCursor);
+ request->setCursorDetails(IDBCursorBackendInterface::IndexCursor, direction);
m_backend->openCursor(keyRange, direction, request, m_transaction->backend(), ec);
if (ec) {
request->markEarlyDeath();
@@ -152,13 +152,12 @@
ec = IDBDatabaseException::TRANSACTION_INACTIVE_ERR;
return 0;
}
-
- unsigned short direction = IDBCursor::stringToDirection(directionString, ec);
+ IDBCursor::Direction direction = IDBCursor::stringToDirection(directionString, ec);
if (ec)
return 0;
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- request->setCursorType(IDBCursorBackendInterface::IndexKeyCursor);
+ request->setCursorDetails(IDBCursorBackendInterface::IndexKeyCursor, direction);
m_backend->openKeyCursor(keyRange, direction, request, m_transaction->backend(), ec);
if (ec) {
request->markEarlyDeath();
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -375,12 +375,12 @@
ec = IDBDatabaseException::TRANSACTION_INACTIVE_ERR;
return 0;
}
- unsigned short direction = IDBCursor::stringToDirection(directionString, ec);
+ IDBCursor::Direction direction = IDBCursor::stringToDirection(directionString, ec);
if (ec)
return 0;
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- request->setCursorType(IDBCursorBackendInterface::ObjectStoreCursor);
+ request->setCursorDetails(IDBCursorBackendInterface::ObjectStoreCursor, direction);
m_backend->openCursor(range, direction, request, m_transaction->backend(), ec);
if (ec) {
request->markEarlyDeath();
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -61,6 +61,7 @@
, m_cursorFinished(false)
, m_contextStopped(false)
, m_cursorType(IDBCursorBackendInterface::InvalidCursorType)
+ , m_cursorDirection(IDBCursor::NEXT)
, m_cursor(0)
{
if (m_transaction) {
@@ -187,10 +188,11 @@
onError(IDBDatabaseError::create(IDBDatabaseException::IDB_ABORT_ERR, "The transaction was aborted, so the request cannot be fulfilled."));
}
-void IDBRequest::setCursorType(IDBCursorBackendInterface::CursorType cursorType)
+void IDBRequest::setCursorDetails(IDBCursorBackendInterface::CursorType cursorType, IDBCursor::Direction direction)
{
ASSERT(m_cursorType == IDBCursorBackendInterface::InvalidCursorType);
m_cursorType = cursorType;
+ m_cursorDirection = direction;
}
void IDBRequest::setCursor(PassRefPtr<IDBCursor> cursor)
@@ -237,9 +239,9 @@
ASSERT(m_cursorType != IDBCursorBackendInterface::InvalidCursorType);
RefPtr<IDBCursor> cursor;
if (m_cursorType == IDBCursorBackendInterface::IndexKeyCursor)
- cursor = IDBCursor::create(backend, this, m_source.get(), m_transaction.get());
+ cursor = IDBCursor::create(backend, m_cursorDirection, this, m_source.get(), m_transaction.get());
else
- cursor = IDBCursorWithValue::create(backend, this, m_source.get(), m_transaction.get());
+ cursor = IDBCursorWithValue::create(backend, m_cursorDirection, this, m_source.get(), m_transaction.get());
setResultCursor(cursor, m_cursorType);
enqueueEvent(createSuccessEvent());
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h (121611 => 121612)
--- trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h 2012-06-30 03:09:32 UTC (rev 121612)
@@ -40,6 +40,7 @@
#include "EventTarget.h"
#include "IDBAny.h"
#include "IDBCallbacks.h"
+#include "IDBCursor.h"
namespace WebCore {
@@ -73,7 +74,7 @@
void markEarlyDeath();
bool resetReadyState(IDBTransaction*);
- void setCursorType(IDBCursorBackendInterface::CursorType);
+ void setCursorDetails(IDBCursorBackendInterface::CursorType, IDBCursor::Direction);
void setCursor(PassRefPtr<IDBCursor>);
void finishCursor();
IDBAny* source();
@@ -134,6 +135,7 @@
// Only used if the result type will be a cursor.
IDBCursorBackendInterface::CursorType m_cursorType;
+ IDBCursor::Direction m_cursorDirection;
RefPtr<IDBCursor> m_cursor;
EventTargetData m_eventTargetData;
Modified: trunk/Source/WebKit/chromium/ChangeLog (121611 => 121612)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-06-30 03:09:32 UTC (rev 121612)
@@ -1,3 +1,19 @@
+2012-06-29 Joshua Bell <[email protected]>
+
+ IndexedDB: Keep direction on IDBCursor to avoid calls to back end
+ https://bugs.webkit.org/show_bug.cgi?id=90114
+
+ Stop plumbing IDBCursorBackendInterface::direction() through API.
+
+ Reviewed by Tony Chang.
+
+ * src/IDBCursorBackendProxy.cpp:
+ * src/IDBCursorBackendProxy.h:
+ (IDBCursorBackendProxy):
+ * src/WebIDBCursorImpl.cpp:
+ * src/WebIDBCursorImpl.h:
+ (WebIDBCursorImpl):
+
2012-06-29 Adam Barth <[email protected]>
[Chromium] WebFontRendering.cpp requires some OS(ANDROID) ifdefs to build downstream
Modified: trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp (121611 => 121612)
--- trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -54,11 +54,6 @@
{
}
-unsigned short IDBCursorBackendProxy::direction() const
-{
- return m_idbCursor->direction();
-}
-
PassRefPtr<IDBKey> IDBCursorBackendProxy::key() const
{
return m_idbCursor->key();
Modified: trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h (121611 => 121612)
--- trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebKit/chromium/src/IDBCursorBackendProxy.h 2012-06-30 03:09:32 UTC (rev 121612)
@@ -42,7 +42,6 @@
static PassRefPtr<WebCore::IDBCursorBackendInterface> create(PassOwnPtr<WebIDBCursor>);
virtual ~IDBCursorBackendProxy();
- virtual unsigned short direction() const;
virtual PassRefPtr<WebCore::IDBKey> key() const;
virtual PassRefPtr<WebCore::IDBKey> primaryKey() const;
virtual PassRefPtr<WebCore::SerializedScriptValue> value() const;
Modified: trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp (121611 => 121612)
--- trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.cpp 2012-06-30 03:09:32 UTC (rev 121612)
@@ -47,11 +47,6 @@
{
}
-unsigned short WebIDBCursorImpl::direction() const
-{
- return m_idbCursorBackend->direction();
-}
-
WebIDBKey WebIDBCursorImpl::key() const
{
return m_idbCursorBackend->key();
Modified: trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h (121611 => 121612)
--- trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h 2012-06-30 02:36:41 UTC (rev 121611)
+++ trunk/Source/WebKit/chromium/src/WebIDBCursorImpl.h 2012-06-30 03:09:32 UTC (rev 121612)
@@ -44,7 +44,6 @@
WebIDBCursorImpl(WTF::PassRefPtr<WebCore::IDBCursorBackendInterface>);
virtual ~WebIDBCursorImpl();
- virtual unsigned short direction() const;
virtual WebIDBKey key() const;
virtual WebIDBKey primaryKey() const;
virtual WebSerializedScriptValue value() const;