⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 277392 in webkit


Ignore:
Timestamp:
May 12, 2021, 2:56:12 PM (5 years ago)
Author:
sihui_liu@apple.com
Message:

[ 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):

Location:
trunk/Tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r277387 r277392  
     12021-05-12  Sihui Liu  <sihui_liu@apple.com>
     2
     3        [ BigSur Release ] TestWebKitAPI.IndexedDB.KillWebProcessWithOpenConnection is a constant failure
     4        https://bugs.webkit.org/show_bug.cgi?id=225372
     5        <rdar://problem/77532291>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Ensure IDB data is cleared before test and make error logging more detailed.
     10
     11        * TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-1.html:
     12        * TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-2.html:
     13        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm: Listen to version change event because it
     14        indicates that server starts handling second open request in KillWebProcessWithOpenConnection-2.html.
     15        (-[IndexedDBWebProcessKillMessageHandler userContentController:didReceiveScriptMessage:]):
     16        (getNextMessage):
     17        (TEST):
     18
    1192021-05-12  Jonathan Bedard  <jbedard@apple.com>
    220
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-1.html

    r259461 r277392  
    44request.onsuccess = () => {
    55    window.webkit.messageHandlers.testHandler.postMessage("Open Succeeded");
     6    var db = event.target.result;
     7    db.onversionchange = () => {
     8        window.webkit.messageHandlers.testHandler.postMessage("Version Change");
     9    }
    610}
    711request.onerror = () => {
    8     window.webkit.messageHandlers.testHandler.postMessage("Open Failed");
     12    window.webkit.messageHandlers.testHandler.postMessage("Open Failed: " + request.error);
    913}
    1014</script>
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-2.html

    r259461 r277392  
    66    var secondRequest = window.indexedDB.open("TestIndexedDB", db.version + 1);
    77    secondRequest.onsuccess = (event) => {
    8         window.webkit.messageHandlers.testHandler.postMessage("Second Open Succeeded Unexpectedly");
     8        window.webkit.messageHandlers.testHandler.postMessage("Second Open Succeeded");
    99    }
    10     secondRequest.onerror = (event) => {
    11         window.webkit.messageHandlers.testHandler.postMessage("Second Open Failed Unexpectedly");
     10    secondRequest.onerror = () => {
     11        window.webkit.messageHandlers.testHandler.postMessage("Second Open Failed: " + secondRequest.error);
    1212    }
    13     window.webkit.messageHandlers.testHandler.postMessage("First Open Succeeded");
    1413}
    1514request.onerror = () => {
    16     window.webkit.messageHandlers.testHandler.postMessage("First Open Failed");
     15    window.webkit.messageHandlers.testHandler.postMessage("First Open Failed: " + request.error);
    1716}
    1817</script>
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm

    r273062 r277392  
    4040
    4141static bool receivedScriptMessage;
    42 static Deque<RetainPtr<WKScriptMessage>> scriptMessages;
     42static Deque<RetainPtr<NSString>> scriptMessages;
    4343
    4444@interface IndexedDBWebProcessKillMessageHandler : NSObject <WKScriptMessageHandler>
     
    5050{
    5151    receivedScriptMessage = true;
    52     scriptMessages.append(message);
     52    scriptMessages.append([message body]);
    5353}
    5454
    5555@end
    5656
    57 static WKScriptMessage *getNextMessage()
     57static RetainPtr<NSString> getNextMessage()
    5858{
    5959    if (scriptMessages.isEmpty()) {
     
    6262    }
    6363
    64     return scriptMessages.takeFirst().autorelease();
     64    return scriptMessages.takeFirst();
    6565}
    6666
     
    7676    [webView loadRequest:request];
    7777
    78     RetainPtr<NSString> string1 = (NSString *)[getNextMessage() body];
    79     RetainPtr<NSString> string2 = (NSString *)[getNextMessage() body];
    80     RetainPtr<NSString> string3 = (NSString *)[getNextMessage() body];
    81     RetainPtr<NSString> string4 = (NSString *)[getNextMessage() body];
     78    auto string1 = getNextMessage();
     79    auto string2 = getNextMessage();
     80    auto string3 = getNextMessage();
     81    auto string4 = getNextMessage();
    8282
    8383    // Make a new web view with a new web process to finish the test
     
    8787    [webView2 loadRequest:request];
    8888
    89     RetainPtr<NSString> string5 = (NSString *)[getNextMessage() body];
     89    auto string5 = getNextMessage();
    9090
    9191    // Kill the first web process to unblock the second web processes transaction from starting.
    9292    [webView _killWebContentProcessAndResetState];
    9393
    94     RetainPtr<NSString> string6 = (NSString *)[getNextMessage() body];
     94    auto string6 = getNextMessage();
    9595
    9696    EXPECT_WK_STREQ(@"UpgradeNeeded", string1.get());
     
    108108    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    109109
     110    __block bool readyToContinue = false;
     111    [configuration.get().websiteDataStore removeDataOfTypes:[NSSet setWithObjects:WKWebsiteDataTypeIndexedDBDatabases, nil] modifiedSince:[NSDate distantPast] completionHandler:^() {
     112        readyToContinue = true;
     113    }];
     114    TestWebKitAPI::Util::run(&readyToContinue);
     115
    110116    auto webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    111117    NSURLRequest *request1 = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"KillWebProcessWithOpenConnection-1" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
    112118    [webView1 loadRequest:request1];
    113     RetainPtr<NSString> string1 = (NSString *)[getNextMessage() body];
     119    auto string1 = getNextMessage();
    114120    EXPECT_WK_STREQ(@"Open Succeeded", string1.get());
    115121
     
    117123    NSURLRequest *request2 = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"KillWebProcessWithOpenConnection-2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
    118124    [webView2 loadRequest:request2];
    119     RetainPtr<NSString> string2 = (NSString *)[getNextMessage() body];
    120     EXPECT_WK_STREQ(@"First Open Succeeded", string2.get());
     125    auto string2 = getNextMessage();
     126    EXPECT_WK_STREQ(@"Version Change", string2.get());
    121127
     128    // Second database request in webView2 should not be processed.
    122129    [webView2 _killWebContentProcessAndResetState];
    123130    [webView1 _killWebContentProcessAndResetState];
    124131
    125     TestWebKitAPI::Util::spinRunLoop(10);
    126 
    127132    [webView1 reload];
    128     RetainPtr<NSString> string3 = (NSString *)[getNextMessage() body];
     133    auto string3 = getNextMessage();
    129134    EXPECT_WK_STREQ(@"Open Succeeded", string3.get());
    130135}
Note: See TracChangeset for help on using the changeset viewer.