Regression (r286936): SessionStorage data is not cleared when deleting website data by modification time
https://bugs.webkit.org/show_bug.cgi?id=235542
Reviewed by Chris Dumez.
Source/WebKit:
The old behavior before r286936 is to delete SessionStorage data regardless of the modifiedSince parameter.
r286936 made it check modifiedSince and perform deleteion when modifiedSince time is -Walltime::infinity. This
patch corrects it by deleting SessionStorage data when modifiedSince time is in the past.
API test: SessionStorage.ClearByModificationTime
* NetworkProcess/storage/OriginStorageManager.cpp:
(WebKit::OriginStorageManager::StorageBucket::deleteData):
Tools:
* TestWebKitAPI/Tests/WebKitCocoa/SessionStorage.mm:
(TEST):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@288478 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 0a816cf..8426db7 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,19 @@
+2022-01-24 Sihui Liu <sihui_liu@apple.com>
+
+ Regression (r286936): SessionStorage data is not cleared when deleting website data by modification time
+ https://bugs.webkit.org/show_bug.cgi?id=235542
+
+ Reviewed by Chris Dumez.
+
+ The old behavior before r286936 is to delete SessionStorage data regardless of the modifiedSince parameter.
+ r286936 made it check modifiedSince and perform deleteion when modifiedSince time is -Walltime::infinity. This
+ patch corrects it by deleting SessionStorage data when modifiedSince time is in the past.
+
+ API test: SessionStorage.ClearByModificationTime
+
+ * NetworkProcess/storage/OriginStorageManager.cpp:
+ (WebKit::OriginStorageManager::StorageBucket::deleteData):
+
2022-01-24 Ada Chan <adachan@apple.com>
Soft link ARKit in a separate ARKitSoftLink file
diff --git a/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp b/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp
index 70b000b..d07c522 100644
--- a/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp
+++ b/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp
@@ -174,7 +174,7 @@
if (types.contains(WebsiteDataType::LocalStorage))
deleteLocalStorageData(modifiedSinceTime);
- if (types.contains(WebsiteDataType::SessionStorage) && modifiedSinceTime == -WallTime::infinity())
+ if (types.contains(WebsiteDataType::SessionStorage) && modifiedSinceTime < WallTime::now())
deleteSessionStorageData();
}
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 2a24933..a1b22af 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,13 @@
+2022-01-24 Sihui Liu <sihui_liu@apple.com>
+
+ Regression (r286936): SessionStorage data is not cleared when deleting website data by modification time
+ https://bugs.webkit.org/show_bug.cgi?id=235542
+
+ Reviewed by Chris Dumez.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/SessionStorage.mm:
+ (TEST):
+
2022-01-24 Wenson Hsieh <wenson_hsieh@apple.com>
[macOS] Update Pasteboard::read to prioritize native representations over TIFF
diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/SessionStorage.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/SessionStorage.mm
index a08275e..d4715d0 100644
--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/SessionStorage.mm
+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/SessionStorage.mm
@@ -117,3 +117,32 @@
{
runSessionStorageInNewWindowTest(@"a = document.createElement('a'); a.href = document.URL; a.target = 'newWindow'; a.rel='noopener'; a.click()", ShouldSessionBeCloned::No);
}
+
+TEST(SessionStorage, ClearByModificationTime)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+ [webView synchronouslyLoadHTMLString:@"<script>sessionStorage.setItem('key', 'value')</script>" baseURL:[NSURL URLWithString:@"http://webkit.org"]];
+
+ auto websiteDataTypes = adoptNS([[NSSet alloc] initWithArray:@[WKWebsiteDataTypeSessionStorage]]);
+ readyToContinue = false;
+ [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:websiteDataTypes.get() completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) {
+ EXPECT_EQ(1u, dataRecords.count);
+ EXPECT_WK_STREQ("webkit.org", [[dataRecords firstObject] displayName]);
+ readyToContinue = true;
+ }];
+ TestWebKitAPI::Util::run(&readyToContinue);
+
+ readyToContinue = false;
+ [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes.get() modifiedSince:[NSDate distantPast] completionHandler:^() {
+ readyToContinue = true;
+ }];
+ TestWebKitAPI::Util::run(&readyToContinue);
+
+ readyToContinue = false;
+ [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:websiteDataTypes.get() completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) {
+ EXPECT_EQ(0u, dataRecords.count);
+ readyToContinue = true;
+ }];
+ TestWebKitAPI::Util::run(&readyToContinue);
+}