Title: [177709] trunk/Source/WebKit2
Revision
177709
Author
[email protected]
Date
2014-12-23 17:01:18 -0800 (Tue, 23 Dec 2014)

Log Message

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:

Modified Paths

Added Paths

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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to