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();