Title: [177750] trunk/Source/WebKit2
Revision
177750
Author
[email protected]
Date
2014-12-26 14:16:30 -0800 (Fri, 26 Dec 2014)

Log Message

Handle more types in the UserData encode/decode functions
https://bugs.webkit.org/show_bug.cgi?id=139959

Reviewed by Dan Bernstein.

* Shared/UserData.cpp:
(WebKit::UserData::encode):
(WebKit::UserData::decode):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (177749 => 177750)


--- trunk/Source/WebKit2/ChangeLog	2014-12-26 20:24:34 UTC (rev 177749)
+++ trunk/Source/WebKit2/ChangeLog	2014-12-26 22:16:30 UTC (rev 177750)
@@ -1,5 +1,16 @@
 2014-12-26  Anders Carlsson  <[email protected]>
 
+        Handle more types in the UserData encode/decode functions
+        https://bugs.webkit.org/show_bug.cgi?id=139959
+
+        Reviewed by Dan Bernstein.
+
+        * Shared/UserData.cpp:
+        (WebKit::UserData::encode):
+        (WebKit::UserData::decode):
+
+2014-12-26  Anders Carlsson  <[email protected]>
+
         Move handle encoding functions to their respective implementation files
         https://bugs.webkit.org/show_bug.cgi?id=139957
 

Modified: trunk/Source/WebKit2/Shared/UserData.cpp (177749 => 177750)


--- trunk/Source/WebKit2/Shared/UserData.cpp	2014-12-26 20:24:34 UTC (rev 177749)
+++ trunk/Source/WebKit2/Shared/UserData.cpp	2014-12-26 22:16:30 UTC (rev 177750)
@@ -40,8 +40,14 @@
 #include "APIURL.h"
 #include "APIURLRequest.h"
 #include "APIURLResponse.h"
+#include "APIUserContentURLPattern.h"
 #include "ArgumentCoders.h"
 #include "ArgumentEncoder.h"
+#include "ShareableBitmap.h"
+#include "WebCertificateInfo.h"
+#include "WebImage.h"
+#include "WebRenderLayer.h"
+#include "WebRenderObject.h"
 
 namespace WebKit {
 
@@ -169,6 +175,12 @@
         static_cast<const API::Boolean&>(object).encode(encoder);
         break;
 
+    case API::Object::Type::CertificateInfo: {
+        const auto& certificateInfo = static_cast<const WebCertificateInfo&>(object);
+        encoder << certificateInfo.certificateInfo();
+        break;
+    }
+
     case API::Object::Type::Data:
         static_cast<const API::Data&>(object).encode(encoder);
         break;
@@ -197,6 +209,23 @@
         static_cast<const API::FrameHandle&>(object).encode(encoder);
         break;
 
+    case API::Object::Type::Image: {
+        auto& image = static_cast<const WebImage&>(object);
+
+        ShareableBitmap::Handle handle;
+        ASSERT(!image.bitmap() || image.bitmap()->isBackedBySharedMemory());
+        if (!image.bitmap() || !image.bitmap()->isBackedBySharedMemory() || !image.bitmap()->createHandle(handle)) {
+            // Initial false indicates no allocated bitmap or is not shareable.
+            encoder << false;
+            break;
+        }
+
+        // Initial true indicates a bitmap was allocated and is shareable.
+        encoder << true;
+        encoder << handle;
+        break;
+    }
+
     case API::Object::Type::PageGroupHandle:
         static_cast<const API::PageGroupHandle&>(object).encode(encoder);
         break;
@@ -213,6 +242,38 @@
         static_cast<const API::Rect&>(object).encode(encoder);
         break;
 
+    case API::Object::Type::RenderLayer: {
+        auto& renderLayer = static_cast<const WebRenderLayer&>(object);
+
+        encode(encoder, renderLayer.renderer());
+        encoder << renderLayer.isReflection();
+        encoder << renderLayer.isClipping();
+        encoder << renderLayer.isClipped();
+        encoder << static_cast<uint32_t>(renderLayer.compositingLayerType());
+        encoder << renderLayer.absoluteBoundingBox();
+        encoder << renderLayer.backingStoreMemoryEstimate();
+        encode(encoder, renderLayer.negativeZOrderList());
+        encode(encoder, renderLayer.normalFlowList());
+        encode(encoder, renderLayer.positiveZOrderList());
+        encode(encoder, renderLayer.frameContentsLayer());
+        break;
+    }
+
+    case API::Object::Type::RenderObject: {
+        auto& renderObject = static_cast<const WebRenderObject&>(object);
+
+        encoder << renderObject.name();
+        encoder << renderObject.elementTagName();
+        encoder << renderObject.elementID();
+        encode(encoder, renderObject.elementClassNames());
+        encoder << renderObject.absolutePosition();
+        encoder << renderObject.frameRect();
+        encoder << renderObject.textSnippet();
+        encoder << renderObject.textLength();
+        encode(encoder, renderObject.children());
+        break;
+    }
+
     case API::Object::Type::SerializedScriptValue: {
         auto& serializedScriptValue = static_cast<const API::SerializedScriptValue&>(object);
         encoder << serializedScriptValue.dataReference();
@@ -245,6 +306,12 @@
         static_cast<const API::UInt64&>(object).encode(encoder);
         break;
 
+    case API::Object::Type::UserContentURLPattern: {
+        auto& urlPattern = static_cast<const API::UserContentURLPattern&>(object);
+        encoder << urlPattern.patternString();
+        break;
+    }
+
     default:
         ASSERT_NOT_REACHED();
     }
@@ -280,6 +347,14 @@
             return false;
         break;
 
+    case API::Object::Type::CertificateInfo: {
+        WebCore::CertificateInfo certificateInfo;
+        if (!decoder.decode(certificateInfo))
+            return false;
+        result = WebCertificateInfo::create(certificateInfo);
+        break;
+    }
+
     case API::Object::Type::Data:
         if (!API::Data::decode(decoder, result))
             return false;
@@ -323,6 +398,22 @@
             return false;
         break;
 
+    case API::Object::Type::Image: {
+        bool didEncode = false;
+        if (!decoder.decode(didEncode))
+            return false;
+
+        if (!didEncode)
+            break;
+
+        ShareableBitmap::Handle handle;
+        if (!decoder.decode(handle))
+            return false;
+
+        result = WebImage::create(ShareableBitmap::create(handle));
+        break;
+    }
+
     case API::Object::Type::Null:
         result = nullptr;
         break;
@@ -347,6 +438,83 @@
             return false;
         break;
 
+    case API::Object::Type::RenderLayer: {
+        RefPtr<API::Object> renderer;
+        bool isReflection;
+        bool isClipping;
+        bool isClipped;
+        uint32_t compositingLayerTypeAsUInt32;
+        WebCore::IntRect absoluteBoundingBox;
+        double backingStoreMemoryEstimate;
+        RefPtr<API::Object> negativeZOrderList;
+        RefPtr<API::Object> normalFlowList;
+        RefPtr<API::Object> positiveZOrderList;
+        RefPtr<API::Object> frameContentsLayer;
+
+        if (!decode(decoder, renderer))
+            return false;
+        if (renderer->type() != API::Object::Type::RenderObject)
+            return false;
+        if (!decoder.decode(isReflection))
+            return false;
+        if (!decoder.decode(isClipping))
+            return false;
+        if (!decoder.decode(isClipped))
+            return false;
+        if (!decoder.decode(compositingLayerTypeAsUInt32))
+            return false;
+        if (!decoder.decode(absoluteBoundingBox))
+            return false;
+        if (!decoder.decode(backingStoreMemoryEstimate))
+            return false;
+        if (!decode(decoder, negativeZOrderList))
+            return false;
+        if (!decode(decoder, normalFlowList))
+            return false;
+        if (!decode(decoder, positiveZOrderList))
+            return false;
+        if (!decode(decoder, frameContentsLayer))
+            return false;
+
+        result = WebRenderLayer::create(static_pointer_cast<WebRenderObject>(renderer), isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32), absoluteBoundingBox, backingStoreMemoryEstimate, static_pointer_cast<API::Array>(negativeZOrderList), static_pointer_cast<API::Array>(normalFlowList), static_pointer_cast<API::Array>(positiveZOrderList), static_pointer_cast<WebRenderLayer>(frameContentsLayer));
+        break;
+    }
+
+    case API::Object::Type::RenderObject: {
+        String name;
+        String textSnippet;
+        String elementTagName;
+        String elementID;
+        unsigned textLength;
+        RefPtr<API::Object> elementClassNames;
+        WebCore::IntPoint absolutePosition;
+        WebCore::IntRect frameRect;
+        RefPtr<API::Object> children;
+
+        if (!decoder.decode(name))
+            return false;
+        if (!decoder.decode(elementTagName))
+            return false;
+        if (!decoder.decode(elementID))
+            return false;
+        if (!decode(decoder, elementClassNames))
+            return false;
+        if (!decoder.decode(absolutePosition))
+            return false;
+        if (!decoder.decode(frameRect))
+            return false;
+        if (!decoder.decode(textSnippet))
+            return false;
+        if (!decoder.decode(textLength))
+            return false;
+        if (!decode(decoder, children))
+            return false;
+        if (children && children->type() != API::Object::Type::Array)
+            return false;
+        result = WebRenderObject::create(name, elementTagName, elementID, static_pointer_cast<API::Array>(elementClassNames), absolutePosition, frameRect, textSnippet, textLength, static_pointer_cast<API::Array>(children));
+        break;
+    }
+
     case API::Object::Type::SerializedScriptValue: {
         IPC::DataReference dataReference;
         if (!decoder.decode(dataReference))
@@ -391,6 +559,14 @@
             return false;
         break;
 
+    case API::Object::Type::UserContentURLPattern: {
+        String string;
+        if (!decoder.decode(string))
+            return false;
+        result = API::UserContentURLPattern::create(string);
+        break;
+    }
+
     default:
         ASSERT_NOT_REACHED();
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to