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()