Title: [256934] trunk/Source/WebKit
Revision
256934
Author
[email protected]
Date
2020-02-19 12:22:00 -0800 (Wed, 19 Feb 2020)

Log Message

WebPageProxy::PolicyDecisionSender should send a struct instead of many parameters
https://bugs.webkit.org/show_bug.cgi?id=207936
<rdar://problem/59590676>

Reviewed by Alex Christensen.

* Shared/PolicyDecision.h: Added.
(WebKit::PolicyDecision::encode const):
(WebKit::PolicyDecision::decode):
* UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::PolicyDecisionSender::send):
(WebKit::WebPageProxy::PolicyDecisionSender::identifier):
(WebKit::WebPageProxy::receivedPolicyDecision):
(WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
(WebKit::WebPageProxy::decidePolicyForNavigationAction):
(WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared):
(WebKit::WebPageProxy::decidePolicyForNewWindowAction):
(WebKit::WebPageProxy::decidePolicyForResponseShared):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
* WebProcess/WebPage/WebFrame.cpp:
(WebKit::WebFrame::didReceivePolicyDecision):
* WebProcess/WebPage/WebFrame.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::didReceivePolicyDecision):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (256933 => 256934)


--- trunk/Source/WebKit/ChangeLog	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/ChangeLog	2020-02-19 20:22:00 UTC (rev 256934)
@@ -1,3 +1,39 @@
+2020-02-19  Kate Cheney  <[email protected]>
+
+        WebPageProxy::PolicyDecisionSender should send a struct instead of many parameters
+        https://bugs.webkit.org/show_bug.cgi?id=207936
+        <rdar://problem/59590676>
+
+        Reviewed by Alex Christensen.
+
+        * Shared/PolicyDecision.h: Added.
+        (WebKit::PolicyDecision::encode const):
+        (WebKit::PolicyDecision::decode):
+        * UIProcess/ProvisionalPageProxy.cpp:
+        (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::PolicyDecisionSender::send):
+        (WebKit::WebPageProxy::PolicyDecisionSender::identifier):
+        (WebKit::WebPageProxy::receivedPolicyDecision):
+        (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
+        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+        (WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared):
+        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
+        (WebKit::WebPageProxy::decidePolicyForResponseShared):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+        * WebProcess/WebPage/WebFrame.cpp:
+        (WebKit::WebFrame::didReceivePolicyDecision):
+        * WebProcess/WebPage/WebFrame.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::didReceivePolicyDecision):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
 2020-02-18  Wenson Hsieh  <[email protected]>
 
         [iOS] Safari sometimes crashes under ViewGestureController::beginSwipeGesture

Added: trunk/Source/WebKit/Shared/PolicyDecision.h (0 => 256934)


--- trunk/Source/WebKit/Shared/PolicyDecision.h	                        (rev 0)
+++ trunk/Source/WebKit/Shared/PolicyDecision.h	2020-02-19 20:22:00 UTC (rev 256934)
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#pragma once
+
+#include "DownloadID.h"
+#include "WebsitePoliciesData.h"
+#include <wtf/Forward.h>
+
+namespace WebKit {
+
+struct PolicyDecision {
+    WebCore::PolicyCheckIdentifier identifier { };
+    WebCore::PolicyAction policyAction { WebCore::PolicyAction::Ignore };
+    uint64_t navigationID { 0 };
+    DownloadID downloadID { 0 };
+    Optional<WebsitePoliciesData> websitePoliciesData { WTF::nullopt };
+
+    template<class Encoder>
+    void encode(Encoder& encoder) const
+    {
+        encoder << identifier;
+        encoder << policyAction;
+        encoder << navigationID;
+        encoder << downloadID;
+        encoder << websitePoliciesData;
+    }
+
+    template<class Decoder>
+    static Optional<PolicyDecision> decode(Decoder& decoder)
+    {
+        Optional<WebCore::PolicyCheckIdentifier> decodedIdentifier;
+        decoder >> decodedIdentifier;
+        if (!decodedIdentifier)
+            return WTF::nullopt;
+
+        Optional<WebCore::PolicyAction> decodedPolicyAction;
+        decoder >> decodedPolicyAction;
+        if (!decodedPolicyAction)
+            return WTF::nullopt;
+
+        Optional<uint64_t> decodedNavigationID;
+        decoder >> decodedNavigationID;
+        if (!decodedNavigationID)
+            return WTF::nullopt;
+
+        Optional<DownloadID> decodedDownloadID;
+        decoder >> decodedDownloadID;
+        if (!decodedDownloadID)
+            return WTF::nullopt;
+
+        Optional<Optional<WebsitePoliciesData>> decodedWebsitePoliciesData;
+        decoder >> decodedWebsitePoliciesData;
+        if (!decodedWebsitePoliciesData)
+            return WTF::nullopt;
+
+        return {{ WTFMove(*decodedIdentifier), WTFMove(*decodedPolicyAction), WTFMove(*decodedNavigationID), WTFMove(*decodedDownloadID), WTFMove(*decodedWebsitePoliciesData) }};
+
+    }
+};
+
+} // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (256933 => 256934)


--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp	2020-02-19 20:22:00 UTC (rev 256934)
@@ -345,7 +345,7 @@
     const UserData& userData, Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply&& reply)
 {
     if (!isMainFrame || (m_mainFrame && m_mainFrame->frameID() != frameID) || navigationID != m_navigationID) {
-        reply(identifier, WebCore::PolicyAction::Ignore, navigationID, DownloadID(), WTF::nullopt);
+        reply(PolicyDecision { identifier, WebCore::PolicyAction::Ignore, navigationID, DownloadID(), WTF::nullopt });
         return;
     }
 

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (256933 => 256934)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-02-19 20:22:00 UTC (rev 256934)
@@ -3045,7 +3045,7 @@
 
 class WebPageProxy::PolicyDecisionSender : public RefCounted<PolicyDecisionSender> {
 public:
-    using SendFunction = CompletionHandler<void(PolicyCheckIdentifier, PolicyAction, uint64_t newNavigationID, DownloadID, Optional<WebsitePoliciesData>)>;
+    using SendFunction = CompletionHandler<void(PolicyDecision&&)>;
 
     static Ref<PolicyDecisionSender> create(PolicyCheckIdentifier identifier, SendFunction&& sendFunction)
     {
@@ -3052,11 +3052,14 @@
         return adoptRef(*new PolicyDecisionSender(identifier, WTFMove(sendFunction)));
     }
 
-    template<typename... Args> void send(Args... args)
+    void send(PolicyDecision&& PolicyDecision)
     {
         if (m_sendFunction)
-            m_sendFunction(m_identifier, std::forward<Args>(args)...);
+            m_sendFunction(WTFMove(PolicyDecision));
     }
+
+    PolicyCheckIdentifier identifier() { return m_identifier; }
+    
 private:
     PolicyDecisionSender(PolicyCheckIdentifier identifier, SendFunction sendFunction)
         : m_sendFunction(WTFMove(sendFunction))
@@ -3154,7 +3157,7 @@
 void WebPageProxy::receivedPolicyDecision(PolicyAction action, API::Navigation* navigation, Optional<WebsitePoliciesData>&& websitePolicies, Ref<PolicyDecisionSender>&& sender, WillContinueLoadInNewProcess willContinueLoadInNewProcess)
 {
     if (!hasRunningProcess()) {
-        sender->send(PolicyAction::Ignore, 0, DownloadID(), WTF::nullopt);
+        sender->send(PolicyDecision { sender->identifier(), PolicyAction::Ignore, 0, DownloadID(), WTF::nullopt });
         return;
     }
 
@@ -3177,7 +3180,7 @@
         m_decidePolicyForResponseRequest = { };
     }
 
-    sender->send(action, navigation ? navigation->navigationID() : 0, downloadID, WTFMove(websitePolicies));
+    sender->send(PolicyDecision { sender->identifier(), action, navigation ? navigation->navigationID() : 0, downloadID, WTFMove(websitePolicies) });
 }
 
 void WebPageProxy::commitProvisionalPage(FrameIdentifier frameID, uint64_t navigationID, const String& mimeType, bool frameHasCustomContentProvider, uint32_t frameLoadType, const WebCore::CertificateInfo& certificateInfo, bool usedLegacyTLS, bool containsPluginDocument, Optional<WebCore::HasInsecureContent> forcedHasInsecureContent, const UserData& userData)
@@ -4935,8 +4938,8 @@
     auto* frame = process->webFrame(frameID);
     MESSAGE_CHECK(process, frame);
 
-    auto sender = PolicyDecisionSender::create(identifier, [webPageID, frameID, listenerID, process = process.copyRef()] (auto... args) {
-        process->send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, args...), webPageID);
+    auto sender = PolicyDecisionSender::create(identifier, [webPageID, frameID, listenerID, process = process.copyRef()] (const auto& PolicyDecision) {
+        process->send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, PolicyDecision), webPageID);
     });
 
     decidePolicyForNavigationAction(process.copyRef(), *frame, WTFMove(frameSecurityOrigin), navigationID, WTFMove(navigationActionData), WTFMove(frameInfoData), originatingPageID,
@@ -4962,7 +4965,7 @@
 
     if (!checkURLReceivedFromCurrentOrPreviousWebProcess(process, request.url())) {
         RELEASE_LOG_ERROR_IF_ALLOWED(Process, "Ignoring request to load this main resource because it is outside the sandbox");
-        sender->send(PolicyAction::Ignore, 0, DownloadID(), WTF::nullopt);
+        sender->send(PolicyDecision { sender->identifier(), PolicyAction::Ignore, 0, DownloadID(), WTF::nullopt });
         return;
     }
 
@@ -5189,7 +5192,7 @@
         originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), userData, sender.copyRef());
 
     // If the client did not respond synchronously, proceed with the load.
-    sender->send(PolicyAction::Use, navigationID, DownloadID(), WTF::nullopt);
+    sender->send(PolicyDecision { sender->identifier(), PolicyAction::Use, navigationID, DownloadID(), WTF::nullopt });
 }
 
 void WebPageProxy::decidePolicyForNewWindowAction(FrameIdentifier frameID, SecurityOriginData&& frameSecurityOrigin, PolicyCheckIdentifier identifier,
@@ -5206,8 +5209,8 @@
         RELEASE_ASSERT(processSwapRequestedByClient == ProcessSwapRequestedByClient::No);
         ASSERT_UNUSED(safeBrowsingWarning, !safeBrowsingWarning);
 
-        auto sender = PolicyDecisionSender::create(identifier, [this, protectedThis = WTFMove(protectedThis), frameID, listenerID] (auto... args) {
-            send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, args...));
+        auto sender = PolicyDecisionSender::create(identifier, [this, protectedThis = WTFMove(protectedThis), frameID, listenerID] (const auto& PolicyDecision) {
+            send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, PolicyDecision));
         });
 
         receivedPolicyDecision(policyAction, nullptr, WTF::nullopt, WTFMove(sender));
@@ -5255,8 +5258,8 @@
         RELEASE_ASSERT(processSwapRequestedByClient == ProcessSwapRequestedByClient::No);
         ASSERT_UNUSED(safeBrowsingWarning, !safeBrowsingWarning);
 
-        auto sender = PolicyDecisionSender::create(identifier, [webPageID, frameID, listenerID, process = WTFMove(process)] (auto... args) {
-            process->send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, args...), webPageID);
+        auto sender = PolicyDecisionSender::create(identifier, [webPageID, frameID, listenerID, process = WTFMove(process)] (const auto& PolicyDecision) {
+            process->send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, PolicyDecision), webPageID);
         });
         
         receivedPolicyDecision(policyAction, navigation.get(), WTF::nullopt, WTFMove(sender));

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (256933 => 256934)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-02-19 20:22:00 UTC (rev 256934)
@@ -40,6 +40,7 @@
 #include "MessageSender.h"
 #include "NotificationPermissionRequestManagerProxy.h"
 #include "PageLoadState.h"
+#include "PolicyDecision.h"
 #include "ProcessTerminationReason.h"
 #include "ProcessThrottler.h"
 #include "SandboxExtension.h"

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (256933 => 256934)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2020-02-19 20:22:00 UTC (rev 256934)
@@ -102,7 +102,7 @@
     # Policy messages
     DecidePolicyForResponse(WebCore::FrameIdentifier frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::PolicyCheckIdentifier policyCheckIdentifier, uint64_t navigationID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, String downloadAttribute, uint64_t listenerID, WebKit::UserData userData)
     DecidePolicyForNavigationActionAsync(WebCore::FrameIdentifier frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::PolicyCheckIdentifier policyCheckIdentifier, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, Optional<WebKit::WebPageProxyIdentifier> originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, IPC::FormDataReference requestBody, WebCore::ResourceResponse redirectResponse, WebKit::UserData userData, uint64_t listenerID)
-    DecidePolicyForNavigationActionSync(WebCore::FrameIdentifier frameID, bool isMainFrame, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::PolicyCheckIdentifier policyCheckIdentifier, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, Optional<WebKit::WebPageProxyIdentifier> originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, IPC::FormDataReference requestBody, WebCore::ResourceResponse redirectResponse, WebKit::UserData userData) -> (WebCore::PolicyCheckIdentifier policyCheckIdentifier, enum:uint8_t WebCore::PolicyAction policyAction, uint64_t newNavigationID, WebKit::DownloadID downloadID, Optional<WebKit::WebsitePoliciesData> websitePolicies) Synchronous
+    DecidePolicyForNavigationActionSync(WebCore::FrameIdentifier frameID, bool isMainFrame, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::PolicyCheckIdentifier policyCheckIdentifier, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, Optional<WebKit::WebPageProxyIdentifier> originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, IPC::FormDataReference requestBody, WebCore::ResourceResponse redirectResponse, WebKit::UserData userData) -> (struct WebKit::PolicyDecision PolicyDecision) Synchronous
     DecidePolicyForNewWindowAction(WebCore::FrameIdentifier frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::PolicyCheckIdentifier policyCheckIdentifier, struct WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::UserData userData)
     UnableToImplementPolicy(WebCore::FrameIdentifier frameID, WebCore::ResourceError error, WebKit::UserData userData)
 

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (256933 => 256934)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-02-19 20:22:00 UTC (rev 256934)
@@ -958,6 +958,7 @@
 		49BCA19223A177660028A836 /* APIResourceLoadStatisticsFirstParty.h in Headers */ = {isa = PBXBuildFile; fileRef = 49BCA19123A177660028A836 /* APIResourceLoadStatisticsFirstParty.h */; };
 		49BCA19523A18CFD0028A836 /* _WKResourceLoadStatisticsFirstPartyInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 49BCA19023A175490028A836 /* _WKResourceLoadStatisticsFirstPartyInternal.h */; };
 		49BCA19723A1930D0028A836 /* APIResourceLoadStatisticsThirdParty.h in Headers */ = {isa = PBXBuildFile; fileRef = 49BCA19623A18F620028A836 /* APIResourceLoadStatisticsThirdParty.h */; };
+		49ECA41C23FCA5D80023358D /* PolicyDecision.h in Headers */ = {isa = PBXBuildFile; fileRef = 49ECA41B23FCA4860023358D /* PolicyDecision.h */; };
 		49FBEFFD239B011D00BD032F /* _WKResourceLoadStatisticsFirstParty.mm in Sources */ = {isa = PBXBuildFile; fileRef = 49FBEFFC239B011D00BD032F /* _WKResourceLoadStatisticsFirstParty.mm */; };
 		49FBEFFF239B012F00BD032F /* _WKResourceLoadStatisticsThirdParty.mm in Sources */ = {isa = PBXBuildFile; fileRef = 49FBEFFE239B012F00BD032F /* _WKResourceLoadStatisticsThirdParty.mm */; };
 		49FBF000239B1F7500BD032F /* _WKResourceLoadStatisticsThirdParty.h in Headers */ = {isa = PBXBuildFile; fileRef = 49FBEFFA239AD97800BD032F /* _WKResourceLoadStatisticsThirdParty.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3513,6 +3514,7 @@
 		49BCA19023A175490028A836 /* _WKResourceLoadStatisticsFirstPartyInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKResourceLoadStatisticsFirstPartyInternal.h; sourceTree = "<group>"; };
 		49BCA19123A177660028A836 /* APIResourceLoadStatisticsFirstParty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = APIResourceLoadStatisticsFirstParty.h; sourceTree = "<group>"; };
 		49BCA19623A18F620028A836 /* APIResourceLoadStatisticsThirdParty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = APIResourceLoadStatisticsThirdParty.h; sourceTree = "<group>"; };
+		49ECA41B23FCA4860023358D /* PolicyDecision.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PolicyDecision.h; sourceTree = "<group>"; };
 		49FBEFFA239AD97800BD032F /* _WKResourceLoadStatisticsThirdParty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKResourceLoadStatisticsThirdParty.h; sourceTree = "<group>"; };
 		49FBEFFB239ADB1800BD032F /* _WKResourceLoadStatisticsFirstParty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKResourceLoadStatisticsFirstParty.h; sourceTree = "<group>"; };
 		49FBEFFC239B011D00BD032F /* _WKResourceLoadStatisticsFirstParty.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKResourceLoadStatisticsFirstParty.mm; sourceTree = "<group>"; };
@@ -5860,6 +5862,7 @@
 				7C065F2A1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h */,
 				4960A3BC23C5286400961842 /* WebViewCategory.h */,
 				C0337DD0127A2980008FF4F4 /* WebWheelEvent.cpp */,
+				49ECA41B23FCA4860023358D /* PolicyDecision.h */,
 			);
 			path = Shared;
 			sourceTree = "<group>";
@@ -10778,6 +10781,7 @@
 				2D5C9D0619C81D8F00B3C5C1 /* WebPageOverlay.h in Headers */,
 				46C392292316EC4D008EED9B /* WebPageProxyIdentifier.h in Headers */,
 				BCBD3915125BB1A800D2C29F /* WebPageProxyMessages.h in Headers */,
+				49ECA41C23FCA5D80023358D /* PolicyDecision.h in Headers */,
 				512127C41908239A00DAF35C /* WebPasteboardOverrides.h in Headers */,
 				7C4694D11A51E36800AD5845 /* WebPasteboardProxy.h in Headers */,
 				7C4694CA1A4B4EA100AD5845 /* WebPasteboardProxyMessages.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (256933 => 256934)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2020-02-19 20:22:00 UTC (rev 256934)
@@ -836,7 +836,7 @@
     uint64_t listenerID = m_frame->setUpPolicyListener(identifier, WTFMove(function), WebFrame::ForNavigationAction::No);
     if (!webPage->send(Messages::WebPageProxy::DecidePolicyForResponse(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), identifier, navigationID, response, request,
         canShowResponse, downloadAttribute, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()))))
-        m_frame->didReceivePolicyDecision(listenerID, identifier, PolicyAction::Ignore, 0, { }, { });
+        m_frame->didReceivePolicyDecision(listenerID, PolicyDecision { identifier, PolicyAction::Ignore, 0, { }, { } });
 }
 
 void WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(const NavigationAction& navigationAction, const ResourceRequest& request,
@@ -987,21 +987,17 @@
     Ref<WebFrame> protect(*m_frame);
 
     if (policyDecisionMode == PolicyDecisionMode::Synchronous) {
-        uint64_t newNavigationID;
-        WebCore::PolicyCheckIdentifier responseIdentifier;
-        PolicyAction policyAction;
-        DownloadID downloadID;
-        Optional<WebsitePoliciesData> websitePolicies;
+        PolicyDecision policyDecision;
 
         if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationActionSync(m_frame->frameID(), m_frame->isMainFrame(), SecurityOriginData::fromFrame(coreFrame),
             requestIdentifier, documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingPageID, navigationAction.resourceRequest(), request,
             IPC::FormDataReference { request.httpBody() }, redirectResponse, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())),
-            Messages::WebPageProxy::DecidePolicyForNavigationActionSync::Reply(responseIdentifier, policyAction, newNavigationID, downloadID, websitePolicies))) {
-            m_frame->didReceivePolicyDecision(listenerID, requestIdentifier, PolicyAction::Ignore, 0, { }, { });
+            Messages::WebPageProxy::DecidePolicyForNavigationActionSync::Reply(policyDecision))) {
+            m_frame->didReceivePolicyDecision(listenerID, PolicyDecision { requestIdentifier, PolicyAction::Ignore, 0, { }, { } });
             return;
         }
 
-        m_frame->didReceivePolicyDecision(listenerID, responseIdentifier, policyAction, 0, downloadID, { });
+        m_frame->didReceivePolicyDecision(listenerID, PolicyDecision { policyDecision.identifier, policyDecision.policyAction, 0, policyDecision.downloadID, { }});
         return;
     }
 
@@ -1009,7 +1005,7 @@
     if (!webPage->send(Messages::WebPageProxy::DecidePolicyForNavigationActionAsync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame),
         requestIdentifier, documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingPageID, navigationAction.resourceRequest(), request,
         IPC::FormDataReference { request.httpBody() }, redirectResponse, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()), listenerID)))
-        m_frame->didReceivePolicyDecision(listenerID, requestIdentifier, PolicyAction::Ignore, 0, { }, { });
+        m_frame->didReceivePolicyDecision(listenerID, PolicyDecision { requestIdentifier, PolicyAction::Ignore, 0, { }, { } });
 }
 
 void WebFrameLoaderClient::cancelPolicyCheck()

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp (256933 => 256934)


--- trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebFrame.cpp	2020-02-19 20:22:00 UTC (rev 256934)
@@ -252,12 +252,12 @@
         completionHandler();
 }
 
-void WebFrame::didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyCheckIdentifier identifier, PolicyAction action, uint64_t navigationID, DownloadID downloadID, Optional<WebsitePoliciesData>&& websitePolicies)
+void WebFrame::didReceivePolicyDecision(uint64_t listenerID, PolicyDecision&& policyDecision)
 {
     if (!m_coreFrame || !m_policyListenerID || listenerID != m_policyListenerID || !m_policyFunction)
         return;
 
-    ASSERT(identifier == m_policyIdentifier);
+    ASSERT(policyDecision.identifier == m_policyIdentifier);
     m_policyIdentifier = WTF::nullopt;
 
     FramePolicyFunction function = WTFMove(m_policyFunction);
@@ -265,20 +265,20 @@
 
     invalidatePolicyListener();
 
-    if (forNavigationAction && m_frameLoaderClient && websitePolicies) {
+    if (forNavigationAction && m_frameLoaderClient && policyDecision.websitePoliciesData) {
         ASSERT(page());
         if (page())
-            page()->setAllowsContentJavaScriptFromMostRecentNavigation(websitePolicies->allowsContentJavaScript);
-        m_frameLoaderClient->applyToDocumentLoader(WTFMove(*websitePolicies));
+            page()->setAllowsContentJavaScriptFromMostRecentNavigation(policyDecision.websitePoliciesData->allowsContentJavaScript);
+        m_frameLoaderClient->applyToDocumentLoader(WTFMove(*policyDecision.websitePoliciesData));
     }
 
-    m_policyDownloadID = downloadID;
-    if (navigationID) {
+    m_policyDownloadID = policyDecision.downloadID;
+    if (policyDecision.navigationID) {
         if (WebDocumentLoader* documentLoader = static_cast<WebDocumentLoader*>(m_coreFrame->loader().policyDocumentLoader()))
-            documentLoader->setNavigationID(navigationID);
+            documentLoader->setNavigationID(policyDecision.navigationID);
     }
 
-    function(action, identifier);
+    function(policyDecision.policyAction, policyDecision.identifier);
 }
 
 void WebFrame::startDownload(const WebCore::ResourceRequest& request, const String& suggestedName)

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebFrame.h (256933 => 256934)


--- trunk/Source/WebKit/WebProcess/WebPage/WebFrame.h	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebFrame.h	2020-02-19 20:22:00 UTC (rev 256934)
@@ -27,6 +27,7 @@
 
 #include "APIObject.h"
 #include "DownloadID.h"
+#include "PolicyDecision.h"
 #include "ShareableBitmap.h"
 #include "TransactionID.h"
 #include "WKBase.h"
@@ -82,7 +83,7 @@
     enum class ForNavigationAction { No, Yes };
     uint64_t setUpPolicyListener(WebCore::PolicyCheckIdentifier, WebCore::FramePolicyFunction&&, ForNavigationAction);
     void invalidatePolicyListener();
-    void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyCheckIdentifier, WebCore::PolicyAction, uint64_t navigationID, DownloadID, Optional<WebsitePoliciesData>&&);
+    void didReceivePolicyDecision(uint64_t listenerID, PolicyDecision&&);
 
     uint64_t setUpWillSubmitFormListener(CompletionHandler<void()>&&);
     void continueWillSubmitForm(uint64_t);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (256933 => 256934)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-02-19 20:22:00 UTC (rev 256934)
@@ -3258,12 +3258,12 @@
         pluginView->setLayerHostingMode(m_layerHostingMode);
 }
 
-void WebPage::didReceivePolicyDecision(FrameIdentifier frameID, uint64_t listenerID, PolicyCheckIdentifier identifier, PolicyAction policyAction, uint64_t navigationID, const DownloadID& downloadID, Optional<WebsitePoliciesData>&& websitePolicies)
+void WebPage::didReceivePolicyDecision(FrameIdentifier frameID, uint64_t listenerID, PolicyDecision&& PolicyDecision)
 {
     WebFrame* frame = WebProcess::singleton().webFrame(frameID);
     if (!frame)
         return;
-    frame->didReceivePolicyDecision(listenerID, identifier, policyAction, navigationID, downloadID, WTFMove(websitePolicies));
+    frame->didReceivePolicyDecision(listenerID, WTFMove(PolicyDecision));
 }
 
 void WebPage::continueWillSubmitForm(FrameIdentifier frameID, uint64_t listenerID)

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (256933 => 256934)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-02-19 20:22:00 UTC (rev 256934)
@@ -45,6 +45,7 @@
 #include "MessageSender.h"
 #include "OptionalCallbackID.h"
 #include "Plugin.h"
+#include "PolicyDecision.h"
 #include "SandboxExtension.h"
 #include "ShareSheetCallbackID.h"
 #include "SharedMemory.h"
@@ -1491,7 +1492,7 @@
     bool parentProcessHasServiceWorkerEntitlement() const { return true; }
 #endif
 
-    void didReceivePolicyDecision(WebCore::FrameIdentifier, uint64_t listenerID, WebCore::PolicyCheckIdentifier, WebCore::PolicyAction, uint64_t navigationID, const DownloadID&, Optional<WebsitePoliciesData>&&);
+    void didReceivePolicyDecision(WebCore::FrameIdentifier, uint64_t listenerID, PolicyDecision&&);
     void continueWillSubmitForm(WebCore::FrameIdentifier, uint64_t listenerID);
     void setUserAgent(const String&);
     void setCustomTextEncodingName(const String&);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (256933 => 256934)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-02-19 20:04:56 UTC (rev 256933)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-02-19 20:22:00 UTC (rev 256934)
@@ -186,7 +186,7 @@
     DidRemoveBackForwardItem(struct WebCore::BackForwardItemIdentifier backForwardItemID)
 
     UpdateWebsitePolicies(struct WebKit::WebsitePoliciesData websitePolicies)
-    DidReceivePolicyDecision(WebCore::FrameIdentifier frameID, uint64_t listenerID, WebCore::PolicyCheckIdentifier policyCheckIdentifier, enum:uint8_t WebCore::PolicyAction policyAction, uint64_t navigationID, WebKit::DownloadID downloadID, Optional<WebKit::WebsitePoliciesData> websitePolicies)
+    DidReceivePolicyDecision(WebCore::FrameIdentifier frameID, uint64_t listenerID, struct WebKit::PolicyDecision PolicyDecision)
     ContinueWillSubmitForm(WebCore::FrameIdentifier frameID, uint64_t listenerID)
 
     ClearSelection()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to