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