Modified: trunk/Tools/ChangeLog (277391 => 277392)
--- trunk/Tools/ChangeLog 2021-05-12 21:43:31 UTC (rev 277391)
+++ trunk/Tools/ChangeLog 2021-05-12 21:56:12 UTC (rev 277392)
@@ -1,3 +1,21 @@
+2021-05-12 Sihui Liu <[email protected]>
+
+ [ BigSur Release ] TestWebKitAPI.IndexedDB.KillWebProcessWithOpenConnection is a constant failure
+ https://bugs.webkit.org/show_bug.cgi?id=225372
+ <rdar://problem/77532291>
+
+ Reviewed by Chris Dumez.
+
+ Ensure IDB data is cleared before test and make error logging more detailed.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-1.html:
+ * TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-2.html:
+ * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm: Listen to version change event because it
+ indicates that server starts handling second open request in KillWebProcessWithOpenConnection-2.html.
+ (-[IndexedDBWebProcessKillMessageHandler userContentController:didReceiveScriptMessage:]):
+ (getNextMessage):
+ (TEST):
+
2021-05-12 Jonathan Bedard <[email protected]>
[TestWebKitAPI] Explicitly exit after completing tests
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-1.html (277391 => 277392)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-1.html 2021-05-12 21:43:31 UTC (rev 277391)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-1.html 2021-05-12 21:56:12 UTC (rev 277392)
@@ -3,8 +3,12 @@
var request = window.indexedDB.open("TestIndexedDB");
request._onsuccess_ = () => {
window.webkit.messageHandlers.testHandler.postMessage("Open Succeeded");
+ var db = event.target.result;
+ db._onversionchange_ = () => {
+ window.webkit.messageHandlers.testHandler.postMessage("Version Change");
+ }
}
request._onerror_ = () => {
- window.webkit.messageHandlers.testHandler.postMessage("Open Failed");
+ window.webkit.messageHandlers.testHandler.postMessage("Open Failed: " + request.error);
}
-</script>
\ No newline at end of file
+</script>
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-2.html (277391 => 277392)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-2.html 2021-05-12 21:43:31 UTC (rev 277391)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-2.html 2021-05-12 21:56:12 UTC (rev 277392)
@@ -5,14 +5,13 @@
db = event.target.result;
var secondRequest = window.indexedDB.open("TestIndexedDB", db.version + 1);
secondRequest._onsuccess_ = (event) => {
- window.webkit.messageHandlers.testHandler.postMessage("Second Open Succeeded Unexpectedly");
+ window.webkit.messageHandlers.testHandler.postMessage("Second Open Succeeded");
}
- secondRequest._onerror_ = (event) => {
- window.webkit.messageHandlers.testHandler.postMessage("Second Open Failed Unexpectedly");
+ secondRequest._onerror_ = () => {
+ window.webkit.messageHandlers.testHandler.postMessage("Second Open Failed: " + secondRequest.error);
}
- window.webkit.messageHandlers.testHandler.postMessage("First Open Succeeded");
}
request._onerror_ = () => {
- window.webkit.messageHandlers.testHandler.postMessage("First Open Failed");
+ window.webkit.messageHandlers.testHandler.postMessage("First Open Failed: " + request.error);
}
-</script>
\ No newline at end of file
+</script>
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm (277391 => 277392)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm 2021-05-12 21:43:31 UTC (rev 277391)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm 2021-05-12 21:56:12 UTC (rev 277392)
@@ -39,7 +39,7 @@
#import <wtf/RetainPtr.h>
static bool receivedScriptMessage;
-static Deque<RetainPtr<WKScriptMessage>> scriptMessages;
+static Deque<RetainPtr<NSString>> scriptMessages;
@interface IndexedDBWebProcessKillMessageHandler : NSObject <WKScriptMessageHandler>
@end
@@ -49,12 +49,12 @@
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
receivedScriptMessage = true;
- scriptMessages.append(message);
+ scriptMessages.append([message body]);
}
@end
-static WKScriptMessage *getNextMessage()
+static RetainPtr<NSString> getNextMessage()
{
if (scriptMessages.isEmpty()) {
receivedScriptMessage = false;
@@ -61,7 +61,7 @@
TestWebKitAPI::Util::run(&receivedScriptMessage);
}
- return scriptMessages.takeFirst().autorelease();
+ return scriptMessages.takeFirst();
}
TEST(IndexedDB, WebProcessKillIDBCleanup)
@@ -75,10 +75,10 @@
NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"WebProcessKillIDBCleanup-1" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
[webView loadRequest:request];
- RetainPtr<NSString> string1 = (NSString *)[getNextMessage() body];
- RetainPtr<NSString> string2 = (NSString *)[getNextMessage() body];
- RetainPtr<NSString> string3 = (NSString *)[getNextMessage() body];
- RetainPtr<NSString> string4 = (NSString *)[getNextMessage() body];
+ auto string1 = getNextMessage();
+ auto string2 = getNextMessage();
+ auto string3 = getNextMessage();
+ auto string4 = getNextMessage();
// Make a new web view with a new web process to finish the test
RetainPtr<WKWebView> webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
@@ -86,12 +86,12 @@
request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"WebProcessKillIDBCleanup-2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
[webView2 loadRequest:request];
- RetainPtr<NSString> string5 = (NSString *)[getNextMessage() body];
+ auto string5 = getNextMessage();
// Kill the first web process to unblock the second web processes transaction from starting.
[webView _killWebContentProcessAndResetState];
- RetainPtr<NSString> string6 = (NSString *)[getNextMessage() body];
+ auto string6 = getNextMessage();
EXPECT_WK_STREQ(@"UpgradeNeeded", string1.get());
EXPECT_WK_STREQ(@"Transaction complete", string2.get());
@@ -107,24 +107,29 @@
auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
[[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
+ __block bool readyToContinue = false;
+ [configuration.get().websiteDataStore removeDataOfTypes:[NSSet setWithObjects:WKWebsiteDataTypeIndexedDBDatabases, nil] modifiedSince:[NSDate distantPast] completionHandler:^() {
+ readyToContinue = true;
+ }];
+ TestWebKitAPI::Util::run(&readyToContinue);
+
auto webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
NSURLRequest *request1 = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"KillWebProcessWithOpenConnection-1" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
[webView1 loadRequest:request1];
- RetainPtr<NSString> string1 = (NSString *)[getNextMessage() body];
+ auto string1 = getNextMessage();
EXPECT_WK_STREQ(@"Open Succeeded", string1.get());
auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
NSURLRequest *request2 = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"KillWebProcessWithOpenConnection-2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
[webView2 loadRequest:request2];
- RetainPtr<NSString> string2 = (NSString *)[getNextMessage() body];
- EXPECT_WK_STREQ(@"First Open Succeeded", string2.get());
+ auto string2 = getNextMessage();
+ EXPECT_WK_STREQ(@"Version Change", string2.get());
+ // Second database request in webView2 should not be processed.
[webView2 _killWebContentProcessAndResetState];
[webView1 _killWebContentProcessAndResetState];
- TestWebKitAPI::Util::spinRunLoop(10);
-
[webView1 reload];
- RetainPtr<NSString> string3 = (NSString *)[getNextMessage() body];
+ auto string3 = getNextMessage();
EXPECT_WK_STREQ(@"Open Succeeded", string3.get());
}