Liu Song’s Projects


~/Projects/chrome-devtools-frontend

git clone https://code.lsong.org/chrome-devtools-frontend

Commit

Commit
7edb7b7a3e86d0bbea76cdd5169d42ce491a575d
Author
Kateryna Prokopenko <[email protected]>
Date
2022-11-14 15:59:07 +0000 +0000
Diffstat
 front_end/panels/application/StorageView.ts | 8 +
 test/unittests/front_end/panels/application/StorageView_test.ts | 18 +++

[WebSQL] Clear database also by storage key

Bug: 1296581
Change-Id: I92aca9a211e2a716a59cf488d816c4473874d0ec
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4026167
Commit-Queue: Kateryna Prokopenko <[email protected]>
Reviewed-by: Danil Somsikov <[email protected]>


diff --git a/front_end/panels/application/StorageView.ts b/front_end/panels/application/StorageView.ts
index 832613800b9408c8368a82af6b4145878f8cc2b3..0d513a732dfbba10e4046601a388647e5db41bd4 100644
--- a/front_end/panels/application/StorageView.ts
+++ b/front_end/panels/application/StorageView.ts
@@ -496,6 +496,14 @@       if (cookieModel) {
         void cookieModel.clear(undefined, includeThirdPartyCookies ? undefined : originForCookies);
       }
     }
+
+    if (set.has(Protocol.Storage.StorageType.Websql) || hasAll) {
+      const databaseModel = target.model(DatabaseModel);
+      if (databaseModel) {
+        databaseModel.disable();
+        databaseModel.enable();
+      }
+    }
   }
 
   async doUpdate(): Promise<void> {




diff --git a/test/unittests/front_end/panels/application/StorageView_test.ts b/test/unittests/front_end/panels/application/StorageView_test.ts
index 6056edb76c8013fa5f99d3be56510df9dcd431c9..2633dd21278761b185fb9dfe51c670628cb36851 100644
--- a/test/unittests/front_end/panels/application/StorageView_test.ts
+++ b/test/unittests/front_end/panels/application/StorageView_test.ts
@@ -70,4 +70,22 @@
     assert.isTrue(clearByOriginSpy.calledOnceWithExactly({origin: testOrigin, storageTypes: 'cookies'}));
     assert.isTrue(cookieClearSpy.calledOnceWithExactly(undefined, testOrigin));
   });
+
+  it('also clears WebSQL on clearByStorageKey', async () => {
+    const databaseModel = target.model(Resources.DatabaseModel.DatabaseModel);
+    assertNotNullOrUndefined(databaseModel);
+    const databaseRemoved = new Promise(resolve => {
+      databaseModel.addEventListener(Resources.DatabaseModel.Events.DatabasesRemoved, resolve);
+    });
+    const testDatabase = new Resources.DatabaseModel.Database(
+        databaseModel, 'test-id' as Protocol.Database.DatabaseId, 'test-domain', 'test-name', '1');
+    databaseModel.enable();
+    databaseModel.addDatabase(testDatabase);
+    assert.deepEqual(databaseModel.databases()[0], testDatabase);
+
+    Resources.StorageView.StorageView.clearByStorageKey(target, testKey, '', [Protocol.Storage.StorageType.All], false);
+
+    await databaseRemoved;
+    assert.isEmpty(databaseModel.databases());
+  });
 });