Diff
Modified: branches/safari-605-branch/Source/WebKit/ChangeLog (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/ChangeLog 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/ChangeLog 2018-04-17 22:20:37 UTC (rev 230733)
@@ -1,3 +1,66 @@
+2018-04-17 Kocsen Chung <kocsen_ch...@apple.com>
+
+ Apply patch. rdar://problem/39305046
+
+ 2018-04-17 Chris Dumez <cdu...@apple.com>
+
+ Regression(r222468 & r227758): Motion JPEG streams only show the first frame and frequently crash
+ <rdar://problem/39305046>
+
+ Reviewed by Chris Dumez.
+
+ Roll out r222468 as this patch introduced a null-dereference of the provisionalDocumentLoader.
+ The SPI added in r222468 is not used by any client yet so this is safe to roll out.
+
+ Also roll out r227758, which attempted to fix the crash introduced in r222468 but
+ ended up ignoring every following frame of Motion JPEG streams. This is because there
+ is no provisional document loader anymore for follow-up of Motion JPEG streams and the
+ r227758 was returning early and asking WebCore to ignore the response when the provisional
+ document loader was null. A proper fix would have been to set the navigationID to 0 when
+ the provisional document loader is null instead of returning early. However, it does not
+ matter in this patch since r222468 is being reverted too.
+
+ A proper fix will be landed on trunk via https://bugs.webkit.org/show_bug.cgi?id=184268.
+
+ * UIProcess/API/APINavigation.cpp:
+ (API::Navigation::Navigation):
+ (API::Navigation::appendRedirectionURL): Deleted.
+ * UIProcess/API/APINavigation.h:
+ (API::Navigation::takeRedirectChain): Deleted.
+ (API::Navigation::setWasUserInitiated): Deleted.
+ (API::Navigation::wasUserInitiated const): Deleted.
+ * UIProcess/API/C/WKDownload.cpp:
+ (WKDownloadCopyRedirectChain):
+ (WKDownloadGetWasUserInitiated): Deleted.
+ * UIProcess/API/C/WKDownload.h:
+ * UIProcess/API/Cocoa/_WKDownload.h:
+ * UIProcess/API/Cocoa/_WKDownload.mm:
+ (-[_WKDownload wasUserInitiated]): Deleted.
+ * UIProcess/Downloads/DownloadProxy.h:
+ (WebKit::DownloadProxy::setWasUserInitiated): Deleted.
+ (WebKit::DownloadProxy::wasUserInitiated const): Deleted.
+ (): Deleted.
+ * UIProcess/WebFrameProxy.cpp:
+ (WebKit::WebFrameProxy::didStartProvisionalLoad):
+ (WebKit::WebFrameProxy::didReceiveServerRedirectForProvisionalLoad):
+ (WebKit::WebFrameProxy::didFailProvisionalLoad):
+ (WebKit::WebFrameProxy::didFinishLoad):
+ (WebKit::WebFrameProxy::didFailLoad):
+ * UIProcess/WebFrameProxy.h:
+ (WebKit::WebFrameProxy::takeProvisionalLoadRedirectChain):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::receivedPolicyDecision):
+ (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
+ (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+ (WebKit::WebPageProxy::decidePolicyForResponse):
+ (WebKit::WebPageProxy::decidePolicyForResponseSync):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::documentLoaderDetached):
+
2018-04-11 Kocsen Chung <kocsen_ch...@apple.com>
Cherry-pick r229872. rdar://problem/39349363
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/API/APINavigation.cpp (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/API/APINavigation.cpp 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/API/APINavigation.cpp 2018-04-17 22:20:37 UTC (rev 230733)
@@ -39,7 +39,6 @@
: m_navigationID(state.generateNavigationID())
, m_request(WTFMove(request))
{
- m_redirectChain.append(m_request.url());
}
Navigation::~Navigation()
@@ -46,10 +45,4 @@
{
}
-void Navigation::appendRedirectionURL(const WebCore::URL& url)
-{
- if (m_redirectChain.isEmpty() || m_redirectChain.last() != url)
- m_redirectChain.append(url);
-}
-
} // namespace WebKit
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/API/APINavigation.h (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/API/APINavigation.h 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/API/APINavigation.h 2018-04-17 22:20:37 UTC (rev 230733)
@@ -53,12 +53,6 @@
const WebCore::ResourceRequest& request() const { return m_request; }
- void appendRedirectionURL(const WebCore::URL&);
- Vector<WebCore::URL> takeRedirectChain() { return WTFMove(m_redirectChain); }
-
- void setWasUserInitiated(bool value) { m_wasUserInitiated = value; }
- bool wasUserInitiated() const { return m_wasUserInitiated; }
-
void setShouldForceDownload(bool value) { m_shouldForceDownload = value; }
bool shouldForceDownload() const { return m_shouldForceDownload; }
@@ -68,8 +62,6 @@
uint64_t m_navigationID;
WebCore::ResourceRequest m_request;
- Vector<WebCore::URL> m_redirectChain;
- bool m_wasUserInitiated { true };
bool m_shouldForceDownload { false };
};
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/API/C/WKDownload.cpp (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/API/C/WKDownload.cpp 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/API/C/WKDownload.cpp 2018-04-17 22:20:37 UTC (rev 230733)
@@ -74,8 +74,3 @@
urls.uncheckedAppend(API::URL::create(redirectURL.string()));
return toAPI(&API::Array::create(WTFMove(urls)).leakRef());
}
-
-bool WKDownloadGetWasUserInitiated(WKDownloadRef download)
-{
- return toImpl(download)->wasUserInitiated();
-}
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/API/C/WKDownload.h (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/API/C/WKDownload.h 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/API/C/WKDownload.h 2018-04-17 22:20:37 UTC (rev 230733)
@@ -44,7 +44,6 @@
WK_EXPORT void WKDownloadCancel(WKDownloadRef download);
WK_EXPORT WKPageRef WKDownloadGetOriginatingPage(WKDownloadRef download);
WK_EXPORT WKArrayRef WKDownloadCopyRedirectChain(WKDownloadRef download);
-WK_EXPORT bool WKDownloadGetWasUserInitiated(WKDownloadRef download);
#ifdef __cplusplus
}
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h 2018-04-17 22:20:37 UTC (rev 230733)
@@ -39,7 +39,6 @@
@property (nonatomic, readonly) NSURLRequest *request;
@property (nonatomic, readonly, weak) WKWebView *originatingWebView;
@property (nonatomic, readonly, copy) NSArray<NSURL *> *redirectChain WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
-@property (nonatomic, readonly) BOOL wasUserInitiated WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@end
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.mm (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.mm 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.mm 2018-04-17 22:20:37 UTC (rev 230733)
@@ -69,11 +69,6 @@
return nsURLs;
}
-- (BOOL)wasUserInitiated
-{
- return _download->wasUserInitiated();
-}
-
#pragma mark WKObject protocol implementation
- (API::Object&)_apiObject
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.h (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.h 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.h 2018-04-17 22:20:37 UTC (rev 230733)
@@ -77,9 +77,6 @@
void setRedirectChain(Vector<WebCore::URL>&& redirectChain) { m_redirectChain = WTFMove(redirectChain); }
const Vector<WebCore::URL>& redirectChain() const { return m_redirectChain; }
- void setWasUserInitiated(bool value) { m_wasUserInitiated = value; }
- bool wasUserInitiated() const { return m_wasUserInitiated; }
-
private:
explicit DownloadProxy(DownloadProxyMap&, WebProcessPool&, const WebCore::ResourceRequest&);
@@ -113,7 +110,6 @@
WeakPtr<WebPageProxy> m_originatingPage;
Vector<WebCore::URL> m_redirectChain;
- bool m_wasUserInitiated { true };
};
} // namespace WebKit
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebFrameProxy.cpp (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/WebFrameProxy.cpp 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebFrameProxy.cpp 2018-04-17 22:20:37 UTC (rev 230733)
@@ -133,16 +133,23 @@
void WebFrameProxy::didStartProvisionalLoad(const URL& url)
{
+ m_provisionalLoadRedirectChain = { url };
+
m_frameLoadState.didStartProvisionalLoad(url);
}
void WebFrameProxy::didReceiveServerRedirectForProvisionalLoad(const URL& url)
{
+ // didReceiveServerRedirectForProvisionalLoad() often gets called twice for the same redirect.
+ if (m_provisionalLoadRedirectChain.isEmpty() || m_provisionalLoadRedirectChain.last() != url)
+ m_provisionalLoadRedirectChain.append(url);
+
m_frameLoadState.didReceiveServerRedirectForProvisionalLoad(url);
}
void WebFrameProxy::didFailProvisionalLoad()
{
+ m_provisionalLoadRedirectChain.clear();
m_frameLoadState.didFailProvisionalLoad();
}
@@ -159,11 +166,13 @@
void WebFrameProxy::didFinishLoad()
{
+ m_provisionalLoadRedirectChain.clear();
m_frameLoadState.didFinishLoad();
}
void WebFrameProxy::didFailLoad()
{
+ m_provisionalLoadRedirectChain.clear();
m_frameLoadState.didFailLoad();
}
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebFrameProxy.h (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/WebFrameProxy.h 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebFrameProxy.h 2018-04-17 22:20:37 UTC (rev 230733)
@@ -90,6 +90,7 @@
bool containsPluginDocument() const { return m_containsPluginDocument; }
const String& title() const { return m_title; }
+ Vector<WebCore::URL>&& takeProvisionalLoadRedirectChain() { return WTFMove(m_provisionalLoadRedirectChain); }
WebCertificateInfo* certificateInfo() const { return m_certificateInfo.get(); }
@@ -142,6 +143,7 @@
RefPtr<WebCertificateInfo> m_certificateInfo;
RefPtr<WebFrameListenerProxy> m_activeListener;
uint64_t m_frameID;
+ Vector<WebCore::URL> m_provisionalLoadRedirectChain;
#if ENABLE(CONTENT_FILTERING)
WebCore::ContentFilterUnblockHandler m_contentFilterUnblockHandler;
#endif
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-04-17 22:20:37 UTC (rev 230733)
@@ -2308,10 +2308,7 @@
// Create a download proxy.
const ResourceRequest& downloadRequest = m_decidePolicyForResponseRequest ? *m_decidePolicyForResponseRequest : ResourceRequest();
DownloadProxy* download = m_process->processPool().createDownloadProxy(downloadRequest, this);
- if (navigation) {
- download->setWasUserInitiated(navigation->wasUserInitiated());
- download->setRedirectChain(navigation->takeRedirectChain());
- }
+ download->setRedirectChain(frame.takeProvisionalLoadRedirectChain());
downloadID = download->downloadID();
handleDownloadRequest(download);
@@ -3260,10 +3257,8 @@
// FIXME: We should message check that navigationID is not zero here, but it's currently zero for some navigations through the page cache.
RefPtr<API::Navigation> navigation;
- if (navigationID) {
+ if (frame->isMainFrame() && navigationID)
navigation = &navigationState().navigation(navigationID);
- navigation->appendRedirectionURL(url);
- }
auto transaction = m_pageLoadState.transaction();
@@ -3277,7 +3272,7 @@
if (frame->isMainFrame())
m_navigationClient->didReceiveServerRedirectForProvisionalNavigation(*this, navigation.get(), m_process->transformHandlesToObjects(userData.object()).get());
} else
- m_loaderClient->didReceiveServerRedirectForProvisionalLoadForFrame(*this, *frame, frame->isMainFrame() ? navigation.get() : nullptr, m_process->transformHandlesToObjects(userData.object()).get());
+ m_loaderClient->didReceiveServerRedirectForProvisionalLoadForFrame(*this, *frame, navigation.get(), m_process->transformHandlesToObjects(userData.object()).get());
}
void WebPageProxy::willPerformClientRedirectForFrame(uint64_t frameID, const String& url, double delay)
@@ -3748,17 +3743,11 @@
MESSAGE_CHECK_URL(originalRequest.url());
Ref<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
- if (!navigationID) {
+ if (!navigationID && frame->isMainFrame()) {
auto navigation = m_navigationState->createLoadRequestNavigation(ResourceRequest(request));
newNavigationID = navigation->navigationID();
- navigation->setWasUserInitiated(!!navigationActionData.userGestureTokenIdentifier);
navigation->setShouldForceDownload(!navigationActionData.downloadAttribute.isNull());
listener->setNavigation(WTFMove(navigation));
- } else {
- auto& navigation = m_navigationState->navigation(navigationID);
- navigation.setWasUserInitiated(!!navigationActionData.userGestureTokenIdentifier);
- navigation.setShouldForceDownload(!navigationActionData.downloadAttribute.isNull());
- listener->setNavigation(navigation);
}
#if ENABLE(CONTENT_FILTERING)
@@ -3830,7 +3819,7 @@
m_policyClient->decidePolicyForNewWindowAction(*this, *frame, navigationActionData, request, frameName, WTFMove(listener), m_process->transformHandlesToObjects(userData.object()).get());
}
-void WebPageProxy::decidePolicyForResponse(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const ResourceResponse& response, const ResourceRequest& request, bool canShowMIMEType, uint64_t listenerID, const UserData& userData)
+void WebPageProxy::decidePolicyForResponse(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, const ResourceResponse& response, const ResourceRequest& request, bool canShowMIMEType, uint64_t listenerID, const UserData& userData)
{
PageClientProtector protector(m_pageClient);
@@ -3840,8 +3829,6 @@
MESSAGE_CHECK_URL(response.url());
Ref<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
- if (navigationID)
- listener->setNavigation(m_navigationState->navigation(navigationID));
if (m_navigationClient) {
auto navigationResponse = API::NavigationResponse::create(API::FrameInfo::create(*frame, frameSecurityOrigin.securityOrigin()).get(), request, response, canShowMIMEType);
@@ -3850,7 +3837,7 @@
m_policyClient->decidePolicyForResponse(*this, *frame, response, request, canShowMIMEType, WTFMove(listener), m_process->transformHandlesToObjects(userData.object()).get());
}
-void WebPageProxy::decidePolicyForResponseSync(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const ResourceResponse& response, const ResourceRequest& request, bool canShowMIMEType, uint64_t listenerID, const UserData& userData, bool& receivedPolicyAction, WebCore::PolicyAction& policyAction, DownloadID& downloadID)
+void WebPageProxy::decidePolicyForResponseSync(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, const ResourceResponse& response, const ResourceRequest& request, bool canShowMIMEType, uint64_t listenerID, const UserData& userData, bool& receivedPolicyAction, WebCore::PolicyAction& policyAction, DownloadID& downloadID)
{
PageClientProtector protector(m_pageClient);
@@ -3860,7 +3847,7 @@
m_decidePolicyForResponseRequest = &request;
m_syncMimeTypePolicyActionIsValid = false;
- decidePolicyForResponse(frameID, frameSecurityOrigin, navigationID, response, request, canShowMIMEType, listenerID, userData);
+ decidePolicyForResponse(frameID, frameSecurityOrigin, response, request, canShowMIMEType, listenerID, userData);
m_inDecidePolicyForResponseSync = false;
m_decidePolicyForResponseRequest = nullptr;
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.h (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.h 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.h 2018-04-17 22:20:37 UTC (rev 230733)
@@ -1350,8 +1350,8 @@
void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, uint64_t listenerID, const UserData&, bool& receivedPolicyAction, uint64_t& newNavigationID, WebCore::PolicyAction&, DownloadID&, std::optional<WebsitePoliciesData>&);
void decidePolicyForNewWindowAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, NavigationActionData&&, WebCore::ResourceRequest&&, const String& frameName, uint64_t listenerID, const UserData&);
- void decidePolicyForResponse(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&);
- void decidePolicyForResponseSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&, bool& receivedPolicyAction, WebCore::PolicyAction&, DownloadID&);
+ void decidePolicyForResponse(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&);
+ void decidePolicyForResponseSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&, bool& receivedPolicyAction, WebCore::PolicyAction&, DownloadID&);
void unableToImplementPolicy(uint64_t frameID, const WebCore::ResourceError&, const UserData&);
void willSubmitForm(uint64_t frameID, uint64_t sourceFrameID, const Vector<std::pair<String, String>>& textFieldValues, uint64_t listenerID, const UserData&);
Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.messages.in (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.messages.in 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebPageProxy.messages.in 2018-04-17 22:20:37 UTC (rev 230733)
@@ -98,7 +98,7 @@
#endif
# Policy messages
- DecidePolicyForResponseSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::UserData userData) -> (bool receivedPolicyAction, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID)
+ DecidePolicyForResponseSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::UserData userData) -> (bool receivedPolicyAction, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID)
DecidePolicyForNavigationAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (bool receivedPolicyAction, uint64_t newNavigationID, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID, std::optional<WebKit::WebsitePoliciesData> websitePolicies)
DecidePolicyForNewWindowAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, struct WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::UserData userData)
UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::UserData userData)
Modified: branches/safari-605-branch/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2018-04-17 22:20:37 UTC (rev 230733)
@@ -747,12 +747,6 @@
bool canShowMIMEType = webPage->canShowMIMEType(response.mimeType());
WebCore::Frame* coreFrame = m_frame->coreFrame();
- auto* policyDocumentLoader = coreFrame ? coreFrame->loader().provisionalDocumentLoader() : nullptr;
- if (!policyDocumentLoader) {
- function(PolicyAction::Ignore);
- return;
- }
-
Ref<WebFrame> protector(*m_frame);
uint64_t listenerID = m_frame->setUpPolicyListener(WTFMove(function), WebFrame::ForNavigationAction::No);
bool receivedPolicyAction;
@@ -759,8 +753,7 @@
PolicyAction policyAction;
DownloadID downloadID;
- auto navigationID = static_cast<WebDocumentLoader&>(*policyDocumentLoader).navigationID();
- if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForResponseSync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), navigationID, response, request, canShowMIMEType, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForResponseSync::Reply(receivedPolicyAction, policyAction, downloadID), Seconds::infinity(), IPC::SendSyncOption::InformPlatformProcessWillSuspend)) {
+ if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForResponseSync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), response, request, canShowMIMEType, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForResponseSync::Reply(receivedPolicyAction, policyAction, downloadID), Seconds::infinity(), IPC::SendSyncOption::InformPlatformProcessWillSuspend)) {
m_frame->didReceivePolicyDecision(listenerID, PolicyAction::Ignore, 0, { }, { });
return;
}
Modified: branches/safari-605-branch/Source/WebKit/WebProcess/WebPage/WebFrame.cpp (230732 => 230733)
--- branches/safari-605-branch/Source/WebKit/WebProcess/WebPage/WebFrame.cpp 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Source/WebKit/WebProcess/WebPage/WebFrame.cpp 2018-04-17 22:20:37 UTC (rev 230733)
@@ -814,8 +814,7 @@
void WebFrame::documentLoaderDetached(uint64_t navigationID)
{
- if (auto * page = this->page())
- page->send(Messages::WebPageProxy::DidDestroyNavigation(navigationID));
+ page()->send(Messages::WebPageProxy::DidDestroyNavigation(navigationID));
}
#if PLATFORM(COCOA)
Modified: branches/safari-605-branch/Tools/ChangeLog (230732 => 230733)
--- branches/safari-605-branch/Tools/ChangeLog 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Tools/ChangeLog 2018-04-17 22:20:37 UTC (rev 230733)
@@ -1,3 +1,28 @@
+2018-04-17 Kocsen Chung <kocsen_ch...@apple.com>
+
+ Apply patch. rdar://problem/39305046
+
+ 2018-04-17 Chris Dumez <cdu...@apple.com>
+
+ Regression(r222468 & r227758): Motion JPEG streams only show the first frame and frequently crash
+ <rdar://problem/39305046>
+
+ Reviewed by Chris Dumez.
+
+ Drop API test added in r222468.
+
+ * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
+ (TestWebKitAPI::decideDestinationWithSuggestedFilename):
+ * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
+ (-[DownloadDelegate _downloadDidStart:]):
+ (-[DownloadDelegate _downloadDidFinish:]):
+ (runTest):
+ (TEST):
+ (-[BlobDownloadDelegate _downloadDidStart:]):
+ (-[BlobDownloadDelegate _downloadDidFinish:]):
+ (-[RedirectedDownloadDelegate _downloadDidStart:]):
+ (-[RedirectedDownloadDelegate _downloadDidFinish:]):
+
2018-03-21 Jason Marcell <jmarc...@apple.com>
Cherry-pick r229297. rdar://problem/38682578
Modified: branches/safari-605-branch/Tools/TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm (230732 => 230733)
--- branches/safari-605-branch/Tools/TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Tools/TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm 2018-04-17 22:20:37 UTC (rev 230733)
@@ -71,7 +71,6 @@
didDecideDownloadDestination = true;
EXPECT_EQ(expectedOriginatingPage, WKDownloadGetOriginatingPage(download));
- EXPECT_TRUE(WKDownloadGetWasUserInitiated(download)); // Download was started via context menu so it is user initiated.
return Util::toWK("/tmp/WebKitAPITest/ContextMenuDownload").leakRef();
}
Modified: branches/safari-605-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm (230732 => 230733)
--- branches/safari-605-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm 2018-04-17 22:15:03 UTC (rev 230732)
+++ branches/safari-605-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm 2018-04-17 22:20:37 UTC (rev 230733)
@@ -50,7 +50,6 @@
static bool hasReceivedResponse;
static NSURL *sourceURL = [[NSBundle mainBundle] URLForResource:@"simple" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"];
static WKWebView* expectedOriginatingWebView;
-static bool expectedUserInitiatedState = false;
@interface DownloadDelegate : NSObject <_WKDownloadDelegate>
@end
@@ -67,7 +66,6 @@
EXPECT_NULL(_download);
EXPECT_NOT_NULL(download);
EXPECT_TRUE([[[[download request] URL] path] isEqualToString:[sourceURL path]]);
- EXPECT_EQ(expectedUserInitiatedState, download.wasUserInitiated);
_download = download;
}
@@ -104,7 +102,6 @@
- (void)_downloadDidFinish:(_WKDownload *)download
{
EXPECT_EQ(_download, download);
- EXPECT_EQ(expectedUserInitiatedState, download.wasUserInitiated);
EXPECT_TRUE(_expectedContentLength == NSURLResponseUnknownLength || static_cast<uint64_t>(_expectedContentLength) == _receivedContentLength);
EXPECT_TRUE([[NSFileManager defaultManager] contentsEqualAtPath:_destinationPath andPath:[sourceURL path]]);
WebCore::FileSystem::deleteFile(_destinationPath);
@@ -135,7 +132,6 @@
isDone = false;
hasReceivedResponse = false;
- expectedUserInitiatedState = false;
[webView loadRequest:[NSURLRequest requestWithURL:url]];
TestWebKitAPI::Util::run(&isDone);
}
@@ -343,7 +339,6 @@
[webView setNavigationDelegate:[[DownloadRequestOriginalURLNavigationDelegate alloc] init]];
[[[webView configuration] processPool] _setDownloadDelegate:[[DownloadRequestOriginalURLDelegate alloc] initWithExpectedOriginalURL:sourceURL]];
- expectedUserInitiatedState = false;
NSURL *contentURL = [[NSBundle mainBundle] URLForResource:@"simple2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"];
// Here is to test if the original URL can be set correctly when the current document
// is completely unrelated to the download.
@@ -368,7 +363,6 @@
EXPECT_NULL(_download);
EXPECT_NOT_NULL(download);
EXPECT_TRUE([[[[download request] URL] scheme] isEqualToString:@"blob"]);
- EXPECT_EQ(expectedUserInitiatedState, download.wasUserInitiated);
_download = download;
}
@@ -405,7 +399,6 @@
- (void)_downloadDidFinish:(_WKDownload *)download
{
EXPECT_EQ(_download, download);
- EXPECT_EQ(expectedUserInitiatedState, download.wasUserInitiated);
EXPECT_TRUE(_expectedContentLength == NSURLResponseUnknownLength || static_cast<uint64_t>(_expectedContentLength) == _receivedContentLength);
NSString* expectedContent = @"{\"x\":42,\"s\":\"hello, world\"}";
NSData* expectedData = [expectedContent dataUsingEncoding:NSUTF8StringEncoding];
@@ -461,7 +454,6 @@
{
EXPECT_NOT_NULL(download);
EXPECT_EQ(expectedOriginatingWebView, download.originatingWebView);
- EXPECT_EQ(expectedUserInitiatedState, download.wasUserInitiated);
}
- (NSString *)_download:(_WKDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename allowOverwrite:(BOOL *)allowOverwrite
@@ -485,8 +477,6 @@
- (void)_downloadDidFinish:(_WKDownload *)download
{
- EXPECT_EQ(expectedUserInitiatedState, download.wasUserInitiated);
-
NSArray<NSURL *> *redirectChain = download.redirectChain;
EXPECT_EQ(3U, redirectChain.count);
if (redirectChain.count > 0)
@@ -524,7 +514,6 @@
[webView synchronouslyLoadHTMLString:@"<a style='display: block; height: 100%; width: 100%' href=''>test</a>"];
expectedOriginatingWebView = webView.get();
- expectedUserInitiatedState = true;
NSPoint clickPoint = NSMakePoint(100, 100);
[[webView hitTest:clickPoint] mouseDown:[NSEvent mouseEventWithType:NSEventTypeRightMouseDown location:clickPoint modifierFlags:0 timestamp:0 windowNumber:[window windowNumber] context:nil eventNumber:0 clickCount:1 pressure:1]];
[[webView hitTest:clickPoint] mouseUp:[NSEvent mouseEventWithType:NSEventTypeRightMouseUp location:clickPoint modifierFlags:0 timestamp:0 windowNumber:[window windowNumber] context:nil eventNumber:0 clickCount:1 pressure:1]];
@@ -548,7 +537,6 @@
[[[webView configuration] processPool] _setDownloadDelegate:downloadDelegate.get()];
expectedOriginatingWebView = webView.get();
- expectedUserInitiatedState = false;
isDone = false;
redirectCount = 0;
hasReceivedResponse = false;
@@ -571,7 +559,6 @@
[[[webView configuration] processPool] _setDownloadDelegate:downloadDelegate.get()];
expectedOriginatingWebView = webView.get();
- expectedUserInitiatedState = false;
isDone = false;
redirectCount = 0;
hasReceivedResponse = false;