Title: [259362] trunk
- Revision
- 259362
- Author
- cdu...@apple.com
- Date
- 2020-04-01 14:01:40 -0700 (Wed, 01 Apr 2020)
Log Message
Regression(r257963) didFailProvisionalNavigation delegate no longer gets called when cancelling a cross-site provisional navigation
https://bugs.webkit.org/show_bug.cgi?id=209873
<rdar://problem/61132068>
Reviewed by Alex Christensen.
Source/WebKit:
ProvisionalPageProxy::cancel() was calling didFailProvisionalLoadForFrame() was not passing a valid
FrameInfoData struct as parameter. As a result, FrameInfoData::isMainFrame ended up being false
instead of true. This was an issue because NavigationState::NavigationClient::didFailProvisionalNavigationWithError()
was relying on this flag to decide whether to call webViewDidFailProvisionalNavigationWithError or
webViewNavigationDidFailProvisionalLoadInSubframeWithError, since r257963.
Change is covered by new API tests.
* UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::cancel):
Tools:
Add API test coverage.
* TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (259361 => 259362)
--- trunk/Source/WebKit/ChangeLog 2020-04-01 20:59:18 UTC (rev 259361)
+++ trunk/Source/WebKit/ChangeLog 2020-04-01 21:01:40 UTC (rev 259362)
@@ -1,3 +1,22 @@
+2020-04-01 Chris Dumez <cdu...@apple.com>
+
+ Regression(r257963) didFailProvisionalNavigation delegate no longer gets called when cancelling a cross-site provisional navigation
+ https://bugs.webkit.org/show_bug.cgi?id=209873
+ <rdar://problem/61132068>
+
+ Reviewed by Alex Christensen.
+
+ ProvisionalPageProxy::cancel() was calling didFailProvisionalLoadForFrame() was not passing a valid
+ FrameInfoData struct as parameter. As a result, FrameInfoData::isMainFrame ended up being false
+ instead of true. This was an issue because NavigationState::NavigationClient::didFailProvisionalNavigationWithError()
+ was relying on this flag to decide whether to call webViewDidFailProvisionalNavigationWithError or
+ webViewNavigationDidFailProvisionalLoadInSubframeWithError, since r257963.
+
+ Change is covered by new API tests.
+
+ * UIProcess/ProvisionalPageProxy.cpp:
+ (WebKit::ProvisionalPageProxy::cancel):
+
2020-04-01 Don Olmstead <don.olmst...@sony.com>
[GPUP][PlayStation] Enable GPU Process
Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (259361 => 259362)
--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2020-04-01 20:59:18 UTC (rev 259361)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2020-04-01 21:01:40 UTC (rev 259362)
@@ -133,7 +133,14 @@
ASSERT(m_mainFrame);
auto error = WebKit::cancelledError(m_request);
error.setType(WebCore::ResourceError::Type::Cancellation);
- didFailProvisionalLoadForFrame(m_mainFrame->frameID(), { }, { }, m_navigationID, m_provisionalLoadURL, error, WebCore::WillContinueLoading::No, UserData { }); // Will delete |this|.
+ FrameInfoData frameInfo {
+ true, // isMainFrame
+ m_request,
+ SecurityOriginData::fromURL(m_request.url()),
+ m_mainFrame->frameID(),
+ WTF::nullopt,
+ };
+ didFailProvisionalLoadForFrame(m_mainFrame->frameID(), WTFMove(frameInfo), ResourceRequest { m_request }, m_navigationID, m_provisionalLoadURL, error, WebCore::WillContinueLoading::No, UserData { }); // Will delete |this|.
}
void ProvisionalPageProxy::initializeWebPage(RefPtr<API::WebsitePolicies>&& websitePolicies)
Modified: trunk/Tools/ChangeLog (259361 => 259362)
--- trunk/Tools/ChangeLog 2020-04-01 20:59:18 UTC (rev 259361)
+++ trunk/Tools/ChangeLog 2020-04-01 21:01:40 UTC (rev 259362)
@@ -1,3 +1,15 @@
+2020-04-01 Chris Dumez <cdu...@apple.com>
+
+ Regression(r257963) didFailProvisionalNavigation delegate no longer gets called when cancelling a cross-site provisional navigation
+ https://bugs.webkit.org/show_bug.cgi?id=209873
+ <rdar://problem/61132068>
+
+ Reviewed by Alex Christensen.
+
+ Add API test coverage.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
+
2020-04-01 Don Olmstead <don.olmst...@sony.com>
[PlayStation] Use OBJECT libraries for WebCore and PAL
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm (259361 => 259362)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm 2020-04-01 20:59:18 UTC (rev 259361)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm 2020-04-01 21:01:40 UTC (rev 259362)
@@ -3124,7 +3124,51 @@
EXPECT_WK_STREQ(@"pson://www.apple.com/main.html", [[webView URL] absoluteString]);
}
+static void runCancelCrossSiteProvisionalLoadTest(ShouldEnablePSON shouldEnablePSON)
+{
+ auto processPoolConfiguration = psonProcessPoolConfiguration();
+ processPoolConfiguration.get().processSwapsOnNavigation = shouldEnablePSON == ShouldEnablePSON::Yes;
+ auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
+ auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ [webViewConfiguration setProcessPool:processPool.get()];
+ auto handler = adoptNS([[PSONScheme alloc] init]);
+ [webViewConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"PSON"];
+
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]);
+ auto navigationDelegate = adoptNS([[PSONNavigationDelegate alloc] init]);
+ [webView setNavigationDelegate:navigationDelegate.get()];
+
+ failed = false;
+ NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"pson://www.webkit.org/main.html"]];
+ [webView loadRequest:request];
+
+ TestWebKitAPI::Util::run(&done);
+ done = false;
+
+ EXPECT_FALSE(failed);
+
+ navigationDelegate->didStartProvisionalNavigationHandler = ^{
+ [webView stopLoading];
+ };
+
+ request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"pson://www.apple.com/main.html"]];
+ [webView loadRequest:request];
+
+ TestWebKitAPI::Util::run(&failed);
+ failed = false;
+}
+
+TEST(ProcessSwap, CancelCrossSiteProvisionalLoadWithoutPSON)
+{
+ runCancelCrossSiteProvisionalLoadTest(ShouldEnablePSON::No);
+}
+
+TEST(ProcessSwap, CancelCrossSiteProvisionalLoadWithPSON)
+{
+ runCancelCrossSiteProvisionalLoadTest(ShouldEnablePSON::Yes);
+}
+
TEST(ProcessSwap, DoSameSiteNavigationAfterCrossSiteProvisionalLoadStarted)
{
auto processPoolConfiguration = psonProcessPoolConfiguration();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes