Title: [257962] trunk
Revision
257962
Author
achristen...@apple.com
Date
2020-03-05 18:33:30 -0800 (Thu, 05 Mar 2020)

Log Message

Add WKFrameInfo._parentFrameHandle SPI
https://bugs.webkit.org/show_bug.cgi?id=208674

Reviewed by Brady Eidson.

Source/WebKit:

I got carried away and removed it in r257872 but it's still needed for <rdar://problem/57201034>
Covered by API tests.

* Shared/FrameInfoData.cpp:
(WebKit::FrameInfoData::encode const):
(WebKit::FrameInfoData::decode):
* Shared/FrameInfoData.h:
* UIProcess/API/APIFrameInfo.cpp:
(API::FrameInfo::parentFrameHandle const):
* UIProcess/API/APIFrameInfo.h:
* UIProcess/API/APIFrameTreeNode.cpp:
(API::FrameTreeNode::parentFrameHandle const):
* UIProcess/API/APIFrameTreeNode.h:
* UIProcess/API/Cocoa/WKFrameInfo.mm:
(-[WKFrameInfo _parentFrameHandle]):
* UIProcess/API/Cocoa/WKFrameInfoPrivate.h:
* UIProcess/API/Cocoa/_WKFrameTreeNode.mm:
(-[_WKFrameTreeNode _parentFrameHandle]):
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
* WebProcess/WebPage/WebFrame.cpp:
(WebKit::WebFrame::info const):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (257961 => 257962)


--- trunk/Source/WebKit/ChangeLog	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/ChangeLog	2020-03-06 02:33:30 UTC (rev 257962)
@@ -1,3 +1,33 @@
+2020-03-05  Alex Christensen  <achristen...@webkit.org>
+
+        Add WKFrameInfo._parentFrameHandle SPI
+        https://bugs.webkit.org/show_bug.cgi?id=208674
+
+        Reviewed by Brady Eidson.
+
+        I got carried away and removed it in r257872 but it's still needed for <rdar://problem/57201034>
+        Covered by API tests.
+
+        * Shared/FrameInfoData.cpp:
+        (WebKit::FrameInfoData::encode const):
+        (WebKit::FrameInfoData::decode):
+        * Shared/FrameInfoData.h:
+        * UIProcess/API/APIFrameInfo.cpp:
+        (API::FrameInfo::parentFrameHandle const):
+        * UIProcess/API/APIFrameInfo.h:
+        * UIProcess/API/APIFrameTreeNode.cpp:
+        (API::FrameTreeNode::parentFrameHandle const):
+        * UIProcess/API/APIFrameTreeNode.h:
+        * UIProcess/API/Cocoa/WKFrameInfo.mm:
+        (-[WKFrameInfo _parentFrameHandle]):
+        * UIProcess/API/Cocoa/WKFrameInfoPrivate.h:
+        * UIProcess/API/Cocoa/_WKFrameTreeNode.mm:
+        (-[_WKFrameTreeNode _parentFrameHandle]):
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+        * WebProcess/WebPage/WebFrame.cpp:
+        (WebKit::WebFrame::info const):
+
 2020-03-05  Kate Cheney  <katherine_che...@apple.com>
 
         Add web page additions to WebPageProxy

Modified: trunk/Source/WebKit/Shared/FrameInfoData.cpp (257961 => 257962)


--- trunk/Source/WebKit/Shared/FrameInfoData.cpp	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/Shared/FrameInfoData.cpp	2020-03-06 02:33:30 UTC (rev 257962)
@@ -36,6 +36,7 @@
     encoder << request;
     encoder << securityOrigin;
     encoder << frameID;
+    encoder << parentFrameID;
 }
 
 Optional<FrameInfoData> FrameInfoData::decode(IPC::Decoder& decoder)
@@ -60,11 +61,17 @@
     if (!frameID)
         return WTF::nullopt;
 
+    Optional<Optional<WebCore::FrameIdentifier>> parentFrameID;
+    decoder >> parentFrameID;
+    if (!parentFrameID)
+        return WTF::nullopt;
+
     return {{
         WTFMove(*isMainFrame),
         WTFMove(*request),
         WTFMove(*securityOrigin),
-        WTFMove(*frameID)
+        WTFMove(*frameID),
+        WTFMove(*parentFrameID)
     }};
 }
 

Modified: trunk/Source/WebKit/Shared/FrameInfoData.h (257961 => 257962)


--- trunk/Source/WebKit/Shared/FrameInfoData.h	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/Shared/FrameInfoData.h	2020-03-06 02:33:30 UTC (rev 257962)
@@ -44,6 +44,7 @@
     WebCore::ResourceRequest request;
     WebCore::SecurityOriginData securityOrigin;
     Optional<WebCore::FrameIdentifier> frameID;
+    Optional<WebCore::FrameIdentifier> parentFrameID;
 };
 
 }

Modified: trunk/Source/WebKit/UIProcess/API/APIFrameInfo.cpp (257961 => 257962)


--- trunk/Source/WebKit/UIProcess/API/APIFrameInfo.cpp	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/UIProcess/API/APIFrameInfo.cpp	2020-03-06 02:33:30 UTC (rev 257962)
@@ -49,4 +49,11 @@
     return FrameHandle::create(m_data.frameID ? *m_data.frameID : WebCore::FrameIdentifier { });
 }
 
+RefPtr<FrameHandle> FrameInfo::parentFrameHandle() const
+{
+    if (!m_data.parentFrameID)
+        return nullptr;
+    return FrameHandle::create(*m_data.parentFrameID);
+}
+
 } // namespace API

Modified: trunk/Source/WebKit/UIProcess/API/APIFrameInfo.h (257961 => 257962)


--- trunk/Source/WebKit/UIProcess/API/APIFrameInfo.h	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/UIProcess/API/APIFrameInfo.h	2020-03-06 02:33:30 UTC (rev 257962)
@@ -54,6 +54,7 @@
     WebCore::SecurityOriginData& securityOrigin() { return m_data.securityOrigin; }
     Ref<FrameHandle> handle() const;
     WebKit::WebPageProxy* page() { return m_page.get(); }
+    RefPtr<FrameHandle> parentFrameHandle() const;
 
 private:
     FrameInfo(WebKit::FrameInfoData&&, WebKit::WebPageProxy*);

Modified: trunk/Source/WebKit/UIProcess/API/APIFrameTreeNode.cpp (257961 => 257962)


--- trunk/Source/WebKit/UIProcess/API/APIFrameTreeNode.cpp	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/UIProcess/API/APIFrameTreeNode.cpp	2020-03-06 02:33:30 UTC (rev 257962)
@@ -38,4 +38,9 @@
     return FrameHandle::create(m_data.info.frameID ? *m_data.info.frameID : WebCore::FrameIdentifier { });
 }
 
+RefPtr<FrameHandle> FrameTreeNode::parentFrameHandle() const
+{
+    return m_data.info.parentFrameID ? RefPtr<FrameHandle>(FrameHandle::create(*m_data.info.parentFrameID)) : nullptr;
+}
+
 } // namespace API

Modified: trunk/Source/WebKit/UIProcess/API/APIFrameTreeNode.h (257961 => 257962)


--- trunk/Source/WebKit/UIProcess/API/APIFrameTreeNode.h	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/UIProcess/API/APIFrameTreeNode.h	2020-03-06 02:33:30 UTC (rev 257962)
@@ -47,6 +47,7 @@
     const WebCore::SecurityOriginData& securityOrigin() const { return m_data.info.securityOrigin; }
     const Vector<WebKit::FrameTreeNodeData>& childFrames() const { return m_data.children; }
     Ref<FrameHandle> handle() const;
+    RefPtr<FrameHandle> parentFrameHandle() const;
 
 private:
     FrameTreeNode(WebKit::FrameTreeNodeData&& data, WebKit::WebPageProxy& page)

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfo.mm (257961 => 257962)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfo.mm	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfo.mm	2020-03-06 02:33:30 UTC (rev 257962)
@@ -89,4 +89,9 @@
     return [[wrapper(_frameInfo->handle()) retain] autorelease];
 }
 
+- (_WKFrameHandle *)_parentFrameHandle
+{
+    return [[wrapper(_frameInfo->parentFrameHandle()) retain] autorelease];
+}
+
 @end

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfoPrivate.h (257961 => 257962)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfoPrivate.h	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfoPrivate.h	2020-03-06 02:33:30 UTC (rev 257962)
@@ -30,5 +30,6 @@
 @interface WKFrameInfo (WKPrivate)
 
 @property (nonatomic, readonly, copy, nonnull) _WKFrameHandle *_handle WK_API_AVAILABLE(macos(10.12), ios(10.0));
+@property (nonatomic, readonly, copy, nullable) _WKFrameHandle *_parentFrameHandle WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
 @end

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKFrameTreeNode.mm (257961 => 257962)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKFrameTreeNode.mm	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKFrameTreeNode.mm	2020-03-06 02:33:30 UTC (rev 257962)
@@ -79,6 +79,11 @@
     return [[wrapper(_node->handle()) retain] autorelease];
 }
 
+- (_WKFrameHandle *)_parentFrameHandle
+{
+    return [[wrapper(_node->parentFrameHandle()) retain] autorelease];
+}
+
 - (API::Object&)_apiObject
 {
     return *_node;

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (257961 => 257962)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2020-03-06 02:33:30 UTC (rev 257962)
@@ -944,14 +944,19 @@
 
     auto* requestingFrame = requester.frameID() ? WebProcess::singleton().webFrame(requester.frameID()) : nullptr;
     Optional<WebCore::FrameIdentifier> originatingFrameID;
-    if (requestingFrame)
+    Optional<WebCore::FrameIdentifier> parentFrameID;
+    if (requestingFrame) {
         originatingFrameID = requestingFrame->frameID();
+        if (auto* parentFrame = requestingFrame->parentFrame())
+            parentFrameID = parentFrame->frameID();
+    }
 
     FrameInfoData originatingFrameInfoData {
         navigationAction.initiatedByMainFrame() == InitiatedByMainFrame::Yes,
         ResourceRequest { requester.url() },
         requester.securityOrigin().data(),
-        WTFMove(originatingFrameID)
+        WTFMove(originatingFrameID),
+        WTFMove(parentFrameID),
     };
 
     Optional<WebPageProxyIdentifier> originatingPageID;

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp (257961 => 257962)


--- trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp	2020-03-06 02:33:30 UTC (rev 257962)
@@ -188,12 +188,15 @@
 
 FrameInfoData WebFrame::info() const
 {
+    auto* parent = parentFrame();
+
     FrameInfoData info {
         isMainFrame(),
         // FIXME: This should use the full request.
         ResourceRequest(URL(URL(), url())),
         SecurityOriginData::fromFrame(m_coreFrame),
-        m_frameID
+        m_frameID,
+        parent ? Optional<WebCore::FrameIdentifier> { parent->frameID() } : WTF::nullopt,
     };
 
     return info;

Modified: trunk/Tools/ChangeLog (257961 => 257962)


--- trunk/Tools/ChangeLog	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Tools/ChangeLog	2020-03-06 02:33:30 UTC (rev 257962)
@@ -1,3 +1,12 @@
+2020-03-05  Alex Christensen  <achristen...@webkit.org>
+
+        Add WKFrameInfo._parentFrameHandle SPI
+        https://bugs.webkit.org/show_bug.cgi?id=208674
+
+        Reviewed by Brady Eidson.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
+
 2020-03-05  Jiewen Tan  <jiewen_...@apple.com>
 
         [WebAuthn] Implement SPI -[_WKWebAuthenticationPanelDelegate panel:selectAssertionResponse:source:completionHandler:]

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm (257961 => 257962)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm	2020-03-06 01:22:15 UTC (rev 257961)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm	2020-03-06 02:33:30 UTC (rev 257962)
@@ -1080,6 +1080,11 @@
         EXPECT_NE(child._handle.frameID, grandchild2._handle.frameID);
         EXPECT_NE(grandchild1._handle.frameID, grandchild2._handle.frameID);
 
+        EXPECT_NULL(mainFrame._parentFrameHandle);
+        EXPECT_EQ(mainFrame._handle.frameID, child._parentFrameHandle.frameID);
+        EXPECT_EQ(child._handle.frameID, grandchild1._parentFrameHandle.frameID);
+        EXPECT_EQ(child._handle.frameID, grandchild2._parentFrameHandle.frameID);
+
         [webView _callAsyncJavaScript:@"window.customProperty = 'customValue'" arguments:nil inFrame:grandchild1 inContentWorld:[WKContentWorld defaultClientWorld] completionHandler:^(id, NSError *error) {
             [webView _evaluateJavaScript:@"window.location.href + window.customProperty" inFrame:grandchild1 inContentWorld:[WKContentWorld defaultClientWorld] completionHandler:^(id result, NSError *error) {
                 EXPECT_WK_STREQ(result, "frame://host3/customValue");
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to