Diff
Modified: branches/safari-609-branch/Source/WebKit/ChangeLog (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/ChangeLog 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/ChangeLog 2020-02-12 00:59:37 UTC (rev 256404)
@@ -1,5 +1,96 @@
2020-02-11 Alan Coon <alanc...@apple.com>
+ Cherry-pick r255845. rdar://problem/59298143
+
+ _WKDownload should expose the originating FrameInfo.
+ <rdar://problem/58022576> and https://bugs.webkit.org/show_bug.cgi?id=207185
+
+ Patch by Brady Eidson <beid...@apple.com> on 2020-02-05
+ Reviewed by Geoff Garen.
+
+ Source/WebKit:
+
+ Covered by new API test.
+
+ For the cases where a navigation is converted into a download, include the relevant
+ WKFrameInfo on the _WKDownload object.
+
+ * UIProcess/API/APIFrameInfo.h:
+ * UIProcess/API/Cocoa/_WKDownload.h:
+ * UIProcess/API/Cocoa/_WKDownload.mm:
+ (-[_WKDownload originatingFrameInfo]):
+ * UIProcess/Downloads/DownloadProxy.cpp:
+ (WebKit::generateDownloadID):
+ (WebKit::DownloadProxy::DownloadProxy):
+ (WebKit::DownloadProxy::create): Deleted.
+ (WebKit::DownloadProxy::setOriginatingPage): Deleted.
+ * UIProcess/Downloads/DownloadProxy.h:
+ (WebKit::DownloadProxy::create):
+ (WebKit::DownloadProxy::frameInfo):
+ * UIProcess/Downloads/DownloadProxyMap.cpp:
+ (WebKit::DownloadProxyMap::createDownloadProxy):
+ * UIProcess/Downloads/DownloadProxyMap.h:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::createDownloadProxy):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::receivedPolicyDecision):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::download):
+ (WebKit::WebProcessPool::resumeDownload):
+ (WebKit::WebProcessPool::createDownloadProxy):
+ * UIProcess/WebProcessPool.h:
+
+ Tools:
+
+ * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
+ (-[DownloadTestSchemeDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
+ (-[DownloadSecurityOriginDelegate _downloadDidStart:]):
+ (loaded):
+ * TestWebKitAPI/cocoa/HTTPServer.mm:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255845 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2020-02-05 Brady Eidson <beid...@apple.com>
+
+ _WKDownload should expose the originating FrameInfo.
+ <rdar://problem/58022576> and https://bugs.webkit.org/show_bug.cgi?id=207185
+
+ Reviewed by Geoff Garen.
+
+ Covered by new API test.
+
+ For the cases where a navigation is converted into a download, include the relevant
+ WKFrameInfo on the _WKDownload object.
+
+ * UIProcess/API/APIFrameInfo.h:
+ * UIProcess/API/Cocoa/_WKDownload.h:
+ * UIProcess/API/Cocoa/_WKDownload.mm:
+ (-[_WKDownload originatingFrameInfo]):
+ * UIProcess/Downloads/DownloadProxy.cpp:
+ (WebKit::generateDownloadID):
+ (WebKit::DownloadProxy::DownloadProxy):
+ (WebKit::DownloadProxy::create): Deleted.
+ (WebKit::DownloadProxy::setOriginatingPage): Deleted.
+ * UIProcess/Downloads/DownloadProxy.h:
+ (WebKit::DownloadProxy::create):
+ (WebKit::DownloadProxy::frameInfo):
+ * UIProcess/Downloads/DownloadProxyMap.cpp:
+ (WebKit::DownloadProxyMap::createDownloadProxy):
+ * UIProcess/Downloads/DownloadProxyMap.h:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::createDownloadProxy):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::receivedPolicyDecision):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::download):
+ (WebKit::WebProcessPool::resumeDownload):
+ (WebKit::WebProcessPool::createDownloadProxy):
+ * UIProcess/WebProcessPool.h:
+
+2020-02-11 Alan Coon <alanc...@apple.com>
+
Cherry-pick r255595. rdar://problem/59298183
Regression(r253224) WKUIDelegate.webViewDidClose may get called twice after calling _tryClose on the WKWebView
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/API/APIFrameInfo.h (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/API/APIFrameInfo.h 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/API/APIFrameInfo.h 2020-02-12 00:59:37 UTC (rev 256404)
@@ -26,6 +26,7 @@
#pragma once
#include "APIObject.h"
+#include "WebPageProxy.h"
#include <WebCore/ResourceRequest.h>
namespace WebCore {
@@ -34,7 +35,6 @@
namespace WebKit {
class WebFrameProxy;
-class WebPageProxy;
struct FrameInfoData;
}
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h 2020-02-12 00:59:37 UTC (rev 256404)
@@ -27,6 +27,7 @@
#import <Foundation/Foundation.h>
+@class WKFrameInfo;
@class WKWebView;
WK_CLASS_AVAILABLE(macos(10.10), ios(8.0))
@@ -41,5 +42,6 @@
@property (nonatomic, readonly, copy) NSArray<NSURL *> *redirectChain WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
@property (nonatomic, readonly) BOOL wasUserInitiated WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
@property (nonatomic, readonly) NSData *resumeData WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
+@property (nonatomic, readonly) WKFrameInfo *originatingFrame WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
@end
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.mm (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.mm 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/API/Cocoa/_WKDownload.mm 2020-02-12 00:59:37 UTC (rev 256404)
@@ -27,6 +27,7 @@
#import "_WKDownloadInternal.h"
#import "DownloadProxy.h"
+#import "WKFrameInfoInternal.h"
#import "WKNSData.h"
#import "WKWebViewInternal.h"
#import <wtf/WeakObjCPtr.h>
@@ -83,6 +84,11 @@
return WebKit::wrapper(_download->resumeData());
}
+- (WKFrameInfo *)originatingFrame
+{
+ return WebKit::wrapper(&_download->frameInfo());
+}
+
- (id)copyWithZone:(NSZone *)zone
{
return [self retain];
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp 2020-02-12 00:59:37 UTC (rev 256404)
@@ -28,9 +28,11 @@
#include "APIData.h"
#include "APIDownloadClient.h"
+#include "APIFrameInfo.h"
#include "AuthenticationChallengeProxy.h"
#include "DataReference.h"
#include "DownloadProxyMap.h"
+#include "FrameInfoData.h"
#include "NetworkProcessMessages.h"
#include "NetworkProcessProxy.h"
#include "WebPageProxy.h"
@@ -50,18 +52,15 @@
static uint64_t uniqueDownloadID = 0;
return ++uniqueDownloadID;
}
-
-Ref<DownloadProxy> DownloadProxy::create(DownloadProxyMap& downloadProxyMap, WebsiteDataStore& dataStore, WebProcessPool& processPool, const ResourceRequest& resourceRequest)
-{
- return adoptRef(*new DownloadProxy(downloadProxyMap, dataStore, processPool, resourceRequest));
-}
-DownloadProxy::DownloadProxy(DownloadProxyMap& downloadProxyMap, WebsiteDataStore& dataStore, WebProcessPool& processPool, const ResourceRequest& resourceRequest)
+DownloadProxy::DownloadProxy(DownloadProxyMap& downloadProxyMap, WebsiteDataStore& dataStore, WebProcessPool& processPool, const ResourceRequest& resourceRequest, const FrameInfoData& frameInfoData, WebPageProxy* originatingPage)
: m_downloadProxyMap(downloadProxyMap)
, m_dataStore(&dataStore)
, m_processPool(&processPool)
, m_downloadID(generateDownloadID())
, m_request(resourceRequest)
+ , m_originatingPage(makeWeakPtr(originatingPage))
+ , m_frameInfo(API::FrameInfo::create(FrameInfoData { frameInfoData }, originatingPage))
{
}
@@ -100,11 +99,6 @@
return m_originatingPage.get();
}
-void DownloadProxy::setOriginatingPage(WebPageProxy* page)
-{
- m_originatingPage = makeWeakPtr(page);
-}
-
#if PLATFORM(COCOA)
void DownloadProxy::publishProgress(const URL& URL)
{
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.h (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.h 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxy.h 2020-02-12 00:59:37 UTC (rev 256404)
@@ -36,6 +36,7 @@
namespace API {
class Data;
+class FrameInfo;
}
namespace WebCore {
@@ -54,9 +55,15 @@
class WebProcessPool;
class WebsiteDataStore;
+struct FrameInfoData;
+
class DownloadProxy : public API::ObjectImpl<API::Object::Type::Download>, public IPC::MessageReceiver {
public:
- static Ref<DownloadProxy> create(DownloadProxyMap&, WebsiteDataStore&, WebProcessPool&, const WebCore::ResourceRequest&);
+
+ template<typename... Args> static Ref<DownloadProxy> create(Args&&... args)
+ {
+ return adoptRef(*new DownloadProxy(std::forward<Args>(args)...));
+ }
~DownloadProxy();
DownloadID downloadID() const { return m_downloadID; }
@@ -72,7 +79,6 @@
void didReceiveSyncDownloadProxyMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);
WebPageProxy* originatingPage() const;
- void setOriginatingPage(WebPageProxy*);
void setRedirectChain(Vector<URL>&& redirectChain) { m_redirectChain = WTFMove(redirectChain); }
const Vector<URL>& redirectChain() const { return m_redirectChain; }
@@ -98,8 +104,10 @@
void publishProgress(const URL&);
#endif
+ API::FrameInfo& frameInfo() { return m_frameInfo.get(); }
+
private:
- explicit DownloadProxy(DownloadProxyMap&, WebsiteDataStore&, WebProcessPool&, const WebCore::ResourceRequest&);
+ explicit DownloadProxy(DownloadProxyMap&, WebsiteDataStore&, WebProcessPool&, const WebCore::ResourceRequest&, const FrameInfoData&, WebPageProxy*);
// IPC::MessageReceiver
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
@@ -132,6 +140,7 @@
WeakPtr<WebPageProxy> m_originatingPage;
Vector<URL> m_redirectChain;
bool m_wasUserInitiated { true };
+ Ref<API::FrameInfo> m_frameInfo;
};
} // namespace WebKit
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp 2020-02-12 00:59:37 UTC (rev 256404)
@@ -80,9 +80,9 @@
m_process->send(Messages::NetworkProcess::ApplicationWillEnterForeground(), 0);
}
-DownloadProxy& DownloadProxyMap::createDownloadProxy(WebsiteDataStore& dataStore, WebProcessPool& processPool, const WebCore::ResourceRequest& resourceRequest)
+DownloadProxy& DownloadProxyMap::createDownloadProxy(WebsiteDataStore& dataStore, WebProcessPool& processPool, const WebCore::ResourceRequest& resourceRequest, const FrameInfoData& frameInfo, WebPageProxy* originatingPage)
{
- auto downloadProxy = DownloadProxy::create(*this, dataStore, processPool, resourceRequest);
+ auto downloadProxy = DownloadProxy::create(*this, dataStore, processPool, resourceRequest, frameInfo, originatingPage);
m_downloads.set(downloadProxy->downloadID(), downloadProxy.copyRef());
RELEASE_LOG(Loading, "Adding download %" PRIu64 " to UIProcess DownloadProxyMap", downloadProxy->downloadID().downloadID());
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h 2020-02-12 00:59:37 UTC (rev 256404)
@@ -44,6 +44,7 @@
class DownloadProxy;
class NetworkProcessProxy;
class ProcessAssertion;
+class WebPageProxy;
class WebProcessPool;
class WebsiteDataStore;
@@ -55,7 +56,7 @@
explicit DownloadProxyMap(NetworkProcessProxy&);
~DownloadProxyMap();
- DownloadProxy& createDownloadProxy(WebsiteDataStore&, WebProcessPool&, const WebCore::ResourceRequest&);
+ DownloadProxy& createDownloadProxy(WebsiteDataStore&, WebProcessPool&, const WebCore::ResourceRequest&, const FrameInfoData&, WebPageProxy* originatingPage);
void downloadFinished(DownloadProxy&);
bool isEmpty() const { return m_downloads.isEmpty(); }
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2020-02-12 00:59:37 UTC (rev 256404)
@@ -182,12 +182,12 @@
}
}
-DownloadProxy& NetworkProcessProxy::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& resourceRequest)
+DownloadProxy& NetworkProcessProxy::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& resourceRequest, const FrameInfoData& frameInfo, WebPageProxy* originatingPage)
{
if (!m_downloadProxyMap)
m_downloadProxyMap = makeUnique<DownloadProxyMap>(*this);
- return m_downloadProxyMap->createDownloadProxy(dataStore, m_processPool, resourceRequest);
+ return m_downloadProxyMap->createDownloadProxy(dataStore, m_processPool, resourceRequest, frameInfo, originatingPage);
}
void NetworkProcessProxy::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, CompletionHandler<void (WebsiteData)>&& completionHandler)
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2020-02-12 00:59:37 UTC (rev 256404)
@@ -63,11 +63,14 @@
class DownloadProxy;
class DownloadProxyMap;
+class WebPageProxy;
class WebProcessPool;
enum class ShouldGrandfatherStatistics : bool;
enum class StorageAccessStatus : uint8_t;
enum class WebsiteDataFetchOption;
enum class WebsiteDataType;
+
+struct FrameInfoData;
struct NetworkProcessCreationParameters;
class WebUserContentControllerProxy;
struct WebsiteData;
@@ -92,7 +95,7 @@
void getNetworkProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&);
- DownloadProxy& createDownloadProxy(WebsiteDataStore&, const WebCore::ResourceRequest&);
+ DownloadProxy& createDownloadProxy(WebsiteDataStore&, const WebCore::ResourceRequest&, const FrameInfoData&, WebPageProxy* originatingPage);
void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, CompletionHandler<void(WebsiteData)>&&);
void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, WallTime modifiedSince, CompletionHandler<void()>&& completionHandler);
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-02-12 00:59:37 UTC (rev 256404)
@@ -3122,7 +3122,7 @@
DownloadID downloadID = { };
if (action == PolicyAction::Download) {
// Create a download proxy.
- auto& download = m_process->processPool().createDownloadProxy(m_websiteDataStore, m_decidePolicyForResponseRequest, this);
+ auto& download = m_process->processPool().createDownloadProxy(m_websiteDataStore, m_decidePolicyForResponseRequest, this, navigation ? navigation->originatingFrameInfo() : FrameInfoData { });
if (navigation) {
download.setWasUserInitiated(navigation->wasUserInitiated());
download.setRedirectChain(navigation->takeRedirectChain());
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/WebProcessPool.cpp (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/WebProcessPool.cpp 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/WebProcessPool.cpp 2020-02-12 00:59:37 UTC (rev 256404)
@@ -1341,7 +1341,7 @@
DownloadProxy& WebProcessPool::download(WebsiteDataStore& dataStore, WebPageProxy* initiatingPage, const ResourceRequest& request, const String& suggestedFilename)
{
- auto& downloadProxy = createDownloadProxy(dataStore, request, initiatingPage);
+ auto& downloadProxy = createDownloadProxy(dataStore, request, initiatingPage, { });
PAL::SessionID sessionID = dataStore.sessionID();
if (initiatingPage)
@@ -1373,7 +1373,7 @@
DownloadProxy& WebProcessPool::resumeDownload(WebsiteDataStore& dataStore, WebPageProxy* initiatingPage, const API::Data& resumeData, const String& path)
{
- auto& downloadProxy = createDownloadProxy(dataStore, ResourceRequest(), initiatingPage);
+ auto& downloadProxy = createDownloadProxy(dataStore, ResourceRequest(), initiatingPage, { });
PAL::SessionID sessionID = dataStore.sessionID();
SandboxExtension::Handle sandboxExtensionHandle;
@@ -1623,11 +1623,9 @@
sendToAllProcesses(Messages::WebProcess::SetDefaultRequestTimeoutInterval(timeoutInterval));
}
-DownloadProxy& WebProcessPool::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& request, WebPageProxy* originatingPage)
+DownloadProxy& WebProcessPool::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& request, WebPageProxy* originatingPage, const FrameInfoData& frameInfo)
{
- auto& downloadProxy = ensureNetworkProcess().createDownloadProxy(dataStore, request);
- downloadProxy.setOriginatingPage(originatingPage);
- return downloadProxy;
+ return ensureNetworkProcess().createDownloadProxy(dataStore, request, frameInfo, originatingPage);
}
void WebProcessPool::synthesizeAppIsBackground(bool background)
Modified: branches/safari-609-branch/Source/WebKit/UIProcess/WebProcessPool.h (256403 => 256404)
--- branches/safari-609-branch/Source/WebKit/UIProcess/WebProcessPool.h 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Source/WebKit/UIProcess/WebProcessPool.h 2020-02-12 00:59:37 UTC (rev 256404)
@@ -300,7 +300,7 @@
void setEnhancedAccessibility(bool);
// Downloads.
- DownloadProxy& createDownloadProxy(WebsiteDataStore&, const WebCore::ResourceRequest&, WebPageProxy* originatingPage);
+ DownloadProxy& createDownloadProxy(WebsiteDataStore&, const WebCore::ResourceRequest&, WebPageProxy* originatingPage, const FrameInfoData&);
API::DownloadClient& downloadClient() { return m_downloadClient.get(); }
API::LegacyContextHistoryClient& historyClient() { return *m_historyClient; }
Modified: branches/safari-609-branch/Tools/ChangeLog (256403 => 256404)
--- branches/safari-609-branch/Tools/ChangeLog 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Tools/ChangeLog 2020-02-12 00:59:37 UTC (rev 256404)
@@ -1,5 +1,71 @@
2020-02-11 Alan Coon <alanc...@apple.com>
+ Cherry-pick r255845. rdar://problem/59298143
+
+ _WKDownload should expose the originating FrameInfo.
+ <rdar://problem/58022576> and https://bugs.webkit.org/show_bug.cgi?id=207185
+
+ Patch by Brady Eidson <beid...@apple.com> on 2020-02-05
+ Reviewed by Geoff Garen.
+
+ Source/WebKit:
+
+ Covered by new API test.
+
+ For the cases where a navigation is converted into a download, include the relevant
+ WKFrameInfo on the _WKDownload object.
+
+ * UIProcess/API/APIFrameInfo.h:
+ * UIProcess/API/Cocoa/_WKDownload.h:
+ * UIProcess/API/Cocoa/_WKDownload.mm:
+ (-[_WKDownload originatingFrameInfo]):
+ * UIProcess/Downloads/DownloadProxy.cpp:
+ (WebKit::generateDownloadID):
+ (WebKit::DownloadProxy::DownloadProxy):
+ (WebKit::DownloadProxy::create): Deleted.
+ (WebKit::DownloadProxy::setOriginatingPage): Deleted.
+ * UIProcess/Downloads/DownloadProxy.h:
+ (WebKit::DownloadProxy::create):
+ (WebKit::DownloadProxy::frameInfo):
+ * UIProcess/Downloads/DownloadProxyMap.cpp:
+ (WebKit::DownloadProxyMap::createDownloadProxy):
+ * UIProcess/Downloads/DownloadProxyMap.h:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::createDownloadProxy):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::receivedPolicyDecision):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::download):
+ (WebKit::WebProcessPool::resumeDownload):
+ (WebKit::WebProcessPool::createDownloadProxy):
+ * UIProcess/WebProcessPool.h:
+
+ Tools:
+
+ * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
+ (-[DownloadTestSchemeDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
+ (-[DownloadSecurityOriginDelegate _downloadDidStart:]):
+ (loaded):
+ * TestWebKitAPI/cocoa/HTTPServer.mm:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255845 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2020-02-05 Brady Eidson <beid...@apple.com>
+
+ _WKDownload should expose the originating FrameInfo.
+ <rdar://problem/58022576> and https://bugs.webkit.org/show_bug.cgi?id=207185
+
+ Reviewed by Geoff Garen.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
+ (-[DownloadTestSchemeDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
+ (-[DownloadSecurityOriginDelegate _downloadDidStart:]):
+ (loaded):
+ * TestWebKitAPI/cocoa/HTTPServer.mm:
+
+2020-02-11 Alan Coon <alanc...@apple.com>
+
Cherry-pick r255826. rdar://problem/59299115
REGRESSION(r255595): page not closed after beforeunload handler returns true
Modified: branches/safari-609-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm (256403 => 256404)
--- branches/safari-609-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm 2020-02-12 00:59:37 UTC (rev 256404)
@@ -28,6 +28,7 @@
#if PLATFORM(MAC) || PLATFORM(IOS)
+#import "HTTPServer.h"
#import "PlatformUtilities.h"
#import "TCPServer.h"
#import "Test.h"
@@ -1147,4 +1148,70 @@
Util::run(&isDone);
}
+@interface DownloadTestSchemeDelegate : NSObject <WKNavigationDelegate>
+@end
+
+@implementation DownloadTestSchemeDelegate
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
+{
+ if ([navigationResponse.response.URL.absoluteString hasSuffix:@"/download"])
+ decisionHandler(_WKNavigationResponsePolicyBecomeDownload);
+ else
+ decisionHandler(WKNavigationResponsePolicyAllow);
+}
+@end
+
+@interface DownloadSecurityOriginDelegate : NSObject <_WKDownloadDelegate>
+@end
+
+@implementation DownloadSecurityOriginDelegate {
+@public
+ uint16_t _serverPort;
+ WKWebView *_webView;
+}
+
+- (void)_downloadDidStart:(_WKDownload *)download
+{
+ EXPECT_TRUE([download.originatingFrame.securityOrigin.protocol isEqualToString:@"http"]);
+ EXPECT_TRUE([download.originatingFrame.securityOrigin.host isEqualToString:@"127.0.0.1"]);
+ EXPECT_EQ(download.originatingFrame.securityOrigin.port, _serverPort);
+ EXPECT_FALSE(download.originatingFrame.mainFrame);
+ EXPECT_EQ(download.originatingFrame.webView, _webView);
+ isDone = true;
+}
+
+@end
+
+static const char* documentText = R"DOCDOCDOC(
+<script>
+function loaded()
+{
+ document.getElementById("thelink").click();
+}
+</script>
+<body _onload_="loaded();">
+<a id="thelink" href="" me</a>
+</body>
+)DOCDOCDOC";
+
+TEST(_WKDownload, SubframeSecurityOrigin)
+{
+ auto navigationDelegate = adoptNS([[DownloadTestSchemeDelegate alloc] init]);
+ auto downloadDelegate = adoptNS([[DownloadSecurityOriginDelegate alloc] init]);
+
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
+ [webView setNavigationDelegate:navigationDelegate.get()];
+ [[[webView configuration] processPool] _setDownloadDelegate:downloadDelegate.get()];
+
+ TestWebKitAPI::HTTPServer server({
+ { "/page", { documentText } },
+ { "/download", { documentText } },
+ });
+ downloadDelegate->_serverPort = server.port();
+ downloadDelegate->_webView = webView.get();
+
+ isDone = false;
+ [webView loadHTMLString:[NSString stringWithFormat:@"<body><iframe src=''></iframe></body>", server.port()] baseURL:nil];
+ TestWebKitAPI::Util::run(&isDone);
+}
#endif // PLATFORM(MAC) || PLATFORM(IOS)
Modified: branches/safari-609-branch/Tools/TestWebKitAPI/cocoa/HTTPServer.mm (256403 => 256404)
--- branches/safari-609-branch/Tools/TestWebKitAPI/cocoa/HTTPServer.mm 2020-02-12 00:59:33 UTC (rev 256403)
+++ branches/safari-609-branch/Tools/TestWebKitAPI/cocoa/HTTPServer.mm 2020-02-12 00:59:37 UTC (rev 256404)
@@ -28,6 +28,7 @@
#if HAVE(NETWORK_FRAMEWORK)
+#import "Utilities.h"
#import <wtf/text/StringBuilder.h>
#import <wtf/text/WTFString.h>
@@ -49,7 +50,14 @@
nw_connection_start(connection);
respondToRequests(connection);
});
+ __block bool ready = false;
+ nw_listener_set_state_changed_handler(m_listener.get(), ^(nw_listener_state_t state, nw_error_t error) {
+ ASSERT_UNUSED(error, !error);
+ if (state == nw_listener_state_ready)
+ ready = true;
+ });
nw_listener_start(m_listener.get());
+ Util::run(&ready);
}
void HTTPServer::respondToRequests(nw_connection_t connection)