Modern IDB: Fix IDBGetResult encoder/decoder.
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Feb 2016 00:42:01 +0000 (00:42 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Feb 2016 00:42:01 +0000 (00:42 +0000)
https://bugs.webkit.org/show_bug.cgi?id=154421

Reviewed by Alex Christensen.

No new tests, as Modern IDB is still disabled for WK2.

But if you manually enable it, "Basic IndexedDB Seems To Work"

Source/WebCore:

* Modules/indexeddb/IDBGetResult.h:
(WebCore::IDBGetResult::encode):
(WebCore::IDBGetResult::decode):

Source/WebKit2:

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<IDBGetResult>::encode): Deleted.
(IPC::ArgumentCoder<IDBGetResult>::decode): Deleted.
* Shared/WebCoreArgumentCoders.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196786 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/Modules/indexeddb/IDBGetResult.h
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
Source/WebKit2/Shared/WebCoreArgumentCoders.h

index 320e32f..9493339 100644 (file)
@@ -1,3 +1,18 @@
+2016-02-18  Brady Eidson  <beidson@apple.com>
+
+        Modern IDB: Fix IDBGetResult encoder/decoder.
+        https://bugs.webkit.org/show_bug.cgi?id=154421
+
+        Reviewed by Alex Christensen.
+
+        No new tests, as Modern IDB is still disabled for WK2.
+        
+        But if you manually enable it, "Basic IndexedDB Seems To Work"
+
+        * Modules/indexeddb/IDBGetResult.h:
+        (WebCore::IDBGetResult::encode):
+        (WebCore::IDBGetResult::decode):
+
 2016-02-18  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Addressing post-review comments after r196747.
index 2418c05..c66f6d6 100644 (file)
@@ -93,6 +93,9 @@ public:
     const IDBKeyPath& keyPath() const { return m_keyPath; }
     bool isDefined() const { return m_isDefined; }
 
+    template<class Encoder> void encode(Encoder&) const;
+    template<class Decoder> static bool decode(Decoder&, IDBGetResult&);
+
     // FIXME: When removing LegacyIDB, remove these setters.
     // https://bugs.webkit.org/show_bug.cgi?id=150854
 
@@ -111,6 +114,45 @@ private:
     bool m_isDefined { true };
 };
 
+template<class Encoder>
+void IDBGetResult::encode(Encoder& encoder) const
+{
+    encoder << m_keyData << m_primaryKeyData << m_keyPath << m_isDefined;
+
+    encoder << !!m_valueBuffer.data();
+    if (m_valueBuffer.data())
+        encoder << *m_valueBuffer.data();
+}
+
+template<class Decoder>
+bool IDBGetResult::decode(Decoder& decoder, IDBGetResult& result)
+{
+    if (!decoder.decode(result.m_keyData))
+        return false;
+
+    if (!decoder.decode(result.m_primaryKeyData))
+        return false;
+
+    if (!decoder.decode(result.m_keyPath))
+        return false;
+
+    if (!decoder.decode(result.m_isDefined))
+        return false;
+
+    bool hasObject;
+    if (!decoder.decode(hasObject))
+        return false;
+
+    if (hasObject) {
+        Vector<uint8_t> value;
+        if (!decoder.decode(value))
+            return false;
+        result.m_valueBuffer = ThreadSafeDataBuffer::adoptVector(value);
+    }
+
+    return true;
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(INDEXED_DATABASE)
index 586a102..efceb08 100644 (file)
@@ -1,5 +1,21 @@
 2016-02-18  Brady Eidson  <beidson@apple.com>
 
+        Modern IDB: Fix IDBGetResult encoder/decoder.
+        https://bugs.webkit.org/show_bug.cgi?id=154421
+
+        Reviewed by Alex Christensen.
+
+        No new tests, as Modern IDB is still disabled for WK2.
+        
+        But if you manually enable it, "Basic IndexedDB Seems To Work"
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<IDBGetResult>::encode): Deleted.
+        (IPC::ArgumentCoder<IDBGetResult>::decode): Deleted.
+        * Shared/WebCoreArgumentCoders.h:
+
+2016-02-18  Brady Eidson  <beidson@apple.com>
+
         Modern IDB: Implement server->client operations in WK2.
         https://bugs.webkit.org/show_bug.cgi?id=154411
 
index e7f3c3c..1a70826 100644 (file)
@@ -1823,54 +1823,6 @@ bool ArgumentCoder<FilterOperations>::decode(ArgumentDecoder& decoder, FilterOpe
 }
 #endif // !USE(COORDINATED_GRAPHICS)
 
-#if ENABLE(INDEXED_DATABASE)
-
-void ArgumentCoder<IDBGetResult>::encode(ArgumentEncoder& encoder, const IDBGetResult& result)
-{
-    bool nullData = !result.valueBuffer().data();
-    encoder << nullData;
-
-    if (!nullData)
-        encoder << DataReference(result.valueBuffer().data()->data(), result.valueBuffer().data()->size());
-
-    encoder << result.keyData() << result.keyPath();
-}
-
-bool ArgumentCoder<IDBGetResult>::decode(ArgumentDecoder& decoder, IDBGetResult& result)
-{
-    bool nullData;
-    if (!decoder.decode(nullData))
-        return false;
-
-    if (nullData)
-        result.setValueBuffer({ });
-    else {
-        DataReference data;
-        if (!decoder.decode(data))
-            return false;
-
-        Vector<uint8_t> vector(data.size());
-        memcpy(vector.data(), data.data(), data.size());
-        result.setValueBuffer(ThreadSafeDataBuffer::adoptVector(vector));
-    }
-
-    IDBKeyData keyData;
-    if (!decoder.decode(keyData))
-        return false;
-
-    result.setKeyData(keyData);
-
-    IDBKeyPath keyPath;
-    if (!decoder.decode(keyPath))
-        return false;
-
-    result.setKeyPath(keyPath);
-
-    return true;
-}
-
-#endif // ENABLE(INDEXED_DATABASE)
-
 void ArgumentCoder<SessionID>::encode(ArgumentEncoder& encoder, const SessionID& sessionID)
 {
     encoder << sessionID.sessionID();
index 8a2e0d2..a5dd5ec 100644 (file)
@@ -47,7 +47,6 @@ class FloatRoundedRect;
 class FloatSize;
 class FixedPositionViewportConstraints;
 class HTTPHeaderMap;
-class IDBGetResult;
 class IntPoint;
 class IntRect;
 class IntSize;
@@ -403,13 +402,6 @@ template<> struct ArgumentCoder<WebCore::FilterOperation> {
 bool decodeFilterOperation(ArgumentDecoder&, RefPtr<WebCore::FilterOperation>&);
 #endif
 
-#if ENABLE(INDEXED_DATABASE)
-template<> struct ArgumentCoder<WebCore::IDBGetResult> {
-    static void encode(ArgumentEncoder&, const WebCore::IDBGetResult&);
-    static bool decode(ArgumentDecoder&, WebCore::IDBGetResult&);
-};
-#endif // ENABLE(INDEXED_DATABASE)
-
 template<> struct ArgumentCoder<WebCore::SessionID> {
     static void encode(ArgumentEncoder&, const WebCore::SessionID&);
     static bool decode(ArgumentDecoder&, WebCore::SessionID&);