Title: [290736] trunk/Tools
Revision
290736
Author
[email protected]
Date
2022-03-02 10:48:46 -0800 (Wed, 02 Mar 2022)

Log Message

Add test coverage for deleting FileSystem data when file is being written
https://bugs.webkit.org/show_bug.cgi?id=237353

Reviewed by Chris Dumez.

Verify that file can be removed from disk, and active FileSystemSyncAccessHandle is invalidated in this case.

* TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (290735 => 290736)


--- trunk/Tools/ChangeLog	2022-03-02 18:47:09 UTC (rev 290735)
+++ trunk/Tools/ChangeLog	2022-03-02 18:48:46 UTC (rev 290736)
@@ -1,3 +1,14 @@
+2022-03-02  Sihui Liu  <[email protected]>
+
+        Add test coverage for deleting FileSystem data when file is being written
+        https://bugs.webkit.org/show_bug.cgi?id=237353
+
+        Reviewed by Chris Dumez.
+
+        Verify that file can be removed from disk, and active FileSystemSyncAccessHandle is invalidated in this case.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:
+
 2022-03-02  Alex Christensen  <[email protected]>
 
         Add SPI _WKDataTask

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm (290735 => 290736)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm	2022-03-02 18:47:09 UTC (rev 290735)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm	2022-03-02 18:48:46 UTC (rev 290736)
@@ -194,6 +194,53 @@
     EXPECT_WK_STREQ(@"success: write 10 bytes", [lastScriptMessage body]);
 }
 
+TEST(FileSystemAccess, DeleteDataDuringWrite)
+{
+    auto handler = adoptNS([[FileSystemAccessMessageHandler alloc] init]);
+    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
+    auto preferences = [configuration preferences];
+    preferences._fileSystemAccessEnabled = YES;
+    preferences._accessHandleEnabled = YES;
+    preferences._storageAPIEnabled = YES;
+    auto schemeHandler = adoptNS([[TestURLSchemeHandler alloc] init]);
+    [schemeHandler setStartURLSchemeTaskHandler:^(WKWebView *, id<WKURLSchemeTask> task) {
+        NSURL *requestURL = task.request.URL;
+        EXPECT_WK_STREQ("webkit://webkit.org/worker.js", requestURL.absoluteString);
+        auto response = adoptNS([[NSURLResponse alloc] initWithURL:requestURL MIMEType:@"text/_javascript_" expectedContentLength:0 textEncodingName:nil]);
+        RetainPtr<NSData> data = "" dataWithBytes:workerBytes length:strlen(workerBytes)];
+        [task didReceiveResponse:response.get()];
+        [task didReceiveData:data.get()];
+        [task didFinish];
+    }];
+    [configuration setURLSchemeHandler:schemeHandler.get() forURLScheme:@"webkit"];
+
+    auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
+    [webView loadHTMLString:workerFrameString baseURL:[NSURL URLWithString:@"webkit://webkit.org"]];
+    TestWebKitAPI::Util::run(&receivedScriptMessage);
+    receivedScriptMessage = false;
+    EXPECT_WK_STREQ(@"page is loaded", [lastScriptMessage body]);
+
+    [webView evaluateJavaScript:@"start()" completionHandler:nil];
+    TestWebKitAPI::Util::run(&receivedScriptMessage);
+    receivedScriptMessage = false;
+    EXPECT_WK_STREQ(@"success: write 10 bytes", [lastScriptMessage body]);
+
+    done = false;
+    auto types = [NSSet setWithObject:_WKWebsiteDataTypeFileSystem];
+    [[configuration websiteDataStore] removeDataOfTypes:types modifiedSince:[NSDate distantPast] completionHandler:^ {
+        [[configuration websiteDataStore] fetchDataRecordsOfTypes:types completionHandler:^(NSArray<WKWebsiteDataRecord *> *records) {
+            EXPECT_EQ(records.count, 0u);
+            done = true;
+        }];
+    }];
+    TestWebKitAPI::Util::run(&done);
+
+    // Open access handle should be when website data is removed.
+    TestWebKitAPI::Util::run(&receivedScriptMessage);
+    EXPECT_WK_STREQ(@"error: InvalidStateError - AccessHandle is closing or closed", [lastScriptMessage body]);
+}
+
 static NSString *basicString = @"<script> \
     async function open() \
     { \
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to