<!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>[164541] trunk</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/164541">164541</a></dd>
<dt>Author</dt> <dd>timothy@apple.com</dd>
<dt>Date</dt> <dd>2014-02-22 08:06:41 -0800 (Sat, 22 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add inspection user interface for IndexedDB.

https://bugs.webkit.org/show_bug.cgi?id=129162

Reviewed by Joseph Pecoraro.

Source/WebInspectorUI:

* Localizations/en.lproj/localizedStrings.js: Updated.
* UserInterface/ContentView.js:
(WebInspector.ContentView):
(WebInspector.ContentView.isViewable):
* UserInterface/IndexedDatabase.js: Added.
(WebInspector.IndexedDatabase):
(WebInspector.IndexedDatabase.prototype.get name):
(WebInspector.IndexedDatabase.prototype.get securityOrigin):
(WebInspector.IndexedDatabase.prototype.get host):
(WebInspector.IndexedDatabase.prototype.get version):
(WebInspector.IndexedDatabase.prototype.get objectStores):
(WebInspector.IndexedDatabase.prototype.saveIdentityToCookie):
* UserInterface/IndexedDatabaseEntryDataGridNode.js: Added.
(WebInspector.IndexedDatabaseEntryDataGridNode):
(WebInspector.IndexedDatabaseEntryDataGridNode.prototype.get entry):
(WebInspector.IndexedDatabaseEntryDataGridNode.prototype.createCellContent):
* UserInterface/IndexedDatabaseHostTreeElement.js: Added.
(WebInspector.IndexedDatabaseHostTreeElement):
(WebInspector.IndexedDatabaseHostTreeElement.prototype.get name):
(WebInspector.IndexedDatabaseHostTreeElement.prototype.get categoryName):
* UserInterface/IndexedDatabaseObjectStore.js: Added.
(WebInspector.IndexedDatabaseObjectStore):
(WebInspector.IndexedDatabaseObjectStore.prototype.get name):
(WebInspector.IndexedDatabaseObjectStore.prototype.get keyPath):
(WebInspector.IndexedDatabaseObjectStore.prototype.get autoIncrement):
(WebInspector.IndexedDatabaseObjectStore.prototype.get parentDatabase):
(WebInspector.IndexedDatabaseObjectStore.prototype.get indexes):
(WebInspector.IndexedDatabaseObjectStore.prototype.saveIdentityToCookie):
(WebInspector.IndexedDatabaseObjectStore.prototype.establishRelationship):
* UserInterface/IndexedDatabaseObjectStoreContentView.css: Added.
(.content-view.indexed-database-object-store &gt; .data-grid):
(.content-view.indexed-database-object-store &gt; .data-grid td .section .header):
(.content-view.indexed-database-object-store &gt; .data-grid td .section .header::before):
(.content-view.indexed-database-object-store &gt; .data-grid td .section .header .title):
(.content-view.indexed-database-object-store &gt; .data-grid table.data):
(.content-view.indexed-database-object-store &gt; .data-grid table.data tr:nth-child(even)):
(.content-view.indexed-database-object-store &gt; .data-grid table.data tr:nth-child(odd)):
(.content-view.indexed-database-object-store &gt; .data-grid table.data tr.filler):
(.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .section .header::before):
(.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .section.expanded .header::before):
(.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .properties-tree li.parent::before):
(.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .properties-tree li.parent.expanded::before):
(.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .properties-tree li *):
* UserInterface/IndexedDatabaseObjectStoreContentView.js: Added.
(WebInspector.IndexedDatabaseObjectStoreContentView.displayKeyPath):
(WebInspector.IndexedDatabaseObjectStoreContentView):
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype.closed):
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype.saveToCookie):
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype.updateLayout):
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype._reset):
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype._dataGridScrolled):
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype._fetchMoreData.processEntries):
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype._fetchMoreData):
* UserInterface/IndexedDatabaseObjectStoreIndex.js: Added.
(WebInspector.IndexedDatabaseObjectStoreIndex):
(WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get name):
(WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get keyPath):
(WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get unique):
(WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get multiEntry):
(WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get parentObjectStore):
(WebInspector.IndexedDatabaseObjectStoreIndex.prototype.saveIdentityToCookie):
(WebInspector.IndexedDatabaseObjectStoreIndex.prototype.establishRelationship):
* UserInterface/IndexedDatabaseObjectStoreIndexTreeElement.js: Added.
(WebInspector.IndexedDatabaseObjectStoreIndexTreeElement):
(WebInspector.IndexedDatabaseObjectStoreIndexTreeElement.prototype.get objectStoreIndex):
* UserInterface/IndexedDatabaseObjectStoreTreeElement.js: Added.
(WebInspector.IndexedDatabaseObjectStoreTreeElement):
(WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.get objectStore):
(WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.oncollapse):
(WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.onpopulate):
* UserInterface/IndexedDatabaseTreeElement.js: Added.
(WebInspector.IndexedDatabaseTreeElement):
(WebInspector.IndexedDatabaseTreeElement.prototype.get indexedDatabase):
(WebInspector.IndexedDatabaseTreeElement.prototype.oncollapse):
(WebInspector.IndexedDatabaseTreeElement.prototype.onpopulate):
* UserInterface/Main.html:
* UserInterface/Main.js:
(WebInspector.sidebarPanelForRepresentedObject):
* UserInterface/ResourceSidebarPanel.js:
(WebInspector.ResourceSidebarPanel):
(WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):
(WebInspector.ResourceSidebarPanel.prototype._indexedDatabaseWasAdded):
(WebInspector.ResourceSidebarPanel.prototype._storageCleared):
* UserInterface/StorageManager.js:
(WebInspector.StorageManager):
(WebInspector.StorageManager.prototype.initialize):
(WebInspector.StorageManager.prototype.processData):
(WebInspector.StorageManager.prototype.requestIndexedDatabaseData):
(WebInspector.StorageManager.prototype._mainResourceDidChange):
(WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processDatabaseNames):
(WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processDatabase):
(WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded):
(WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processObjectStore):
(WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processObjectStoreIndex):
(WebInspector.StorageManager.prototype._securityOriginDidChange):
* UserInterface/URLUtilities.js:
(parseSecurityOrigin):

LayoutTests:

* http/tests/inspector-protocol/resources/InspectorTest.js:
(InspectorTest.initializeInspectorModels): Add IndexedDatabase models and StorageManager.
* inspector-protocol/indexeddb/basics-expected.txt: Added.
* inspector-protocol/indexeddb/basics.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestshttptestsinspectorprotocolresourcesInspectorTestjs">trunk/LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1TestExpectations">trunk/LayoutTests/platform/mac-wk1/TestExpectations</a></li>
<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="#trunkSourceWebInspectorUIUserInterfaceContentViewjs">trunk/Source/WebInspectorUI/UserInterface/ContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceInspectorWebBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/InspectorWebBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceLegacy60InspectorWebBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Legacy/6.0/InspectorWebBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceLegacy70InspectorWebBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Legacy/7.0/InspectorWebBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceMainhtml">trunk/Source/WebInspectorUI/UserInterface/Main.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceMainjs">trunk/Source/WebInspectorUI/UserInterface/Main.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceResourceSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/ResourceSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceStorageManagerjs">trunk/Source/WebInspectorUI/UserInterface/StorageManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceURLUtilitiesjs">trunk/Source/WebInspectorUI/UserInterface/URLUtilities.js</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS60json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-6.0.json</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS70json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/LayoutTests/inspector-protocol/indexeddb/</li>
<li><a href="#trunkLayoutTestsinspectorprotocolindexeddbbasicsexpectedtxt">trunk/LayoutTests/inspector-protocol/indexeddb/basics-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectorprotocolindexeddbbasicshtml">trunk/LayoutTests/inspector-protocol/indexeddb/basics.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabasejs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabase.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseEntryDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseEntryDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseHostTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseHostTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStorejs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStore.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreContentViewcss">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.css</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreContentViewjs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreIndexjs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndex.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreIndexTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndexTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseTreeElement.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/LayoutTests/ChangeLog        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-02-21  Timothy Hatcher  &lt;timothy@apple.com&gt;
+
+        Add inspection user interface for IndexedDB.
+
+        https://bugs.webkit.org/show_bug.cgi?id=129162
+
+        Reviewed by Joseph Pecoraro.
+
+        * http/tests/inspector-protocol/resources/InspectorTest.js:
+        (InspectorTest.initializeInspectorModels): Add IndexedDatabase models and StorageManager.
+        * inspector-protocol/indexeddb/basics-expected.txt: Added.
+        * inspector-protocol/indexeddb/basics.html: Added.
+
</ins><span class="cx"> 2014-02-21  Dirk Schulze  &lt;krit@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Replace svg/clip-path pixel tests by reference tests
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsinspectorprotocolresourcesInspectorTestjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -227,7 +227,12 @@
</span><span class="cx">         &quot;ProbeManager&quot;,
</span><span class="cx">         &quot;ProbeSetDataFrame&quot;,
</span><span class="cx">         &quot;ProbeSetDataTable&quot;,
</span><del>-        &quot;RemoteObject&quot;
</del><ins>+        &quot;RemoteObject&quot;,
+        &quot;DOMStorageObject&quot;,
+        &quot;IndexedDatabase&quot;,
+        &quot;IndexedDatabaseObjectStore&quot;,
+        &quot;IndexedDatabaseObjectStoreIndex&quot;,
+        &quot;StorageManager&quot;
</ins><span class="cx">     ];
</span><span class="cx"> 
</span><span class="cx">     // This corresponds to loading the scripts in Main.hml.
</span><span class="lines">@@ -252,6 +257,7 @@
</span><span class="cx">         InspectorBackend.registerRuntimeDispatcher(new WebInspector.RuntimeObserver);
</span><span class="cx"> 
</span><span class="cx">     WebInspector.frameResourceManager = new WebInspector.FrameResourceManager;
</span><ins>+    WebInspector.storageManager = new WebInspector.StorageManager;
</ins><span class="cx">     WebInspector.domTreeManager = new WebInspector.DOMTreeManager;
</span><span class="cx">     WebInspector.cssStyleManager = new WebInspector.CSSStyleManager;
</span><span class="cx">     WebInspector.debuggerManager = new WebInspector.DebuggerManager;
</span></span></pre></div>
<a id="trunkLayoutTestsinspectorprotocolindexeddbbasicsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector-protocol/indexeddb/basics-expected.txt (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector-protocol/indexeddb/basics-expected.txt                                (rev 0)
+++ trunk/LayoutTests/inspector-protocol/indexeddb/basics-expected.txt        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+IndexedDatabaseWasAdded: test-inspector-database
+ - Object Store: People (key path: null, auto increment: false)
+  - Index: name (key path: name, unique: true, multi entry: false)
+  - Index: weight (key path: weight, unique: false, multi entry: false)
+  - Index: height (key path: height, unique: false, multi entry: false)
+
+Index Data (name):
+0: 237-23-7733, Ann, Object
+1: 237-23-7732, Bob, Object
+2: 237-23-7739, Jef, Object
+3: 237-23-7736, Joe, Object
+4: 237-23-7738, Leo, Object
+5: 237-23-7737, Pat, Object
+6: 237-23-7734, Ron, Object
+7: 237-23-7740, Sam, Object
+8: 237-23-7735, Sue, Object
+
</ins></span></pre></div>
<a id="trunkLayoutTestsinspectorprotocolindexeddbbasicshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector-protocol/indexeddb/basics.html (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector-protocol/indexeddb/basics.html                                (rev 0)
+++ trunk/LayoutTests/inspector-protocol/indexeddb/basics.html        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,100 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../http/tests/inspector-protocol/resources/protocol-test.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script&gt;
+if (!window.testRunner)
+    throw &quot;This test requires DumpRenderTree&quot;;
+
+testRunner.dumpAsText();
+testRunner.waitUntilDone();
+
+const databaseName = &quot;test-inspector-database&quot;;
+
+indexedDB.deleteDatabase(databaseName).onsuccess = function() {
+    var openRequest = indexedDB.open(databaseName);
+    openRequest.onupgradeneeded = prepareDatabase;
+    openRequest.onsuccess = inspectDatabase;
+};
+
+function prepareDatabase(event)
+{
+    const db = event.target.result;
+    const objectStore = db.createObjectStore(&quot;People&quot;);
+
+    const indexData = [
+        {name: &quot;name&quot;, keyPath: &quot;name&quot;, options: {unique: true}},
+        {name: &quot;height&quot;, keyPath: &quot;height&quot;, options: {}},
+        {name: &quot;weight&quot;, keyPath: &quot;weight&quot;, options: {}}
+    ];
+
+    for (var data of indexData)
+        objectStore.createIndex(data.name, data.keyPath, data.options);
+
+    const objectStoreData = [
+        {key: &quot;237-23-7732&quot;, value: {name: &quot;Bob&quot;, height: 60, weight: 120}},
+        {key: &quot;237-23-7733&quot;, value: {name: &quot;Ann&quot;, height: 52, weight: 110}},
+        {key: &quot;237-23-7734&quot;, value: {name: &quot;Ron&quot;, height: 73, weight: 180}},
+        {key: &quot;237-23-7735&quot;, value: {name: &quot;Sue&quot;, height: 58, weight: 130}},
+        {key: &quot;237-23-7736&quot;, value: {name: &quot;Joe&quot;, height: 65, weight: 150}},
+        {key: &quot;237-23-7737&quot;, value: {name: &quot;Pat&quot;, height: 65, weight: 100}},
+        {key: &quot;237-23-7738&quot;, value: {name: &quot;Leo&quot;, height: 65, weight: 180}},
+        {key: &quot;237-23-7739&quot;, value: {name: &quot;Jef&quot;, height: 65, weight: 120}},
+        {key: &quot;237-23-7740&quot;, value: {name: &quot;Sam&quot;, height: 73, weight: 110}}
+    ];
+
+    for (var data of objectStoreData)
+        objectStore.put(data.value, data.key);
+}
+
+function inspectDatabase()
+{
+    runTest();
+
+    // Balance the extra testRunner.waitUntilDone().
+    // FIXME: No good way to do this without an arbitrary timeout.
+    setTimeout(function() { testRunner.notifyDone(); }, 500);
+}
+
+function test()
+{
+    InspectorTest.initializeInspectorModels();
+
+    function databaseAdded(event)
+    {
+        var db = event.data.indexedDatabase;
+
+        InspectorTest.log(&quot;IndexedDatabaseWasAdded: &quot; + db.name);
+
+        for (var objectStore of db.objectStores) {
+            InspectorTest.log(&quot; - Object Store: &quot; + objectStore.name + &quot; (key path: &quot; + objectStore.keyPath + &quot;, auto increment: &quot; + objectStore.autoIncrement + &quot;)&quot;);
+
+            for (var index of objectStore.indexes) {
+                InspectorTest.log(&quot;  - Index: &quot; + index.name + &quot; (key path: &quot; + index.keyPath + &quot;, unique: &quot; + index.unique + &quot;, multi entry: &quot; + index.multiEntry + &quot;)&quot;);
+
+                // FIXME: Only one requestIndexedDatabaseData is allowed at a time due to limitations of the backend. So we only print the name data.
+
+                if (index.keyPath === &quot;name&quot;)
+                    WebInspector.storageManager.requestIndexedDatabaseData(objectStore, index, 0, 15, processData);
+            }
+        }
+    }
+
+    function processData(entries, moreAvailable)
+    {
+        InspectorTest.log(&quot;&quot;);
+        InspectorTest.log(&quot;Index Data (name):&quot;);
+
+        for (var i = 0; i &lt; entries.length; ++i) {
+            var entry = entries[i];
+            InspectorTest.log(i + &quot;: &quot; + entry.primaryKey.description + &quot;, &quot; + entry.key.description + &quot;, &quot; + entry.value.description);
+        }
+    }
+
+    WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.IndexedDatabaseWasAdded, databaseAdded);
+}
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/TestExpectations        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> ### START OF (2) Failures without bug reports
</span><span class="cx"> 
</span><span class="cx"> # IndexedDB is not yet enabled in Mac WK1
</span><ins>+inspector-protocol/indexeddb
</ins><span class="cx"> storage/indexeddb
</span><span class="cx"> http/tests/security/cross-origin-indexeddb-allowed.html
</span><span class="cx"> http/tests/security/cross-origin-indexeddb.html
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/ChangeLog        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -1,3 +1,109 @@
</span><ins>+2014-02-21  Timothy Hatcher  &lt;timothy@apple.com&gt;
+
+        Add inspection user interface for IndexedDB.
+
+        https://bugs.webkit.org/show_bug.cgi?id=129162
+
+        Reviewed by Joseph Pecoraro.
+
+        * Localizations/en.lproj/localizedStrings.js: Updated.
+        * UserInterface/ContentView.js:
+        (WebInspector.ContentView):
+        (WebInspector.ContentView.isViewable):
+        * UserInterface/IndexedDatabase.js: Added.
+        (WebInspector.IndexedDatabase):
+        (WebInspector.IndexedDatabase.prototype.get name):
+        (WebInspector.IndexedDatabase.prototype.get securityOrigin):
+        (WebInspector.IndexedDatabase.prototype.get host):
+        (WebInspector.IndexedDatabase.prototype.get version):
+        (WebInspector.IndexedDatabase.prototype.get objectStores):
+        (WebInspector.IndexedDatabase.prototype.saveIdentityToCookie):
+        * UserInterface/IndexedDatabaseEntryDataGridNode.js: Added.
+        (WebInspector.IndexedDatabaseEntryDataGridNode):
+        (WebInspector.IndexedDatabaseEntryDataGridNode.prototype.get entry):
+        (WebInspector.IndexedDatabaseEntryDataGridNode.prototype.createCellContent):
+        * UserInterface/IndexedDatabaseHostTreeElement.js: Added.
+        (WebInspector.IndexedDatabaseHostTreeElement):
+        (WebInspector.IndexedDatabaseHostTreeElement.prototype.get name):
+        (WebInspector.IndexedDatabaseHostTreeElement.prototype.get categoryName):
+        * UserInterface/IndexedDatabaseObjectStore.js: Added.
+        (WebInspector.IndexedDatabaseObjectStore):
+        (WebInspector.IndexedDatabaseObjectStore.prototype.get name):
+        (WebInspector.IndexedDatabaseObjectStore.prototype.get keyPath):
+        (WebInspector.IndexedDatabaseObjectStore.prototype.get autoIncrement):
+        (WebInspector.IndexedDatabaseObjectStore.prototype.get parentDatabase):
+        (WebInspector.IndexedDatabaseObjectStore.prototype.get indexes):
+        (WebInspector.IndexedDatabaseObjectStore.prototype.saveIdentityToCookie):
+        (WebInspector.IndexedDatabaseObjectStore.prototype.establishRelationship):
+        * UserInterface/IndexedDatabaseObjectStoreContentView.css: Added.
+        (.content-view.indexed-database-object-store &gt; .data-grid):
+        (.content-view.indexed-database-object-store &gt; .data-grid td .section .header):
+        (.content-view.indexed-database-object-store &gt; .data-grid td .section .header::before):
+        (.content-view.indexed-database-object-store &gt; .data-grid td .section .header .title):
+        (.content-view.indexed-database-object-store &gt; .data-grid table.data):
+        (.content-view.indexed-database-object-store &gt; .data-grid table.data tr:nth-child(even)):
+        (.content-view.indexed-database-object-store &gt; .data-grid table.data tr:nth-child(odd)):
+        (.content-view.indexed-database-object-store &gt; .data-grid table.data tr.filler):
+        (.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .section .header::before):
+        (.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .section.expanded .header::before):
+        (.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .properties-tree li.parent::before):
+        (.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .properties-tree li.parent.expanded::before):
+        (.content-view.indexed-database-object-store &gt; .data-grid :focus tr.selected td .properties-tree li *):
+        * UserInterface/IndexedDatabaseObjectStoreContentView.js: Added.
+        (WebInspector.IndexedDatabaseObjectStoreContentView.displayKeyPath):
+        (WebInspector.IndexedDatabaseObjectStoreContentView):
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype.closed):
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype.saveToCookie):
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype.updateLayout):
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._reset):
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._dataGridScrolled):
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._fetchMoreData.processEntries):
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._fetchMoreData):
+        * UserInterface/IndexedDatabaseObjectStoreIndex.js: Added.
+        (WebInspector.IndexedDatabaseObjectStoreIndex):
+        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get name):
+        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get keyPath):
+        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get unique):
+        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get multiEntry):
+        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get parentObjectStore):
+        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.saveIdentityToCookie):
+        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.establishRelationship):
+        * UserInterface/IndexedDatabaseObjectStoreIndexTreeElement.js: Added.
+        (WebInspector.IndexedDatabaseObjectStoreIndexTreeElement):
+        (WebInspector.IndexedDatabaseObjectStoreIndexTreeElement.prototype.get objectStoreIndex):
+        * UserInterface/IndexedDatabaseObjectStoreTreeElement.js: Added.
+        (WebInspector.IndexedDatabaseObjectStoreTreeElement):
+        (WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.get objectStore):
+        (WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.oncollapse):
+        (WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.onpopulate):
+        * UserInterface/IndexedDatabaseTreeElement.js: Added.
+        (WebInspector.IndexedDatabaseTreeElement):
+        (WebInspector.IndexedDatabaseTreeElement.prototype.get indexedDatabase):
+        (WebInspector.IndexedDatabaseTreeElement.prototype.oncollapse):
+        (WebInspector.IndexedDatabaseTreeElement.prototype.onpopulate):
+        * UserInterface/Main.html:
+        * UserInterface/Main.js:
+        (WebInspector.sidebarPanelForRepresentedObject):
+        * UserInterface/ResourceSidebarPanel.js:
+        (WebInspector.ResourceSidebarPanel):
+        (WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):
+        (WebInspector.ResourceSidebarPanel.prototype._indexedDatabaseWasAdded):
+        (WebInspector.ResourceSidebarPanel.prototype._storageCleared):
+        * UserInterface/StorageManager.js:
+        (WebInspector.StorageManager):
+        (WebInspector.StorageManager.prototype.initialize):
+        (WebInspector.StorageManager.prototype.processData):
+        (WebInspector.StorageManager.prototype.requestIndexedDatabaseData):
+        (WebInspector.StorageManager.prototype._mainResourceDidChange):
+        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processDatabaseNames):
+        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processDatabase):
+        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded):
+        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processObjectStore):
+        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processObjectStoreIndex):
+        (WebInspector.StorageManager.prototype._securityOriginDidChange):
+        * UserInterface/URLUtilities.js:
+        (parseSecurityOrigin):
+
</ins><span class="cx"> 2014-02-22  Antoine Quint  &lt;graouts@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: allow drag-to-adjust on angle input of gradients editor
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> localizedStrings[&quot;(anonymous function)&quot;] = &quot;(anonymous function)&quot;;
</span><span class="cx"> localizedStrings[&quot;(program)&quot;] = &quot;(program)&quot;;
</span><span class="cx"> localizedStrings[&quot;(uninitialized)&quot;] = &quot;(uninitialized)&quot;;
</span><ins>+localizedStrings[&quot;, &quot;] = &quot;, &quot;;
</ins><span class="cx"> localizedStrings[&quot;1 match&quot;] = &quot;1 match&quot;;
</span><span class="cx"> localizedStrings[&quot;999+&quot;] = &quot;999+&quot;;
</span><span class="cx"> localizedStrings[&quot;Accessibility&quot;] = &quot;Accessibility&quot;;
</span><span class="lines">@@ -213,6 +214,8 @@
</span><span class="cx"> localizedStrings[&quot;Image&quot;] = &quot;Image&quot;;
</span><span class="cx"> localizedStrings[&quot;Image Size&quot;] = &quot;Image Size&quot;;
</span><span class="cx"> localizedStrings[&quot;Images&quot;] = &quot;Images&quot;;
</span><ins>+localizedStrings[&quot;Index Key \u2014 %s&quot;] = &quot;Index Key \u2014 %s&quot;;
+localizedStrings[&quot;Indexed Databases&quot;] = &quot;Indexed Databases&quot;;
</ins><span class="cx"> localizedStrings[&quot;Inherited From: &quot;] = &quot;Inherited From: &quot;;
</span><span class="cx"> localizedStrings[&quot;Initiator&quot;] = &quot;Initiator&quot;;
</span><span class="cx"> localizedStrings[&quot;Input: &quot;] = &quot;Input: &quot;;
</span><span class="lines">@@ -294,6 +297,8 @@
</span><span class="cx"> localizedStrings[&quot;Play Sound&quot;] = &quot;Play Sound&quot;;
</span><span class="cx"> localizedStrings[&quot;Port&quot;] = &quot;Port&quot;;
</span><span class="cx"> localizedStrings[&quot;Pretty print&quot;] = &quot;Pretty print&quot;;
</span><ins>+localizedStrings[&quot;Primary Key&quot;] = &quot;Primary Key&quot;;
+localizedStrings[&quot;Primary Key \u2014 %s&quot;] = &quot;Primary Key \u2014 %s&quot;;
</ins><span class="cx"> localizedStrings[&quot;Probe Expression&quot;] = &quot;Probe Expression&quot;;
</span><span class="cx"> localizedStrings[&quot;Probes&quot;] = &quot;Probes&quot;;
</span><span class="cx"> localizedStrings[&quot;Processing Instruction&quot;] = &quot;Processing Instruction&quot;;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/ContentView.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/ContentView.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/ContentView.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -54,6 +54,12 @@
</span><span class="cx">         if (representedObject instanceof WebInspector.DatabaseObject)
</span><span class="cx">             return new WebInspector.DatabaseContentView(representedObject);
</span><span class="cx"> 
</span><ins>+        if (representedObject instanceof WebInspector.IndexedDatabaseObjectStore)
+            return new WebInspector.IndexedDatabaseObjectStoreContentView(representedObject);
+
+        if (representedObject instanceof WebInspector.IndexedDatabaseObjectStoreIndex)
+            return new WebInspector.IndexedDatabaseObjectStoreContentView(representedObject);
+
</ins><span class="cx">         if (representedObject instanceof WebInspector.ApplicationCacheFrame)
</span><span class="cx">             return new WebInspector.ApplicationCacheFrameContentView(representedObject);
</span><span class="cx"> 
</span><span class="lines">@@ -111,6 +117,10 @@
</span><span class="cx">         return true;
</span><span class="cx">     if (representedObject instanceof WebInspector.DatabaseObject)
</span><span class="cx">         return true;
</span><ins>+    if (representedObject instanceof WebInspector.IndexedDatabaseObjectStore)
+        return true;
+    if (representedObject instanceof WebInspector.IndexedDatabaseObjectStoreIndex)
+        return true;
</ins><span class="cx">     if (representedObject instanceof WebInspector.ApplicationCacheFrame)
</span><span class="cx">         return true;
</span><span class="cx">     if (representedObject instanceof WebInspector.DOMTree)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabasejs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabase.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabase.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabase.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabase = function(name, securityOrigin, version, objectStores)
+{
+    WebInspector.Object.call(this);
+
+    this._name = name;
+    this._securityOrigin = securityOrigin;
+    this._host = parseSecurityOrigin(securityOrigin).host;
+    this._version = version;
+    this._objectStores = objectStores || [];
+
+    for (var objectStore of this._objectStores)
+        objectStore.establishRelationship(this);
+};
+
+WebInspector.IndexedDatabase.TypeIdentifier = &quot;indexed-database&quot;;
+WebInspector.IndexedDatabase.NameCookieKey = &quot;indexed-database-name&quot;;
+WebInspector.IndexedDatabase.HostCookieKey = &quot;indexed-database-host&quot;;
+
+WebInspector.IndexedDatabase.prototype = {
+    constructor: WebInspector.IndexedDatabase,
+    __proto__: WebInspector.Object.prototype,
+
+    // Public
+
+    get name()
+    {
+        return this._name;
+    },
+
+    get securityOrigin()
+    {
+        return this._securityOrigin;
+    },
+
+    get host()
+    {
+        return this._host;
+    },
+
+    get version()
+    {
+        return this._version;
+    },
+
+    get objectStores()
+    {
+        return this._objectStores;
+    },
+
+    saveIdentityToCookie: function(cookie)
+    {
+        cookie[WebInspector.IndexedDatabase.NameCookieKey] = this._name;
+        cookie[WebInspector.IndexedDatabase.HostCookieKey] = this._host;
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseEntryDataGridNodejs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseEntryDataGridNode.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseEntryDataGridNode.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseEntryDataGridNode.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseEntryDataGridNode = function(entry)
+{
+    WebInspector.DataGridNode.call(this, entry);
+
+    this._entry = entry;
+};
+
+WebInspector.IndexedDatabaseEntryDataGridNode.prototype = {
+    constructor: WebInspector.IndexedDatabaseEntryDataGridNode,
+    __proto__: WebInspector.DataGridNode.prototype,
+
+    // Public
+
+    get entry()
+    {
+        return this._entry;
+    },
+
+    createCellContent: function(columnIdentifier, cell)
+    {
+        var value = this._entry[columnIdentifier];
+
+        if (value instanceof WebInspector.RemoteObject) {
+            switch (value.type) {
+            case &quot;object&quot;:
+            case &quot;array&quot;:
+                var propertiesSection = new WebInspector.ObjectPropertiesSection(value, value.description);
+                propertiesSection.editable = false;
+                return propertiesSection.element;
+
+            case &quot;string&quot;:
+                return &quot;\&quot;&quot; + value.description + &quot;\&quot;&quot;;
+
+            default:
+                return value.description;
+            }
+        }
+
+        return WebInspector.DataGridNode.prototype.createCellContent.call(this, columnIdentifier, cell);
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseHostTreeElementjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseHostTreeElement.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseHostTreeElement.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseHostTreeElement.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseHostTreeElement = function(host)
+{
+    WebInspector.StorageTreeElement.call(this, WebInspector.FolderTreeElement.FolderIconStyleClassName, WebInspector.displayNameForHost(host), null);
+
+    this._host = host;
+
+    this.hasChildren = true;
+};
+
+WebInspector.IndexedDatabaseHostTreeElement.prototype = {
+    constructor: WebInspector.IndexedDatabaseHostTreeElement,
+    __proto__: WebInspector.StorageTreeElement.prototype,
+
+    // Public
+
+    get name()
+    {
+        return WebInspector.displayNameForHost(this._host);
+    },
+
+    get categoryName()
+    {
+        return WebInspector.UIString(&quot;Indexed Databases&quot;);
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStorejs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStore.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStore.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStore.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseObjectStore = function(name, keyPath, autoIncrement, indexes)
+{
+    WebInspector.Object.call(this);
+
+    this._name = name;
+    this._keyPath = keyPath;
+    this._autoIncrement = autoIncrement || false;
+    this._indexes = indexes || [];
+    this._parentDatabase = null;
+
+    for (var index of this._indexes)
+        index.establishRelationship(this);
+};
+
+WebInspector.IndexedDatabaseObjectStore.TypeIdentifier = &quot;indexed-database-object-store&quot;;
+WebInspector.IndexedDatabaseObjectStore.NameCookieKey = &quot;indexed-database-object-store-name&quot;;
+WebInspector.IndexedDatabaseObjectStore.KeyPathCookieKey = &quot;indexed-database-object-store-key-path&quot;;
+
+WebInspector.IndexedDatabaseObjectStore.prototype = {
+    constructor: WebInspector.IndexedDatabaseObjectStore,
+    __proto__: WebInspector.Object.prototype,
+
+    // Public
+
+    get name()
+    {
+        return this._name;
+    },
+
+    get keyPath()
+    {
+        return this._keyPath;
+    },
+
+    get autoIncrement()
+    {
+        return this._autoIncrement;
+    },
+
+    get parentDatabase()
+    {
+        return this._parentDatabase;
+    },
+
+    get indexes()
+    {
+        return this._indexes;
+    },
+
+    saveIdentityToCookie: function(cookie)
+    {
+        cookie[WebInspector.IndexedDatabaseObjectStore.NameCookieKey] = this._name;
+        cookie[WebInspector.IndexedDatabaseObjectStore.KeyPathCookieKey] = this._keyPath;
+    },
+
+    // Protected
+
+    establishRelationship: function(parentDatabase)
+    {
+        this._parentDatabase = parentDatabase || null;
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreContentViewcss"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.css (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.css                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.css        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,84 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+
+.content-view.indexed-database-object-store &gt; .data-grid {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    border: none;
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid td .section .header {
+    padding: 0 0 0 18px;
+    min-height: initial;
+    color: inherit;
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid td .section .header::before {
+    top: 2px;
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid td .section .header .title {
+    line-height: initial;
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid table.data {
+    background-image: none;
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid table.data tr:nth-child(even) {
+    background-color: white;
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid table.data tr:nth-child(odd) {
+    background-color: rgb(243, 246, 250);
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid table.data tr.filler {
+ /* FIXME: This should show an alternating stripe, but I couldn't make it work. */
+    background-color: white;
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid:focus tr.selected td .section .header::before {
+    background-image: -webkit-canvas(disclosure-triangle-tiny-closed-selected);
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid:focus tr.selected td .section.expanded .header::before {
+    background-image: -webkit-canvas(disclosure-triangle-tiny-open-selected);
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid:focus tr.selected td .properties-tree li.parent::before {
+    background-image: -webkit-canvas(disclosure-triangle-tiny-closed-selected);
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid:focus tr.selected td .properties-tree li.parent.expanded::before {
+    background-image: -webkit-canvas(disclosure-triangle-tiny-open-selected);
+}
+
+.content-view.indexed-database-object-store &gt; .data-grid:focus tr.selected td .properties-tree li * {
+    color: inherit;
+}
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreContentViewjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreContentView.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,152 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseObjectStoreContentView = function(objectStoreOrIndex)
+{
+    WebInspector.ContentView.call(this, objectStoreOrIndex);
+
+    this.element.classList.add(WebInspector.IndexedDatabaseObjectStoreContentView.StyleClassName);
+
+    if (objectStoreOrIndex instanceof WebInspector.IndexedDatabaseObjectStore) {
+        this._objectStore = objectStoreOrIndex;
+        this._objectStoreIndex = null;
+    } else if (objectStoreOrIndex instanceof WebInspector.IndexedDatabaseObjectStoreIndex) {
+        this._objectStore = objectStoreOrIndex.parentObjectStore;
+        this._objectStoreIndex = objectStoreOrIndex;
+    }
+
+    function displayKeyPath(keyPath)
+    {
+        if (!keyPath)
+            return &quot;&quot;;
+        if (keyPath instanceof Array)
+            return keyPath.join(WebInspector.UIString(&quot;, &quot;));
+        console.assert(keyPath instanceof String || typeof keyPath === &quot;string&quot;);
+        return keyPath;
+    }
+
+    var displayPrimaryKeyPath = displayKeyPath(this._objectStore.keyPath);
+
+    var columnInfo = {
+        primaryKey: {title: displayPrimaryKeyPath ? WebInspector.UIString(&quot;Primary Key \u2014 %s&quot;).format(displayPrimaryKeyPath) : WebInspector.UIString(&quot;Primary Key&quot;)},
+        key: {},
+        value: {title: WebInspector.UIString(&quot;Value&quot;)}
+    };
+
+    if (this._objectStoreIndex) {
+        // When there is an index, show the key path in the Key column.
+        var displayIndexKeyPath = displayKeyPath(this._objectStoreIndex.keyPath);
+        columnInfo.key.title = WebInspector.UIString(&quot;Index Key \u2014 %s&quot;).format(displayIndexKeyPath);
+    } else {
+        // Only need to show Key for indexes -- it is the same as Primary Key
+        // when there is no index being used.
+        delete columnInfo.key;
+    }
+
+    this._dataGrid = new WebInspector.DataGrid(columnInfo);
+    this.element.appendChild(this._dataGrid.element);
+
+    this._dataGrid.scrollContainer.addEventListener(&quot;scroll&quot;, this._dataGridScrolled.bind(this));
+
+    this._entries = [];
+
+    this._fetchMoreData();
+};
+
+WebInspector.IndexedDatabaseObjectStoreContentView.StyleClassName = &quot;indexed-database-object-store&quot;;
+
+WebInspector.IndexedDatabaseObjectStoreContentView.prototype = {
+    constructor: WebInspector.IndexedDatabaseObjectStoreContentView,
+    __proto__: WebInspector.ContentView.prototype,
+
+    // Public
+
+    closed: function()
+    {
+        this._reset();
+    },
+
+    saveToCookie: function(cookie)
+    {
+        cookie.type = WebInspector.ContentViewCookieType.IndexedDatabaseObjectStore;
+        cookie.securityOrigin = this._objectStore.parentDatabase.securityOrigin;
+        cookie.databaseName = this._objectStore.parentDatabase.name;
+        cookie.objectStoreName = this._objectStore.name;
+        cookie.objectStoreIndexName = this._objectStoreIndex &amp;&amp; this._objectStoreIndex.name;
+    },
+
+    updateLayout: function()
+    {
+        this._dataGrid.updateLayout();
+    },
+
+    // Private
+
+    _reset: function()
+    {
+        for (var entry of this._entries) {
+            entry.primaryKey.release();
+            entry.key.release();
+            entry.value.release();
+        }
+
+        this._entries = [];
+        this._dataGrid.removeChildren();
+    },
+
+    _dataGridScrolled: function()
+    {
+        if (!this._moreEntriesAvailable || !this._dataGrid.isScrolledToLastRow())
+            return;
+
+        this._fetchMoreData();
+    },
+
+    _fetchMoreData: function()
+    {
+        if (this._fetchingMoreData)
+            return;
+
+        function processEntries(entries, moreAvailable)
+        {
+            this._entries = this._entries.concat(entries);
+            this._moreEntriesAvailable = moreAvailable;
+
+            for (var entry of entries) {
+                var dataGridNode = new WebInspector.IndexedDatabaseEntryDataGridNode(entry);
+                this._dataGrid.appendChild(dataGridNode);
+            }
+
+            delete this._fetchingMoreData;
+
+            if (moreAvailable &amp;&amp; this._dataGrid.isScrolledToLastRow())
+                this._fetchMoreData();
+        }
+
+        this._fetchingMoreData = true;
+
+        WebInspector.storageManager.requestIndexedDatabaseData(this._objectStore, this._objectStoreIndex, this._entries.length, 25, processEntries.bind(this));
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreIndexjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndex.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndex.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndex.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,84 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseObjectStoreIndex = function(name, keyPath, unique, multiEntry)
+{
+    WebInspector.Object.call(this);
+
+    this._name = name;
+    this._keyPath = keyPath;
+    this._unique = unique || false;
+    this._multiEntry = multiEntry || false;
+    this._parentObjectStore = null;
+};
+
+WebInspector.IndexedDatabaseObjectStoreIndex.TypeIdentifier = &quot;indexed-database-object-store-index&quot;;
+WebInspector.IndexedDatabaseObjectStoreIndex.NameCookieKey = &quot;indexed-database-object-store-index-name&quot;;
+WebInspector.IndexedDatabaseObjectStoreIndex.KeyPathCookieKey = &quot;indexed-database-object-store-index-key-path&quot;;
+
+WebInspector.IndexedDatabaseObjectStoreIndex.prototype = {
+    constructor: WebInspector.IndexedDatabaseObjectStoreIndex,
+    __proto__: WebInspector.Object.prototype,
+
+    // Public
+
+    get name()
+    {
+        return this._name;
+    },
+
+    get keyPath()
+    {
+        return this._keyPath;
+    },
+
+    get unique()
+    {
+        return this._unique;
+    },
+
+    get multiEntry()
+    {
+        return this._multiEntry;
+    },
+
+    get parentObjectStore()
+    {
+        return this._parentObjectStore;
+    },
+
+    saveIdentityToCookie: function(cookie)
+    {
+        cookie[WebInspector.IndexedDatabaseObjectStoreIndex.NameCookieKey] = this._name;
+        cookie[WebInspector.IndexedDatabaseObjectStoreIndex.KeyPathCookieKey] = this._keyPath;
+    },
+
+    // Protected
+
+    establishRelationship: function(parentObjectStore)
+    {
+        this._parentObjectStore = parentObjectStore || null;
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreIndexTreeElementjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndexTreeElement.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndexTreeElement.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreIndexTreeElement.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,49 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseObjectStoreIndexTreeElement = function(objectStoreIndex)
+{
+    console.assert(objectStoreIndex instanceof WebInspector.IndexedDatabaseObjectStoreIndex);
+
+    this._objectStoreIndex = objectStoreIndex;
+
+    WebInspector.GeneralTreeElement.call(this, WebInspector.IndexedDatabaseObjectStoreTreeElement.IconStyleClassName, objectStoreIndex.name, null, objectStoreIndex, false);
+
+    this.small = true;
+};
+
+WebInspector.IndexedDatabaseObjectStoreIndexTreeElement.IconStyleClassName = &quot;database-table-icon&quot;;
+
+WebInspector.IndexedDatabaseObjectStoreIndexTreeElement.prototype = {
+    constructor: WebInspector.IndexedDatabaseObjectStoreIndexTreeElement,
+    __proto__: WebInspector.GeneralTreeElement.prototype,
+
+    // Public
+
+    get objectStoreIndex()
+    {
+        return this._objectStoreIndex;
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseObjectStoreTreeElementjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreTreeElement.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreTreeElement.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseObjectStoreTreeElement.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseObjectStoreTreeElement = function(objectStore)
+{
+    console.assert(objectStore instanceof WebInspector.IndexedDatabaseObjectStore);
+
+    this._objectStore = objectStore;
+
+    WebInspector.GeneralTreeElement.call(this, WebInspector.IndexedDatabaseObjectStoreTreeElement.IconStyleClassName, objectStore.name, null, objectStore, !!this._objectStore.indexes.length);
+
+    this.small = true;
+};
+
+WebInspector.IndexedDatabaseObjectStoreTreeElement.IconStyleClassName = &quot;database-table-icon&quot;;
+
+WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype = {
+    constructor: WebInspector.IndexedDatabaseObjectStoreTreeElement,
+    __proto__: WebInspector.GeneralTreeElement.prototype,
+
+    // Public
+
+    get objectStore()
+    {
+        return this._objectStore;
+    },
+
+    // Overrides from TreeElement (Protected)
+
+    oncollapse: function()
+    {
+        this.shouldRefreshChildren = true;
+    },
+
+    onpopulate: function()
+    {
+        if (this.children.length &amp;&amp; !this.shouldRefreshChildren)
+            return;
+
+        this.shouldRefreshChildren = false;
+
+        this.removeChildren();
+
+        for (var objectStoreIndex of this._objectStore.indexes)
+            this.appendChild(new WebInspector.IndexedDatabaseObjectStoreIndexTreeElement(objectStoreIndex));
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceIndexedDatabaseTreeElementjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseTreeElement.js (0 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseTreeElement.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/IndexedDatabaseTreeElement.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -0,0 +1,70 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.IndexedDatabaseTreeElement = function(indexedDatabase)
+{
+    console.assert(indexedDatabase instanceof WebInspector.IndexedDatabase);
+
+    this._indexedDatabase = indexedDatabase;
+
+    WebInspector.GeneralTreeElement.call(this, WebInspector.IndexedDatabaseTreeElement.IconStyleClassName, indexedDatabase.name, null, indexedDatabase, !!this._indexedDatabase.objectStores.length);
+
+    this.small = true;
+};
+
+WebInspector.IndexedDatabaseTreeElement.IconStyleClassName = &quot;database-icon&quot;;
+
+WebInspector.IndexedDatabaseTreeElement.prototype = {
+    constructor: WebInspector.IndexedDatabaseTreeElement,
+
+    // Public
+
+    get indexedDatabase()
+    {
+        return this._indexedDatabase;
+    },
+
+    // Overrides from TreeElement (Protected)
+
+    oncollapse: function()
+    {
+        this.shouldRefreshChildren = true;
+    },
+
+    onpopulate: function()
+    {
+        if (this.children.length &amp;&amp; !this.shouldRefreshChildren)
+            return;
+
+        this.shouldRefreshChildren = false;
+
+        this.removeChildren();
+
+        for (var objectStore of this._indexedDatabase.objectStores)
+            this.appendChild(new WebInspector.IndexedDatabaseObjectStoreTreeElement(objectStore));
+    }
+};
+
+WebInspector.IndexedDatabaseTreeElement.prototype.__proto__ = WebInspector.GeneralTreeElement.prototype;
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceInspectorWebBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/InspectorWebBackendCommands.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/InspectorWebBackendCommands.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/InspectorWebBackendCommands.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -263,7 +263,7 @@
</span><span class="cx"> 
</span><span class="cx"> // Profiler.
</span><span class="cx"> InspectorBackend.registerProfilerDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, &quot;Profiler&quot;);
</span><del>-InspectorBackend.registerEnum(&quot;Profiler.ProfileHeaderTypeId&quot;, {CPU: &quot;CPU&quot;, CSS: &quot;CSS&quot;, HEAP: &quot;HEAP&quot;});
</del><ins>+InspectorBackend.registerEnum(&quot;Profiler.ProfileHeaderTypeId&quot;, {CPU: &quot;CPU&quot;, HEAP: &quot;HEAP&quot;});
</ins><span class="cx"> InspectorBackend.registerEvent(&quot;Profiler.addProfileHeader&quot;, [&quot;header&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Profiler.addHeapSnapshotChunk&quot;, [&quot;uid&quot;, &quot;chunk&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Profiler.finishHeapSnapshot&quot;, [&quot;uid&quot;]);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceLegacy60InspectorWebBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Legacy/6.0/InspectorWebBackendCommands.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Legacy/6.0/InspectorWebBackendCommands.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/Legacy/6.0/InspectorWebBackendCommands.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -106,19 +106,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Database.getDatabaseTableNames&quot;, [{&quot;name&quot;: &quot;databaseId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;tableNames&quot;]);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Database.executeSQL&quot;, [{&quot;name&quot;: &quot;databaseId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;query&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;success&quot;, &quot;transactionId&quot;]);
</span><span class="cx"> 
</span><del>-// IndexedDB.
-InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, &quot;IndexedDB&quot;);
-InspectorBackend.registerEnum(&quot;IndexedDB.KeyType&quot;, {Number: &quot;number&quot;, String: &quot;string&quot;, Date: &quot;date&quot;, Array: &quot;array&quot;});
-InspectorBackend.registerEvent(&quot;IndexedDB.databaseNamesLoaded&quot;, [&quot;requestId&quot;, &quot;securityOriginWithDatabaseNames&quot;]);
-InspectorBackend.registerEvent(&quot;IndexedDB.databaseLoaded&quot;, [&quot;requestId&quot;, &quot;databaseWithObjectStores&quot;]);
-InspectorBackend.registerEvent(&quot;IndexedDB.objectStoreDataLoaded&quot;, [&quot;requestId&quot;, &quot;objectStoreDataEntries&quot;, &quot;hasMore&quot;]);
-InspectorBackend.registerEvent(&quot;IndexedDB.indexDataLoaded&quot;, [&quot;requestId&quot;, &quot;indexDataEntries&quot;, &quot;hasMore&quot;]);
-InspectorBackend.registerCommand(&quot;IndexedDB.enable&quot;, [], []);
-InspectorBackend.registerCommand(&quot;IndexedDB.disable&quot;, [], []);
-InspectorBackend.registerCommand(&quot;IndexedDB.requestDatabaseNamesForFrame&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], []);
-InspectorBackend.registerCommand(&quot;IndexedDB.requestDatabase&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], []);
-InspectorBackend.registerCommand(&quot;IndexedDB.requestData&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;indexName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;skipCount&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;pageSize&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;keyRange&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: true}], []);
-
</del><span class="cx"> // DOMStorage.
</span><span class="cx"> InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, &quot;DOMStorage&quot;);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;DOMStorage.addDOMStorage&quot;, [&quot;storage&quot;]);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceLegacy70InspectorWebBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Legacy/7.0/InspectorWebBackendCommands.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Legacy/7.0/InspectorWebBackendCommands.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/Legacy/7.0/InspectorWebBackendCommands.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -130,17 +130,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Database.getDatabaseTableNames&quot;, [{&quot;name&quot;: &quot;databaseId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;tableNames&quot;]);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Database.executeSQL&quot;, [{&quot;name&quot;: &quot;databaseId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;query&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;columnNames&quot;, &quot;values&quot;, &quot;sqlError&quot;]);
</span><span class="cx"> 
</span><del>-// IndexedDB.
-InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, &quot;IndexedDB&quot;);
-InspectorBackend.registerEnum(&quot;IndexedDB.KeyType&quot;, {Number: &quot;number&quot;, String: &quot;string&quot;, Date: &quot;date&quot;, Array: &quot;array&quot;});
-InspectorBackend.registerEnum(&quot;IndexedDB.KeyPathType&quot;, {Null: &quot;null&quot;, String: &quot;string&quot;, Array: &quot;array&quot;});
-InspectorBackend.registerCommand(&quot;IndexedDB.enable&quot;, [], []);
-InspectorBackend.registerCommand(&quot;IndexedDB.disable&quot;, [], []);
-InspectorBackend.registerCommand(&quot;IndexedDB.requestDatabaseNames&quot;, [{&quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;databaseNames&quot;]);
-InspectorBackend.registerCommand(&quot;IndexedDB.requestDatabase&quot;, [{&quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;databaseWithObjectStores&quot;]);
-InspectorBackend.registerCommand(&quot;IndexedDB.requestData&quot;, [{&quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;indexName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;skipCount&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;pageSize&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;keyRange&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: true}], [&quot;objectStoreDataEntries&quot;, &quot;hasMore&quot;]);
-InspectorBackend.registerCommand(&quot;IndexedDB.clearObjectStore&quot;, [{&quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], []);
-
</del><span class="cx"> // DOMStorage.
</span><span class="cx"> InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, &quot;DOMStorage&quot;);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;DOMStorage.domStorageItemsCleared&quot;, [&quot;storageId&quot;]);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceMainhtml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Main.html (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Main.html        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.html        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -135,6 +135,7 @@
</span><span class="cx">     &lt;link rel=&quot;stylesheet&quot; href=&quot;ComputedStyleDetailsPanel.css&quot;&gt;
</span><span class="cx">     &lt;link rel=&quot;stylesheet&quot; href=&quot;ProbeDetailsSidebarPanel.css&quot;&gt;
</span><span class="cx">     &lt;link rel=&quot;stylesheet&quot; href=&quot;ProbeSetDataGrid.css&quot;&gt;
</span><ins>+    &lt;link rel=&quot;stylesheet&quot; href=&quot;IndexedDatabaseObjectStoreContentView.css&quot;&gt;
</ins><span class="cx"> 
</span><span class="cx">     &lt;script src=&quot;External/CodeMirror/codemirror.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;External/CodeMirror/comment.js&quot;&gt;&lt;/script&gt;
</span><span class="lines">@@ -192,6 +193,9 @@
</span><span class="cx">     &lt;script src=&quot;DatabaseTableObject.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;DOMStorageObject.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;DOMStorageObserver.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;IndexedDatabase.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;IndexedDatabaseObjectStore.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;IndexedDatabaseObjectStoreIndex.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;StorageManager.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;ApplicationCacheFrame.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;ApplicationCacheManifest.js&quot;&gt;&lt;/script&gt;
</span><span class="lines">@@ -251,6 +255,10 @@
</span><span class="cx">     &lt;script src=&quot;DatabaseTreeElement.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;DatabaseTableTreeElement.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;DOMStorageTreeElement.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;IndexedDatabaseHostTreeElement.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;IndexedDatabaseTreeElement.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;IndexedDatabaseObjectStoreTreeElement.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;IndexedDatabaseObjectStoreIndexTreeElement.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;ApplicationCacheFrameTreeElement.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;ApplicationCacheManifestTreeElement.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;TreeElementStatusButton.js&quot;&gt;&lt;/script&gt;
</span><span class="lines">@@ -284,6 +292,8 @@
</span><span class="cx">     &lt;script src=&quot;CookieStorageContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;DatabaseTableContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;DatabaseContentView.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;IndexedDatabaseObjectStoreContentView.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;IndexedDatabaseEntryDataGridNode.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;ApplicationCacheFrameContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;TextContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;TimelineContentView.js&quot;&gt;&lt;/script&gt;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceMainjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Main.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Main.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -349,7 +349,8 @@
</span><span class="cx"> 
</span><span class="cx">     if (representedObject instanceof WebInspector.DOMStorageObject || representedObject instanceof WebInspector.CookieStorageObject ||
</span><span class="cx">         representedObject instanceof WebInspector.DatabaseTableObject || representedObject instanceof WebInspector.DatabaseObject ||
</span><del>-        representedObject instanceof WebInspector.ApplicationCacheFrame)
</del><ins>+        representedObject instanceof WebInspector.ApplicationCacheFrame || representedObject instanceof WebInspector.IndexedDatabaseObjectStore ||
+        representedObject instanceof WebInspector.IndexedDatabaseObjectStoreIndex)
</ins><span class="cx">         return this.resourceSidebarPanel;
</span><span class="cx"> 
</span><span class="cx">     if (representedObject instanceof WebInspector.TimelineRecording)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceResourceSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/ResourceSidebarPanel.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/ResourceSidebarPanel.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/ResourceSidebarPanel.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -56,6 +56,9 @@
</span><span class="cx">     this._databaseRootTreeElement = null;
</span><span class="cx">     this._databaseHostTreeElementMap = {};
</span><span class="cx"> 
</span><ins>+    this._indexedDatabaseRootTreeElement = null;
+    this._indexedDatabaseHostTreeElementMap = {};
+
</ins><span class="cx">     this._cookieStorageRootTreeElement = null;
</span><span class="cx"> 
</span><span class="cx">     this._applicationCacheRootTreeElement = null;
</span><span class="lines">@@ -66,6 +69,7 @@
</span><span class="cx">     WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DOMStorageObjectWasInspected, this._domStorageObjectWasInspected, this);
</span><span class="cx">     WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DatabaseWasAdded, this._databaseWasAdded, this);
</span><span class="cx">     WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.DatabaseWasInspected, this._databaseWasInspected, this);
</span><ins>+    WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.IndexedDatabaseWasAdded, this._indexedDatabaseWasAdded, this);
</ins><span class="cx">     WebInspector.storageManager.addEventListener(WebInspector.StorageManager.Event.Cleared, this._storageCleared, this);
</span><span class="cx"> 
</span><span class="cx">     WebInspector.applicationCacheManager.addEventListener(WebInspector.ApplicationCacheManager.Event.FrameManifestAdded, this._frameManifestAdded, this);
</span><span class="lines">@@ -635,13 +639,15 @@
</span><span class="cx"> 
</span><span class="cx">     _treeElementSelected: function(treeElement, selectedByUser)
</span><span class="cx">     {
</span><del>-        if (treeElement instanceof WebInspector.FolderTreeElement || treeElement instanceof WebInspector.DatabaseHostTreeElement)
</del><ins>+        if (treeElement instanceof WebInspector.FolderTreeElement || treeElement instanceof WebInspector.DatabaseHostTreeElement ||
+            treeElement instanceof WebInspector.IndexedDatabaseHostTreeElement || treeElement instanceof WebInspector.IndexedDatabaseTreeElement)
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         if (treeElement instanceof WebInspector.ResourceTreeElement || treeElement instanceof WebInspector.ScriptTreeElement ||
</span><span class="cx">             treeElement instanceof WebInspector.StorageTreeElement || treeElement instanceof WebInspector.DatabaseTableTreeElement ||
</span><span class="cx">             treeElement instanceof WebInspector.DatabaseTreeElement || treeElement instanceof WebInspector.ApplicationCacheFrameTreeElement ||
</span><del>-            treeElement instanceof WebInspector.ContentFlowTreeElement) {
</del><ins>+            treeElement instanceof WebInspector.ContentFlowTreeElement || treeElement instanceof WebInspector.IndexedDatabaseObjectStoreTreeElement ||
+            treeElement instanceof WebInspector.IndexedDatabaseObjectStoreIndexTreeElement) {
</ins><span class="cx">             WebInspector.contentBrowser.showContentViewForRepresentedObject(treeElement.representedObject);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -701,6 +707,21 @@
</span><span class="cx">         treeElement.revealAndSelect(true);
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    _indexedDatabaseWasAdded: function(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);
+    },
+
</ins><span class="cx">     _cookieStorageObjectWasAdded: function(event)
</span><span class="cx">     {
</span><span class="cx">         console.assert(event.data.cookieStorage instanceof WebInspector.CookieStorageObject);
</span><span class="lines">@@ -794,6 +815,9 @@
</span><span class="cx">         if (this._databaseRootTreeElement &amp;&amp; this._databaseRootTreeElement.parent)
</span><span class="cx">             this._databaseRootTreeElement.parent.removeChild(this._databaseRootTreeElement);
</span><span class="cx"> 
</span><ins>+        if (this._indexedDatabaseRootTreeElement &amp;&amp; this._indexedDatabaseRootTreeElement.parent)
+            this._indexedDatabaseRootTreeElement.parent.removeChild(this._indexedDatabaseRootTreeElement);
+
</ins><span class="cx">         if (this._cookieStorageRootTreeElement &amp;&amp; this._cookieStorageRootTreeElement.parent)
</span><span class="cx">             this._cookieStorageRootTreeElement.parent.removeChild(this._cookieStorageRootTreeElement);
</span><span class="cx"> 
</span><span class="lines">@@ -804,6 +828,8 @@
</span><span class="cx">         this._sessionStorageRootTreeElement = null;
</span><span class="cx">         this._databaseRootTreeElement = null;
</span><span class="cx">         this._databaseHostTreeElementMap = {};
</span><ins>+        this._indexedDatabaseRootTreeElement = null;
+        this._indexedDatabaseHostTreeElementMap = {};
</ins><span class="cx">         this._cookieStorageRootTreeElement = null;
</span><span class="cx">         this._applicationCacheRootTreeElement = null;
</span><span class="cx">         this._applicationCacheURLTreeElementMap = {};
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceStorageManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/StorageManager.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/StorageManager.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/StorageManager.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -32,6 +32,8 @@
</span><span class="cx">         DOMStorageAgent.enable();
</span><span class="cx">     if (window.DatabaseAgent)
</span><span class="cx">         DatabaseAgent.enable();
</span><ins>+    if (window.IndexedDBAgent)
+        IndexedDBAgent.enable();
</ins><span class="cx"> 
</span><span class="cx">     WebInspector.Frame.addEventListener(WebInspector.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
</span><span class="cx"> 
</span><span class="lines">@@ -50,6 +52,7 @@
</span><span class="cx">     DOMStorageObjectWasInspected: &quot;storage-dom-object-was-inspected&quot;,
</span><span class="cx">     DatabaseWasAdded: &quot;storage-manager-database-was-added&quot;,
</span><span class="cx">     DatabaseWasInspected: &quot;storage-object-was-inspected&quot;,
</span><ins>+    IndexedDatabaseWasAdded: &quot;storage-manager-indexed-database-was-added&quot;,
</ins><span class="cx">     Cleared: &quot;storage-manager-cleared&quot;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -63,6 +66,7 @@
</span><span class="cx">     {
</span><span class="cx">         this._domStorageObjects = [];
</span><span class="cx">         this._databaseObjects = [];
</span><ins>+        this._indexedDatabases = [];
</ins><span class="cx">         this._cookieStorageObjects = {};
</span><span class="cx">     },
</span><span class="cx"> 
</span><span class="lines">@@ -125,6 +129,48 @@
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.StorageManager.Event.DOMStorageObjectWasInspected, {domStorage: domStorage});
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    // Protected
+
+    requestIndexedDatabaseData: function(objectStore, objectStoreIndex, startEntryIndex, maximumEntryCount, callback)
+    {
+        console.assert(window.IndexedDBAgent);
+        console.assert(objectStore);
+        console.assert(callback);
+
+        function processData(error, entryPayloads, moreAvailable)
+        {
+            if (error) {
+                callback(null, false);
+                return;
+            }
+
+            var entries = [];
+
+            for (var entryPayload of entryPayloads) {
+                var entry = {};
+                entry.primaryKey = new WebInspector.RemoteObject.fromPayload(entryPayload.primaryKey);
+                entry.key = new WebInspector.RemoteObject.fromPayload(entryPayload.key);
+                entry.value = new WebInspector.RemoteObject.fromPayload(entryPayload.value);
+                entries.push(entry);
+            }
+
+            callback(entries, moreAvailable);
+        }
+
+        var requestArguments = {
+            securityOrigin: objectStore.parentDatabase.securityOrigin,
+            databaseName: objectStore.parentDatabase.name,
+            objectStoreName: objectStore.name,
+            indexName: objectStoreIndex &amp;&amp; objectStoreIndex.name || &quot;&quot;,
+            skipCount: startEntryIndex || 0,
+            pageSize: maximumEntryCount || 100
+        };
+
+        IndexedDBAgent.requestData.invoke(requestArguments, processData);
+    },
+
+    // Private
+
</ins><span class="cx">     _domStorageForIdentifier: function(id)
</span><span class="cx">     {
</span><span class="cx">         for (var storageObject of this._domStorageObjects) {
</span><span class="lines">@@ -137,8 +183,6 @@
</span><span class="cx">         return null;
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    // Private
-
</del><span class="cx">     _mainResourceDidChange: function(event)
</span><span class="cx">     {
</span><span class="cx">         console.assert(event.target instanceof WebInspector.Frame);
</span><span class="lines">@@ -149,6 +193,7 @@
</span><span class="cx">             this.dispatchEventToListeners(WebInspector.StorageManager.Event.Cleared);
</span><span class="cx"> 
</span><span class="cx">             this._addDOMStorageIfNeeded(event.target);
</span><ins>+            this._addIndexedDBDatabasesIfNeeded(event.target);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Add the host of the frame that changed the main resource to the list of hosts there could be cookies for.
</span><span class="lines">@@ -180,11 +225,75 @@
</span><span class="cx">             this.domStorageWasAdded(sessionStorageIdentifier, frame.mainResource.urlComponents.host, false);
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    _addIndexedDBDatabasesIfNeeded: function(frame)
+    {
+        if (!window.IndexedDBAgent)
+            return;
+
+        var securityOrigin = frame.securityOrigin;
+
+        // Don't show storage if we don't have a security origin (about:blank).
+        if (!securityOrigin || securityOrigin === &quot;://&quot;)
+            return;
+
+        function processDatabaseNames(error, names)
+        {
+            if (error || !names)
+                return;
+
+            for (var name of names)
+                IndexedDBAgent.requestDatabase(securityOrigin, name, processDatabase.bind(this));
+        }
+
+        function processDatabase(error, databasePayload)
+        {
+            if (error || !databasePayload)
+                return;
+
+            var objectStores = databasePayload.objectStores.map(processObjectStore);
+            var indexedDatabase = new WebInspector.IndexedDatabase(databasePayload.name, securityOrigin, databasePayload.version, objectStores);
+
+            this._indexedDatabases.push(indexedDatabase);
+            this.dispatchEventToListeners(WebInspector.StorageManager.Event.IndexedDatabaseWasAdded, {indexedDatabase: indexedDatabase});
+        }
+
+        function processKeyPath(keyPathPayload)
+        {
+            switch (keyPathPayload.type) {
+            case &quot;null&quot;:
+                return null;
+            case &quot;string&quot;:
+                return keyPathPayload.string;
+            case &quot;array&quot;:
+                return keyPathPayload.array;
+            default:
+                console.error(&quot;Unknown KeyPath type:&quot;, keyPathPayload.type);
+                return null;
+            }
+        }
+
+        function processObjectStore(objectStorePayload)
+        {
+            var keyPath = processKeyPath(objectStorePayload.keyPath);
+            var indexes = objectStorePayload.indexes.map(processObjectStoreIndex);
+            return new WebInspector.IndexedDatabaseObjectStore(objectStorePayload.name, keyPath, objectStorePayload.autoIncrement, indexes);
+        }
+
+        function processObjectStoreIndex(objectStoreIndexPayload)
+        {
+            var keyPath = processKeyPath(objectStoreIndexPayload.keyPath);
+            return new WebInspector.IndexedDatabaseObjectStoreIndex(objectStoreIndexPayload.name, keyPath, objectStoreIndexPayload.unique, objectStoreIndexPayload.multiEntry);
+        }
+
+        IndexedDBAgent.requestDatabaseNames(securityOrigin, processDatabaseNames.bind(this));
+    },
+
</ins><span class="cx">     _securityOriginDidChange: function(event)
</span><span class="cx">     {
</span><span class="cx">         console.assert(event.target instanceof WebInspector.Frame);
</span><span class="cx"> 
</span><span class="cx">         this._addDOMStorageIfNeeded(event.target);
</span><ins>+        this._addIndexedDBDatabasesIfNeeded(event.target);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     _databaseForIdentifier: function(id)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceURLUtilitiesjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/URLUtilities.js (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/URLUtilities.js        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/UserInterface/URLUtilities.js        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -55,6 +55,21 @@
</span><span class="cx">     return finalComponents.join(&quot;/&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function parseSecurityOrigin(securityOrigin)
+{
+    securityOrigin = securityOrigin ? securityOrigin.trim() : &quot;&quot;;
+
+    var match = securityOrigin.match(/^([^:]+):\/\/([^\/:]*)(?::([\d]+))?$/i);
+    if (!match)
+        return {scheme: null, host: null, port: null};
+
+    var scheme = match[1].toLowerCase();
+    var host = match[2].toLowerCase();
+    var port = Number(match[3]) || null;
+
+    return {scheme: scheme, host: host, port: port};
+}
+
</ins><span class="cx"> function parseURL(url)
</span><span class="cx"> {
</span><span class="cx">     url = url ? url.trim() : &quot;&quot;;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS60json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-6.0.json (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-6.0.json        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-6.0.json        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -990,158 +990,6 @@
</span><span class="cx">         ]
</span><span class="cx">     },
</span><span class="cx">     {
</span><del>-        &quot;domain&quot;: &quot;IndexedDB&quot;,
-        &quot;hidden&quot;: true,
-        &quot;types&quot;: [
-            {
-                &quot;id&quot;: &quot;SecurityOriginWithDatabaseNames&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Security origin with database names.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Security origin.&quot; },
-                    { &quot;name&quot;: &quot;databaseNames&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }, &quot;description&quot;: &quot;Database names for this origin.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;DatabaseWithObjectStores&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Database with an array of object stores.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;name&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database name.&quot; },
-                    { &quot;name&quot;: &quot;version&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database version.&quot; },
-                    { &quot;name&quot;: &quot;objectStores&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;ObjectStore&quot; }, &quot;description&quot;: &quot;Object stores in this database.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;ObjectStore&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Object store.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;name&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store name.&quot; },
-                    { &quot;name&quot;: &quot;keyPath&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store key path.&quot; },
-                    { &quot;name&quot;: &quot;indexes&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;ObjectStoreIndex&quot; }, &quot;description&quot;: &quot;Indexes in this object store.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;ObjectStoreIndex&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Object store index.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;name&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Index name.&quot; },
-                    { &quot;name&quot;: &quot;keyPath&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Index key path.&quot; },
-                    { &quot;name&quot;: &quot;unique&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, index is unique.&quot; },
-                    { &quot;name&quot;: &quot;multiEntry&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, index allows multiple entries for a key.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;Key&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Key.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;number&quot;, &quot;string&quot;, &quot;date&quot;, &quot;array&quot;], &quot;description&quot;: &quot;Key type.&quot; },
-                    { &quot;name&quot;: &quot;number&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Number value.&quot; },
-                    { &quot;name&quot;: &quot;string&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;String value.&quot; },
-                    { &quot;name&quot;: &quot;date&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Date value.&quot; },
-                    { &quot;name&quot;: &quot;array&quot;, &quot;type&quot;: &quot;array&quot;, &quot;optional&quot;: true, &quot;items&quot;: { &quot;$ref&quot;: &quot;Key&quot; }, &quot;description&quot;: &quot;Array value.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;KeyRange&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Key range.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;lower&quot;, &quot;$ref&quot;: &quot;Key&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Lower bound.&quot; },
-                    { &quot;name&quot;: &quot;upper&quot;, &quot;$ref&quot;: &quot;Key&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Upper bound.&quot; },
-                    { &quot;name&quot;: &quot;lowerOpen&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true lower bound is open.&quot; },
-                    { &quot;name&quot;: &quot;upperOpen&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true upper bound is open.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;DataEntry&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Key.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;key&quot;, &quot;$ref&quot;: &quot;Key&quot;, &quot;description&quot;: &quot;Key.&quot; },
-                    { &quot;name&quot;: &quot;primaryKey&quot;, &quot;$ref&quot;: &quot;Key&quot;, &quot;description&quot;: &quot;Primary key.&quot; },
-                    { &quot;name&quot;: &quot;value&quot;, &quot;$ref&quot;: &quot;Runtime.RemoteObject&quot;, &quot;description&quot;: &quot;Value.&quot; }
-                ]
-            }
-        ],
-        &quot;commands&quot;: [
-            {
-                &quot;name&quot;: &quot;enable&quot;,
-                &quot;description&quot;: &quot;Enables events from backend.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;disable&quot;,
-                &quot;description&quot;: &quot;Disables events from backend.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;requestDatabaseNamesForFrame&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Request id.&quot; },
-                    { &quot;name&quot;: &quot;frameId&quot;, &quot;$ref&quot;: &quot;Network.FrameId&quot;, &quot;description&quot;: &quot;Frame id.&quot; }
-                ],
-                &quot;description&quot;: &quot;Requests database names for given frame's security origin.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;requestDatabase&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Request id.&quot; },
-                    { &quot;name&quot;: &quot;frameId&quot;, &quot;$ref&quot;: &quot;Network.FrameId&quot;, &quot;description&quot;: &quot;Frame id.&quot; },
-                    { &quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database name.&quot; }
-                ],
-                &quot;description&quot;: &quot;Requests database with given name in given frame.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;requestData&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Request id.&quot; },
-                    { &quot;name&quot;: &quot;frameId&quot;, &quot;$ref&quot;: &quot;Network.FrameId&quot;, &quot;description&quot;: &quot;Frame id.&quot; },
-                    { &quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database name.&quot; },
-                    { &quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store name.&quot; },
-                    { &quot;name&quot;: &quot;indexName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Index name, empty string for object store data requests.&quot; },
-                    { &quot;name&quot;: &quot;skipCount&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of records to skip.&quot; },
-                    { &quot;name&quot;: &quot;pageSize&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of records to fetch.&quot; },
-                    { &quot;name&quot;: &quot;keyRange&quot;, &quot;$ref&quot;: &quot;KeyRange&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Key range.&quot; }
-                ],
-                &quot;description&quot;: &quot;Requests data from object store or index.&quot;
-            }
-        ],
-        &quot;events&quot;: [
-            {
-                &quot;name&quot;: &quot;databaseNamesLoaded&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;Request id.&quot; },
-                    { &quot;name&quot;: &quot;securityOriginWithDatabaseNames&quot;, &quot;$ref&quot;: &quot;SecurityOriginWithDatabaseNames&quot;, &quot;description&quot;: &quot;Frame with database names.&quot; }
-                ]
-            },
-            {
-                &quot;name&quot;: &quot;databaseLoaded&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Request id.&quot; },
-                    { &quot;name&quot;: &quot;databaseWithObjectStores&quot;, &quot;$ref&quot;: &quot;DatabaseWithObjectStores&quot;, &quot;description&quot;: &quot;Database with an array of object stores.&quot; }
-                ]
-            },
-            {
-                &quot;name&quot;: &quot;objectStoreDataLoaded&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Request id.&quot; },
-                    { &quot;name&quot;: &quot;objectStoreDataEntries&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;DataEntry&quot; }, &quot;description&quot;: &quot;Array of object store data entries.&quot; },
-                    { &quot;name&quot;: &quot;hasMore&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, there are more entries to fetch in the given range.&quot; }
-                ]
-            },
-            {
-                &quot;name&quot;: &quot;indexDataLoaded&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Request id.&quot; },
-                    { &quot;name&quot;: &quot;indexDataEntries&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;DataEntry&quot; }, &quot;description&quot;: &quot;Array of index data entries.&quot; },
-                    { &quot;name&quot;: &quot;hasMore&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, there are more entries to fetch in the given range.&quot; }
-                ]
-            }
-        ]
-    },
-    {
</del><span class="cx">         &quot;domain&quot;: &quot;DOMStorage&quot;,
</span><span class="cx">         &quot;hidden&quot;: true,
</span><span class="cx">         &quot;types&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS70json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json (164540 => 164541)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json        2014-02-22 15:29:13 UTC (rev 164540)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json        2014-02-22 16:06:41 UTC (rev 164541)
</span><span class="lines">@@ -1143,150 +1143,6 @@
</span><span class="cx">         ]
</span><span class="cx">     },
</span><span class="cx">     {
</span><del>-        &quot;domain&quot;: &quot;IndexedDB&quot;,
-        &quot;types&quot;: [
-            {
-                &quot;id&quot;: &quot;DatabaseWithObjectStores&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Database with an array of object stores.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;name&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database name.&quot; },
-                    { &quot;name&quot;: &quot;version&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Deprecated string database version.&quot; },
-                    { &quot;name&quot;: &quot;intVersion&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Integer database version.&quot; },
-                    { &quot;name&quot;: &quot;objectStores&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;ObjectStore&quot; }, &quot;description&quot;: &quot;Object stores in this database.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;ObjectStore&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Object store.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;name&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store name.&quot; },
-                    { &quot;name&quot;: &quot;keyPath&quot;, &quot;$ref&quot;: &quot;KeyPath&quot;, &quot;description&quot;: &quot;Object store key path.&quot; },
-                    { &quot;name&quot;: &quot;autoIncrement&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, object store has auto increment flag set.&quot; },
-                    { &quot;name&quot;: &quot;indexes&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;ObjectStoreIndex&quot; }, &quot;description&quot;: &quot;Indexes in this object store.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;ObjectStoreIndex&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Object store index.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;name&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Index name.&quot; },
-                    { &quot;name&quot;: &quot;keyPath&quot;, &quot;$ref&quot;: &quot;KeyPath&quot;, &quot;description&quot;: &quot;Index key path.&quot; },
-                    { &quot;name&quot;: &quot;unique&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, index is unique.&quot; },
-                    { &quot;name&quot;: &quot;multiEntry&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, index allows multiple entries for a key.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;Key&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Key.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;number&quot;, &quot;string&quot;, &quot;date&quot;, &quot;array&quot;], &quot;description&quot;: &quot;Key type.&quot; },
-                    { &quot;name&quot;: &quot;number&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Number value.&quot; },
-                    { &quot;name&quot;: &quot;string&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;String value.&quot; },
-                    { &quot;name&quot;: &quot;date&quot;, &quot;type&quot;: &quot;number&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Date value.&quot; },
-                    { &quot;name&quot;: &quot;array&quot;, &quot;type&quot;: &quot;array&quot;, &quot;optional&quot;: true, &quot;items&quot;: { &quot;$ref&quot;: &quot;Key&quot; }, &quot;description&quot;: &quot;Array value.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;KeyRange&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Key range.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;lower&quot;, &quot;$ref&quot;: &quot;Key&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Lower bound.&quot; },
-                    { &quot;name&quot;: &quot;upper&quot;, &quot;$ref&quot;: &quot;Key&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Upper bound.&quot; },
-                    { &quot;name&quot;: &quot;lowerOpen&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true lower bound is open.&quot; },
-                    { &quot;name&quot;: &quot;upperOpen&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true upper bound is open.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;DataEntry&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Data entry.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;key&quot;, &quot;$ref&quot;: &quot;Runtime.RemoteObject&quot;, &quot;description&quot;: &quot;Key.&quot; },
-                    { &quot;name&quot;: &quot;primaryKey&quot;, &quot;$ref&quot;: &quot;Runtime.RemoteObject&quot;, &quot;description&quot;: &quot;Primary key.&quot; },
-                    { &quot;name&quot;: &quot;value&quot;, &quot;$ref&quot;: &quot;Runtime.RemoteObject&quot;, &quot;description&quot;: &quot;Value.&quot; }
-                ]
-            },
-            {
-                &quot;id&quot;: &quot;KeyPath&quot;,
-                &quot;type&quot;: &quot;object&quot;,
-                &quot;description&quot;: &quot;Key path.&quot;,
-                &quot;properties&quot;: [
-                    { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;null&quot;, &quot;string&quot;, &quot;array&quot;], &quot;description&quot;: &quot;Key path type.&quot; },
-                    { &quot;name&quot;: &quot;string&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;String value.&quot; },
-                    { &quot;name&quot;: &quot;array&quot;, &quot;type&quot;: &quot;array&quot;, &quot;optional&quot;: true, &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }, &quot;description&quot;: &quot;Array value.&quot; }
-                ]
-            }
-        ],
-        &quot;commands&quot;: [
-            {
-                &quot;name&quot;: &quot;enable&quot;,
-                &quot;description&quot;: &quot;Enables events from backend.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;disable&quot;,
-                &quot;description&quot;: &quot;Disables events from backend.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;requestDatabaseNames&quot;,
-                &quot;async&quot;: true,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Security origin.&quot; }
-                ],
-                &quot;returns&quot;: [
-                    { &quot;name&quot;: &quot;databaseNames&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }, &quot;description&quot;: &quot;Database names for origin.&quot; }
-                ],
-                &quot;description&quot;: &quot;Requests database names for given security origin.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;requestDatabase&quot;,
-                &quot;async&quot;: true,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Security origin.&quot; },
-                    { &quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database name.&quot; }
-                ],
-                &quot;returns&quot;: [
-                    { &quot;name&quot;: &quot;databaseWithObjectStores&quot;, &quot;$ref&quot;: &quot;DatabaseWithObjectStores&quot;, &quot;description&quot;: &quot;Database with an array of object stores.&quot; }
-                ],
-                &quot;description&quot;: &quot;Requests database with given name in given frame.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;requestData&quot;,
-                &quot;async&quot;: true,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Security origin.&quot; },
-                    { &quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database name.&quot; },
-                    { &quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store name.&quot; },
-                    { &quot;name&quot;: &quot;indexName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Index name, empty string for object store data requests.&quot; },
-                    { &quot;name&quot;: &quot;skipCount&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of records to skip.&quot; },
-                    { &quot;name&quot;: &quot;pageSize&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of records to fetch.&quot; },
-                    { &quot;name&quot;: &quot;keyRange&quot;, &quot;$ref&quot;: &quot;KeyRange&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Key range.&quot; }
-                ],
-                &quot;returns&quot;: [
-                    { &quot;name&quot;: &quot;objectStoreDataEntries&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;DataEntry&quot; }, &quot;description&quot;: &quot;Array of object store data entries.&quot; },
-                    { &quot;name&quot;: &quot;hasMore&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;If true, there are more entries to fetch in the given range.&quot; }
-                ],
-                &quot;description&quot;: &quot;Requests data from object store or index.&quot;
-            },
-            {
-                &quot;name&quot;: &quot;clearObjectStore&quot;,
-                &quot;async&quot;: true,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;securityOrigin&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Security origin.&quot; },
-                    { &quot;name&quot;: &quot;databaseName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Database name.&quot; },
-                    { &quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store name.&quot; }
-                ],
-                &quot;returns&quot;: [
-                ],
-                &quot;description&quot;: &quot;Clears all entries from an object store.&quot;
-            }
-        ]
-    },
-    {
</del><span class="cx">         &quot;domain&quot;: &quot;DOMStorage&quot;,
</span><span class="cx">         &quot;description&quot;: &quot;Query and modify DOM storage.&quot;,
</span><span class="cx">         &quot;types&quot;: [
</span></span></pre>
</div>
</div>

</body>
</html>