Diff
Modified: trunk/Source/WebKit2/ChangeLog (177708 => 177709)
--- trunk/Source/WebKit2/ChangeLog 2014-12-24 01:00:20 UTC (rev 177708)
+++ trunk/Source/WebKit2/ChangeLog 2014-12-24 01:01:18 UTC (rev 177709)
@@ -1,3 +1,22 @@
+2014-12-23 Anders Carlsson <[email protected]>
+
+ Handle coding object graphs in the UI process
+ https://bugs.webkit.org/show_bug.cgi?id=139925
+
+ Reviewed by Sam Weinig.
+
+ * UIProcess/Cocoa/WebProcessProxyCocoa.mm: Added.
+ (WebKit::WebProcessProxy::transformHandlesToObjects):
+ (WebKit::WebProcessProxy::transformObjectsToHandles):
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::transformHandlesToObjects):
+ (WebKit::WebProcessProxy::transformObjectsToHandles):
+ * UIProcess/WebProcessProxy.h:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::transformObjectsToHandles):
+ * WebProcess/WebProcess.h:
+
2014-12-23 Sam Weinig <[email protected]>
ContextMenuContextData should store a ShareableBitmap not a ShareableBitmap::Handle
Added: trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessProxyCocoa.mm (0 => 177709)
--- trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessProxyCocoa.mm (rev 0)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessProxyCocoa.mm 2014-12-24 01:01:18 UTC (rev 177709)
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "WebProcessProxy.h"
+
+#import "ObjCObjectGraph.h"
+#import "WKBrowsingContextControllerInternal.h"
+#import "WKBrowsingContextHandleInternal.h"
+
+namespace WebKit {
+
+RefPtr<ObjCObjectGraph> WebProcessProxy::transformHandlesToObjects(ObjCObjectGraph& objectGraph)
+{
+ struct Transformer final : ObjCObjectGraph::Transformer {
+ Transformer(WebProcessProxy& webProcessProxy)
+ : m_webProcessProxy(webProcessProxy)
+ {
+ }
+
+ virtual bool shouldTransformObject(id object) const override
+ {
+#if WK_API_ENABLED
+ if (dynamic_objc_cast<WKBrowsingContextHandle>(object))
+ return true;
+#endif
+ return false;
+ }
+
+ virtual RetainPtr<id> transformObject(id object) const
+ {
+#if WK_API_ENABLED
+ if (auto* handle = dynamic_objc_cast<WKBrowsingContextHandle>(object)) {
+ if (auto* webPageProxy = m_webProcessProxy.webPage(handle.pageID))
+ return [WKBrowsingContextController _browsingContextControllerForPageRef:toAPI(webPageProxy)];
+
+ return [NSNull null];
+ }
+#endif
+ return object;
+ }
+
+ WebProcessProxy& m_webProcessProxy;
+ };
+
+ return ObjCObjectGraph::create(ObjCObjectGraph::transform(objectGraph.rootObject(), Transformer(*this)).get());
+}
+
+RefPtr<ObjCObjectGraph> WebProcessProxy::transformObjectsToHandles(ObjCObjectGraph& objectGraph)
+{
+ struct Transformer final : ObjCObjectGraph::Transformer {
+ virtual bool shouldTransformObject(id object) const override
+ {
+#if WK_API_ENABLED
+ if (dynamic_objc_cast<WKBrowsingContextController>(object))
+ return true;
+#endif
+ return false;
+ }
+
+ virtual RetainPtr<id> transformObject(id object) const
+ {
+#if WK_API_ENABLED
+ if (auto* controller = dynamic_objc_cast<WKBrowsingContextController>(object))
+ return controller.handle;
+#endif
+ return object;
+ }
+ };
+
+ return ObjCObjectGraph::create(ObjCObjectGraph::transform(objectGraph.rootObject(), Transformer()).get());
+}
+
+}
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (177708 => 177709)
--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2014-12-24 01:00:20 UTC (rev 177708)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2014-12-24 01:01:18 UTC (rev 177709)
@@ -57,6 +57,7 @@
#include <wtf/text/WTFString.h>
#if PLATFORM(COCOA)
+#include "ObjCObjectGraph.h"
#include "PDFPlugin.h"
#endif
@@ -664,6 +665,9 @@
case API::Object::Type::FrameHandle:
case API::Object::Type::PageHandle:
case API::Object::Type::PageGroupHandle:
+#if PLATFORM(COCOA)
+ case API::Object::Type::ObjCObjectGraph:
+#endif
return true;
default:
@@ -683,6 +687,10 @@
case API::Object::Type::PageHandle:
return m_webProcessProxy.webPage(static_cast<API::PageHandle&>(object).pageID());
+#if PLATFORM(COCOA)
+ case API::Object::Type::ObjCObjectGraph:
+ return m_webProcessProxy.transformHandlesToObjects(static_cast<ObjCObjectGraph&>(object));;
+#endif
default:
return &object;
}
@@ -703,6 +711,9 @@
case API::Object::Type::Frame:
case API::Object::Type::Page:
case API::Object::Type::PageGroup:
+#if PLATFORM(COCOA)
+ case API::Object::Type::ObjCObjectGraph:
+#endif
return true;
default:
@@ -722,13 +733,18 @@
case API::Object::Type::PageGroup:
return API::PageGroupHandle::create(WebPageGroupData(static_cast<const WebPageGroup&>(object).data()));
+#if PLATFORM(COCOA)
+ case API::Object::Type::ObjCObjectGraph:
+ return transformObjectsToHandles(static_cast<ObjCObjectGraph&>(object));
+#endif
+
default:
return &object;
}
}
- } transformer;
+ };
- return UserData::transform(object, transformer);
+ return UserData::transform(object, Transformer());
}
void WebProcessProxy::sendProcessWillSuspend()
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (177708 => 177709)
--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h 2014-12-24 01:00:20 UTC (rev 177708)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h 2014-12-24 01:01:18 UTC (rev 177709)
@@ -127,8 +127,13 @@
void requestTermination();
RefPtr<API::Object> transformHandlesToObjects(API::Object*);
- RefPtr<API::Object> transformObjectsToHandles(API::Object*);
+ static RefPtr<API::Object> transformObjectsToHandles(API::Object*);
+#if PLATFORM(COCOA)
+ RefPtr<ObjCObjectGraph> transformHandlesToObjects(ObjCObjectGraph&);
+ static RefPtr<ObjCObjectGraph> transformObjectsToHandles(ObjCObjectGraph&);
+#endif
+
void windowServerConnectionStateChanged();
void sendProcessWillSuspend();
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (177708 => 177709)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2014-12-24 01:00:20 UTC (rev 177708)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2014-12-24 01:01:18 UTC (rev 177709)
@@ -136,6 +136,7 @@
1A043DC2124FF87500FFBFB5 /* PluginProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A043DC0124FF87500FFBFB5 /* PluginProxy.cpp */; };
1A043F6912514D8B00FFBFB5 /* WebProcessConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A043F6712514D8B00FFBFB5 /* WebProcessConnectionMessageReceiver.cpp */; };
1A043F6A12514D8B00FFBFB5 /* WebProcessConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A043F6812514D8B00FFBFB5 /* WebProcessConnectionMessages.h */; };
+ 1A04F6191A4A3A7A00A21B6E /* WebProcessProxyCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A04F6171A4A3A7A00A21B6E /* WebProcessProxyCocoa.mm */; };
1A07D2F81919B3A900ECDA16 /* __init__.py in Copy Message Generation Scripts */ = {isa = PBXBuildFile; fileRef = 0FC0856E187CE0A900780D86 /* __init__.py */; };
1A07D2F91919B3A900ECDA16 /* messages.py in Copy Message Generation Scripts */ = {isa = PBXBuildFile; fileRef = 0FC0856F187CE0A900780D86 /* messages.py */; };
1A07D2FA1919B3A900ECDA16 /* model.py in Copy Message Generation Scripts */ = {isa = PBXBuildFile; fileRef = 0FC08570187CE0A900780D86 /* model.py */; };
@@ -2116,6 +2117,7 @@
1A043F5912514CF300FFBFB5 /* WebProcessConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebProcessConnection.messages.in; sourceTree = "<group>"; };
1A043F6712514D8B00FFBFB5 /* WebProcessConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebProcessConnectionMessageReceiver.cpp; sourceTree = "<group>"; };
1A043F6812514D8B00FFBFB5 /* WebProcessConnectionMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessConnectionMessages.h; sourceTree = "<group>"; };
+ 1A04F6171A4A3A7A00A21B6E /* WebProcessProxyCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessProxyCocoa.mm; sourceTree = "<group>"; };
1A0EC601124A9F2C007EF4A5 /* PluginProcessManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginProcessManager.h; sourceTree = "<group>"; };
1A0EC602124A9F2C007EF4A5 /* PluginProcessManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PluginProcessManager.cpp; sourceTree = "<group>"; };
1A0EC6B1124BBD36007EF4A5 /* PluginProcess.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PluginProcess.messages.in; sourceTree = "<group>"; };
@@ -4681,6 +4683,7 @@
1AFE436318B6C081009C7A48 /* UIDelegate.mm */,
1AC0273E196622D600C12B75 /* WebPageProxyCocoa.mm */,
7CE4D2151A49148400C7F152 /* WebProcessPoolCocoa.mm */,
+ 1A04F6171A4A3A7A00A21B6E /* WebProcessProxyCocoa.mm */,
1AD01BCB1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.h */,
1AD01BCA1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.mm */,
2D7AAFD218C8640600A7ACD4 /* WKWebViewContentProvider.h */,
@@ -9247,6 +9250,7 @@
2D819BA11862800E001F03D1 /* ViewGestureGeometryCollectorMessageReceiver.cpp in Sources */,
2D6CD11A189058A500E5A4A0 /* ViewSnapshotStore.mm in Sources */,
2684054F18B86C8E0022C38B /* ViewUpdateDispatcher.cpp in Sources */,
+ 1A04F6191A4A3A7A00A21B6E /* WebProcessProxyCocoa.mm in Sources */,
2684055218B86ED60022C38B /* ViewUpdateDispatcherMessageReceiver.cpp in Sources */,
2684054C18B86C350022C38B /* VisibleContentRectUpdateInfo.cpp in Sources */,
1A0F29E3120B44420053D1B9 /* VisitedLinkProvider.cpp in Sources */,
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (177708 => 177709)
--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2014-12-24 01:00:20 UTC (rev 177708)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2014-12-24 01:01:18 UTC (rev 177709)
@@ -1281,11 +1281,6 @@
RefPtr<API::Object> WebProcess::transformObjectsToHandles(API::Object* object)
{
struct Transformer final : UserData::Transformer {
- Transformer(WebProcess& webProcess)
- : m_webProcess(webProcess)
- {
- }
-
virtual bool shouldTransformObjectOfType(API::Object::Type type) const override
{
switch (type) {
@@ -1320,18 +1315,16 @@
#if PLATFORM(COCOA)
case API::Object::Type::ObjCObjectGraph:
- return m_webProcess.transformObjectsToHandles(static_cast<ObjCObjectGraph&>(object));
+ return transformObjectsToHandles(static_cast<ObjCObjectGraph&>(object));
#endif
default:
return &object;
}
}
-
- WebProcess& m_webProcess;
};
- return UserData::transform(object, Transformer(*this));
+ return UserData::transform(object, Transformer());
}
void WebProcess::setMemoryCacheDisabled(bool disabled)
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (177708 => 177709)
--- trunk/Source/WebKit2/WebProcess/WebProcess.h 2014-12-24 01:00:20 UTC (rev 177708)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h 2014-12-24 01:01:18 UTC (rev 177709)
@@ -188,8 +188,13 @@
#endif
RefPtr<API::Object> transformHandlesToObjects(API::Object*);
- RefPtr<API::Object> transformObjectsToHandles(API::Object*);
+ static RefPtr<API::Object> transformObjectsToHandles(API::Object*);
+#if PLATFORM(COCOA)
+ RefPtr<ObjCObjectGraph> transformHandlesToObjects(ObjCObjectGraph&);
+ static RefPtr<ObjCObjectGraph> transformObjectsToHandles(ObjCObjectGraph&);
+#endif
+
#if ENABLE(SERVICE_CONTROLS)
bool hasImageServices() const { return m_hasImageServices; }
bool hasSelectionServices() const { return m_hasSelectionServices; }
@@ -276,11 +281,6 @@
virtual void stopRunLoop() override;
#endif
-#if PLATFORM(COCOA)
- RefPtr<ObjCObjectGraph> transformHandlesToObjects(ObjCObjectGraph&);
- RefPtr<ObjCObjectGraph> transformObjectsToHandles(ObjCObjectGraph&);
-#endif
-
void platformInitializeProcess(const ChildProcessInitializationParameters&);
// IPC::Connection::Client