Title: [163927] trunk/Source/WebInspectorUI
Revision
163927
Author
[email protected]
Date
2014-02-11 18:52:19 -0800 (Tue, 11 Feb 2014)

Log Message

Web Inspector: DOMStorageView should listen for events from DOMStorageObject
https://bugs.webkit.org/show_bug.cgi?id=128620

Reviewed by Timothy Hatcher.

The storage manager used to have a map of DOMStorageViews and delivered events
directly to them. Instead, the DOMStorageObserver should use the manager to
find the appropriate DOMStorageObject and deliver events to it. DOMStorageView
learns about storage updates from DOMStorageObject events.

* UserInterface/DOMStorageContentView.js:
(WebInspector.DOMStorageContentView): Add event listeners.
(WebInspector.DOMStorageContentView.prototype.reset): Renamed from update().
(WebInspector.DOMStorageContentView.prototype.itemsCleared): Take an event argument.
(WebInspector.DOMStorageContentView.prototype.itemRemoved): Take an event argument.
Use for..of when iterating over nodes.
(WebInspector.DOMStorageContentView.prototype.itemAdded): Take an event argument.
Use for..of when iterating over nodes.
(WebInspector.DOMStorageContentView.prototype.itemUpdated): Take an event argument.
Use for..of when iterating over nodes.
* UserInterface/DOMStorageObject.js:
(WebInspector.DOMStorageObject.prototype.removeItem): Moved.
(WebInspector.DOMStorageObject.prototype.setItem): Moved.
(WebInspector.DOMStorageObject.prototype.itemsCleared): Added.
(WebInspector.DOMStorageObject.prototype.itemRemoved): Added.
(WebInspector.DOMStorageObject.prototype.itemAdded): Added.
(WebInspector.DOMStorageObject.prototype.itemUpdated): Added.
* UserInterface/DOMStorageObserver.js: Look up and notify the associated model.
(WebInspector.DOMStorageObserver.prototype.domStorageItemsCleared):
(WebInspector.DOMStorageObserver.prototype.domStorageItemRemoved):
(WebInspector.DOMStorageObserver.prototype.domStorageItemAdded):
(WebInspector.DOMStorageObserver.prototype.domStorageItemUpdated):
* UserInterface/StorageManager.js: Remove view lookup code. Remove
direct calls to DOMStorageViews.
(WebInspector.StorageManager.prototype.itemsCleared):
(WebInspector.StorageManager.prototype.itemRemoved):
(WebInspector.StorageManager.prototype.itemAdded):
(WebInspector.StorageManager.prototype.itemUpdated):
(WebInspector.StorageManager.prototype.domStorageWasUpdated):
(WebInspector.StorageManager.prototype.inspectDOMStorage):
(WebInspector.StorageManager.prototype._domStorageForIdentifier):
(WebInspector.StorageManager.prototype._addDOMStorageIfNeeded):
(WebInspector.StorageManager.prototype._databaseForIdentifier):

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (163926 => 163927)


--- trunk/Source/WebInspectorUI/ChangeLog	2014-02-12 02:03:55 UTC (rev 163926)
+++ trunk/Source/WebInspectorUI/ChangeLog	2014-02-12 02:52:19 UTC (rev 163927)
@@ -1,3 +1,49 @@
+2014-02-11  Brian Burg  <[email protected]>
+
+        Web Inspector: DOMStorageView should listen for events from DOMStorageObject
+        https://bugs.webkit.org/show_bug.cgi?id=128620
+
+        Reviewed by Timothy Hatcher.
+
+        The storage manager used to have a map of DOMStorageViews and delivered events
+        directly to them. Instead, the DOMStorageObserver should use the manager to
+        find the appropriate DOMStorageObject and deliver events to it. DOMStorageView
+        learns about storage updates from DOMStorageObject events.
+
+        * UserInterface/DOMStorageContentView.js:
+        (WebInspector.DOMStorageContentView): Add event listeners.
+        (WebInspector.DOMStorageContentView.prototype.reset): Renamed from update().
+        (WebInspector.DOMStorageContentView.prototype.itemsCleared): Take an event argument.
+        (WebInspector.DOMStorageContentView.prototype.itemRemoved): Take an event argument.
+        Use for..of when iterating over nodes.
+        (WebInspector.DOMStorageContentView.prototype.itemAdded): Take an event argument.
+        Use for..of when iterating over nodes.
+        (WebInspector.DOMStorageContentView.prototype.itemUpdated): Take an event argument.
+        Use for..of when iterating over nodes.
+        * UserInterface/DOMStorageObject.js:
+        (WebInspector.DOMStorageObject.prototype.removeItem): Moved.
+        (WebInspector.DOMStorageObject.prototype.setItem): Moved.
+        (WebInspector.DOMStorageObject.prototype.itemsCleared): Added.
+        (WebInspector.DOMStorageObject.prototype.itemRemoved): Added.
+        (WebInspector.DOMStorageObject.prototype.itemAdded): Added.
+        (WebInspector.DOMStorageObject.prototype.itemUpdated): Added.
+        * UserInterface/DOMStorageObserver.js: Look up and notify the associated model.
+        (WebInspector.DOMStorageObserver.prototype.domStorageItemsCleared):
+        (WebInspector.DOMStorageObserver.prototype.domStorageItemRemoved):
+        (WebInspector.DOMStorageObserver.prototype.domStorageItemAdded):
+        (WebInspector.DOMStorageObserver.prototype.domStorageItemUpdated):
+        * UserInterface/StorageManager.js: Remove view lookup code. Remove
+        direct calls to DOMStorageViews.
+        (WebInspector.StorageManager.prototype.itemsCleared):
+        (WebInspector.StorageManager.prototype.itemRemoved):
+        (WebInspector.StorageManager.prototype.itemAdded):
+        (WebInspector.StorageManager.prototype.itemUpdated):
+        (WebInspector.StorageManager.prototype.domStorageWasUpdated):
+        (WebInspector.StorageManager.prototype.inspectDOMStorage):
+        (WebInspector.StorageManager.prototype._domStorageForIdentifier):
+        (WebInspector.StorageManager.prototype._addDOMStorageIfNeeded):
+        (WebInspector.StorageManager.prototype._databaseForIdentifier):
+
 2014-02-11  James Craig  <[email protected]>
 
         Web Inspector: AX: Accessibility Node Inspection

Modified: trunk/Source/WebInspectorUI/UserInterface/DOMStorageContentView.js (163926 => 163927)


--- trunk/Source/WebInspectorUI/UserInterface/DOMStorageContentView.js	2014-02-12 02:03:55 UTC (rev 163926)
+++ trunk/Source/WebInspectorUI/UserInterface/DOMStorageContentView.js	2014-02-12 02:52:19 UTC (rev 163927)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
  * Copyright (C) 2013 Samsung Electronics. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,17 +30,23 @@
 
     this.element.classList.add(WebInspector.DOMStorageContentView.StyleClassName);
 
-    this.update();
+    representedObject.addEventListener(WebInspector.DOMStorageObject.Event.ItemsCleared, this.itemsCleared, this);
+    representedObject.addEventListener(WebInspector.DOMStorageObject.Event.ItemAdded, this.itemAdded, this);
+    representedObject.addEventListener(WebInspector.DOMStorageObject.Event.ItemRemoved, this.itemRemoved, this);
+    representedObject.addEventListener(WebInspector.DOMStorageObject.Event.ItemUpdated, this.itemUpdated, this);
+
+    this.reset();
 };
 
 WebInspector.DOMStorageContentView.StyleClassName = "dom-storage";
 
 WebInspector.DOMStorageContentView.prototype = {
     constructor: WebInspector.DOMStorageContentView,
+    __proto__: WebInspector.ContentView.prototype,
 
     // Public
 
-    update: function()
+    reset: function()
     {
         this.representedObject.getEntries(this._showDOMStorageEntries.bind(this));
     },
@@ -52,27 +58,28 @@
         cookie.host = this.representedObject.host;
     },
 
-    itemsCleared: function()
+    itemsCleared: function(event)
     {
         this._dataGrid.removeChildren();
         this._dataGrid.addCreationNode(false);
     },
 
-    itemRemoved: function(key)
+    itemRemoved: function(event)
     {
-        for (var i = 0; i < this._dataGrid.children.length; ++i) {
-            var childNode = this._dataGrid.children[i];
-            if (childNode.data[0] === key) {
-                this._dataGrid.removeChild(childNode);
-                return;
-            }
+        for (var node of this._dataGrid.children) {
+            if (node.data[0] === event.data.key)
+                return this._dataGrid.removeChild(node);
         }
     },
 
-    itemAdded: function(key, value)
+    itemAdded: function(event)
     {
-        for (var i = 0; i < this._dataGrid.children.length; ++i) {
-            if (this._dataGrid.children[i][0] === key)
+        var key = event.data.key;
+        var value = event.data.value;
+
+        // Enforce key uniqueness.
+        for (var node of this._dataGrid.children) {
+            if (node.data[0] === key)
                 return;
         }
 
@@ -87,15 +94,18 @@
             this._sortDataGrid();
     },
 
-    itemUpdated: function(key, oldValue, value)
+    itemUpdated: function(event)
     {
+        var key = event.data.key;
+        var value = event.data.value;
+
         var keyFound = false;
-        for (var i = 0; i < this._dataGrid.children.length; ++i) {
-            var childNode = this._dataGrid.children[i];
+        for (var childNode of this._dataGrid.children) {
             if (childNode.data[0] === key) {
+                // Remove any rows that are now duplicates.
                 if (keyFound) {
                     this._dataGrid.removeChild(childNode);
-                    return;
+                    continue;
                 }
 
                 keyFound = true;
@@ -209,7 +219,7 @@
         if (this.representedObject)
             this.representedObject.removeItem(node.data[0]);
 
-        this.update();
+        this.reset();
     },
 
     _editingCallback: function(editingNode, columnIdentifier, oldText, newText)
@@ -223,8 +233,6 @@
         } else
             domStorage.setItem(editingNode.data[0], newText);
 
-        this.update();
+        this.reset();
     }
 };
-
-WebInspector.DOMStorageContentView.prototype.__proto__ = WebInspector.ContentView.prototype;

Modified: trunk/Source/WebInspectorUI/UserInterface/DOMStorageObject.js (163926 => 163927)


--- trunk/Source/WebInspectorUI/UserInterface/DOMStorageObject.js	2014-02-12 02:03:55 UTC (rev 163926)
+++ trunk/Source/WebInspectorUI/UserInterface/DOMStorageObject.js	2014-02-12 02:52:19 UTC (rev 163927)
@@ -34,9 +34,17 @@
 WebInspector.DOMStorageObject.HostCookieKey = "dom-storage-object-host";
 WebInspector.DOMStorageObject.LocalStorageCookieKey = "dom-storage-object-local-storage";
 
+WebInspector.DOMStorageObject.Event = {
+    ItemsCleared: "dom-storage-object-items-cleared",
+    ItemAdded: "dom-storage-object-item-added",
+    ItemRemoved: "dom-storage-object-item-removed",
+    ItemUpdated: "dom-storage-object-updated",
+};
+
 WebInspector.DOMStorageObject.prototype = {
     constructor: WebInspector.DOMStorageObject,
-    
+    __proto__: WebInspector.Object.prototype,
+
     get id()
     {
         return this._id;
@@ -67,13 +75,34 @@
             DOMStorageAgent.getDOMStorageItems(this._id, callback);
     },
 
-    removeItem: function(key, callback)
+    removeItem: function(key)
     {
-        DOMStorageAgent.removeDOMStorageItem(this._id, key, callback);
+        DOMStorageAgent.removeDOMStorageItem(this._id, key);
     },
 
-    setItem: function(key, value, callback)
+    setItem: function(key, value)
     {
-        DOMStorageAgent.setDOMStorageItem(this._id, key, value, callback);
+        DOMStorageAgent.setDOMStorageItem(this._id, key, value);
+    },
+
+    itemsCleared: function(id)
+    {
+        this.dispatchEventToListeners(WebInspector.DOMStorageObject.Event.ItemsCleared, {id: id});
+    },
+
+    itemRemoved: function(id, key)
+    {
+        this.dispatchEventToListeners(WebInspector.DOMStorageObject.Event.ItemRemoved, {id: id, key: key});
+    },
+
+    itemAdded: function(id, key, value)
+    {
+        this.dispatchEventToListeners(WebInspector.DOMStorageObject.Event.ItemAdded, {id: id, key: key, value: value});
+    },
+
+    itemUpdated: function(id, key, oldValue, value)
+    {
+        var data = "" id, key: key, oldValue: oldValue, value: value};
+        this.dispatchEventToListeners(WebInspector.DOMStorageObject.Event.ItemUpdated, data);
     }
 };

Modified: trunk/Source/WebInspectorUI/UserInterface/DOMStorageObserver.js (163926 => 163927)


--- trunk/Source/WebInspectorUI/UserInterface/DOMStorageObserver.js	2014-02-12 02:03:55 UTC (rev 163926)
+++ trunk/Source/WebInspectorUI/UserInterface/DOMStorageObserver.js	2014-02-12 02:52:19 UTC (rev 163927)
@@ -31,6 +31,7 @@
 
 WebInspector.DOMStorageObserver.prototype = {
     constructor: WebInspector.DOMStorageObserver,
+    __proto__: WebInspector.Object.prototype,
 
     // Events defined by the "DOMStorage" domain.
 
@@ -48,23 +49,21 @@
 
     domStorageItemsCleared: function(storageId)
     {
-        WebInspector.storageManager.domStorageItemsCleared(storageId);
+        WebInspector.storageManager.itemsCleared(storageId);
     },
 
     domStorageItemRemoved: function(storageId, key)
     {
-        WebInspector.storageManager.domStorageItemRemoved(storageId, key);
+        WebInspector.storageManager.itemRemoved(storageId, key);
     },
 
     domStorageItemAdded: function(storageId, key, value)
     {
-        WebInspector.storageManager.domStorageItemAdded(storageId, key, value);
+        WebInspector.storageManager.itemAdded(storageId, key, value);
     },
 
     domStorageItemUpdated: function(storageId, key, oldValue, value)
     {
-        WebInspector.storageManager.domStorageItemUpdated(storageId, key, oldValue, value);
+        WebInspector.storageManager.itemUpdated(storageId, key, oldValue, value);
     }
 };
-
-WebInspector.DOMStorageObserver.prototype.__proto__ = WebInspector.Object.prototype;

Modified: trunk/Source/WebInspectorUI/UserInterface/StorageManager.js (163926 => 163927)


--- trunk/Source/WebInspectorUI/UserInterface/StorageManager.js	2014-02-12 02:03:55 UTC (rev 163926)
+++ trunk/Source/WebInspectorUI/UserInterface/StorageManager.js	2014-02-12 02:52:19 UTC (rev 163927)
@@ -55,6 +55,7 @@
 
 WebInspector.StorageManager.prototype = {
     constructor: WebInspector.StorageManager,
+    __proto__: WebInspector.Object.prototype,
 
     // Public
 
@@ -83,57 +84,32 @@
 
     domStorageWasUpdated: function(id)
     {
-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.update();
+        this.dispatchEventToListeners(WebInspector.StorageManager.Event.DOMStorageWasUpdated, id);
     },
 
-    domStorageItemsCleared: function(id)
+    itemsCleared: function(storageId)
     {
-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemsCleared();
+        this._domStorageForIdentifier(storageId).itemsCleared(storageId);
     },
 
-    domStorageItemRemoved: function(id, key)
+    itemRemoved: function(storageId, key)
     {
-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemRemoved(key);
+        this._domStorageForIdentifier(storageId).itemRemoved(storageId, key);
     },
 
-    domStorageItemAdded: function(id, key, value)
+    itemAdded: function(storageId, key, value)
     {
-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemAdded(key, value);
+        this._domStorageForIdentifier(storageId).itemAdded(storageId, key, value);
     },
 
-    domStorageItemUpdated: function(id, key, oldValue, value)
+    itemUpdated: function(storageId, key, oldValue, value)
     {
-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemUpdated(key, oldValue, value);
+        this._domStorageForIdentifier(storageId).itemUpdated(storageId, key, oldValue, value);
     },
 
     inspectDatabase: function(id)
     {
-        var database = this._databaseForId(id);
+        var database = this._databaseForIdentifier(id);
         console.assert(database);
         if (!database)
             return;
@@ -142,13 +118,25 @@
 
     inspectDOMStorage: function(id)
     {
-        var domStorage = this._domStorageForId(id);
+        var domStorage = this._domStorageForIdentifier(id);
         console.assert(domStorage);
         if (!domStorage)
             return;
         this.dispatchEventToListeners(WebInspector.StorageManager.Event.DOMStorageObjectWasInspected, {domStorage: domStorage});
     },
 
+    _domStorageForIdentifier: function(id)
+    {
+        for (var storageObject of this._domStorageObjects) {
+            // The id is an object, so we need to compare the properties using Object.shallowEqual.
+            // COMPATIBILITY (iOS 6): The id was a string. Object.shallowEqual works for both.
+            if (Object.shallowEqual(storageObject.id, id))
+                return storageObject;
+        }
+
+        return null;
+    },
+
     // Private
 
     _mainResourceDidChange: function(event)
@@ -184,11 +172,11 @@
         // FIXME: Consider passing the other parts of the origin along to domStorageWasAdded.
 
         var localStorageIdentifier = {securityOrigin: frame.securityOrigin, isLocalStorage: true};
-        if (!this._domStorageForId(localStorageIdentifier))
+        if (!this._domStorageForIdentifier(localStorageIdentifier))
             this.domStorageWasAdded(localStorageIdentifier, frame.mainResource.urlComponents.host, true);
 
         var sessionStorageIdentifier = {securityOrigin: frame.securityOrigin, isLocalStorage: false};
-        if (!this._domStorageForId(sessionStorageIdentifier))
+        if (!this._domStorageForIdentifier(sessionStorageIdentifier))
             this.domStorageWasAdded(sessionStorageIdentifier, frame.mainResource.urlComponents.host, false);
     },
 
@@ -199,7 +187,7 @@
         this._addDOMStorageIfNeeded(event.target);
     },
 
-    _databaseForId: function(id)
+    _databaseForIdentifier: function(id)
     {
         for (var i = 0; i < this._databaseObjects.length; ++i) {
             if (this._databaseObjects[i].id === id)
@@ -207,28 +195,5 @@
         }
 
         return null;
-    },
-
-    _domStorageForId: function(id)
-    {
-        for (var i = 0; i < this._domStorageObjects.length; ++i) {
-            // The id is an object, so we need to compare the properties using Object.shallowEqual.
-            // COMPATIBILITY (iOS 6): The id was a string. Object.shallowEqual works for both.
-            if (Object.shallowEqual(this._domStorageObjects[i].id, id))
-                return this._domStorageObjects[i];
-        }
-
-        return null;
-    },
-
-    _domStorageViewForId: function(id)
-    {
-        var domStorage = this._domStorageForId(id);
-        if (!domStorage)
-            return null;
-
-        return WebInspector.contentBrowser.contentViewContainer.contentViewForRepresentedObject(domStorage, true);
     }
 };
-
-WebInspector.StorageManager.prototype.__proto__ = WebInspector.Object.prototype;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to