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;