<!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>[183580] 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/183580">183580</a></dd>
<dt>Author</dt> <dd>timothy@apple.com</dd>
<dt>Date</dt> <dd>2015-04-29 15:00:06 -0700 (Wed, 29 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Split Storage from Resources tab
https://bugs.webkit.org/show_bug.cgi?id=144404

Reviewed by Joseph Pecoraro.

* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Base/Main.js:
(WebInspector.loaded):
(WebInspector.isTabTypeAllowed):
(WebInspector._tabContentViewForType):
(WebInspector._updateNewTabButtonState):
(WebInspector.showStorageTab):
(WebInspector._storageWasInspected):
* UserInterface/Controllers/ApplicationCacheManager.js:
(WebInspector.ApplicationCacheManager.prototype.initialize):
(WebInspector.ApplicationCacheManager.prototype.get applicationCacheObjects):
* UserInterface/Controllers/StorageManager.js:
(WebInspector.StorageManager.prototype.get domStorageObjects):
(WebInspector.StorageManager.prototype.get databases):
(WebInspector.StorageManager.prototype.get indexedDatabases):
(WebInspector.StorageManager.prototype.get cookieStorageObjects):
* UserInterface/Images/Storage.svg: Added.
* UserInterface/Main.html:
* UserInterface/Views/DatabaseTableContentView.js:
(WebInspector.DatabaseTableContentView.prototype._queryFinished): Clear _dataGrid,
since it might have been allocated but still be empty. This avoids an exception in
updateLayout next time layout is updated.
* UserInterface/Views/NewTabContentView.js:
(WebInspector.NewTabContentView):
* UserInterface/Views/ResourceSidebarPanel.js:
(WebInspector.ResourceSidebarPanel):
(WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):
(WebInspector.ResourceSidebarPanel.prototype._domStorageObjectWasAdded): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._domStorageObjectWasInspected): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._databaseWasAdded): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._databaseWasInspected): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._indexedDatabaseWasAdded): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._cookieStorageObjectWasAdded): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._frameManifestAdded): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._frameManifestRemoved): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._addStorageChild): Deleted.
(WebInspector.ResourceSidebarPanel.prototype._storageCleared): Deleted.
* UserInterface/Views/ResourcesTabContentView.js:
(WebInspector.ResourcesTabContentView):
(WebInspector.ResourcesTabContentView.prototype.canShowRepresentedObject):
* UserInterface/Views/StorageSidebarPanel.js: Added.
(WebInspector.StorageSidebarPanel):
(WebInspector.StorageSidebarPanel.prototype.showDefaultContentView):
(WebInspector.StorageSidebarPanel.prototype.closed):
(WebInspector.StorageSidebarPanel.prototype._treeElementSelected):
(WebInspector.StorageSidebarPanel.prototype._domStorageObjectWasAdded):
(WebInspector.StorageSidebarPanel.prototype._addDOMStorageObject):
(WebInspector.StorageSidebarPanel.prototype._domStorageObjectWasInspected):
(WebInspector.StorageSidebarPanel.prototype._databaseWasAdded):
(WebInspector.StorageSidebarPanel.prototype._addDatabase):
(WebInspector.StorageSidebarPanel.prototype._databaseWasInspected):
(WebInspector.StorageSidebarPanel.prototype._indexedDatabaseWasAdded):
(WebInspector.StorageSidebarPanel.prototype._addIndexedDatabase):
(WebInspector.StorageSidebarPanel.prototype._cookieStorageObjectWasAdded):
(WebInspector.StorageSidebarPanel.prototype._addCookieStorageObject):
(WebInspector.StorageSidebarPanel.prototype._frameManifestAdded):
(WebInspector.StorageSidebarPanel.prototype._addFrameManifest):
(WebInspector.StorageSidebarPanel.prototype._frameManifestRemoved):
(WebInspector.StorageSidebarPanel.prototype._compareTreeElements):
(WebInspector.StorageSidebarPanel.prototype._addStorageChild):
(WebInspector.StorageSidebarPanel.prototype._storageCleared):
* UserInterface/Views/StorageTabContentView.js: Copied from Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js.
(WebInspector.StorageTabContentView):
(WebInspector.StorageTabContentView.prototype.get type):
(WebInspector.StorageTabContentView.prototype.canShowRepresentedObject):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs">trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceBaseMainjs">trunk/Source/WebInspectorUI/UserInterface/Base/Main.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersApplicationCacheManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersStorageManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceMainhtml">trunk/Source/WebInspectorUI/UserInterface/Main.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDatabaseTableContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsNewTabContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsResourceSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsResourcesTabContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceImagesStoragesvg">trunk/Source/WebInspectorUI/UserInterface/Images/Storage.svg</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsStorageSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/StorageSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsStorageTabContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/ChangeLog        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -1,5 +1,78 @@
</span><span class="cx"> 2015-04-29  Timothy Hatcher  &lt;timothy@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Split Storage from Resources tab
+        https://bugs.webkit.org/show_bug.cgi?id=144404
+
+        Reviewed by Joseph Pecoraro.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        * UserInterface/Base/Main.js:
+        (WebInspector.loaded):
+        (WebInspector.isTabTypeAllowed):
+        (WebInspector._tabContentViewForType):
+        (WebInspector._updateNewTabButtonState):
+        (WebInspector.showStorageTab):
+        (WebInspector._storageWasInspected):
+        * UserInterface/Controllers/ApplicationCacheManager.js:
+        (WebInspector.ApplicationCacheManager.prototype.initialize):
+        (WebInspector.ApplicationCacheManager.prototype.get applicationCacheObjects):
+        * UserInterface/Controllers/StorageManager.js:
+        (WebInspector.StorageManager.prototype.get domStorageObjects):
+        (WebInspector.StorageManager.prototype.get databases):
+        (WebInspector.StorageManager.prototype.get indexedDatabases):
+        (WebInspector.StorageManager.prototype.get cookieStorageObjects):
+        * UserInterface/Images/Storage.svg: Added.
+        * UserInterface/Main.html:
+        * UserInterface/Views/DatabaseTableContentView.js:
+        (WebInspector.DatabaseTableContentView.prototype._queryFinished): Clear _dataGrid,
+        since it might have been allocated but still be empty. This avoids an exception in
+        updateLayout next time layout is updated.
+        * UserInterface/Views/NewTabContentView.js:
+        (WebInspector.NewTabContentView):
+        * UserInterface/Views/ResourceSidebarPanel.js:
+        (WebInspector.ResourceSidebarPanel):
+        (WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):
+        (WebInspector.ResourceSidebarPanel.prototype._domStorageObjectWasAdded): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._domStorageObjectWasInspected): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._databaseWasAdded): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._databaseWasInspected): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._indexedDatabaseWasAdded): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._cookieStorageObjectWasAdded): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._frameManifestAdded): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._frameManifestRemoved): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._addStorageChild): Deleted.
+        (WebInspector.ResourceSidebarPanel.prototype._storageCleared): Deleted.
+        * UserInterface/Views/ResourcesTabContentView.js:
+        (WebInspector.ResourcesTabContentView):
+        (WebInspector.ResourcesTabContentView.prototype.canShowRepresentedObject):
+        * UserInterface/Views/StorageSidebarPanel.js: Added.
+        (WebInspector.StorageSidebarPanel):
+        (WebInspector.StorageSidebarPanel.prototype.showDefaultContentView):
+        (WebInspector.StorageSidebarPanel.prototype.closed):
+        (WebInspector.StorageSidebarPanel.prototype._treeElementSelected):
+        (WebInspector.StorageSidebarPanel.prototype._domStorageObjectWasAdded):
+        (WebInspector.StorageSidebarPanel.prototype._addDOMStorageObject):
+        (WebInspector.StorageSidebarPanel.prototype._domStorageObjectWasInspected):
+        (WebInspector.StorageSidebarPanel.prototype._databaseWasAdded):
+        (WebInspector.StorageSidebarPanel.prototype._addDatabase):
+        (WebInspector.StorageSidebarPanel.prototype._databaseWasInspected):
+        (WebInspector.StorageSidebarPanel.prototype._indexedDatabaseWasAdded):
+        (WebInspector.StorageSidebarPanel.prototype._addIndexedDatabase):
+        (WebInspector.StorageSidebarPanel.prototype._cookieStorageObjectWasAdded):
+        (WebInspector.StorageSidebarPanel.prototype._addCookieStorageObject):
+        (WebInspector.StorageSidebarPanel.prototype._frameManifestAdded):
+        (WebInspector.StorageSidebarPanel.prototype._addFrameManifest):
+        (WebInspector.StorageSidebarPanel.prototype._frameManifestRemoved):
+        (WebInspector.StorageSidebarPanel.prototype._compareTreeElements):
+        (WebInspector.StorageSidebarPanel.prototype._addStorageChild):
+        (WebInspector.StorageSidebarPanel.prototype._storageCleared):
+        * UserInterface/Views/StorageTabContentView.js: Copied from Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js.
+        (WebInspector.StorageTabContentView):
+        (WebInspector.StorageTabContentView.prototype.get type):
+        (WebInspector.StorageTabContentView.prototype.canShowRepresentedObject):
+
+2015-04-29  Timothy Hatcher  &lt;timothy@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Remove Legacy images and styles
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=144390
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -224,6 +224,7 @@
</span><span class="cx"> localizedStrings[&quot;Filter Console Log&quot;] = &quot;Filter Console Log&quot;;
</span><span class="cx"> localizedStrings[&quot;Filter Resource List&quot;] = &quot;Filter Resource List&quot;;
</span><span class="cx"> localizedStrings[&quot;Filter Search Results&quot;] = &quot;Filter Search Results&quot;;
</span><ins>+localizedStrings[&quot;Filter Storage List&quot;] = &quot;Filter Storage List&quot;;
</ins><span class="cx"> localizedStrings[&quot;Flows&quot;] = &quot;Flows&quot;;
</span><span class="cx"> localizedStrings[&quot;Focused&quot;] = &quot;Focused&quot;;
</span><span class="cx"> localizedStrings[&quot;Font&quot;] = &quot;Font&quot;;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseMainjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx">     this._showingSplitConsoleSetting = new WebInspector.Setting(&quot;showing-split-console&quot;, false);
</span><span class="cx">     this._splitConsoleHeightSetting = new WebInspector.Setting(&quot;split-console-height&quot;, 150);
</span><span class="cx"> 
</span><del>-    this._openTabsSetting = new WebInspector.Setting(&quot;open-tabs&quot;, [&quot;elements&quot;, &quot;resources&quot;, &quot;timeline&quot;, &quot;debugger&quot;, &quot;console&quot;]);
</del><ins>+    this._openTabsSetting = new WebInspector.Setting(&quot;open-tabs&quot;, [&quot;elements&quot;, &quot;resources&quot;, &quot;timeline&quot;, &quot;debugger&quot;, &quot;storage&quot;, &quot;console&quot;]);
</ins><span class="cx">     this._selectedTabIndexSetting = new WebInspector.Setting(&quot;selected-tab-index&quot;, 0);
</span><span class="cx"> 
</span><span class="cx">     this.showShadowDOMSetting = new WebInspector.Setting(&quot;show-shadow-dom&quot;, false);
</span><span class="lines">@@ -376,6 +376,8 @@
</span><span class="cx">     switch (tabType) {
</span><span class="cx">     case WebInspector.ElementsTabContentView.Type:
</span><span class="cx">         return !!window.DOMAgent;
</span><ins>+    case WebInspector.StorageTabContentView.Type:
+        return !!window.DOMStorageAgent || !!window.DatabaseAgent || !!window.IndexedDBAgent;
</ins><span class="cx">     case WebInspector.TimelineTabContentView.Type:
</span><span class="cx">         return !!window.TimelineAgent;
</span><span class="cx">     }
</span><span class="lines">@@ -386,20 +388,22 @@
</span><span class="cx"> WebInspector._tabContentViewForType = function(tabType)
</span><span class="cx"> {
</span><span class="cx">     switch (tabType) {
</span><ins>+    case WebInspector.ConsoleTabContentView.Type:
+        return new WebInspector.ConsoleTabContentView;
+    case WebInspector.DebuggerTabContentView.Type:
+        return new WebInspector.DebuggerTabContentView;
</ins><span class="cx">     case WebInspector.ElementsTabContentView.Type:
</span><span class="cx">         return new WebInspector.ElementsTabContentView;
</span><ins>+    case WebInspector.NewTabContentView.Type:
+        return new WebInspector.NewTabContentView;
</ins><span class="cx">     case WebInspector.ResourcesTabContentView.Type:
</span><span class="cx">         return new WebInspector.ResourcesTabContentView;
</span><ins>+    case WebInspector.SearchTabContentView.Type:
+        return new WebInspector.SearchTabContentView;
+    case WebInspector.StorageTabContentView.Type:
+        return new WebInspector.StorageTabContentView;
</ins><span class="cx">     case WebInspector.TimelineTabContentView.Type:
</span><span class="cx">         return new WebInspector.TimelineTabContentView;
</span><del>-    case WebInspector.DebuggerTabContentView.Type:
-        return new WebInspector.DebuggerTabContentView;
-    case WebInspector.ConsoleTabContentView.Type:
-        return new WebInspector.ConsoleTabContentView;
-    case WebInspector.SearchTabContentView.Type:
-        return new WebInspector.SearchTabContentView;
-    case WebInspector.NewTabTabContentView.Type:
-        return new WebInspector.NewTabTabContentView;
</del><span class="cx">     default:
</span><span class="cx">         console.error(&quot;Unknown tab type&quot;, tabType);
</span><span class="cx">     }
</span><span class="lines">@@ -426,7 +430,8 @@
</span><span class="cx"> 
</span><span class="cx"> WebInspector._updateNewTabButtonState = function(event)
</span><span class="cx"> {
</span><del>-    var newTabAllowed = this.isNewTabWithTypeAllowed(WebInspector.ConsoleTabContentView.Type) || this.isNewTabWithTypeAllowed(WebInspector.ElementsTabContentView.Type);
</del><ins>+    var newTabAllowed = this.isNewTabWithTypeAllowed(WebInspector.ConsoleTabContentView.Type) || this.isNewTabWithTypeAllowed(WebInspector.ElementsTabContentView.Type)
+         || this.isNewTabWithTypeAllowed(WebInspector.StorageTabContentView.Type);
</ins><span class="cx">     this.tabBar.newTabItem.disabled = !newTabAllowed;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -753,6 +758,14 @@
</span><span class="cx">     this.tabBrowser.showTabForContentView(tabContentView);
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WebInspector.showStorageTab = function()
+{
+    var tabContentView = this.tabBrowser.bestTabContentViewForClass(WebInspector.StorageTabContentView);
+    if (!tabContentView)
+        tabContentView = new WebInspector.StorageTabContentView;
+    this.tabBrowser.showTabForContentView(tabContentView);
+};
+
</ins><span class="cx"> WebInspector.showTimelineTab = function()
</span><span class="cx"> {
</span><span class="cx">     var tabContentView = this.tabBrowser.bestTabContentViewForClass(WebInspector.TimelineTabContentView);
</span><span class="lines">@@ -1440,8 +1453,7 @@
</span><span class="cx"> 
</span><span class="cx"> WebInspector._storageWasInspected = function(event)
</span><span class="cx"> {
</span><del>-    // FIXME: This should show a Storage tab when we have one.
-    this.showResourcesTab();
</del><ins>+    this.showStorageTab();
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebInspector._domNodeWasInspected = function(event)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersApplicationCacheManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -44,12 +44,20 @@
</span><span class="cx"> 
</span><span class="cx">     initialize()
</span><span class="cx">     {
</span><del>-        this._applicationCacheObjects = [];
</del><ins>+        this._applicationCacheObjects = {};
</ins><span class="cx"> 
</span><span class="cx">         if (window.ApplicationCacheAgent)
</span><span class="cx">             ApplicationCacheAgent.getFramesWithManifests(this._framesWithManifestsLoaded.bind(this));
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    get applicationCacheObjects()
+    {
+        var applicationCacheObjects = [];
+        for (var id in this._applicationCacheObjects)
+            applicationCacheObjects.push(this._applicationCacheObjects[id]);
+        return applicationCacheObjects;
+    }
+
</ins><span class="cx">     networkStateUpdated(isNowOnline)
</span><span class="cx">     {
</span><span class="cx">         this._online = isNowOnline;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersStorageManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -60,6 +60,29 @@
</span><span class="cx">         this._cookieStorageObjects = {};
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    get domStorageObjects()
+    {
+        return this._domStorageObjects;
+    }
+
+    get databases()
+    {
+        return this._databaseObjects;
+    }
+
+    get indexedDatabases()
+    {
+        return this._indexedDatabases;
+    }
+
+    get cookieStorageObjects()
+    {
+        var cookieStorageObjects = [];
+        for (var host in this._cookieStorageObjects)
+            cookieStorageObjects.push(this._cookieStorageObjects[host]);
+        return cookieStorageObjects;
+    }
+
</ins><span class="cx">     domStorageWasAdded(id, host, isLocalStorage)
</span><span class="cx">     {
</span><span class="cx">         var domStorage = new WebInspector.DOMStorageObject(id, host, isLocalStorage);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceImagesStoragesvg"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Images/Storage.svg (0 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Images/Storage.svg                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Images/Storage.svg        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;!-- Copyright © 2015 Apple Inc. All rights reserved. --&gt;
+&lt;svg viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+    &lt;path d=&quot;M 13.4475645 6.5701038 C 14.1131101 6.95915994 14.5 7.44243562 14.5 8 C 14.5 9.52952015 11.5885604 10.5 8 10.5 C 4.41143956 10.5 1.5 9.52952015 1.5 8 C 1.5 7.44243562 1.88688992 6.95915994 2.55243554 6.5701038 C 2.95984566 6.75017534 3.43583057 6.90963763 3.96620982 7.04342621 C 3.94919939 7.04895616 3.93228678 7.05452352 3.91547313 7.06012807 C 2.98303097 7.37094212 2.5 7.7516133 2.5 8 C 2.5 8.2483867 2.98303097 8.62905788 3.91547313 8.93987193 C 4.97873363 9.2942921 6.43777802 9.5 8 9.5 C 9.56222198 9.5 11.0212664 9.2942921 12.0845269 8.93987193 C 13.016969 8.62905788 13.5 8.2483867 13.5 8 C 13.5 7.7516133 13.016969 7.37094212 12.0845269 7.06012807 C 12.0677132 7.05452352 12.0508006 7.04895616 12.0337902 7.04342621 C 12.5641694 6.90963763 13.0401543 6.75017534 13.4475645 6.5701038 Z&quot; class=&quot;filled&quot; fill=&quot;black&quot;/&gt;
+    &lt;path d=&quot;M 13.4475645 10.5701038 C 14.1131101 10.9591599 14.5 11.4424356 14.5 12 C 14.5 13.5295201 11.5885604 14.5 8 14.5 C 4.41143956 14.5 1.5 13.5295201 1.5 12 C 1.5 11.4424356 1.88688992 10.9591599 2.55243554 10.5701038 C 2.95984566 10.7501753 3.43583057 10.9096376 3.96620982 11.0434262 C 3.94919939 11.0489562 3.93228678 11.0545235 3.91547313 11.0601281 C 2.98303097 11.3709421 2.5 11.7516133 2.5 12 C 2.5 12.2483867 2.98303097 12.6290579 3.91547313 12.9398719 C 4.97873363 13.2942921 6.43777802 13.5 8 13.5 C 9.56222198 13.5 11.0212664 13.2942921 12.0845269 12.9398719 C 13.016969 12.6290579 13.5 12.2483867 13.5 12 C 13.5 11.7516133 13.016969 11.3709421 12.0845269 11.0601281 C 12.0677132 11.0545235 12.0508006 11.0489562 12.0337902 11.0434262 C 12.5641694 10.9096376 13.0401543 10.7501753 13.4475645 10.5701038 Z&quot; class=&quot;filled&quot; fill=&quot;black&quot;/&gt;
+    &lt;path d=&quot;M 14.5 4 C 14.5 2.47047985 11.5885604 1.5 8 1.5 C 4.41143956 1.5 1.5 2.47047985 1.5 4 C 1.5 5.52952015 4.41143956 6.5 8 6.5 C 11.5885604 6.5 14.5 5.52952015 14.5 4 Z M 3.91547313 4.93987193 C 2.98303097 4.62905788 2.5 4.2483867 2.5 4 C 2.5 3.7516133 2.98303097 3.37094212 3.91547313 3.06012807 C 4.97873363 2.7057079 6.43777802 2.5 8 2.5 C 9.56222198 2.5 11.0212664 2.7057079 12.0845269 3.06012807 C 13.016969 3.37094212 13.5 3.7516133 13.5 4 C 13.5 4.2483867 13.016969 4.62905788 12.0845269 4.93987193 C 11.0212664 5.2942921 9.56222198 5.5 8 5.5 C 6.43777802 5.5 4.97873363 5.2942921 3.91547313 4.93987193 Z&quot; class=&quot;filled&quot; fill=&quot;black&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceMainhtml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Main.html (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Main.html        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.html        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -353,6 +353,7 @@
</span><span class="cx">     &lt;script src=&quot;Views/ResourcesTabContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/SearchTabContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/SettingsTabContentView.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;Views/StorageTabContentView.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;Views/TimelineTabContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx"> 
</span><span class="cx">     &lt;script src=&quot;Views/DetailsSection.js&quot;&gt;&lt;/script&gt;
</span><span class="lines">@@ -504,6 +505,7 @@
</span><span class="cx">     &lt;script src=&quot;Views/SourceCodeTimelineTimelineDataGridNode.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/SourceCodeTimelineTreeElement.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/SourceMapResourceTreeElement.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;Views/StorageSidebarPanel.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;Views/SyntaxHighlightingSupport.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/TextContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/TextResourceContentView.js&quot;&gt;&lt;/script&gt;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDatabaseTableContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -90,6 +90,8 @@
</span><span class="cx"> 
</span><span class="cx">         this._dataGrid = new WebInspector.DataGrid.createSortableDataGrid(columnNames, values);
</span><span class="cx">         if (!this._dataGrid || !this._dataGrid.element) {
</span><ins>+            this._dataGrid = undefined;
+
</ins><span class="cx">             // If the DataGrid is empty, then we were returned a table with no columns. This can happen when a table has
</span><span class="cx">             // no data, the SELECT query only returns column names when there is data.
</span><span class="cx">             this.element.removeChildren();
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsNewTabContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> 
</span><span class="cx">     var allowedNewTabs = [
</span><span class="cx">         {image: &quot;Images/Elements.svg&quot;, title: WebInspector.UIString(&quot;Elements&quot;), type: WebInspector.ElementsTabContentView.Type},
</span><ins>+        {image: &quot;Images/Storage.svg&quot;, title: WebInspector.UIString(&quot;Storage&quot;), type: WebInspector.StorageTabContentView.Type},
</ins><span class="cx">         {image: &quot;Images/Console.svg&quot;, title: WebInspector.UIString(&quot;Console&quot;), type: WebInspector.ConsoleTabContentView.Type}
</span><span class="cx">     ];
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsResourceSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -35,31 +35,6 @@
</span><span class="cx"> 
</span><span class="cx">         this._waitingForInitialMainFrame = true;
</span><span class="cx"> 
</span><del>-        this._localStorageRootTreeElement = null;
-        this._sessionStorageRootTreeElement = null;
-
-        this._databaseRootTreeElement = null;
-        this._databaseHostTreeElementMap = {};
-
-        this._indexedDatabaseRootTreeElement = null;
-        this._indexedDatabaseHostTreeElementMap = {};
-
-        this._cookieStorageRootTreeElement = null;
-
-        this._applicationCacheRootTreeElement = null;
-        this._applicationCacheURLTreeElementMap = {};
-
-        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.CookieStorageObjectWasAdded, this._cookieStorageObjectWasAdded, this);
-        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DOMStorageObjectWasAdded, this._domStorageObjectWasAdded, this);
-        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DOMStorageObjectWasInspected, this._domStorageObjectWasInspected, this);
-        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DatabaseWasAdded, this._databaseWasAdded, this);
-        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DatabaseWasInspected, this._databaseWasInspected, this);
-        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.IndexedDatabaseWasAdded, this._indexedDatabaseWasAdded, this);
-        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.Cleared, this._storageCleared, this);
-
-        WebInspector.applicationCacheManager.addEventListener(WebInspector.ApplicationCacheManager.Event.FrameManifestAdded, this._frameManifestAdded, this);
-        WebInspector.applicationCacheManager.addEventListener(WebInspector.ApplicationCacheManager.Event.FrameManifestRemoved, this._frameManifestRemoved, this);
-
</del><span class="cx">         WebInspector.frameResourceManager.addEventListener(WebInspector.FrameResourceManager.Event.MainFrameDidChange, this._mainFrameDidChange, this);
</span><span class="cx"> 
</span><span class="cx">         WebInspector.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.ScriptAdded, this._scriptWasAdded, this);
</span><span class="lines">@@ -300,15 +275,10 @@
</span><span class="cx"> 
</span><span class="cx">     _treeElementSelected(treeElement, selectedByUser)
</span><span class="cx">     {
</span><del>-        if (treeElement instanceof WebInspector.FolderTreeElement || treeElement instanceof WebInspector.DatabaseHostTreeElement ||
-            treeElement instanceof WebInspector.IndexedDatabaseHostTreeElement || treeElement instanceof WebInspector.IndexedDatabaseTreeElement)
</del><ins>+        if (treeElement instanceof WebInspector.FolderTreeElement)
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        if (treeElement instanceof WebInspector.ResourceTreeElement || treeElement instanceof WebInspector.ScriptTreeElement ||
-            treeElement instanceof WebInspector.StorageTreeElement || treeElement instanceof WebInspector.DatabaseTableTreeElement ||
-            treeElement instanceof WebInspector.DatabaseTreeElement || treeElement instanceof WebInspector.ApplicationCacheFrameTreeElement ||
-            treeElement instanceof WebInspector.ContentFlowTreeElement || treeElement instanceof WebInspector.IndexedDatabaseObjectStoreTreeElement ||
-            treeElement instanceof WebInspector.IndexedDatabaseObjectStoreIndexTreeElement) {
</del><ins>+        if (treeElement instanceof WebInspector.ResourceTreeElement || treeElement instanceof WebInspector.ScriptTreeElement) {
</ins><span class="cx">             WebInspector.showRepresentedObject(treeElement.representedObject);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -316,90 +286,6 @@
</span><span class="cx">         console.error(&quot;Unknown tree element&quot;, treeElement);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _domStorageObjectWasAdded(event)
-    {
-        var domStorage = event.data.domStorage;
-        var storageElement = new WebInspector.DOMStorageTreeElement(domStorage);
-
-        if (domStorage.isLocalStorage())
-            this._localStorageRootTreeElement = this._addStorageChild(storageElement, this._localStorageRootTreeElement, WebInspector.UIString(&quot;Local Storage&quot;));
-        else
-            this._sessionStorageRootTreeElement = this._addStorageChild(storageElement, this._sessionStorageRootTreeElement, WebInspector.UIString(&quot;Session Storage&quot;));
-    }
-
-    _domStorageObjectWasInspected(event)
-    {
-        var domStorage = event.data.domStorage;
-        var treeElement = this.treeElementForRepresentedObject(domStorage);
-        treeElement.revealAndSelect(true);
-    }
-
-    _databaseWasAdded(event)
-    {
-        var database = event.data.database;
-
-        console.assert(database instanceof WebInspector.DatabaseObject);
-
-        if (!this._databaseHostTreeElementMap[database.host]) {
-            this._databaseHostTreeElementMap[database.host] = new WebInspector.DatabaseHostTreeElement(database.host);
-            this._databaseRootTreeElement = this._addStorageChild(this._databaseHostTreeElementMap[database.host], this._databaseRootTreeElement, WebInspector.UIString(&quot;Databases&quot;));
-        }
-
-        var databaseElement = new WebInspector.DatabaseTreeElement(database);
-        this._databaseHostTreeElementMap[database.host].appendChild(databaseElement);
-    }
-
-    _databaseWasInspected(event)
-    {
-        var database = event.data.database;
-        var treeElement = this.treeElementForRepresentedObject(database);
-        treeElement.revealAndSelect(true);
-    }
-
-    _indexedDatabaseWasAdded(event)
-    {
-        var indexedDatabase = event.data.indexedDatabase;
-
-        console.assert(indexedDatabase instanceof WebInspector.IndexedDatabase);
-
-        if (!this._indexedDatabaseHostTreeElementMap[indexedDatabase.host]) {
-            this._indexedDatabaseHostTreeElementMap[indexedDatabase.host] = new WebInspector.IndexedDatabaseHostTreeElement(indexedDatabase.host);
-            this._indexedDatabaseRootTreeElement = this._addStorageChild(this._indexedDatabaseHostTreeElementMap[indexedDatabase.host], this._indexedDatabaseRootTreeElement, WebInspector.UIString(&quot;Indexed Databases&quot;));
-        }
-
-        var indexedDatabaseElement = new WebInspector.IndexedDatabaseTreeElement(indexedDatabase);
-        this._indexedDatabaseHostTreeElementMap[indexedDatabase.host].appendChild(indexedDatabaseElement);
-    }
-
-    _cookieStorageObjectWasAdded(event)
-    {
-        console.assert(event.data.cookieStorage instanceof WebInspector.CookieStorageObject);
-
-        var cookieElement = new WebInspector.CookieStorageTreeElement(event.data.cookieStorage);
-        this._cookieStorageRootTreeElement = this._addStorageChild(cookieElement, this._cookieStorageRootTreeElement, WebInspector.UIString(&quot;Cookies&quot;));
-    }
-
-    _frameManifestAdded(event)
-    {
-        var frameManifest = event.data.frameManifest;
-        console.assert(frameManifest instanceof WebInspector.ApplicationCacheFrame);
-
-        var manifest = frameManifest.manifest;
-        var manifestURL = manifest.manifestURL;
-        if (!this._applicationCacheURLTreeElementMap[manifestURL]) {
-            this._applicationCacheURLTreeElementMap[manifestURL] = new WebInspector.ApplicationCacheManifestTreeElement(manifest);
-            this._applicationCacheRootTreeElement = this._addStorageChild(this._applicationCacheURLTreeElementMap[manifestURL], this._applicationCacheRootTreeElement, WebInspector.UIString(&quot;Application Cache&quot;));
-        }
-
-        var frameCacheElement = new WebInspector.ApplicationCacheFrameTreeElement(frameManifest);
-        this._applicationCacheURLTreeElementMap[manifestURL].appendChild(frameCacheElement);
-    }
-
-    _frameManifestRemoved(event)
-    {
-         // FIXME: Implement this.
-    }
-
</del><span class="cx">     _compareTreeElements(a, b)
</span><span class="cx">     {
</span><span class="cx">         // Always sort the main frame element first.
</span><span class="lines">@@ -414,76 +300,6 @@
</span><span class="cx">         return (a.mainTitle || &quot;&quot;).localeCompare(b.mainTitle || &quot;&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _addStorageChild(childElement, parentElement, folderName)
-    {
-        if (!parentElement) {
-            childElement.flattened = true;
-
-            this.contentTreeOutline.insertChild(childElement, insertionIndexForObjectInListSortedByFunction(childElement, this.contentTreeOutline.children, this._compareTreeElements));
-
-            return childElement;
-        }
-
-        if (parentElement instanceof WebInspector.StorageTreeElement) {
-            console.assert(parentElement.flattened);
-
-            var previousOnlyChild = parentElement;
-            previousOnlyChild.flattened = false;
-            this.contentTreeOutline.removeChild(previousOnlyChild);
-
-            var folderElement = new WebInspector.FolderTreeElement(folderName);
-            this.contentTreeOutline.insertChild(folderElement, insertionIndexForObjectInListSortedByFunction(folderElement, this.contentTreeOutline.children, this._compareTreeElements));
-
-            folderElement.appendChild(previousOnlyChild);
-            folderElement.insertChild(childElement, insertionIndexForObjectInListSortedByFunction(childElement, folderElement.children, this._compareTreeElements));
-
-            return folderElement;
-        }
-
-        console.assert(parentElement instanceof WebInspector.FolderTreeElement);
-        parentElement.insertChild(childElement, insertionIndexForObjectInListSortedByFunction(childElement, parentElement.children, this._compareTreeElements));
-
-        return parentElement;
-    }
-
-    _storageCleared(event)
-    {
-        // Close all DOM and cookie storage content views since the main frame has navigated and all storages are cleared.
-        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.CookieStorageContentView);
-        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.DOMStorageContentView);
-        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.DatabaseTableContentView);
-        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.DatabaseContentView);
-        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.ApplicationCacheFrameContentView);
-
-        if (this._localStorageRootTreeElement &amp;&amp; this._localStorageRootTreeElement.parent)
-            this._localStorageRootTreeElement.parent.removeChild(this._localStorageRootTreeElement);
-
-        if (this._sessionStorageRootTreeElement &amp;&amp; this._sessionStorageRootTreeElement.parent)
-            this._sessionStorageRootTreeElement.parent.removeChild(this._sessionStorageRootTreeElement);
-
-        if (this._databaseRootTreeElement &amp;&amp; this._databaseRootTreeElement.parent)
-            this._databaseRootTreeElement.parent.removeChild(this._databaseRootTreeElement);
-
-        if (this._indexedDatabaseRootTreeElement &amp;&amp; this._indexedDatabaseRootTreeElement.parent)
-            this._indexedDatabaseRootTreeElement.parent.removeChild(this._indexedDatabaseRootTreeElement);
-
-        if (this._cookieStorageRootTreeElement &amp;&amp; this._cookieStorageRootTreeElement.parent)
-            this._cookieStorageRootTreeElement.parent.removeChild(this._cookieStorageRootTreeElement);
-
-        if (this._applicationCacheRootTreeElement &amp;&amp; this._applicationCacheRootTreeElement.parent)
-            this._applicationCacheRootTreeElement.parent.removeChild(this._applicationCacheRootTreeElement);
-
-        this._localStorageRootTreeElement = null;
-        this._sessionStorageRootTreeElement = null;
-        this._databaseRootTreeElement = null;
-        this._databaseHostTreeElementMap = {};
-        this._indexedDatabaseRootTreeElement = null;
-        this._indexedDatabaseHostTreeElementMap = {};
-        this._cookieStorageRootTreeElement = null;
-        this._applicationCacheRootTreeElement = null;
-        this._applicationCacheURLTreeElementMap = {};
-    }
-
</del><span class="cx">     _extraDomainsActivated()
</span><span class="cx">     {
</span><span class="cx">         if (WebInspector.debuggableType === WebInspector.DebuggableType.JavaScript)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsResourcesTabContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js (183579 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js        2015-04-29 21:59:48 UTC (rev 183579)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> WebInspector.ResourcesTabContentView = function(identifier)
</span><span class="cx"> {
</span><span class="cx">     var tabBarItem = new WebInspector.TabBarItem(&quot;Images/Resources.svg&quot;, WebInspector.UIString(&quot;Resources&quot;));
</span><del>-    var detailsSidebarPanels = [WebInspector.resourceDetailsSidebarPanel, WebInspector.applicationCacheDetailsSidebarPanel, WebInspector.probeDetailsSidebarPanel];
</del><ins>+    var detailsSidebarPanels = [WebInspector.resourceDetailsSidebarPanel, WebInspector.probeDetailsSidebarPanel];
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: Until ContentFlows are moved to the Elements tab, these details sidebar panels need to be included.
</span><span class="cx">     detailsSidebarPanels = detailsSidebarPanels.concat([WebInspector.domNodeDetailsSidebarPanel, WebInspector.cssStyleDetailsSidebarPanel]);
</span><span class="lines">@@ -52,12 +52,7 @@
</span><span class="cx"> 
</span><span class="cx">     canShowRepresentedObject: function(representedObject)
</span><span class="cx">     {
</span><del>-        return representedObject instanceof WebInspector.Frame || representedObject instanceof WebInspector.Resource ||
-            representedObject instanceof WebInspector.Script || representedObject instanceof WebInspector.ContentFlow ||
-            representedObject instanceof WebInspector.DOMStorageObject || representedObject instanceof WebInspector.CookieStorageObject ||
-            representedObject instanceof WebInspector.DatabaseTableObject || representedObject instanceof WebInspector.DatabaseObject ||
-            representedObject instanceof WebInspector.ApplicationCacheFrame || representedObject instanceof WebInspector.IndexedDatabaseObjectStore ||
-            representedObject instanceof WebInspector.IndexedDatabaseObjectStoreIndex;
</del><ins>+        return representedObject instanceof WebInspector.Frame || representedObject instanceof WebInspector.Resource || representedObject instanceof WebInspector.Script;
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsStorageSidebarPaneljs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/StorageSidebarPanel.js (0 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/StorageSidebarPanel.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/StorageSidebarPanel.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -0,0 +1,292 @@
</span><ins>+/*
+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.StorageSidebarPanel = class StorageSidebarPanel extends WebInspector.NavigationSidebarPanel
+{
+    constructor(contentBrowser)
+    {
+        super(&quot;storage&quot;, WebInspector.UIString(&quot;Storage&quot;));
+
+        this.contentBrowser = contentBrowser;
+
+        this.filterBar.placeholder = WebInspector.UIString(&quot;Filter Storage List&quot;);
+
+        this._localStorageRootTreeElement = null;
+        this._sessionStorageRootTreeElement = null;
+
+        this._databaseRootTreeElement = null;
+        this._databaseHostTreeElementMap = {};
+
+        this._indexedDatabaseRootTreeElement = null;
+        this._indexedDatabaseHostTreeElementMap = {};
+
+        this._cookieStorageRootTreeElement = null;
+
+        this._applicationCacheRootTreeElement = null;
+        this._applicationCacheURLTreeElementMap = {};
+
+        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.CookieStorageObjectWasAdded, this._cookieStorageObjectWasAdded, this);
+        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DOMStorageObjectWasAdded, this._domStorageObjectWasAdded, this);
+        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DOMStorageObjectWasInspected, this._domStorageObjectWasInspected, this);
+        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DatabaseWasAdded, this._databaseWasAdded, this);
+        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DatabaseWasInspected, this._databaseWasInspected, this);
+        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.IndexedDatabaseWasAdded, this._indexedDatabaseWasAdded, this);
+        WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.Cleared, this._storageCleared, this);
+
+        WebInspector.applicationCacheManager.addEventListener(WebInspector.ApplicationCacheManager.Event.FrameManifestAdded, this._frameManifestAdded, this);
+        WebInspector.applicationCacheManager.addEventListener(WebInspector.ApplicationCacheManager.Event.FrameManifestRemoved, this._frameManifestRemoved, this);
+
+        this.contentTreeOutline.onselect = this._treeElementSelected.bind(this);
+
+        for (var domStorageObject of WebInspector.storageManager.domStorageObjects)
+            this._addDOMStorageObject(domStorageObject);
+
+        for (var cookieStorageObject of WebInspector.storageManager.cookieStorageObjects)
+            this._addCookieStorageObject(cookieStorageObject);
+
+        for (var database of WebInspector.storageManager.databases)
+            this._addDatabase(database);
+
+        for (var indexedDatabase of WebInspector.storageManager.indexedDatabases)
+            this._addIndexedDatabase(indexedDatabase);
+
+        for (var applicationCacheObject of WebInspector.applicationCacheManager.applicationCacheObjects)
+            this._addFrameManifest(applicationCacheObject);
+    }
+
+    // Public
+
+    showDefaultContentView()
+    {
+        // Don't show anything by default. It doesn't make a whole lot of sense here.
+    }
+
+    closed()
+    {
+        WebInspector.storageManager.removeEventListener(null, null, this);
+        WebInspector.applicationCacheManager.removeEventListener(null, null, this);
+    }
+
+    // Private
+
+    _treeElementSelected(treeElement, selectedByUser)
+    {
+        if (treeElement instanceof WebInspector.FolderTreeElement || treeElement instanceof WebInspector.DatabaseHostTreeElement ||
+            treeElement instanceof WebInspector.IndexedDatabaseHostTreeElement || treeElement instanceof WebInspector.IndexedDatabaseTreeElement)
+            return;
+
+        if (treeElement instanceof WebInspector.StorageTreeElement || treeElement instanceof WebInspector.DatabaseTableTreeElement ||
+            treeElement instanceof WebInspector.DatabaseTreeElement || treeElement instanceof WebInspector.ApplicationCacheFrameTreeElement ||
+            treeElement instanceof WebInspector.IndexedDatabaseObjectStoreTreeElement || treeElement instanceof WebInspector.IndexedDatabaseObjectStoreIndexTreeElement) {
+            WebInspector.showRepresentedObject(treeElement.representedObject);
+            return;
+        }
+
+        console.error(&quot;Unknown tree element&quot;, treeElement);
+    }
+
+    _domStorageObjectWasAdded(event)
+    {
+        var domStorage = event.data.domStorage;
+        this._addDOMStorageObject(event.data.domStorage);
+    }
+
+    _addDOMStorageObject(domStorage)
+    {
+        var storageElement = new WebInspector.DOMStorageTreeElement(domStorage);
+
+        if (domStorage.isLocalStorage())
+            this._localStorageRootTreeElement = this._addStorageChild(storageElement, this._localStorageRootTreeElement, WebInspector.UIString(&quot;Local Storage&quot;));
+        else
+            this._sessionStorageRootTreeElement = this._addStorageChild(storageElement, this._sessionStorageRootTreeElement, WebInspector.UIString(&quot;Session Storage&quot;));
+    }
+
+    _domStorageObjectWasInspected(event)
+    {
+        var domStorage = event.data.domStorage;
+        var treeElement = this.treeElementForRepresentedObject(domStorage);
+        treeElement.revealAndSelect(true);
+    }
+
+    _databaseWasAdded(event)
+    {
+        var database = event.data.database;
+        this._addDatabase(event.data.database);
+    }
+
+    _addDatabase(database)
+    {
+        console.assert(database instanceof WebInspector.DatabaseObject);
+
+        if (!this._databaseHostTreeElementMap[database.host]) {
+            this._databaseHostTreeElementMap[database.host] = new WebInspector.DatabaseHostTreeElement(database.host);
+            this._databaseRootTreeElement = this._addStorageChild(this._databaseHostTreeElementMap[database.host], this._databaseRootTreeElement, WebInspector.UIString(&quot;Databases&quot;));
+        }
+
+        var databaseElement = new WebInspector.DatabaseTreeElement(database);
+        this._databaseHostTreeElementMap[database.host].appendChild(databaseElement);
+    }
+
+    _databaseWasInspected(event)
+    {
+        var database = event.data.database;
+        var treeElement = this.treeElementForRepresentedObject(database);
+        treeElement.revealAndSelect(true);
+    }
+
+    _indexedDatabaseWasAdded(event)
+    {
+        this._addIndexedDatabaseWasAdded(event.data.indexedDatabase);
+    }
+
+    _addIndexedDatabase(indexedDatabase)
+    {
+        console.assert(indexedDatabase instanceof WebInspector.IndexedDatabase);
+
+        if (!this._indexedDatabaseHostTreeElementMap[indexedDatabase.host]) {
+            this._indexedDatabaseHostTreeElementMap[indexedDatabase.host] = new WebInspector.IndexedDatabaseHostTreeElement(indexedDatabase.host);
+            this._indexedDatabaseRootTreeElement = this._addStorageChild(this._indexedDatabaseHostTreeElementMap[indexedDatabase.host], this._indexedDatabaseRootTreeElement, WebInspector.UIString(&quot;Indexed Databases&quot;));
+        }
+
+        var indexedDatabaseElement = new WebInspector.IndexedDatabaseTreeElement(indexedDatabase);
+        this._indexedDatabaseHostTreeElementMap[indexedDatabase.host].appendChild(indexedDatabaseElement);
+    }
+
+    _cookieStorageObjectWasAdded(event)
+    {
+        this._addCookieStorageObject(event.data.cookieStorage);
+    }
+
+    _addCookieStorageObject(cookieStorage)
+    {
+        console.assert(cookieStorage instanceof WebInspector.CookieStorageObject);
+
+        var cookieElement = new WebInspector.CookieStorageTreeElement(cookieStorage);
+        this._cookieStorageRootTreeElement = this._addStorageChild(cookieElement, this._cookieStorageRootTreeElement, WebInspector.UIString(&quot;Cookies&quot;));
+    }
+
+    _frameManifestAdded(event)
+    {
+        this._addFrameManifest(event.data.frameManifest);
+    }
+
+    _addFrameManifest(frameManifest)
+    {
+        console.assert(frameManifest instanceof WebInspector.ApplicationCacheFrame);
+
+        var manifest = frameManifest.manifest;
+        var manifestURL = manifest.manifestURL;
+        if (!this._applicationCacheURLTreeElementMap[manifestURL]) {
+            this._applicationCacheURLTreeElementMap[manifestURL] = new WebInspector.ApplicationCacheManifestTreeElement(manifest);
+            this._applicationCacheRootTreeElement = this._addStorageChild(this._applicationCacheURLTreeElementMap[manifestURL], this._applicationCacheRootTreeElement, WebInspector.UIString(&quot;Application Cache&quot;));
+        }
+
+        var frameCacheElement = new WebInspector.ApplicationCacheFrameTreeElement(frameManifest);
+        this._applicationCacheURLTreeElementMap[manifestURL].appendChild(frameCacheElement);
+    }
+
+    _frameManifestRemoved(event)
+    {
+         // FIXME: Implement this.
+    }
+
+    _compareTreeElements(a, b)
+    {
+        console.assert(a.mainTitle);
+        console.assert(b.mainTitle);
+
+        return (a.mainTitle || &quot;&quot;).localeCompare(b.mainTitle || &quot;&quot;);
+    }
+
+    _addStorageChild(childElement, parentElement, folderName)
+    {
+        if (!parentElement) {
+            childElement.flattened = true;
+
+            this.contentTreeOutline.insertChild(childElement, insertionIndexForObjectInListSortedByFunction(childElement, this.contentTreeOutline.children, this._compareTreeElements));
+
+            return childElement;
+        }
+
+        if (parentElement instanceof WebInspector.StorageTreeElement) {
+            console.assert(parentElement.flattened);
+
+            var previousOnlyChild = parentElement;
+            previousOnlyChild.flattened = false;
+            this.contentTreeOutline.removeChild(previousOnlyChild);
+
+            var folderElement = new WebInspector.FolderTreeElement(folderName);
+            this.contentTreeOutline.insertChild(folderElement, insertionIndexForObjectInListSortedByFunction(folderElement, this.contentTreeOutline.children, this._compareTreeElements));
+
+            folderElement.appendChild(previousOnlyChild);
+            folderElement.insertChild(childElement, insertionIndexForObjectInListSortedByFunction(childElement, folderElement.children, this._compareTreeElements));
+
+            return folderElement;
+        }
+
+        console.assert(parentElement instanceof WebInspector.FolderTreeElement);
+        parentElement.insertChild(childElement, insertionIndexForObjectInListSortedByFunction(childElement, parentElement.children, this._compareTreeElements));
+
+        return parentElement;
+    }
+
+    _storageCleared(event)
+    {
+        // Close all DOM and cookie storage content views since the main frame has navigated and all storages are cleared.
+        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.CookieStorageContentView);
+        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.DOMStorageContentView);
+        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.DatabaseTableContentView);
+        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.DatabaseContentView);
+        this.contentBrowser.contentViewContainer.closeAllContentViewsOfPrototype(WebInspector.ApplicationCacheFrameContentView);
+
+        if (this._localStorageRootTreeElement &amp;&amp; this._localStorageRootTreeElement.parent)
+            this._localStorageRootTreeElement.parent.removeChild(this._localStorageRootTreeElement);
+
+        if (this._sessionStorageRootTreeElement &amp;&amp; this._sessionStorageRootTreeElement.parent)
+            this._sessionStorageRootTreeElement.parent.removeChild(this._sessionStorageRootTreeElement);
+
+        if (this._databaseRootTreeElement &amp;&amp; this._databaseRootTreeElement.parent)
+            this._databaseRootTreeElement.parent.removeChild(this._databaseRootTreeElement);
+
+        if (this._indexedDatabaseRootTreeElement &amp;&amp; this._indexedDatabaseRootTreeElement.parent)
+            this._indexedDatabaseRootTreeElement.parent.removeChild(this._indexedDatabaseRootTreeElement);
+
+        if (this._cookieStorageRootTreeElement &amp;&amp; this._cookieStorageRootTreeElement.parent)
+            this._cookieStorageRootTreeElement.parent.removeChild(this._cookieStorageRootTreeElement);
+
+        if (this._applicationCacheRootTreeElement &amp;&amp; this._applicationCacheRootTreeElement.parent)
+            this._applicationCacheRootTreeElement.parent.removeChild(this._applicationCacheRootTreeElement);
+
+        this._localStorageRootTreeElement = null;
+        this._sessionStorageRootTreeElement = null;
+        this._databaseRootTreeElement = null;
+        this._databaseHostTreeElementMap = {};
+        this._indexedDatabaseRootTreeElement = null;
+        this._indexedDatabaseHostTreeElementMap = {};
+        this._cookieStorageRootTreeElement = null;
+        this._applicationCacheRootTreeElement = null;
+        this._applicationCacheURLTreeElementMap = {};
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsStorageTabContentViewjsfromrev183579trunkSourceWebInspectorUIUserInterfaceViewsResourcesTabContentViewjs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js (from rev 183579, trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js) (0 => 183580)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js        2015-04-29 22:00:06 UTC (rev 183580)
</span><span class="lines">@@ -0,0 +1,54 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.StorageTabContentView = function(identifier)
+{
+    var tabBarItem = new WebInspector.TabBarItem(&quot;Images/Storage.svg&quot;, WebInspector.UIString(&quot;Storage&quot;));
+    var detailsSidebarPanels = [WebInspector.applicationCacheDetailsSidebarPanel];
+
+    WebInspector.ContentBrowserTabContentView.call(this, identifier || &quot;storage&quot;, &quot;storage&quot;, tabBarItem, WebInspector.StorageSidebarPanel, detailsSidebarPanels);
+};
+
+WebInspector.StorageTabContentView.prototype = {
+    constructor: WebInspector.StorageTabContentView,
+    __proto__: WebInspector.ContentBrowserTabContentView.prototype,
+
+    // Public
+
+    get type()
+    {
+        return WebInspector.StorageTabContentView.Type;
+    },
+
+    canShowRepresentedObject: function(representedObject)
+    {
+        return representedObject instanceof WebInspector.DOMStorageObject || representedObject instanceof WebInspector.CookieStorageObject ||
+            representedObject instanceof WebInspector.DatabaseTableObject || representedObject instanceof WebInspector.DatabaseObject ||
+            representedObject instanceof WebInspector.ApplicationCacheFrame || representedObject instanceof WebInspector.IndexedDatabaseObjectStore ||
+            representedObject instanceof WebInspector.IndexedDatabaseObjectStoreIndex;
+    }
+};
+
+WebInspector.StorageTabContentView.Type = &quot;storage&quot;;
</ins></span></pre>
</div>
</div>

</body>
</html>