|
Lines 4091-4107
void WebPageProxy::beginSafeBrowsingCheck(const URL&, WebFramePolicyListenerProx
a/Source/WebKit/UIProcess/WebPageProxy.cpp_sec1
|
| 4091 |
} |
4091 |
} |
| 4092 |
#endif |
4092 |
#endif |
| 4093 |
|
4093 |
|
| 4094 |
void WebPageProxy::decidePolicyForNavigationActionAsync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, uint64_t listenerID) |
4094 |
void WebPageProxy::decidePolicyForNavigationActionAsync(uint64_t frameID, WebCore::SecurityOriginData&& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, FrameInfoData&& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, uint64_t listenerID) |
| 4095 |
{ |
4095 |
{ |
| 4096 |
auto* frame = m_process->webFrame(frameID); |
4096 |
auto* frame = m_process->webFrame(frameID); |
| 4097 |
MESSAGE_CHECK(frame); |
4097 |
MESSAGE_CHECK(frame); |
| 4098 |
|
4098 |
|
| 4099 |
decidePolicyForNavigationAction(*frame, frameSecurityOrigin, navigationID, WTFMove(navigationActionData), frameInfoData, originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), userData, shouldSkipSafeBrowsingCheck, PolicyDecisionSender::create([this, protectedThis = makeRef(*this), frameID, listenerID] (auto... args) { |
4099 |
decidePolicyForNavigationAction(*frame, WTFMove(frameSecurityOrigin), navigationID, WTFMove(navigationActionData), WTFMove(frameInfoData), originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), userData, shouldSkipSafeBrowsingCheck, PolicyDecisionSender::create([this, protectedThis = makeRef(*this), frameID, listenerID] (auto... args) { |
| 4100 |
m_process->send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, args...), m_pageID); |
4100 |
m_process->send(Messages::WebPage::DidReceivePolicyDecision(frameID, listenerID, args...), m_pageID); |
| 4101 |
})); |
4101 |
})); |
| 4102 |
} |
4102 |
} |
| 4103 |
|
4103 |
|
| 4104 |
void WebPageProxy::decidePolicyForNavigationAction(WebFrameProxy& frame, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, Ref<PolicyDecisionSender>&& sender) |
4104 |
void WebPageProxy::decidePolicyForNavigationAction(WebFrameProxy& frame, WebCore::SecurityOriginData&& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, FrameInfoData&& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, Ref<PolicyDecisionSender>&& sender) |
| 4105 |
{ |
4105 |
{ |
| 4106 |
LOG(Loading, "WebPageProxy::decidePolicyForNavigationAction - Original URL %s, current target URL %s", originalRequest.url().string().utf8().data(), request.url().string().utf8().data()); |
4106 |
LOG(Loading, "WebPageProxy::decidePolicyForNavigationAction - Original URL %s, current target URL %s", originalRequest.url().string().utf8().data(), request.url().string().utf8().data()); |
| 4107 |
|
4107 |
|
|
Lines 4123-4128
void WebPageProxy::decidePolicyForNavigationAction(WebFrameProxy& frame, const W
a/Source/WebKit/UIProcess/WebPageProxy.cpp_sec2
|
| 4123 |
if (navigationID) |
4123 |
if (navigationID) |
| 4124 |
navigation = m_navigationState->navigation(navigationID); |
4124 |
navigation = m_navigationState->navigation(navigationID); |
| 4125 |
|
4125 |
|
|
|
4126 |
// When process-swapping on a redirect, the navigationActionData / originatingFrameInfoData / frameSecurityOrigin provided by the fresh new WebProcess are inaccurate since |
| 4127 |
// the new process does not have sufficient information. To address the issue, we restore the information we stored on the NavigationAction during the original request |
| 4128 |
// policy decision. |
| 4129 |
if (navigationActionData.isRedirect && navigation) { |
| 4130 |
navigationActionData = navigation->lastNavigationAction(); |
| 4131 |
navigationActionData.isRedirect = true; |
| 4132 |
originatingFrameInfoData = navigation->originatingFrameInfo(); |
| 4133 |
frameSecurityOrigin = navigation->destinationFrameSecurityOrigin(); |
| 4134 |
} |
| 4135 |
|
| 4126 |
if (auto targetBackForwardItemIdentifier = navigationActionData.targetBackForwardItemIdentifier) { |
4136 |
if (auto targetBackForwardItemIdentifier = navigationActionData.targetBackForwardItemIdentifier) { |
| 4127 |
if (auto* item = m_backForwardList->itemForID(*navigationActionData.targetBackForwardItemIdentifier)) { |
4137 |
if (auto* item = m_backForwardList->itemForID(*navigationActionData.targetBackForwardItemIdentifier)) { |
| 4128 |
if (!navigation) |
4138 |
if (!navigation) |
|
Lines 4136-4158
void WebPageProxy::decidePolicyForNavigationAction(WebFrameProxy& frame, const W
a/Source/WebKit/UIProcess/WebPageProxy.cpp_sec3
|
| 4136 |
navigation = m_navigationState->createLoadRequestNavigation(ResourceRequest(request), m_backForwardList->currentItem()); |
4146 |
navigation = m_navigationState->createLoadRequestNavigation(ResourceRequest(request), m_backForwardList->currentItem()); |
| 4137 |
|
4147 |
|
| 4138 |
uint64_t newNavigationID = navigation->navigationID(); |
4148 |
uint64_t newNavigationID = navigation->navigationID(); |
| 4139 |
navigation->setWasUserInitiated(!!navigationActionData.userGestureTokenIdentifier); |
|
|
| 4140 |
#if USE(SYSTEM_PREVIEW) |
| 4141 |
navigation->setShouldForceDownload(!navigationActionData.downloadAttribute.isNull() || request.isSystemPreview()); |
| 4142 |
#else |
| 4143 |
navigation->setShouldForceDownload(!navigationActionData.downloadAttribute.isNull()); |
| 4144 |
#endif |
| 4145 |
navigation->setCurrentRequest(ResourceRequest(request), m_process->coreProcessIdentifier()); |
4149 |
navigation->setCurrentRequest(ResourceRequest(request), m_process->coreProcessIdentifier()); |
| 4146 |
navigation->setCurrentRequestIsRedirect(navigationActionData.isRedirect); |
4150 |
navigation->setLastNavigationAction(navigationActionData); |
| 4147 |
navigation->setTreatAsSameOriginNavigation(navigationActionData.treatAsSameOriginNavigation); |
4151 |
navigation->setOriginatingFrameInfo(originatingFrameInfoData); |
| 4148 |
navigation->setHasOpenedFrames(navigationActionData.hasOpenedFrames); |
4152 |
navigation->setDestinationFrameSecurityOrigin(frameSecurityOrigin); |
| 4149 |
if (navigationActionData.openedViaWindowOpenWithOpener) |
|
|
| 4150 |
navigation->setOpenedViaWindowOpenWithOpener(); |
| 4151 |
navigation->setOpener(navigationActionData.opener); |
| 4152 |
navigation->setRequesterOrigin(navigationActionData.requesterOrigin); |
| 4153 |
navigation->setLockHistory(navigationActionData.lockHistory); |
| 4154 |
navigation->setLockBackForwardList(navigationActionData.lockBackForwardList); |
| 4155 |
navigation->setClientRedirectSourceForHistory(navigationActionData.clientRedirectSourceForHistory); |
| 4156 |
|
4153 |
|
| 4157 |
#if ENABLE(CONTENT_FILTERING) |
4154 |
#if ENABLE(CONTENT_FILTERING) |
| 4158 |
if (frame.didHandleContentFilterUnblockNavigation(request)) |
4155 |
if (frame.didHandleContentFilterUnblockNavigation(request)) |
|
Lines 4228-4234
void WebPageProxy::decidePolicyForNavigationAction(WebFrameProxy& frame, const W
a/Source/WebKit/UIProcess/WebPageProxy.cpp_sec4
|
| 4228 |
m_shouldSuppressAppLinksInNextNavigationPolicyDecision = false; |
4225 |
m_shouldSuppressAppLinksInNextNavigationPolicyDecision = false; |
| 4229 |
} |
4226 |
} |
| 4230 |
|
4227 |
|
| 4231 |
void WebPageProxy::decidePolicyForNavigationActionSync(uint64_t frameID, bool isMainFrame, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply&& reply) |
4228 |
void WebPageProxy::decidePolicyForNavigationActionSync(uint64_t frameID, bool isMainFrame, WebCore::SecurityOriginData&& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, FrameInfoData&& frameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&& redirectResponse, const UserData& userData, WebCore::ShouldSkipSafeBrowsingCheck shouldSkipSafeBrowsingCheck, Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply&& reply) |
| 4232 |
{ |
4229 |
{ |
| 4233 |
auto sender = PolicyDecisionSender::create(WTFMove(reply)); |
4230 |
auto sender = PolicyDecisionSender::create(WTFMove(reply)); |
| 4234 |
|
4231 |
|
|
Lines 4244-4250
void WebPageProxy::decidePolicyForNavigationActionSync(uint64_t frameID, bool is
a/Source/WebKit/UIProcess/WebPageProxy.cpp_sec5
|
| 4244 |
RELEASE_ASSERT(frame); |
4241 |
RELEASE_ASSERT(frame); |
| 4245 |
} |
4242 |
} |
| 4246 |
|
4243 |
|
| 4247 |
decidePolicyForNavigationAction(*frame, frameSecurityOrigin, navigationID, WTFMove(navigationActionData), frameInfoData, originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), userData, shouldSkipSafeBrowsingCheck, sender.copyRef()); |
4244 |
decidePolicyForNavigationAction(*frame, WTFMove(frameSecurityOrigin), navigationID, WTFMove(navigationActionData), WTFMove(frameInfoData), originatingPageID, originalRequest, WTFMove(request), WTFMove(requestBody), WTFMove(redirectResponse), userData, shouldSkipSafeBrowsingCheck, sender.copyRef()); |
| 4248 |
|
4245 |
|
| 4249 |
// If the client did not respond synchronously, proceed with the load. |
4246 |
// If the client did not respond synchronously, proceed with the load. |
| 4250 |
sender->send(PolicyAction::Use, navigationID, DownloadID(), std::nullopt); |
4247 |
sender->send(PolicyAction::Use, navigationID, DownloadID(), std::nullopt); |