Diff
Modified: trunk/LayoutTests/ChangeLog (259743 => 259744)
--- trunk/LayoutTests/ChangeLog 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/LayoutTests/ChangeLog 2020-04-08 19:16:34 UTC (rev 259744)
@@ -1,3 +1,24 @@
+2020-04-08 Devin Rousso <[email protected]>
+
+ Web Inspector: Storage: cannot clear out multiple or all local storage entries
+ https://bugs.webkit.org/show_bug.cgi?id=209867
+
+ Reviewed by Timothy Hatcher.
+
+ * inspector/storage/clearDOMStorageItems.html: Added.
+ * inspector/storage/clearDOMStorageItems-expected.txt: Added.
+ * inspector/storage/domStorage-events.html:
+ * inspector/storage/domStorage-events-expected.txt:
+ * inspector/storage/getDOMStorageItems.html: Added.
+ * inspector/storage/getDOMStorageItems-expected.txt: Added.
+ * inspector/storage/removeDOMStorageItem.html: Added.
+ * inspector/storage/removeDOMStorageItem-expected.txt: Added.
+ * inspector/storage/setDOMStorageItem.html: Added.
+ * inspector/storage/setDOMStorageItem-expected.txt: Added.
+ * inspector/storage/resources/storage-utilities.js: Added.
+ (clearStorages):
+ (TestPage.registerInitializer.InspectorTest.Storage.async logEntries):
+
2020-04-08 Diego Pino Garcia <[email protected]>
[GTK] Gardening, update TestExpectations after r259712
Added: trunk/LayoutTests/inspector/storage/clearDOMStorageItems-expected.txt (0 => 259744)
--- trunk/LayoutTests/inspector/storage/clearDOMStorageItems-expected.txt (rev 0)
+++ trunk/LayoutTests/inspector/storage/clearDOMStorageItems-expected.txt 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,38 @@
+Tests for DOMStorage.clearDOMStorageItems.
+
+
+== Running test suite: DOMStorage.clearDOMStorageItems
+-- Running test case: DOMStorage.clearDOMStorageItems.Session
+PASS: Should have a DOMStorageObject for sessionStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+Clearing storage...
+
+Getting DOM storage entries...
+[]
+
+
+-- Running test case: DOMStorage.clearDOMStorageItems.Local
+PASS: Should have a DOMStorageObject for localStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+Clearing storage...
+
+Getting DOM storage entries...
+[]
+
+
Added: trunk/LayoutTests/inspector/storage/clearDOMStorageItems.html (0 => 259744)
--- trunk/LayoutTests/inspector/storage/clearDOMStorageItems.html (rev 0)
+++ trunk/LayoutTests/inspector/storage/clearDOMStorageItems.html 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+function test()
+{
+ let suite = InspectorTest.createAsyncSuite("DOMStorage.clearDOMStorageItems");
+
+ suite.addTestCase({
+ name: "DOMStorage.clearDOMStorageItems.Session",
+ description: "Test that DOMStorage.clearDOMStorageItems works with Session storage.",
+ async test() {
+ let sessionStorage = WI.domStorageManager.domStorageObjects.find((x) => !x.isLocalStorage());
+ InspectorTest.expectThat(sessionStorage, "Should have a DOMStorageObject for sessionStorage.");
+
+ await InspectorTest.Storage.logEntries(sessionStorage);
+
+ InspectorTest.log("Clearing storage...");
+ await sessionStorage.clear();
+
+ await InspectorTest.Storage.logEntries(sessionStorage);
+ },
+ });
+
+ suite.addTestCase({
+ name: "DOMStorage.clearDOMStorageItems.Local",
+ description: "Test that DOMStorage.clearDOMStorageItems works with Local storage.",
+ async test() {
+ let localStorage = WI.domStorageManager.domStorageObjects.find((x) => x.isLocalStorage());
+ InspectorTest.expectThat(localStorage, "Should have a DOMStorageObject for localStorage.");
+
+ await InspectorTest.Storage.logEntries(localStorage);
+
+ InspectorTest.log("Clearing storage...");
+ await localStorage.clear();
+
+ await InspectorTest.Storage.logEntries(localStorage);
+ },
+ });
+
+ InspectorTest.evaluateInPage("clearStorages()", () => {
+ suite.runTestCasesAndFinish();
+ });
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Tests for DOMStorage.clearDOMStorageItems.</p>
+</body>
+</html>
Modified: trunk/LayoutTests/inspector/storage/domStorage-events-expected.txt (259743 => 259744)
--- trunk/LayoutTests/inspector/storage/domStorage-events-expected.txt 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/LayoutTests/inspector/storage/domStorage-events-expected.txt 2020-04-08 19:16:34 UTC (rev 259744)
@@ -13,7 +13,7 @@
PASS: WI.DOMStorageObject.Event.ItemUpdated
PASS: Should update key 'x'.
PASS: Should have oldValue 'value1'.
-PASS: Should have new value 'value2'.
+PASS: Should have newValue 'value2'.
PASS: WI.DOMStorageObject.Event.ItemRemoved
PASS: Should remove key 'x'.
PASS: WI.DOMStorageObject.Event.ItemsCleared
@@ -29,7 +29,7 @@
PASS: WI.DOMStorageObject.Event.ItemUpdated
PASS: Should update key 'x'.
PASS: Should have oldValue 'value1'.
-PASS: Should have new value 'value2'.
+PASS: Should have newValue 'value2'.
PASS: WI.DOMStorageObject.Event.ItemRemoved
PASS: Should remove key 'x'.
PASS: WI.DOMStorageObject.Event.ItemsCleared
Modified: trunk/LayoutTests/inspector/storage/domStorage-events.html (259743 => 259744)
--- trunk/LayoutTests/inspector/storage/domStorage-events.html 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/LayoutTests/inspector/storage/domStorage-events.html 2020-04-08 19:16:34 UTC (rev 259744)
@@ -25,15 +25,15 @@
if (count === 1) {
InspectorTest.pass("WI.DOMStorageObject.Event.ItemAdded");
- InspectorTest.expectThat(event.data.key === "foo", "Should add key 'foo'.");
- InspectorTest.expectThat(event.data.value === "value1", "Should have value 'value1'.");
+ InspectorTest.expectEqual(event.data.key, "foo", "Should add key 'foo'.");
+ InspectorTest.expectEqual(event.data.value, "value1", "Should have value 'value1'.");
return;
}
if (count === 2) {
InspectorTest.pass("WI.DOMStorageObject.Event.ItemAdded");
- InspectorTest.expectThat(event.data.key === "x", "Should add key 'x'.");
- InspectorTest.expectThat(event.data.value === "xvalue", "Should have value 'xvalue'.");
+ InspectorTest.expectEqual(event.data.key, "x", "Should add key 'x'.");
+ InspectorTest.expectEqual(event.data.value, "xvalue", "Should have value 'xvalue'.");
return;
}
@@ -43,15 +43,15 @@
storageObject.awaitEvent(WI.DOMStorageObject.Event.ItemRemoved)
.then((event) => {
InspectorTest.pass("WI.DOMStorageObject.Event.ItemRemoved");
- InspectorTest.expectThat(event.data.key === "foo", "Should remove key 'x'.");
+ InspectorTest.expectEqual(event.data.key, "foo", "Should remove key 'x'.");
});
storageObject.awaitEvent(WI.DOMStorageObject.Event.ItemUpdated)
.then((event) => {
InspectorTest.pass("WI.DOMStorageObject.Event.ItemUpdated");
- InspectorTest.expectThat(event.data.key === "foo", "Should update key 'x'.");
- InspectorTest.expectThat(event.data.oldValue === "value1", "Should have oldValue 'value1'.");
- InspectorTest.expectThat(event.data.value === "value2", "Should have new value 'value2'.");
+ InspectorTest.expectEqual(event.data.key, "foo", "Should update key 'x'.");
+ InspectorTest.expectEqual(event.data.oldValue, "value1", "Should have oldValue 'value1'.");
+ InspectorTest.expectEqual(event.data.newValue, "value2", "Should have newValue 'value2'.");
});
storageObject.awaitEvent(WI.DOMStorageObject.Event.ItemsCleared)
Added: trunk/LayoutTests/inspector/storage/getDOMStorageItems-expected.txt (0 => 259744)
--- trunk/LayoutTests/inspector/storage/getDOMStorageItems-expected.txt (rev 0)
+++ trunk/LayoutTests/inspector/storage/getDOMStorageItems-expected.txt 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,28 @@
+Tests for DOMStorage.getDOMStorageItems.
+
+
+== Running test suite: DOMStorage.getDOMStorageItems
+-- Running test case: DOMStorage.getDOMStorageItems.Session
+PASS: Should have a DOMStorageObject for sessionStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+
+-- Running test case: DOMStorage.getDOMStorageItems.Local
+PASS: Should have a DOMStorageObject for localStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+
Added: trunk/LayoutTests/inspector/storage/getDOMStorageItems.html (0 => 259744)
--- trunk/LayoutTests/inspector/storage/getDOMStorageItems.html (rev 0)
+++ trunk/LayoutTests/inspector/storage/getDOMStorageItems.html 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+function test()
+{
+ let suite = InspectorTest.createAsyncSuite("DOMStorage.getDOMStorageItems");
+
+ suite.addTestCase({
+ name: "DOMStorage.getDOMStorageItems.Session",
+ description: "Test that DOMStorage.getDOMStorageItems works with Session storage.",
+ async test() {
+ let sessionStorage = WI.domStorageManager.domStorageObjects.find((x) => !x.isLocalStorage());
+ InspectorTest.expectThat(sessionStorage, "Should have a DOMStorageObject for sessionStorage.");
+
+ await InspectorTest.Storage.logEntries(sessionStorage);
+ },
+ });
+
+ suite.addTestCase({
+ name: "DOMStorage.getDOMStorageItems.Local",
+ description: "Test that DOMStorage.getDOMStorageItems works with Local storage.",
+ async test() {
+ let localStorage = WI.domStorageManager.domStorageObjects.find((x) => x.isLocalStorage());
+ InspectorTest.expectThat(localStorage, "Should have a DOMStorageObject for localStorage.");
+
+ await InspectorTest.Storage.logEntries(localStorage);
+ },
+ });
+
+ InspectorTest.evaluateInPage("clearStorages()", () => {
+ suite.runTestCasesAndFinish();
+ });
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Tests for DOMStorage.getDOMStorageItems.</p>
+</body>
+</html>
Added: trunk/LayoutTests/inspector/storage/removeDOMStorageItem-expected.txt (0 => 259744)
--- trunk/LayoutTests/inspector/storage/removeDOMStorageItem-expected.txt (rev 0)
+++ trunk/LayoutTests/inspector/storage/removeDOMStorageItem-expected.txt 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,38 @@
+Tests for DOMStorage.removeDOMStorageItem.
+
+
+== Running test suite: DOMStorage.removeDOMStorageItem
+-- Running test case: DOMStorage.removeDOMStorageItem.Session
+PASS: Should have a DOMStorageObject for sessionStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+Removing 'foo'...
+
+Getting DOM storage entries...
+[]
+
+
+-- Running test case: DOMStorage.removeDOMStorageItem.Local
+PASS: Should have a DOMStorageObject for localStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+Removing 'foo'...
+
+Getting DOM storage entries...
+[]
+
+
Added: trunk/LayoutTests/inspector/storage/removeDOMStorageItem.html (0 => 259744)
--- trunk/LayoutTests/inspector/storage/removeDOMStorageItem.html (rev 0)
+++ trunk/LayoutTests/inspector/storage/removeDOMStorageItem.html 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+function test()
+{
+ let suite = InspectorTest.createAsyncSuite("DOMStorage.removeDOMStorageItem");
+
+ suite.addTestCase({
+ name: "DOMStorage.removeDOMStorageItem.Session",
+ description: "Test that DOMStorage.removeDOMStorageItem works with Session storage.",
+ async test() {
+ let sessionStorage = WI.domStorageManager.domStorageObjects.find((x) => !x.isLocalStorage());
+ InspectorTest.expectThat(sessionStorage, "Should have a DOMStorageObject for sessionStorage.");
+
+ await InspectorTest.Storage.logEntries(sessionStorage);
+
+ InspectorTest.log("Removing 'foo'...");
+ await sessionStorage.removeItem("foo");
+
+ await InspectorTest.Storage.logEntries(sessionStorage);
+ },
+ });
+
+ suite.addTestCase({
+ name: "DOMStorage.removeDOMStorageItem.Local",
+ description: "Test that DOMStorage.removeDOMStorageItem works with Local storage.",
+ async test() {
+ let localStorage = WI.domStorageManager.domStorageObjects.find((x) => x.isLocalStorage());
+ InspectorTest.expectThat(localStorage, "Should have a DOMStorageObject for localStorage.");
+
+ await InspectorTest.Storage.logEntries(localStorage);
+
+ InspectorTest.log("Removing 'foo'...");
+ await localStorage.removeItem("foo");
+
+ await InspectorTest.Storage.logEntries(localStorage);
+ },
+ });
+
+ InspectorTest.evaluateInPage("clearStorages()", () => {
+ suite.runTestCasesAndFinish();
+ });
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Tests for DOMStorage.removeDOMStorageItem.</p>
+</body>
+</html>
Added: trunk/LayoutTests/inspector/storage/resources/storage-utilities.js (0 => 259744)
--- trunk/LayoutTests/inspector/storage/resources/storage-utilities.js (rev 0)
+++ trunk/LayoutTests/inspector/storage/resources/storage-utilities.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,20 @@
+function clearStorages() {
+ sessionStorage.clear();
+ sessionStorage.setItem("foo", "bar");
+
+ localStorage.clear();
+ localStorage.setItem("foo", "bar");
+}
+
+TestPage.registerInitializer(() => {
+ InspectorTest.Storage = {};
+
+ InspectorTest.Storage.logEntries = async function(storage) {
+ InspectorTest.newline();
+ InspectorTest.log("Getting DOM storage entries...");
+ let [error, entries] = await promisify((callback) => { storage.getEntries(callback); });
+ InspectorTest.assert(!error, error);
+ InspectorTest.json(entries);
+ InspectorTest.newline();
+ };
+});
Added: trunk/LayoutTests/inspector/storage/setDOMStorageItem-expected.txt (0 => 259744)
--- trunk/LayoutTests/inspector/storage/setDOMStorageItem-expected.txt (rev 0)
+++ trunk/LayoutTests/inspector/storage/setDOMStorageItem-expected.txt 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,56 @@
+Tests for DOMStorage.setDOMStorageItem.
+
+
+== Running test suite: DOMStorage.setDOMStorageItem
+-- Running test case: DOMStorage.setDOMStorageItem.Session
+PASS: Should have a DOMStorageObject for sessionStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+Setting key 'asd' with value 'new'...
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ],
+ [
+ "asd",
+ "new"
+ ]
+]
+
+
+-- Running test case: DOMStorage.setDOMStorageItem.Local
+PASS: Should have a DOMStorageObject for localStorage.
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ]
+]
+
+Setting key 'asd' with value 'new'...
+
+Getting DOM storage entries...
+[
+ [
+ "foo",
+ "bar"
+ ],
+ [
+ "asd",
+ "new"
+ ]
+]
+
+
Added: trunk/LayoutTests/inspector/storage/setDOMStorageItem.html (0 => 259744)
--- trunk/LayoutTests/inspector/storage/setDOMStorageItem.html (rev 0)
+++ trunk/LayoutTests/inspector/storage/setDOMStorageItem.html 2020-04-08 19:16:34 UTC (rev 259744)
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+function test()
+{
+ let suite = InspectorTest.createAsyncSuite("DOMStorage.setDOMStorageItem");
+
+ suite.addTestCase({
+ name: "DOMStorage.setDOMStorageItem.Session",
+ description: "Test that DOMStorage.setDOMStorageItem works with Session storage.",
+ async test() {
+ let sessionStorage = WI.domStorageManager.domStorageObjects.find((x) => !x.isLocalStorage());
+ InspectorTest.expectThat(sessionStorage, "Should have a DOMStorageObject for sessionStorage.");
+
+ await InspectorTest.Storage.logEntries(sessionStorage);
+
+ InspectorTest.log("Setting key 'asd' with value 'new'...");
+ await sessionStorage.setItem("asd", "new");
+
+ await InspectorTest.Storage.logEntries(sessionStorage);
+ },
+ });
+
+ suite.addTestCase({
+ name: "DOMStorage.setDOMStorageItem.Local",
+ description: "Test that DOMStorage.setDOMStorageItem works with Local storage.",
+ async test() {
+ let localStorage = WI.domStorageManager.domStorageObjects.find((x) => x.isLocalStorage());
+ InspectorTest.expectThat(localStorage, "Should have a DOMStorageObject for localStorage.");
+
+ await InspectorTest.Storage.logEntries(localStorage);
+
+ InspectorTest.log("Setting key 'asd' with value 'new'...");
+ await localStorage.setItem("asd", "new");
+
+ await InspectorTest.Storage.logEntries(localStorage);
+ },
+ });
+
+ InspectorTest.evaluateInPage("clearStorages()", () => {
+ suite.runTestCasesAndFinish();
+ });
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Tests for DOMStorage.setDOMStorageItem.</p>
+</body>
+</html>
Modified: trunk/Source/_javascript_Core/ChangeLog (259743 => 259744)
--- trunk/Source/_javascript_Core/ChangeLog 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/_javascript_Core/ChangeLog 2020-04-08 19:16:34 UTC (rev 259744)
@@ -1,3 +1,13 @@
+2020-04-08 Devin Rousso <[email protected]>
+
+ Web Inspector: Storage: cannot clear out multiple or all local storage entries
+ https://bugs.webkit.org/show_bug.cgi?id=209867
+
+ Reviewed by Timothy Hatcher.
+
+ * inspector/protocol/DOMStorage.json:
+ Add a `clearDOMStorageItems` command instead of calling `removeDOMStorageItem` for each key.
+
2020-04-08 Yusuke Suzuki <[email protected]>
[JSC] MultiDeleteByOffset should tell correct result AbstractValue in AI
Modified: trunk/Source/_javascript_Core/inspector/protocol/DOMStorage.json (259743 => 259744)
--- trunk/Source/_javascript_Core/inspector/protocol/DOMStorage.json 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/_javascript_Core/inspector/protocol/DOMStorage.json 2020-04-08 19:16:34 UTC (rev 259744)
@@ -52,6 +52,12 @@
{ "name": "storageId", "$ref": "StorageId" },
{ "name": "key", "type": "string" }
]
+ },
+ {
+ "name": "clearDOMStorageItems",
+ "parameters": [
+ { "name": "storageId", "$ref": "StorageId" }
+ ]
}
],
"events": [
Modified: trunk/Source/WebCore/ChangeLog (259743 => 259744)
--- trunk/Source/WebCore/ChangeLog 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebCore/ChangeLog 2020-04-08 19:16:34 UTC (rev 259744)
@@ -1,3 +1,20 @@
+2020-04-08 Devin Rousso <[email protected]>
+
+ Web Inspector: Storage: cannot clear out multiple or all local storage entries
+ https://bugs.webkit.org/show_bug.cgi?id=209867
+
+ Reviewed by Timothy Hatcher.
+
+ Tests: inspector/storage/clearDOMStorageItems.html
+ inspector/storage/getDOMStorageItems.html
+ inspector/storage/removeDOMStorageItem.html
+ inspector/storage/setDOMStorageItem.html
+
+ * inspector/agents/InspectorDOMStorageAgent.h:
+ * inspector/agents/InspectorDOMStorageAgent.cpp:
+ (WebCore::InspectorDOMStorageAgent::clearDOMStorageItems): Added.
+ Add a `clearDOMStorageItems` command instead of calling `removeDOMStorageItem` for each key.
+
2020-04-08 Kenneth Russell <[email protected]>
WebContent process crashes in com.apple.WebCore: rx::IOSurfaceSurfaceCGL::releaseTexImage
Modified: trunk/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.cpp (259743 => 259744)
--- trunk/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.cpp 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.cpp 2020-04-08 19:16:34 UTC (rev 259744)
@@ -145,6 +145,18 @@
storageArea->removeItem(frame, key);
}
+void InspectorDOMStorageAgent::clearDOMStorageItems(ErrorString& errorString, const JSON::Object& storageId)
+{
+ Frame* frame;
+ auto storageArea = findStorageArea(errorString, storageId, frame);
+ if (!storageArea) {
+ errorString = "Missing storage for given storageId"_s;
+ return;
+ }
+
+ storageArea->clear(frame);
+}
+
String InspectorDOMStorageAgent::storageId(Storage& storage)
{
Document* document = storage.frame()->document();
Modified: trunk/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.h (259743 => 259744)
--- trunk/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.h 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.h 2020-04-08 19:16:34 UTC (rev 259744)
@@ -64,6 +64,7 @@
void getDOMStorageItems(ErrorString&, const JSON::Object& storageId, RefPtr<JSON::ArrayOf<JSON::ArrayOf<String>>>& items) override;
void setDOMStorageItem(ErrorString&, const JSON::Object& storageId, const String& key, const String& value) override;
void removeDOMStorageItem(ErrorString&, const JSON::Object& storageId, const String& key) override;
+ void clearDOMStorageItems(ErrorString&, const JSON::Object& storageId) override;
// InspectorInstrumentation
void didDispatchDOMStorageEvent(const String& key, const String& oldValue, const String& newValue, StorageType, SecurityOrigin*);
Modified: trunk/Source/WebInspectorUI/ChangeLog (259743 => 259744)
--- trunk/Source/WebInspectorUI/ChangeLog 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/ChangeLog 2020-04-08 19:16:34 UTC (rev 259744)
@@ -1,5 +1,46 @@
2020-04-08 Devin Rousso <[email protected]>
+ Web Inspector: Storage: cannot clear out multiple or all local storage entries
+ https://bugs.webkit.org/show_bug.cgi?id=209867
+
+ Reviewed by Timothy Hatcher.
+
+ * UserInterface/Models/DOMStorageObject.js:
+ (WI.DOMStorageObject.prototype.removeItem):
+ (WI.DOMStorageObject.prototype.setItem):
+ (WI.DOMStorageObject.prototype.clear): Added.
+ (WI.DOMStorageObject.prototype.itemsCleared):
+ (WI.DOMStorageObject.prototype.itemRemoved):
+ (WI.DOMStorageObject.prototype.itemAdded):
+ (WI.DOMStorageObject.prototype.itemUpdated):
+ Add some assertions.
+
+ * UserInterface/Views/DOMStorageContentView.js:
+ (WI.DOMStorageContentView):
+ (WI.DOMStorageContentView.prototype.get navigationItems):
+ (WI.DOMStorageContentView.prototype._handleClearNavigationItemClicked): Added.
+ Add a "Clear" navigation item that calls the new `DOMStorage.clearDOMStorageItems`.
+
+ * UserInterface/Views/DataGrid.js:
+ (WI.DataGrid.prototype.removeChild):
+ If the removed item was selected, select the next (or previous if there is no next) item.
+
+ * UserInterface/Views/CookieStorageContentView.js:
+ (WI.CookieStorageContentView):
+ (WI.CookieStorageContentView.prototype.get navigationItems):
+ (WI.CookieStorageContentView.prototype._handleClearNavigationItemClicked): Added.
+ Drive-by: also add a "Clear" navigation item that calls `Page.deleteCookie` for each row.
+
+ * UserInterface/Protocol/DOMStorageObserver.js:
+ (WI.DOMStorageObserver.prototype.domStorageItemUpdated):
+ * UserInterface/Controllers/DOMStorageManager.js:
+ (WI.DOMStorageManager.prototype.itemUpdated):
+ Drive-by: rename `value` to `newValue` to match the protocol.
+
+ * Localizations/en.lproj/localizedStrings.js:
+
+2020-04-08 Devin Rousso <[email protected]>
+
Web Inspector: Uncaught Exception: undefined is not an object (evaluating 'this._target.NetworkAgent.getResponseBody')
https://bugs.webkit.org/show_bug.cgi?id=210168
Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (259743 => 259744)
--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -264,9 +264,12 @@
localizedStrings["Cipher"] = "Cipher";
localizedStrings["Clamp to sRGB"] = "Clamp to sRGB";
localizedStrings["Classes"] = "Classes";
+localizedStrings["Clear Cookies"] = "Clear Cookies";
localizedStrings["Clear Filters"] = "Clear Filters";
+localizedStrings["Clear Local Storage"] = "Clear Local Storage";
localizedStrings["Clear Log"] = "Clear Log";
localizedStrings["Clear Network Items (%s)"] = "Clear Network Items (%s)";
+localizedStrings["Clear Session Storage"] = "Clear Session Storage";
localizedStrings["Clear Timeline (%s)"] = "Clear Timeline (%s)";
localizedStrings["Clear focus"] = "Clear focus";
localizedStrings["Clear log (%s or %s)"] = "Clear log (%s or %s)";
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js (259743 => 259744)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -131,13 +131,13 @@
domStorage.itemAdded(key, value);
}
- itemUpdated(storageId, key, oldValue, value)
+ itemUpdated(storageId, key, oldValue, newValue)
{
console.assert(this._enabled);
let domStorage = this._domStorageForIdentifier(storageId);
if (domStorage)
- domStorage.itemUpdated(key, oldValue, value);
+ domStorage.itemUpdated(key, oldValue, newValue);
}
// InspectorObserver
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/DOMStorageObject.js (259743 => 259744)
--- trunk/Source/WebInspectorUI/UserInterface/Models/DOMStorageObject.js 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/DOMStorageObject.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -75,38 +75,64 @@
removeItem(key)
{
+ console.assert(this._entries.has(key));
+
let target = WI.assumingMainTarget();
- target.DOMStorageAgent.removeDOMStorageItem(this._id, key);
+ return target.DOMStorageAgent.removeDOMStorageItem(this._id, key);
}
setItem(key, value)
{
let target = WI.assumingMainTarget();
- target.DOMStorageAgent.setDOMStorageItem(this._id, key, value);
+ return target.DOMStorageAgent.setDOMStorageItem(this._id, key, value);
}
+ clear()
+ {
+ let target = WI.assumingMainTarget();
+
+ // COMPATIBILITY (iOS 13.4): DOMStorage.clearDOMStorageItems did not exist yet.
+ if (!target.hasCommand("DOMStorage.clearDOMStorageItems")) {
+ let promises = [];
+ for (let key of this._entries.keys())
+ promises.push(this.removeItem(key));
+ return Promise.all(promises);
+ }
+
+ return target.DOMStorageAgent.clearDOMStorageItems(this._id);
+ }
+
+ // DOMStorageManager
+
itemsCleared()
{
this._entries.clear();
+
this.dispatchEventToListeners(WI.DOMStorageObject.Event.ItemsCleared);
}
itemRemoved(key)
{
- this._entries.delete(key);
+ let removed = this._entries.delete(key);
+ console.assert(removed);
+
this.dispatchEventToListeners(WI.DOMStorageObject.Event.ItemRemoved, {key});
}
itemAdded(key, value)
{
+ console.assert(!this._entries.has(key));
this._entries.set(key, value);
+
this.dispatchEventToListeners(WI.DOMStorageObject.Event.ItemAdded, {key, value});
}
- itemUpdated(key, oldValue, value)
+ itemUpdated(key, oldValue, newValue)
{
- this._entries.set(key, value);
- this.dispatchEventToListeners(WI.DOMStorageObject.Event.ItemUpdated, {key, oldValue, value});
+ console.assert(this._entries.get(key) === oldValue);
+ this._entries.set(key, newValue);
+
+ this.dispatchEventToListeners(WI.DOMStorageObject.Event.ItemUpdated, {key, oldValue, newValue});
}
};
Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/DOMStorageObserver.js (259743 => 259744)
--- trunk/Source/WebInspectorUI/UserInterface/Protocol/DOMStorageObserver.js 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/DOMStorageObserver.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -43,8 +43,8 @@
WI.domStorageManager.itemAdded(storageId, key, value);
}
- domStorageItemUpdated(storageId, key, oldValue, value)
+ domStorageItemUpdated(storageId, key, oldValue, newValue)
{
- WI.domStorageManager.itemUpdated(storageId, key, oldValue, value);
+ WI.domStorageManager.itemUpdated(storageId, key, oldValue, newValue);
}
};
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js (259743 => 259744)
--- trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -42,6 +42,10 @@
this._refreshButtonNavigationItem = new WI.ButtonNavigationItem("cookie-storage-refresh", WI.UIString("Refresh"), "Images/ReloadFull.svg", 13, 13);
this._refreshButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._refreshButtonClicked, this);
+
+ this._clearButtonNavigationItem = new WI.ButtonNavigationItem("cookie-storage-clear", WI.UIString("Clear Cookies"), "Images/NavigationItemTrash.svg", 15, 15);
+ this._clearButtonNavigationItem.visibilityPriority = WI.NavigationItem.VisibilityPriority.Low;
+ this._clearButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleClearNavigationItemClicked, this);
}
// Public
@@ -52,6 +56,7 @@
if (this._setCookieButtonNavigationItem)
navigationItems.push(this._setCookieButtonNavigationItem);
navigationItems.push(this._refreshButtonNavigationItem);
+ navigationItems.push(this._clearButtonNavigationItem);
return navigationItems;
}
@@ -392,6 +397,15 @@
this._reloadCookies();
}
+ _handleClearNavigationItemClicked(event)
+ {
+ let target = WI.assumingMainTarget();
+ for (let cookie of this._cookies.splice(0))
+ target.PageAgent.deleteCookie(cookie.name, cookie.url);
+
+ this._table.reloadData();
+ }
+
_reloadCookies()
{
let target = WI.assumingMainTarget();
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js (259743 => 259744)
--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -55,6 +55,11 @@
this._filterBarNavigationItem = new WI.FilterBarNavigationItem;
this._filterBarNavigationItem.filterBar.addEventListener(WI.FilterBar.Event.FilterDidChange, this._handleFilterBarFilterDidChange, this);
+ let clearButtonLabel = representedObject.isLocalStorage() ? WI.UIString("Clear Local Storage") : WI.UIString("Clear Session Storage");
+ this._clearButtonNavigationItem = new WI.ButtonNavigationItem("dom-storage-clear", clearButtonLabel, "Images/NavigationItemTrash.svg", 15, 15);
+ this._clearButtonNavigationItem.visibilityPriority = WI.NavigationItem.VisibilityPriority.Low;
+ this._clearButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleClearNavigationItemClicked, this);
+
this._populate();
}
@@ -62,7 +67,11 @@
get navigationItems()
{
- return [this._filterBarNavigationItem];
+ return [
+ this._filterBarNavigationItem,
+ new WI.DividerNavigationItem,
+ this._clearButtonNavigationItem,
+ ];
}
saveToCookie(cookie)
@@ -290,6 +299,11 @@
{
this._dataGrid.filterText = this._filterBarNavigationItem.filterBar.filters.text || "";
}
+
+ _handleClearNavigationItemClicked(event)
+ {
+ this.representedObject.clear();
+ }
};
WI.DOMStorageContentView.DuplicateKeyStyleClassName = "duplicate-key";
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DataGrid.js (259743 => 259744)
--- trunk/Source/WebInspectorUI/UserInterface/Views/DataGrid.js 2020-04-08 19:12:10 UTC (rev 259743)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DataGrid.js 2020-04-08 19:16:34 UTC (rev 259744)
@@ -1230,6 +1230,8 @@
if (child.parent !== this)
return;
+ let wasSelected = this.selectedNode === child || child.selected;
+
child.deselect();
child._detach();
@@ -1240,6 +1242,8 @@
if (child.nextSibling)
child.nextSibling.previousSibling = child.previousSibling;
+ let nextChildToSelect = wasSelected ? (child.nextSibling || child.previousSibling) : null;
+
child.dataGrid = null;
child.parent = null;
child.nextSibling = null;
@@ -1247,6 +1251,8 @@
if (this.children.length <= 0)
this.hasChildren = false;
+ else if (nextChildToSelect)
+ nextChildToSelect.select();
console.assert(!child.isPlaceholderNode, "Shouldn't delete the placeholder node.");
}