Title: [160378] trunk/Source/WebKit2
Revision
160378
Author
[email protected]
Date
2013-12-10 11:43:10 -0800 (Tue, 10 Dec 2013)

Log Message

More UserData work
https://bugs.webkit.org/show_bug.cgi?id=125524

Reviewed by Dan Bernstein.

* Shared/APIObject.h:
* Shared/UserData.cpp:
(WebKit::UserData::transform):
New helper function that takes an API::Object and returns a new API::Object with all "sub-objects" (arrays etc)
transformed by calling the transformer.

* Shared/UserData.h:
(WebKit::UserData::object):
New getter.

* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::apiObjectByConvertingToHandles):
Helper function that creates a new API::Object graph by converting WebFrameProxy objects to FrameHandles.

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::apiObjectByConvertingFromHandles):
Helper function that creates a new API::Object graph by converting FrameHandles to WebFrame objects.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (160377 => 160378)


--- trunk/Source/WebKit2/ChangeLog	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/ChangeLog	2013-12-10 19:43:10 UTC (rev 160378)
@@ -1,3 +1,28 @@
+2013-12-10  Anders Carlsson  <[email protected]>
+
+        More UserData work
+        https://bugs.webkit.org/show_bug.cgi?id=125524
+
+        Reviewed by Dan Bernstein.
+
+        * Shared/APIObject.h:
+        * Shared/UserData.cpp:
+        (WebKit::UserData::transform):
+        New helper function that takes an API::Object and returns a new API::Object with all "sub-objects" (arrays etc)
+        transformed by calling the transformer.
+
+        * Shared/UserData.h:
+        (WebKit::UserData::object):
+        New getter.
+
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::apiObjectByConvertingToHandles):
+        Helper function that creates a new API::Object graph by converting WebFrameProxy objects to FrameHandles.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::apiObjectByConvertingFromHandles):
+        Helper function that creates a new API::Object graph by converting FrameHandles to WebFrame objects.
+
 2013-12-10  Alberto Garcia  <[email protected]>
 
         [WK2] [SOUP] Allow running the network process with an arbitrary prefix command

Modified: trunk/Source/WebKit2/Shared/APIObject.h (160377 => 160378)


--- trunk/Source/WebKit2/Shared/APIObject.h	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/Shared/APIObject.h	2013-12-10 19:43:10 UTC (rev 160378)
@@ -26,7 +26,9 @@
 #ifndef APIObject_h
 #define APIObject_h
 
+#include <functional>
 #include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
 
 #if PLATFORM(MAC)
 #include "WKFoundation.h"

Modified: trunk/Source/WebKit2/Shared/UserData.cpp (160377 => 160378)


--- trunk/Source/WebKit2/Shared/UserData.cpp	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/Shared/UserData.cpp	2013-12-10 19:43:10 UTC (rev 160378)
@@ -44,6 +44,28 @@
 {
 }
 
+RefPtr<API::Object> UserData::transform(API::Object* object, const std::function<RefPtr<API::Object> (const API::Object&)> transformer)
+{
+    if (!object)
+        return nullptr;
+
+    if (object->type() == API::Object::Type::Array) {
+        auto& array = static_cast<API::Array&>(*object);
+
+        Vector<RefPtr<API::Object>> elements;
+        elements.reserveInitialCapacity(array.elements().size());
+        for (const auto& element : array.elements())
+            elements.uncheckedAppend(transform(element.get(), transformer));
+
+        return API::Array::create(std::move(elements));
+    }
+
+    if (auto transformedObject = transformer(*object))
+        return transformedObject;
+
+    return object;
+}
+
 void UserData::encode(CoreIPC::ArgumentEncoder& encoder) const
 {
     encode(encoder, m_object.get());

Modified: trunk/Source/WebKit2/Shared/UserData.h (160377 => 160378)


--- trunk/Source/WebKit2/Shared/UserData.h	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/Shared/UserData.h	2013-12-10 19:43:10 UTC (rev 160378)
@@ -45,6 +45,10 @@
     explicit UserData(API::Object* = nullptr);
     ~UserData();
 
+    static RefPtr<API::Object> transform(API::Object*, const std::function<RefPtr<API::Object> (const API::Object&)> transformer);
+
+    API::Object* object() const { return m_object.get(); }
+
     void encode(CoreIPC::ArgumentEncoder&) const;
     static bool decode(CoreIPC::ArgumentDecoder&, UserData&);
 

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (160377 => 160378)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2013-12-10 19:43:10 UTC (rev 160378)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "WebProcessProxy.h"
 
+#include "APIFrameHandle.h"
 #include "CustomProtocolManagerProxyMessages.h"
 #include "DataReference.h"
 #include "DownloadProxyMap.h"
@@ -33,6 +34,7 @@
 #include "PluginProcessManager.h"
 #include "TextChecker.h"
 #include "TextCheckerState.h"
+#include "UserData.h"
 #include "WebBackForwardListItem.h"
 #include "WebContext.h"
 #include "WebNavigationDataStore.h"
@@ -685,4 +687,19 @@
     WebCore::disableSuddenTermination();
 }
 
+RefPtr<API::Object> WebProcessProxy::apiObjectByConvertingToHandles(API::Object* object)
+{
+    return UserData::transform(object, [](const API::Object& object) -> RefPtr<API::Object> {
+        switch (object.type()) {
+        case API::Object::Type::Frame: {
+            auto& frame = static_cast<const WebFrameProxy&>(object);
+            return API::FrameHandle::create(frame.frameID());
+        }
+
+        default:
+            return nullptr;
+        }
+    });
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (160377 => 160378)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2013-12-10 19:43:10 UTC (rev 160378)
@@ -126,6 +126,8 @@
 
     void requestTermination();
 
+    RefPtr<API::Object> apiObjectByConvertingToHandles(API::Object*);
+
 private:
     explicit WebProcessProxy(WebContext&);
 

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (160377 => 160378)


--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2013-12-10 19:43:10 UTC (rev 160378)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "WebProcess.h"
 
+#include "APIFrameHandle.h"
 #include "AuthenticationManager.h"
 #include "EventDispatcher.h"
 #include "InjectedBundle.h"
@@ -33,6 +34,7 @@
 #include "Logging.h"
 #include "PluginProcessConnectionManager.h"
 #include "StatisticsData.h"
+#include "UserData.h"
 #include "WebApplicationCacheManager.h"
 #include "WebConnectionToUIProcess.h"
 #include "WebContextMessages.h"
@@ -1184,4 +1186,20 @@
 #endif
 }
 
+RefPtr<API::Object> WebProcess::apiObjectByConvertingFromHandles(API::Object* object)
+{
+    return UserData::transform(object, [this](const API::Object& object) -> RefPtr<API::Object> {
+        switch (object.type()) {
+        case API::Object::Type::FrameHandle: {
+            auto& frameHandle = static_cast<const API::FrameHandle&>(object);
+
+            return webFrame(frameHandle.frameID());
+        }
+
+        default:
+            return nullptr;
+        }
+    });
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (160377 => 160378)


--- trunk/Source/WebKit2/WebProcess/WebProcess.h	2013-12-10 19:37:29 UTC (rev 160377)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h	2013-12-10 19:43:10 UTC (rev 160378)
@@ -47,6 +47,10 @@
 #include <dispatch/dispatch.h>
 #endif
 
+namespace API {
+class Object;
+}
+
 namespace WebCore {
 class PageGroup;
 class ResourceRequest;
@@ -181,6 +185,8 @@
     void resetAllGeolocationPermissions();
 #endif // PLATFORM(IOS)
 
+    RefPtr<API::Object> apiObjectByConvertingFromHandles(API::Object*);
+
 private:
     WebProcess();
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to