Title: [230733] branches/safari-605-branch

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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to