<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[163927] trunk/Source/WebInspectorUI</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/163927">163927</a></dd>
<dt>Author</dt> <dd>bburg@apple.com</dd>
<dt>Date</dt> <dd>2014-02-11 18:52:19 -0800 (Tue, 11 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>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):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceDOMStorageContentViewjs">trunk/Source/WebInspectorUI/UserInterface/DOMStorageContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceDOMStorageObjectjs">trunk/Source/WebInspectorUI/UserInterface/DOMStorageObject.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceDOMStorageObserverjs">trunk/Source/WebInspectorUI/UserInterface/DOMStorageObserver.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceStorageManagerjs">trunk/Source/WebInspectorUI/UserInterface/StorageManager.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (163926 => 163927)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1,3 +1,49 @@
</span><ins>+2014-02-11  Brian Burg  &lt;bburg@apple.com&gt;
+
+        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):
+
</ins><span class="cx"> 2014-02-11  James Craig  &lt;jcraig@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: AX: Accessibility Node Inspection
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceDOMStorageContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/DOMStorageContentView.js (163926 => 163927)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2013 Samsung Electronics. All rights reserved.
</span><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -30,17 +30,23 @@
</span><span class="cx"> 
</span><span class="cx">     this.element.classList.add(WebInspector.DOMStorageContentView.StyleClassName);
</span><span class="cx"> 
</span><del>-    this.update();
</del><ins>+    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();
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebInspector.DOMStorageContentView.StyleClassName = &quot;dom-storage&quot;;
</span><span class="cx"> 
</span><span class="cx"> WebInspector.DOMStorageContentView.prototype = {
</span><span class="cx">     constructor: WebInspector.DOMStorageContentView,
</span><ins>+    __proto__: WebInspector.ContentView.prototype,
</ins><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><del>-    update: function()
</del><ins>+    reset: function()
</ins><span class="cx">     {
</span><span class="cx">         this.representedObject.getEntries(this._showDOMStorageEntries.bind(this));
</span><span class="cx">     },
</span><span class="lines">@@ -52,27 +58,28 @@
</span><span class="cx">         cookie.host = this.representedObject.host;
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    itemsCleared: function()
</del><ins>+    itemsCleared: function(event)
</ins><span class="cx">     {
</span><span class="cx">         this._dataGrid.removeChildren();
</span><span class="cx">         this._dataGrid.addCreationNode(false);
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    itemRemoved: function(key)
</del><ins>+    itemRemoved: function(event)
</ins><span class="cx">     {
</span><del>-        for (var i = 0; i &lt; this._dataGrid.children.length; ++i) {
-            var childNode = this._dataGrid.children[i];
-            if (childNode.data[0] === key) {
-                this._dataGrid.removeChild(childNode);
-                return;
-            }
</del><ins>+        for (var node of this._dataGrid.children) {
+            if (node.data[0] === event.data.key)
+                return this._dataGrid.removeChild(node);
</ins><span class="cx">         }
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    itemAdded: function(key, value)
</del><ins>+    itemAdded: function(event)
</ins><span class="cx">     {
</span><del>-        for (var i = 0; i &lt; this._dataGrid.children.length; ++i) {
-            if (this._dataGrid.children[i][0] === key)
</del><ins>+        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)
</ins><span class="cx">                 return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -87,15 +94,18 @@
</span><span class="cx">             this._sortDataGrid();
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    itemUpdated: function(key, oldValue, value)
</del><ins>+    itemUpdated: function(event)
</ins><span class="cx">     {
</span><ins>+        var key = event.data.key;
+        var value = event.data.value;
+
</ins><span class="cx">         var keyFound = false;
</span><del>-        for (var i = 0; i &lt; this._dataGrid.children.length; ++i) {
-            var childNode = this._dataGrid.children[i];
</del><ins>+        for (var childNode of this._dataGrid.children) {
</ins><span class="cx">             if (childNode.data[0] === key) {
</span><ins>+                // Remove any rows that are now duplicates.
</ins><span class="cx">                 if (keyFound) {
</span><span class="cx">                     this._dataGrid.removeChild(childNode);
</span><del>-                    return;
</del><ins>+                    continue;
</ins><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 keyFound = true;
</span><span class="lines">@@ -209,7 +219,7 @@
</span><span class="cx">         if (this.representedObject)
</span><span class="cx">             this.representedObject.removeItem(node.data[0]);
</span><span class="cx"> 
</span><del>-        this.update();
</del><ins>+        this.reset();
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     _editingCallback: function(editingNode, columnIdentifier, oldText, newText)
</span><span class="lines">@@ -223,8 +233,6 @@
</span><span class="cx">         } else
</span><span class="cx">             domStorage.setItem(editingNode.data[0], newText);
</span><span class="cx"> 
</span><del>-        this.update();
</del><ins>+        this.reset();
</ins><span class="cx">     }
</span><span class="cx"> };
</span><del>-
-WebInspector.DOMStorageContentView.prototype.__proto__ = WebInspector.ContentView.prototype;
</del></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceDOMStorageObjectjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/DOMStorageObject.js (163926 => 163927)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -34,9 +34,17 @@
</span><span class="cx"> WebInspector.DOMStorageObject.HostCookieKey = &quot;dom-storage-object-host&quot;;
</span><span class="cx"> WebInspector.DOMStorageObject.LocalStorageCookieKey = &quot;dom-storage-object-local-storage&quot;;
</span><span class="cx"> 
</span><ins>+WebInspector.DOMStorageObject.Event = {
+    ItemsCleared: &quot;dom-storage-object-items-cleared&quot;,
+    ItemAdded: &quot;dom-storage-object-item-added&quot;,
+    ItemRemoved: &quot;dom-storage-object-item-removed&quot;,
+    ItemUpdated: &quot;dom-storage-object-updated&quot;,
+};
+
</ins><span class="cx"> WebInspector.DOMStorageObject.prototype = {
</span><span class="cx">     constructor: WebInspector.DOMStorageObject,
</span><del>-    
</del><ins>+    __proto__: WebInspector.Object.prototype,
+
</ins><span class="cx">     get id()
</span><span class="cx">     {
</span><span class="cx">         return this._id;
</span><span class="lines">@@ -67,13 +75,34 @@
</span><span class="cx">             DOMStorageAgent.getDOMStorageItems(this._id, callback);
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    removeItem: function(key, callback)
</del><ins>+    removeItem: function(key)
</ins><span class="cx">     {
</span><del>-        DOMStorageAgent.removeDOMStorageItem(this._id, key, callback);
</del><ins>+        DOMStorageAgent.removeDOMStorageItem(this._id, key);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    setItem: function(key, value, callback)
</del><ins>+    setItem: function(key, value)
</ins><span class="cx">     {
</span><del>-        DOMStorageAgent.setDOMStorageItem(this._id, key, value, callback);
</del><ins>+        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: id, key: key, oldValue: oldValue, value: value};
+        this.dispatchEventToListeners(WebInspector.DOMStorageObject.Event.ItemUpdated, data);
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceDOMStorageObserverjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/DOMStorageObserver.js (163926 => 163927)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> 
</span><span class="cx"> WebInspector.DOMStorageObserver.prototype = {
</span><span class="cx">     constructor: WebInspector.DOMStorageObserver,
</span><ins>+    __proto__: WebInspector.Object.prototype,
</ins><span class="cx"> 
</span><span class="cx">     // Events defined by the &quot;DOMStorage&quot; domain.
</span><span class="cx"> 
</span><span class="lines">@@ -48,23 +49,21 @@
</span><span class="cx"> 
</span><span class="cx">     domStorageItemsCleared: function(storageId)
</span><span class="cx">     {
</span><del>-        WebInspector.storageManager.domStorageItemsCleared(storageId);
</del><ins>+        WebInspector.storageManager.itemsCleared(storageId);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     domStorageItemRemoved: function(storageId, key)
</span><span class="cx">     {
</span><del>-        WebInspector.storageManager.domStorageItemRemoved(storageId, key);
</del><ins>+        WebInspector.storageManager.itemRemoved(storageId, key);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     domStorageItemAdded: function(storageId, key, value)
</span><span class="cx">     {
</span><del>-        WebInspector.storageManager.domStorageItemAdded(storageId, key, value);
</del><ins>+        WebInspector.storageManager.itemAdded(storageId, key, value);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     domStorageItemUpdated: function(storageId, key, oldValue, value)
</span><span class="cx">     {
</span><del>-        WebInspector.storageManager.domStorageItemUpdated(storageId, key, oldValue, value);
</del><ins>+        WebInspector.storageManager.itemUpdated(storageId, key, oldValue, value);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><del>-
-WebInspector.DOMStorageObserver.prototype.__proto__ = WebInspector.Object.prototype;
</del></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceStorageManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/StorageManager.js (163926 => 163927)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -55,6 +55,7 @@
</span><span class="cx"> 
</span><span class="cx"> WebInspector.StorageManager.prototype = {
</span><span class="cx">     constructor: WebInspector.StorageManager,
</span><ins>+    __proto__: WebInspector.Object.prototype,
</ins><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="lines">@@ -83,57 +84,32 @@
</span><span class="cx"> 
</span><span class="cx">     domStorageWasUpdated: function(id)
</span><span class="cx">     {
</span><del>-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.update();
</del><ins>+        this.dispatchEventToListeners(WebInspector.StorageManager.Event.DOMStorageWasUpdated, id);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    domStorageItemsCleared: function(id)
</del><ins>+    itemsCleared: function(storageId)
</ins><span class="cx">     {
</span><del>-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemsCleared();
</del><ins>+        this._domStorageForIdentifier(storageId).itemsCleared(storageId);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    domStorageItemRemoved: function(id, key)
</del><ins>+    itemRemoved: function(storageId, key)
</ins><span class="cx">     {
</span><del>-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemRemoved(key);
</del><ins>+        this._domStorageForIdentifier(storageId).itemRemoved(storageId, key);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    domStorageItemAdded: function(id, key, value)
</del><ins>+    itemAdded: function(storageId, key, value)
</ins><span class="cx">     {
</span><del>-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemAdded(key, value);
</del><ins>+        this._domStorageForIdentifier(storageId).itemAdded(storageId, key, value);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><del>-    domStorageItemUpdated: function(id, key, oldValue, value)
</del><ins>+    itemUpdated: function(storageId, key, oldValue, value)
</ins><span class="cx">     {
</span><del>-        var domStorageView = this._domStorageViewForId(id);
-        if (!domStorageView)
-            return;
-
-        console.assert(domStorageView instanceof WebInspector.DOMStorageContentView);
-        domStorageView.itemUpdated(key, oldValue, value);
</del><ins>+        this._domStorageForIdentifier(storageId).itemUpdated(storageId, key, oldValue, value);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     inspectDatabase: function(id)
</span><span class="cx">     {
</span><del>-        var database = this._databaseForId(id);
</del><ins>+        var database = this._databaseForIdentifier(id);
</ins><span class="cx">         console.assert(database);
</span><span class="cx">         if (!database)
</span><span class="cx">             return;
</span><span class="lines">@@ -142,13 +118,25 @@
</span><span class="cx"> 
</span><span class="cx">     inspectDOMStorage: function(id)
</span><span class="cx">     {
</span><del>-        var domStorage = this._domStorageForId(id);
</del><ins>+        var domStorage = this._domStorageForIdentifier(id);
</ins><span class="cx">         console.assert(domStorage);
</span><span class="cx">         if (!domStorage)
</span><span class="cx">             return;
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.StorageManager.Event.DOMStorageObjectWasInspected, {domStorage: domStorage});
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    _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;
+    },
+
</ins><span class="cx">     // Private
</span><span class="cx"> 
</span><span class="cx">     _mainResourceDidChange: function(event)
</span><span class="lines">@@ -184,11 +172,11 @@
</span><span class="cx">         // FIXME: Consider passing the other parts of the origin along to domStorageWasAdded.
</span><span class="cx"> 
</span><span class="cx">         var localStorageIdentifier = {securityOrigin: frame.securityOrigin, isLocalStorage: true};
</span><del>-        if (!this._domStorageForId(localStorageIdentifier))
</del><ins>+        if (!this._domStorageForIdentifier(localStorageIdentifier))
</ins><span class="cx">             this.domStorageWasAdded(localStorageIdentifier, frame.mainResource.urlComponents.host, true);
</span><span class="cx"> 
</span><span class="cx">         var sessionStorageIdentifier = {securityOrigin: frame.securityOrigin, isLocalStorage: false};
</span><del>-        if (!this._domStorageForId(sessionStorageIdentifier))
</del><ins>+        if (!this._domStorageForIdentifier(sessionStorageIdentifier))
</ins><span class="cx">             this.domStorageWasAdded(sessionStorageIdentifier, frame.mainResource.urlComponents.host, false);
</span><span class="cx">     },
</span><span class="cx"> 
</span><span class="lines">@@ -199,7 +187,7 @@
</span><span class="cx">         this._addDOMStorageIfNeeded(event.target);
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    _databaseForId: function(id)
</del><ins>+    _databaseForIdentifier: function(id)
</ins><span class="cx">     {
</span><span class="cx">         for (var i = 0; i &lt; this._databaseObjects.length; ++i) {
</span><span class="cx">             if (this._databaseObjects[i].id === id)
</span><span class="lines">@@ -207,28 +195,5 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return null;
</span><del>-    },
-
-    _domStorageForId: function(id)
-    {
-        for (var i = 0; i &lt; 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);
</del><span class="cx">     }
</span><span class="cx"> };
</span><del>-
-WebInspector.StorageManager.prototype.__proto__ = WebInspector.Object.prototype;
</del></span></pre>
</div>
</div>

</body>
</html>