[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

pfeldman at chromium.org pfeldman at chromium.org
Wed Dec 22 16:28:15 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 884822d305e29c38ac6855f7196421d12fddfbd4
Author: pfeldman at chromium.org <pfeldman at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Nov 24 10:36:12 2010 +0000

    2010-11-22  Pavel Feldman  <pfeldman at chromium.org>
    
            Reviewed by Yury Semikhatsky.
    
            Web Inspector: refactor ResourceView hierarchy.
            https://bugs.webkit.org/show_bug.cgi?id=49864
    
            This refactoring splits ResourceView.js into:
                NetworkItemView.js (tabbed pane)
                ResourceHeadersView.js (header tab)
                ResourceCookiesView.js (cookies tab)
                ResourceView.js (base class for content tab).
            CookiesTable was extracted from CookieItemsView and
            brushed up. headersVisible flag has been removed.
    
            * English.lproj/localizedStrings.js:
            * WebCore.gypi:
            * WebCore.vcproj/WebCore.vcproj:
            * inspector/front-end/CookieItemsView.js:
            (WebInspector.CookieItemsView):
            (WebInspector.CookieItemsView.prototype.get statusBarItems):
            (WebInspector.CookieItemsView.prototype.hide):
            (WebInspector.CookieItemsView.prototype.resize):
            (WebInspector.CookieItemsView.prototype._updateWithCookies):
            (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
            (WebInspector.CookieItemsView.prototype._deleteCookie):
            (WebInspector.CookieItemsView.prototype._deleteButtonClicked):
            (WebInspector.CookieItemsView.prototype._refreshButtonClicked):
            (WebInspector.SimpleCookiesTable):
            (WebInspector.SimpleCookiesTable.prototype.setCookies):
            (WebInspector.SimpleCookiesTable.prototype.resize):
            * inspector/front-end/CookiesTable.js: Added.
            (WebInspector.CookiesTable):
            (WebInspector.CookiesTable.prototype.updateWidths):
            (WebInspector.CookiesTable.prototype.setCookies):
            (WebInspector.CookiesTable.prototype.addCookiesFolder):
            (WebInspector.CookiesTable.prototype.get selectedCookie):
            (WebInspector.CookiesTable.prototype._rebuildTable):
            (WebInspector.CookiesTable.prototype.reset):
            (WebInspector.CookiesTable.prototype._populateNode):
            (WebInspector.CookiesTable.prototype._totalSize):
            (WebInspector.CookiesTable.prototype._sortCookies.localeCompare):
            (WebInspector.CookiesTable.prototype._sortCookies.numberCompare):
            (WebInspector.CookiesTable.prototype._sortCookies.expiresCompare):
            (WebInspector.CookiesTable.prototype._sortCookies):
            (WebInspector.CookiesTable.prototype._createGridNode):
            (WebInspector.CookiesTable.prototype._onDeleteFromGrid):
            * inspector/front-end/FileSystemView.js:
            (WebInspector.FileSystemView.prototype._selectFileSystemTab):
            (WebInspector.FileSystemView.prototype.selectTemporaryFileSystemTab):
            * inspector/front-end/FontView.js:
            (WebInspector.FontView.prototype.hasContent):
            (WebInspector.FontView.prototype._createContentIfNeeded):
            (WebInspector.FontView.prototype.show):
            (WebInspector.FontView.prototype.updateFontPreviewSize):
            * inspector/front-end/ImageView.js:
            (WebInspector.ImageView.prototype.hasContent):
            (WebInspector.ImageView.prototype.show):
            * inspector/front-end/NetworkItemView.js: Added.
            (WebInspector.NetworkItemView):
            (WebInspector.NetworkItemView.prototype.show):
            (WebInspector.NetworkItemView.prototype._selectTab):
            (WebInspector.NetworkItemView.prototype._tabSelected):
            (WebInspector.NetworkItemView.prototype.resize):
            (WebInspector.NetworkItemView.prototype.selectContentTab):
            * inspector/front-end/NetworkPanel.js:
            (WebInspector.NetworkPanel.prototype.show):
            (WebInspector.NetworkPanel.prototype.refreshResource):
            (WebInspector.NetworkPanel.prototype._showResource):
            (WebInspector.NetworkPanel.prototype._closeVisibleResource):
            * inspector/front-end/ResourceCookiesView.js: Added.
            (WebInspector.ResourceCookiesView):
            (WebInspector.ResourceCookiesView.prototype.show):
            * inspector/front-end/ResourceHeadersView.js: Added.
            (WebInspector.ResourceHeadersView):
            (WebInspector.ResourceHeadersView.prototype._refreshURL):
            (WebInspector.ResourceHeadersView.prototype._refreshQueryString):
            (WebInspector.ResourceHeadersView.prototype._refreshFormData):
            (WebInspector.ResourceHeadersView.prototype._refreshRequestPayload):
            (WebInspector.ResourceHeadersView.prototype._refreshParms):
            (WebInspector.ResourceHeadersView.prototype._toggleURLdecoding):
            (WebInspector.ResourceHeadersView.prototype._getHeaderValue):
            (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
            (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
            (WebInspector.ResourceHeadersView.prototype._refreshHTTPInformation):
            (WebInspector.ResourceHeadersView.prototype._refreshHeaders):
            * inspector/front-end/ResourceView.js:
            (WebInspector.ResourceView):
            (WebInspector.ResourceView.prototype.hasContent):
            * inspector/front-end/ResourcesPanel.js:
            (WebInspector.ResourcesPanel.prototype.show):
            (WebInspector.ResourcesPanel.prototype.showResource):
            (WebInspector.ResourcesPanel.prototype._showResourceView):
            * inspector/front-end/ScriptsPanel.js:
            (WebInspector.ScriptsPanel.prototype.show):
            (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
            * inspector/front-end/SourceView.js:
            (WebInspector.SourceView):
            (WebInspector.SourceView.prototype.show):
            (WebInspector.SourceView.prototype.hide):
            (WebInspector.SourceView.prototype.resize):
            (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
            (WebInspector.SourceView.prototype.hasContent):
            (WebInspector.SourceView.prototype.updateLocalContent):
            (WebInspector.SourceView.prototype.selectLocalContentTab):
            * inspector/front-end/StylesSidebarPane.js:
            * inspector/front-end/TabbedPane.js:
            (WebInspector.TabbedPane):
            (WebInspector.TabbedPane.prototype.appendTab):
            (WebInspector.TabbedPane.prototype.selectTab):
            (WebInspector.TabbedPane.prototype._showTab):
            (WebInspector.TabbedPane.prototype._hideTab):
            * inspector/front-end/WebKit.qrc:
            * inspector/front-end/inspector.css:
            (.webkit-line-gutter-backdrop):
            (.resource-view):
            (.resource-view.visible):
            (.resource-view.font):
            (.resource-view.image > .image):
            (.resource-view.image > .info):
            (.storage-view):
            (.storage-view .data-grid):
            (.storage-empty-view, .storage-view .storage-table-error):
            (.storage-view .storage-table-error):
            * inspector/front-end/inspector.html:
            * inspector/front-end/networkPanel.css:
            (.network-cell-subtitle):
            (.network-header-subtitle):
            (#network-views .network-item-view .tabbed-pane-header):
            (#network-views.small .network-item-view .tabbed-pane-header):
            (.network-item-view):
            (.network-item-view.visible):
            (.network-item-view .tabbed-pane-header):
            (.network-item-view .scope-bar li):
            (.resource-headers-view):
            (.resource-headers-view.visible):
            (.resource-headers-view .outline-disclosure .parent):
            (.resource-headers-view .outline-disclosure .children li):
            (.resource-headers-view .outline-disclosure li.expanded .header-count):
            (.resource-headers-view .outline-disclosure .header-name):
            (.resource-headers-view .outline-disclosure .header-value):
            (.resource-headers-view .outline-disclosure .raw-form-data):
            (.resource-cookies-view):
            (.resource-cookies-view.visible):
            (.resource-cookies-view .data-grid):
            (.resource-cookies-view .data-grid .row-group):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72655 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 5333eef..372bf8f 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,150 @@
+2010-11-22  Pavel Feldman  <pfeldman at chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        Web Inspector: refactor ResourceView hierarchy.
+        https://bugs.webkit.org/show_bug.cgi?id=49864
+
+        This refactoring splits ResourceView.js into:
+            NetworkItemView.js (tabbed pane)
+            ResourceHeadersView.js (header tab)
+            ResourceCookiesView.js (cookies tab)
+            ResourceView.js (base class for content tab).
+        CookiesTable was extracted from CookieItemsView and
+        brushed up. headersVisible flag has been removed.
+
+        * English.lproj/localizedStrings.js:
+        * WebCore.gypi:
+        * WebCore.vcproj/WebCore.vcproj:
+        * inspector/front-end/CookieItemsView.js:
+        (WebInspector.CookieItemsView):
+        (WebInspector.CookieItemsView.prototype.get statusBarItems):
+        (WebInspector.CookieItemsView.prototype.hide):
+        (WebInspector.CookieItemsView.prototype.resize):
+        (WebInspector.CookieItemsView.prototype._updateWithCookies):
+        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
+        (WebInspector.CookieItemsView.prototype._deleteCookie):
+        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):
+        (WebInspector.CookieItemsView.prototype._refreshButtonClicked):
+        (WebInspector.SimpleCookiesTable):
+        (WebInspector.SimpleCookiesTable.prototype.setCookies):
+        (WebInspector.SimpleCookiesTable.prototype.resize):
+        * inspector/front-end/CookiesTable.js: Added.
+        (WebInspector.CookiesTable):
+        (WebInspector.CookiesTable.prototype.updateWidths):
+        (WebInspector.CookiesTable.prototype.setCookies):
+        (WebInspector.CookiesTable.prototype.addCookiesFolder):
+        (WebInspector.CookiesTable.prototype.get selectedCookie):
+        (WebInspector.CookiesTable.prototype._rebuildTable):
+        (WebInspector.CookiesTable.prototype.reset):
+        (WebInspector.CookiesTable.prototype._populateNode):
+        (WebInspector.CookiesTable.prototype._totalSize):
+        (WebInspector.CookiesTable.prototype._sortCookies.localeCompare):
+        (WebInspector.CookiesTable.prototype._sortCookies.numberCompare):
+        (WebInspector.CookiesTable.prototype._sortCookies.expiresCompare):
+        (WebInspector.CookiesTable.prototype._sortCookies):
+        (WebInspector.CookiesTable.prototype._createGridNode):
+        (WebInspector.CookiesTable.prototype._onDeleteFromGrid):
+        * inspector/front-end/FileSystemView.js:
+        (WebInspector.FileSystemView.prototype._selectFileSystemTab):
+        (WebInspector.FileSystemView.prototype.selectTemporaryFileSystemTab):
+        * inspector/front-end/FontView.js:
+        (WebInspector.FontView.prototype.hasContent):
+        (WebInspector.FontView.prototype._createContentIfNeeded):
+        (WebInspector.FontView.prototype.show):
+        (WebInspector.FontView.prototype.updateFontPreviewSize):
+        * inspector/front-end/ImageView.js:
+        (WebInspector.ImageView.prototype.hasContent):
+        (WebInspector.ImageView.prototype.show):
+        * inspector/front-end/NetworkItemView.js: Added.
+        (WebInspector.NetworkItemView):
+        (WebInspector.NetworkItemView.prototype.show):
+        (WebInspector.NetworkItemView.prototype._selectTab):
+        (WebInspector.NetworkItemView.prototype._tabSelected):
+        (WebInspector.NetworkItemView.prototype.resize):
+        (WebInspector.NetworkItemView.prototype.selectContentTab):
+        * inspector/front-end/NetworkPanel.js:
+        (WebInspector.NetworkPanel.prototype.show):
+        (WebInspector.NetworkPanel.prototype.refreshResource):
+        (WebInspector.NetworkPanel.prototype._showResource):
+        (WebInspector.NetworkPanel.prototype._closeVisibleResource):
+        * inspector/front-end/ResourceCookiesView.js: Added.
+        (WebInspector.ResourceCookiesView):
+        (WebInspector.ResourceCookiesView.prototype.show):
+        * inspector/front-end/ResourceHeadersView.js: Added.
+        (WebInspector.ResourceHeadersView):
+        (WebInspector.ResourceHeadersView.prototype._refreshURL):
+        (WebInspector.ResourceHeadersView.prototype._refreshQueryString):
+        (WebInspector.ResourceHeadersView.prototype._refreshFormData):
+        (WebInspector.ResourceHeadersView.prototype._refreshRequestPayload):
+        (WebInspector.ResourceHeadersView.prototype._refreshParms):
+        (WebInspector.ResourceHeadersView.prototype._toggleURLdecoding):
+        (WebInspector.ResourceHeadersView.prototype._getHeaderValue):
+        (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
+        (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
+        (WebInspector.ResourceHeadersView.prototype._refreshHTTPInformation):
+        (WebInspector.ResourceHeadersView.prototype._refreshHeaders):
+        * inspector/front-end/ResourceView.js:
+        (WebInspector.ResourceView):
+        (WebInspector.ResourceView.prototype.hasContent):
+        * inspector/front-end/ResourcesPanel.js:
+        (WebInspector.ResourcesPanel.prototype.show):
+        (WebInspector.ResourcesPanel.prototype.showResource):
+        (WebInspector.ResourcesPanel.prototype._showResourceView):
+        * inspector/front-end/ScriptsPanel.js:
+        (WebInspector.ScriptsPanel.prototype.show):
+        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
+        * inspector/front-end/SourceView.js:
+        (WebInspector.SourceView):
+        (WebInspector.SourceView.prototype.show):
+        (WebInspector.SourceView.prototype.hide):
+        (WebInspector.SourceView.prototype.resize):
+        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
+        (WebInspector.SourceView.prototype.hasContent):
+        (WebInspector.SourceView.prototype.updateLocalContent):
+        (WebInspector.SourceView.prototype.selectLocalContentTab):
+        * inspector/front-end/StylesSidebarPane.js:
+        * inspector/front-end/TabbedPane.js:
+        (WebInspector.TabbedPane):
+        (WebInspector.TabbedPane.prototype.appendTab):
+        (WebInspector.TabbedPane.prototype.selectTab):
+        (WebInspector.TabbedPane.prototype._showTab):
+        (WebInspector.TabbedPane.prototype._hideTab):
+        * inspector/front-end/WebKit.qrc:
+        * inspector/front-end/inspector.css:
+        (.webkit-line-gutter-backdrop):
+        (.resource-view):
+        (.resource-view.visible):
+        (.resource-view.font):
+        (.resource-view.image > .image):
+        (.resource-view.image > .info):
+        (.storage-view):
+        (.storage-view .data-grid):
+        (.storage-empty-view, .storage-view .storage-table-error):
+        (.storage-view .storage-table-error):
+        * inspector/front-end/inspector.html:
+        * inspector/front-end/networkPanel.css:
+        (.network-cell-subtitle):
+        (.network-header-subtitle):
+        (#network-views .network-item-view .tabbed-pane-header):
+        (#network-views.small .network-item-view .tabbed-pane-header):
+        (.network-item-view):
+        (.network-item-view.visible):
+        (.network-item-view .tabbed-pane-header):
+        (.network-item-view .scope-bar li):
+        (.resource-headers-view):
+        (.resource-headers-view.visible):
+        (.resource-headers-view .outline-disclosure .parent):
+        (.resource-headers-view .outline-disclosure .children li):
+        (.resource-headers-view .outline-disclosure li.expanded .header-count):
+        (.resource-headers-view .outline-disclosure .header-name):
+        (.resource-headers-view .outline-disclosure .header-value):
+        (.resource-headers-view .outline-disclosure .raw-form-data):
+        (.resource-cookies-view):
+        (.resource-cookies-view.visible):
+        (.resource-cookies-view .data-grid):
+        (.resource-cookies-view .data-grid .row-group):
+
 2010-11-24  Pavel Feldman  <pfeldman at chromium.org>
 
         Reviewed by Yury Semikhatsky.
diff --git a/WebCore/English.lproj/localizedStrings.js b/WebCore/English.lproj/localizedStrings.js
index a6255ec..2e3764e 100644
Binary files a/WebCore/English.lproj/localizedStrings.js and b/WebCore/English.lproj/localizedStrings.js differ
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index cbf7814..7a72f3e 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -4433,6 +4433,7 @@
             'inspector/front-end/ContextMenu.js',
             'inspector/front-end/CookieItemsView.js',
             'inspector/front-end/CookieParser.js',
+            'inspector/front-end/CookiesTable.js',
             'inspector/front-end/CSSCompletions.js',
             'inspector/front-end/CSSStyleModel.js',
             'inspector/front-end/Database.js',
@@ -4467,6 +4468,7 @@
             'inspector/front-end/inspector.js',
             'inspector/front-end/KeyboardShortcut.js',
             'inspector/front-end/MetricsSidebarPane.js',
+            'inspector/front-end/NetworkItemView.js',
             'inspector/front-end/NetworkPanel.js',
             'inspector/front-end/Object.js',
             'inspector/front-end/ObjectPropertiesSection.js',
@@ -4482,7 +4484,9 @@
             'inspector/front-end/RemoteObject.js',
             'inspector/front-end/Resource.js',
             'inspector/front-end/ResourceCategory.js',
+            'inspector/front-end/ResourceCookiesView.js',
             'inspector/front-end/ResourceManager.js',
+            'inspector/front-end/ResourceHeadersView.js',
             'inspector/front-end/ResourceView.js',
             'inspector/front-end/ResourcesPanel.js',
             'inspector/front-end/ScopeChainSidebarPane.js',
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 85db6fd..ce0c85f 100755
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -64750,6 +64750,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\inspector\front-end\CookiesTable.js"
+					>
+				</File>
+				<File
 					RelativePath="..\inspector\front-end\CookieParser.js"
 					>
 				</File>
@@ -64906,6 +64910,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\inspector\front-end\NetworkItemView.js"
+					>
+				</File>
+				<File
 					RelativePath="..\inspector\front-end\NetworkPanel.js"
 					>
 				</File>
@@ -64970,6 +64978,14 @@
 					>
 				</File>
 				<File
+					RelativePath="..\inspector\front-end\ResourceCookiesView.js"
+					>
+				</File>
+				<File
+					RelativePath="..\inspector\front-end\ResourceHeadersView.js"
+					>
+				</File>
+				<File
 					RelativePath="..\inspector\front-end\ResourceManager.js"
 					>
 				</File>
diff --git a/WebCore/inspector/front-end/CookieItemsView.js b/WebCore/inspector/front-end/CookieItemsView.js
index b2da875..75c7f84 100644
--- a/WebCore/inspector/front-end/CookieItemsView.js
+++ b/WebCore/inspector/front-end/CookieItemsView.js
@@ -27,149 +27,19 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-WebInspector.CookiesTable = function()
-{
-    WebInspector.View.call(this);
-
-    this.element.addStyleClass("table");
-}
-
-WebInspector.CookiesTable.prototype = {
-    resize: function()
-    {
-        if (!this._dataGrid)
-            return;
-
-        if (this._autoSizingDone)
-            this._dataGrid.updateWidths();
-        else {
-            this._autoSizingDone = true;
-            this._dataGrid.autoSizeColumns(4, 45, 1);
-        }
-    },
-
-    _createDataGrid: function(expandable)
-    {
-        var columns = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {} };
-        columns[0].title = WebInspector.UIString("Name");
-        columns[0].sortable = true;
-        columns[0].disclosure = expandable;
-        columns[1].title = WebInspector.UIString("Value");
-        columns[1].sortable = true;
-        columns[2].title = WebInspector.UIString("Domain");
-        columns[2].sortable = true;
-        columns[3].title = WebInspector.UIString("Path");
-        columns[3].sortable = true;
-        columns[4].title = WebInspector.UIString("Expires");
-        columns[4].sortable = true;
-        columns[5].title = WebInspector.UIString("Size");
-        columns[5].aligned = "right";
-        columns[5].sortable = true;
-        columns[6].title = WebInspector.UIString("HTTP");
-        columns[6].aligned = "centered";
-        columns[6].sortable = true;
-        columns[7].title = WebInspector.UIString("Secure");
-        columns[7].aligned = "centered";
-        columns[7].sortable = true;
-
-        var deleteCallback = this._deleteCookieCallback ? this._deleteCookieCallback.bind(this) : null;
-        this._dataGrid = new WebInspector.DataGrid(columns, null, deleteCallback);
-        this._dataGrid.addEventListener("sorting changed", this._populateDataGrid, this);
-        this.element.appendChild(this._dataGrid.element);
-    },
-
-    _populateCookies: function(parentNode, cookies)
-    {
-        var selectedCookie = this._dataGrid.selectedNode ? this._dataGrid.selectedNode.cookie : null;
-        parentNode.removeChildren();
-        if (!cookies)
-            return;
-        this._sortCookies(cookies);
-        var totalSize = 0;
-        for (var i = 0; i < cookies.length; ++i) {
-            var cookieNode = this._createGridNode(cookies[i]);
-            parentNode.appendChild(cookieNode);
-            if (selectedCookie === cookies[i])
-                cookieNode.selected = true;
-        }
-    },
-
-    _sortCookies: function(cookies)
-    {
-        var sortDirection = this._dataGrid.sortOrder === "ascending" ? 1 : -1;
-
-        function localeCompare(field, cookie1, cookie2)
-        {
-            return sortDirection * (cookie1[field] + "").localeCompare(cookie2[field] + "")
-        }
-
-        function numberCompare(field, cookie1, cookie2)
-        {
-            return sortDirection * (cookie1[field] - cookie2[field]);
-        }
-
-        function expiresCompare(cookie1, cookie2)
-        {
-            if (cookie1.session !== cookie2.session)
-                return sortDirection * (cookie1.session ? 1 : -1);
-
-            if (cookie1.session)
-                return 0;
-
-            return sortDirection * (cookie1.expires - cookie2.expires);
-        }
-
-        var comparator;
-        switch (parseInt(this._dataGrid.sortColumnIdentifier)) {
-            case 0: comparator = localeCompare.bind(this, "name"); break;
-            case 1: comparator = localeCompare.bind(this, "value"); break;
-            case 2: comparator = localeCompare.bind(this, "domain"); break;
-            case 3: comparator = localeCompare.bind(this, "path"); break;
-            case 4: comparator = expiresCompare; break;
-            case 5: comparator = numberCompare.bind(this, "size"); break;
-            case 6: comparator = localeCompare.bind(this, "httpOnly"); break;
-            case 7: comparator = localeCompare.bind(this, "secure"); break;
-            default: localeCompare.bind(this, "name");
-        }
-
-        cookies.sort(comparator);
-    },
-
-    _createGridNode: function(cookie)
-    {
-        var data = {};
-        data[0] = cookie.name;
-        data[1] = cookie.value;
-        data[2] = cookie.domain || "";
-        data[3] = cookie.path || "";
-        data[4] = cookie.type === WebInspector.Cookie.Type.Request ? "" :
-            (cookie.session ? WebInspector.UIString("Session") : new Date(cookie.expires).toGMTString());
-        data[5] = cookie.size;
-        data[6] = (cookie.httpOnly ? "\u2713" : ""); // Checkmark
-        data[7] = (cookie.secure ? "\u2713" : ""); // Checkmark
-
-        var node = new WebInspector.DataGridNode(data);
-        node.cookie = cookie;
-        node.selectable = true;
-        return node;
-    }
-};
-
-WebInspector.CookiesTable.prototype.__proto__ = WebInspector.View.prototype;
-
 WebInspector.CookieItemsView = function(treeElement, cookieDomain)
 {
-    WebInspector.CookiesTable.call(this);
+    WebInspector.View.call(this);
 
     this.element.addStyleClass("storage-view");
 
-    this.deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item");
-    this.deleteButton.visible = false;
-    this.deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false);
+    this._deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item");
+    this._deleteButton.visible = false;
+    this._deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false);
+
+    this._refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
+    this._refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false);
 
-    this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
-    this.refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false);
-    
     this._treeElement = treeElement;
     this._cookieDomain = cookieDomain;
 
@@ -182,7 +52,7 @@ WebInspector.CookieItemsView = function(treeElement, cookieDomain)
 WebInspector.CookieItemsView.prototype = {
     get statusBarItems()
     {
-        return [this.refreshButton.element, this.deleteButton.element];
+        return [this._refreshButton.element, this._deleteButton.element];
     },
 
     show: function(parentElement)
@@ -194,7 +64,13 @@ WebInspector.CookieItemsView.prototype = {
     hide: function()
     {
         WebInspector.View.prototype.hide.call(this);
-        this.deleteButton.visible = false;
+        this._deleteButton.visible = false;
+    },
+
+    resize: function()
+    {
+        if (this._cookiesTable)
+            this._cookiesTable.updateWidths();
     },
 
     _update: function()
@@ -204,47 +80,35 @@ WebInspector.CookieItemsView.prototype = {
 
     _updateWithCookies: function(allCookies, isAdvanced)
     {
-        if (isAdvanced)
-            this._filterCookiesForDomain(allCookies);
-        else
-            this._cookies = allCookies;
+        this._cookies = isAdvanced ? this._filterCookiesForDomain(allCookies) : allCookies;
+
         if (!this._cookies.length) {
             // Nothing to show.
             this._emptyMsgElement.removeStyleClass("hidden");
-            this.deleteButton.visible = false;
-            if (this._dataGrid)
-                this._dataGrid.element.addStyleClass("hidden");
+            this._deleteButton.visible = false;
+            if (this._cookiesTable)
+                this._cookiesTable.element.addStyleClass("hidden");
             return;
         }
 
-        if (!this._dataGrid) {
-            if (isAdvanced) {
-                this._createDataGrid();
-                this._populateDataGrid();
-                this._dataGrid.autoSizeColumns(6, 33);
-                this._treeElement.subtitle = String.sprintf(WebInspector.UIString("%d cookies (%s)"), this._cookies.length,
-                    Number.bytesToString(this._totalSize, WebInspector.UIString));
-            } else {
-                this._createSimpleDataGrid();
-                this._populateSimpleDataGrid();
-                this._dataGrid.autoSizeColumns(20, 80);
-            }
-        } else {
-            if (isAdvanced)
-                this._populateDataGrid();
-            else
-                this._populateSimpleDataGrid();
+        if (!this._cookiesTable) {
+            this._cookiesTable = isAdvanced ? new WebInspector.CookiesTable(this._cookieDomain, false, this._deleteCookie.bind(this)) : new WebInspector.SimpleCookiesTable();
+            this.element.appendChild(this._cookiesTable.element);
         }
 
-        this._dataGrid.element.removeStyleClass("hidden");
+        this._cookiesTable.setCookies(this._cookies);
+        this._cookiesTable.element.removeStyleClass("hidden");
         this._emptyMsgElement.addStyleClass("hidden");
-        if (isAdvanced)
-            this.deleteButton.visible = true;
+        if (isAdvanced) {
+            this._treeElement.subtitle = String.sprintf(WebInspector.UIString("%d cookies (%s)"), this._cookies.length,
+                Number.bytesToString(this._totalSize, WebInspector.UIString));
+            this._deleteButton.visible = true;
+        }
     },
 
     _filterCookiesForDomain: function(allCookies)
     {
-        this._cookies = [];
+        var cookies = [];
         var resourceURLsForDocumentURL = [];
         this._totalSize = 0;
 
@@ -265,34 +129,52 @@ WebInspector.CookieItemsView.prototype = {
                     this._totalSize += size;
                     if (!pushed) {
                         pushed = true;
-                        this._cookies.push(allCookies[i]);
+                        cookies.push(allCookies[i]);
                     }
                 }
             }
         }
+        return cookies;
     },
 
-    _populateDataGrid: function()
+    _deleteCookie: function(cookie)
     {
-        this._populateCookies(this._dataGrid, this._cookies);
+        InspectorBackend.deleteCookie(cookie.name, this._cookieDomain);
+        this._update();
     },
 
-    _createSimpleDataGrid: function()
+    _deleteButtonClicked: function()
     {
-        var columns = {};
-        columns[0] = {};
-        columns[1] = {};
-        columns[0].title = WebInspector.UIString("Name");
-        columns[1].title = WebInspector.UIString("Value");
-
-        this._dataGrid = new WebInspector.DataGrid(columns);
-        this.element.appendChild(this._dataGrid.element);
-        this._dataGrid.updateWidths();
+        if (this._cookiesTable.selectedCookie)
+            this._deleteCookie(this._cookiesTable.selectedCookie);
     },
 
-    _populateSimpleDataGrid: function()
+    _refreshButtonClicked: function(event)
+    {
+        this._update();
+    }
+}
+
+WebInspector.CookieItemsView.prototype.__proto__ = WebInspector.View.prototype;
+
+WebInspector.SimpleCookiesTable = function()
+{
+    this.element = document.createElement("div");
+    var columns = {};
+    columns[0] = {};
+    columns[1] = {};
+    columns[0].title = WebInspector.UIString("Name");
+    columns[1].title = WebInspector.UIString("Value");
+
+    this._dataGrid = new WebInspector.DataGrid(columns);
+    this._dataGrid.autoSizeColumns(20, 80);
+    this.element.appendChild(this._dataGrid.element);
+    this._dataGrid.updateWidths();
+}
+
+WebInspector.SimpleCookiesTable.prototype = {
+    setCookies: function(cookies)
     {
-        var cookies = this._cookies;
         this._dataGrid.removeChildren();
         var addedCookies = {};
         for (var i = 0; i < cookies.length; ++i) {
@@ -310,26 +192,9 @@ WebInspector.CookieItemsView.prototype = {
         this._dataGrid.children[0].selected = true;
     },
 
-    _deleteButtonClicked: function(event)
-    {
-        if (!this._dataGrid || !this._dataGrid.selectedNode)
-            return;
-
-        this._deleteCookieCallback(this._dataGrid.selectedNode);
-    },
-
-    _deleteCookieCallback: function(node)
-    {
-        var cookie = node.cookie;
-        InspectorBackend.deleteCookie(cookie.name, this._cookieDomain);
-        this._update();
-    },
-
-    _refreshButtonClicked: function(event)
+    resize: function()
     {
-        this._update();
+        if (this._dataGrid)
+            this._dataGrid.updateWidths();
     }
 }
-
-WebInspector.CookieItemsView.prototype.__proto__ = WebInspector.CookiesTable.prototype;
-
diff --git a/WebCore/inspector/front-end/CookiesTable.js b/WebCore/inspector/front-end/CookiesTable.js
new file mode 100644
index 0000000..2382a8e
--- /dev/null
+++ b/WebCore/inspector/front-end/CookiesTable.js
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2009 Apple Inc.  All rights reserved.
+ * Copyright (C) 2009 Joseph Pecoraro
+ * Copyright (C) 2010 Google 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.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE 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 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.CookiesTable = function(cookieDomain, expandable, deleteCallback)
+{
+    this._cookieDomain = cookieDomain;
+
+    var columns = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {} };
+    columns[0].title = WebInspector.UIString("Name");
+    columns[0].sortable = true;
+    columns[0].disclosure = expandable;
+    columns[0].width = "24%";
+    columns[1].title = WebInspector.UIString("Value");
+    columns[1].sortable = true;
+    columns[1].width = "34%";
+    columns[2].title = WebInspector.UIString("Domain");
+    columns[2].sortable = true;
+    columns[2].width = "7%";
+    columns[3].title = WebInspector.UIString("Path");
+    columns[3].sortable = true;
+    columns[3].width = "7%";
+    columns[4].title = WebInspector.UIString("Expires");
+    columns[4].sortable = true;
+    columns[4].width = "7%";
+    columns[5].title = WebInspector.UIString("Size");
+    columns[5].aligned = "right";
+    columns[5].sortable = true;
+    columns[5].width = "7%";
+    columns[6].title = WebInspector.UIString("HTTP");
+    columns[6].aligned = "centered";
+    columns[6].sortable = true;
+    columns[6].width = "7%";
+    columns[7].title = WebInspector.UIString("Secure");
+    columns[7].aligned = "centered";
+    columns[7].sortable = true;
+    columns[7].width = "7%";
+
+    this._dataGrid = new WebInspector.DataGrid(columns, null, deleteCallback ? this._onDeleteFromGrid.bind(this) : null);
+    this._dataGrid.addEventListener("sorting changed", this._rebuildTable, this);
+
+    this.element = this._dataGrid.element;
+    this._data = [];
+    this._deleteCallback = deleteCallback;
+}
+
+WebInspector.CookiesTable.prototype = {
+    updateWidths: function()
+    {
+        if (this._dataGrid)
+            this._dataGrid.updateWidths();
+    },
+
+    setCookies: function(cookies)
+    {
+        this._data = [{cookies: cookies}];
+        this._rebuildTable();
+    },
+
+    addCookiesFolder: function(folderName, cookies)
+    {
+        this._data.push({cookies: cookies, folderName: folderName});
+        this._rebuildTable();
+    },
+
+    get selectedCookie()
+    {
+        var node = this._dataGrid.selectedNode;
+        return node ? node.cookie : null;
+    },
+
+    _rebuildTable: function()
+    {
+        this._dataGrid.removeChildren();
+        for (var i = 0; i < this._data.length; ++i) {
+            var item = this._data[i];
+            if (item.folderName) {
+                var groupData = [ item.folderName, "", "", "", "", this._totalSize(item.cookies), "", "" ];
+                var groupNode = new WebInspector.DataGridNode(groupData);
+                groupNode.selectable = true;
+                this._dataGrid.appendChild(groupNode);
+                groupNode.element.addStyleClass("row-group");
+                this._populateNode(groupNode, item.cookies);
+                groupNode.expand();
+            } else
+                this._populateNode(this._dataGrid, item.cookies);
+        }
+    },
+
+    _populateNode: function(parentNode, cookies)
+    {
+        var selectedCookie = this.selectedCookie;
+        parentNode.removeChildren();
+        if (!cookies)
+            return;
+
+        this._sortCookies(cookies);
+        for (var i = 0; i < cookies.length; ++i) {
+            var cookieNode = this._createGridNode(cookies[i]);
+            parentNode.appendChild(cookieNode);
+            if (selectedCookie === cookies[i])
+                cookieNode.selected = true;
+        }
+    },
+
+    _totalSize: function(cookies)
+    {
+        var totalSize = 0;
+        for (var i = 0; cookies && i < cookies.length; ++i)
+            totalSize += cookies[i].size;
+        return totalSize;
+    },
+
+    _sortCookies: function(cookies)
+    {
+        var sortDirection = this._dataGrid.sortOrder === "ascending" ? 1 : -1;
+
+        function localeCompare(field, cookie1, cookie2)
+        {
+            return sortDirection * (cookie1[field] + "").localeCompare(cookie2[field] + "")
+        }
+
+        function numberCompare(field, cookie1, cookie2)
+        {
+            return sortDirection * (cookie1[field] - cookie2[field]);
+        }
+
+        function expiresCompare(cookie1, cookie2)
+        {
+            if (cookie1.session !== cookie2.session)
+                return sortDirection * (cookie1.session ? 1 : -1);
+
+            if (cookie1.session)
+                return 0;
+
+            return sortDirection * (cookie1.expires - cookie2.expires);
+        }
+
+        var comparator;
+        switch (parseInt(this._dataGrid.sortColumnIdentifier)) {
+            case 0: comparator = localeCompare.bind(this, "name"); break;
+            case 1: comparator = localeCompare.bind(this, "value"); break;
+            case 2: comparator = localeCompare.bind(this, "domain"); break;
+            case 3: comparator = localeCompare.bind(this, "path"); break;
+            case 4: comparator = expiresCompare; break;
+            case 5: comparator = numberCompare.bind(this, "size"); break;
+            case 6: comparator = localeCompare.bind(this, "httpOnly"); break;
+            case 7: comparator = localeCompare.bind(this, "secure"); break;
+            default: localeCompare.bind(this, "name");
+        }
+
+        cookies.sort(comparator);
+    },
+
+    _createGridNode: function(cookie)
+    {
+        var data = {};
+        data[0] = cookie.name;
+        data[1] = cookie.value;
+        data[2] = cookie.domain || "";
+        data[3] = cookie.path || "";
+        data[4] = cookie.type === WebInspector.Cookie.Type.Request ? "" :
+            (cookie.session ? WebInspector.UIString("Session") : new Date(cookie.expires).toGMTString());
+        data[5] = cookie.size;
+        const checkmark = "\u2713";
+        data[6] = (cookie.httpOnly ? checkmark : "");
+        data[7] = (cookie.secure ? checkmark : "");
+
+        var node = new WebInspector.DataGridNode(data);
+        node.cookie = cookie;
+        node.selectable = true;
+        return node;
+    },
+
+    _onDeleteFromGrid: function(node)
+    {
+        this._deleteCallback(node.cookie);
+    }
+}
diff --git a/WebCore/inspector/front-end/FileSystemView.js b/WebCore/inspector/front-end/FileSystemView.js
index 0c6636b..8cd0107 100644
--- a/WebCore/inspector/front-end/FileSystemView.js
+++ b/WebCore/inspector/front-end/FileSystemView.js
@@ -125,12 +125,12 @@ WebInspector.FileSystemView.prototype = {
     },
     _selectFileSystemTab: function()
     {
-        this._tabbedPane.selectTabById("persistent");
+        this._tabbedPane.selectTab("persistent");
     },
     
     selectTemporaryFileSystemTab: function()
     {
-        this._tabbedPane.selectTabById("temp");
+        this._tabbedPane.selectTab("temp");
     },
 
     _revealPersistentFolderInOS: function()
diff --git a/WebCore/inspector/front-end/FontView.js b/WebCore/inspector/front-end/FontView.js
index 78a7e70..82559ef 100644
--- a/WebCore/inspector/front-end/FontView.js
+++ b/WebCore/inspector/front-end/FontView.js
@@ -34,12 +34,12 @@ WebInspector.FontView = function(resource)
 }
 
 WebInspector.FontView.prototype = {
-    hasContentTab: function()
+    hasContent: function()
     {
         return true;
     },
 
-    contentTabSelected: function()
+    _createContentIfNeeded: function()
     {
         if (this.fontPreviewElement)
             return;
@@ -51,7 +51,7 @@ WebInspector.FontView.prototype = {
         document.head.appendChild(this.fontStyleElement);
 
         this.fontPreviewElement = document.createElement("div");
-        this.contentElement.appendChild(this.fontPreviewElement);
+        this.element.appendChild(this.fontPreviewElement);
 
         this.fontPreviewElement.style.setProperty("font-family", uniqueFontName, null);
         this.fontPreviewElement.innerHTML = "ABCDEFGHIJKLM<br>NOPQRSTUVWXYZ<br>abcdefghijklm<br>nopqrstuvwxyz<br>1234567890";
@@ -63,6 +63,7 @@ WebInspector.FontView.prototype = {
     show: function(parentElement)
     {
         WebInspector.ResourceView.prototype.show.call(this, parentElement);
+        this._createContentIfNeeded();
         this.updateFontPreviewSize();
     },
 
@@ -86,7 +87,7 @@ WebInspector.FontView.prototype = {
         const width = this.fontPreviewElement.offsetWidth;
 
         // Subtract some padding. This should match the padding in the CSS plus room for the scrollbar.
-        const containerWidth = this.contentElement.offsetWidth - 50;
+        const containerWidth = this.element.offsetWidth - 50;
 
         if (!height || !width || !containerWidth) {
             this.fontPreviewElement.style.removeProperty("font-size");
diff --git a/WebCore/inspector/front-end/ImageView.js b/WebCore/inspector/front-end/ImageView.js
index f70fad6..54a16bb 100644
--- a/WebCore/inspector/front-end/ImageView.js
+++ b/WebCore/inspector/front-end/ImageView.js
@@ -34,26 +34,33 @@ WebInspector.ImageView = function(resource)
 }
 
 WebInspector.ImageView.prototype = {
-    hasContentTab: function()
+    hasContent: function()
     {
         return true;
     },
 
-    contentTabSelected: function()
+    show: function(parentElement)
+    {
+        WebInspector.ResourceView.prototype.show.call(this, parentElement);
+        this._createContentIfNeeded();
+    },
+
+    _createContentIfNeeded: function()
     {
         if (this._container)
             return;
-        this._container = document.createElement("div");
-        this._container.className = "image";
-        this.contentElement.appendChild(this._container);
+
+        var imageContainer = document.createElement("div");
+        imageContainer.className = "image";
+        this.element.appendChild(imageContainer);
 
         var imagePreviewElement = document.createElement("img");
         imagePreviewElement.addStyleClass("resource-image-view");
-        this._container.appendChild(imagePreviewElement);
+        imageContainer.appendChild(imagePreviewElement);
 
         this._container = document.createElement("div");
         this._container.className = "info";
-        this.contentElement.appendChild(this._container);
+        this.element.appendChild(this._container);
 
         var imageNameElement = document.createElement("h1");
         imageNameElement.className = "title";
diff --git a/WebCore/inspector/front-end/NetworkItemView.js b/WebCore/inspector/front-end/NetworkItemView.js
new file mode 100644
index 0000000..2dde849
--- /dev/null
+++ b/WebCore/inspector/front-end/NetworkItemView.js
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2010 Google 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+ * OWNER OR 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.NetworkItemView = function(resource)
+{
+    WebInspector.View.call(this);
+
+    this.element.addStyleClass("network-item-view");
+
+    this._headersView = new WebInspector.ResourceHeadersView(resource);
+    this._contentView = WebInspector.ResourceManager.resourceViewForResource(resource);
+    this._cookiesView = new WebInspector.ResourceCookiesView(resource);
+
+    this._tabbedPane = new WebInspector.TabbedPane(this.element);
+    this._tabbedPane.appendTab("headers", WebInspector.UIString("Headers"), this._headersView);
+    if (this._contentView.hasContent()) {
+        // Reusing this view, so hide it at first.
+        this._contentView.visible = false;
+        this._tabbedPane.appendTab("content", WebInspector.UIString("Content"), this._contentView);
+    }
+    this._tabbedPane.appendTab("cookies", WebInspector.UIString("Cookies"), this._cookiesView);
+    this._tabbedPane.addEventListener("tab-selected", this._tabSelected, this);
+}
+
+WebInspector.NetworkItemView.prototype = {
+    show: function(parentElement)
+    {
+        WebInspector.View.prototype.show.call(this, parentElement);
+        this._selectTab();
+    },
+
+    _selectTab: function(tabId)
+    {
+        if (!tabId)
+            tabId = WebInspector.settings.resourceViewTab;
+
+        if (!this._tabbedPane.selectTab(tabId)) {
+            this._isInFallbackSelection = true;
+            this._tabbedPane.selectTab("headers");
+            delete this._isInFallbackSelection;
+        }
+    },
+
+    _tabSelected: function(event)
+    {
+        WebInspector.settings.resourceViewTab = event.data.tabId;
+    },
+
+    resize: function()
+    {
+        if (this._cookiesView.visible)
+            this._cookiesView.resize();
+    }
+}
+
+WebInspector.NetworkItemView.prototype.__proto__ = WebInspector.View.prototype;
diff --git a/WebCore/inspector/front-end/NetworkPanel.js b/WebCore/inspector/front-end/NetworkPanel.js
index 8ef1b74..99be479 100644
--- a/WebCore/inspector/front-end/NetworkPanel.js
+++ b/WebCore/inspector/front-end/NetworkPanel.js
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.
  * Copyright (C) 2008, 2009 Anthony Ricaud <rik at webkit.org>
- * Copyright (C) 2009, 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2010 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -641,27 +641,11 @@ WebInspector.NetworkPanel.prototype = {
     show: function()
     {
         WebInspector.Panel.prototype.show.call(this);
-
         this._refreshIfNeeded();
 
-        var visibleView = this.visibleView;
-        if (this.visibleResource) {
-            this.visibleView.headersVisible = true;
+        if (this.visibleView)
             this.visibleView.show(this._viewsContainerElement);
-        } else if (visibleView)
-            visibleView.show();
 
-        // Hide any views that are visible that are not this panel's current visible view.
-        // This can happen when a ResourceView is visible in the Scripts panel then switched
-        // to the this panel.
-        var resourcesLength = this._resources.length;
-        for (var i = 0; i < resourcesLength; ++i) {
-            var resource = this._resources[i];
-            var view = resource._resourcesView;
-            if (!view || view === visibleView)
-                continue;
-            view.visible = false;
-        }
         this._dataGrid.updateWidths();
         this._positionSummaryBar();
     },
@@ -696,13 +680,6 @@ WebInspector.NetworkPanel.prototype = {
         WebInspector.Panel.prototype.performSearch.call(this, query);
     },
 
-    get visibleView()
-    {
-        if (this.visibleResource)
-            return this.visibleResource._resourcesView;
-        return null;
-    },
-
     refresh: function()
     {
         this._needsRefresh = false;
@@ -829,8 +806,6 @@ WebInspector.NetworkPanel.prototype = {
 
         resource._resourcesView = newView;
 
-        newView.headersVisible = oldView.headersVisible;
-
         if (oldViewParentNode)
             newView.show(oldViewParentNode);
 
@@ -856,22 +831,15 @@ WebInspector.NetworkPanel.prototype = {
 
         this._toggleViewingResourceMode();
 
-        if (this.visibleResource && this.visibleResource._resourcesView)
-            this.visibleResource._resourcesView.hide();
+        if (this.visibleView) {
+            this.visibleView.detach();
+            delete this.visibleView;
+        }
 
-        var view = WebInspector.ResourceManager.resourceViewForResource(resource);
-        view.headersVisible = true;
+        var view = new WebInspector.NetworkItemView(resource);
         view.show(this._viewsContainerElement);
+        this.visibleView = view;
 
-        if (line) {
-            view.selectContentTab();
-            if (view.revealLine)
-                view.revealLine(line);
-            if (view.highlightLine)
-                view.highlightLine(line);
-        }
-
-        this.visibleResource = resource;
         this.updateSidebarWidth();
     },
 
@@ -879,9 +847,10 @@ WebInspector.NetworkPanel.prototype = {
     {
         this.element.removeStyleClass("viewing-resource");
 
-        if (this.visibleResource && this.visibleResource._resourcesView)
-            this.visibleResource._resourcesView.hide();
-        delete this.visibleResource;
+        if (this.visibleView) {
+            this.visibleView.detach();
+            delete this.visibleView;
+        }
 
         if (this._lastSelectedGraphTreeElement)
             this._lastSelectedGraphTreeElement.select(true);
diff --git a/WebCore/inspector/front-end/ResourceCookiesView.js b/WebCore/inspector/front-end/ResourceCookiesView.js
new file mode 100644
index 0000000..e419070
--- /dev/null
+++ b/WebCore/inspector/front-end/ResourceCookiesView.js
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009, 2010 Google 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+ * OWNER OR 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.ResourceCookiesView = function(resource)
+{
+    WebInspector.View.call(this);
+    this.element.addStyleClass("resource-cookies-view");
+
+    this._resource = resource;
+
+    resource.addEventListener("requestHeaders changed", this.show, this);
+    resource.addEventListener("responseHeaders changed", this.show, this);
+}
+
+WebInspector.ResourceCookiesView.prototype = {
+    show: function(parentElement)
+    {
+        if (!this._resource.requestCookies && !this._resource.responseCookies) {
+            if (!this._emptyMsgElement) {
+                this._emptyMsgElement = document.createElement("div");
+                this._emptyMsgElement.className = "storage-empty-view";
+                this._emptyMsgElement.textContent = WebInspector.UIString("This request has no cookies.");
+                this.element.appendChild(this._emptyMsgElement);
+            }
+            WebInspector.View.prototype.show.call(this, parentElement);
+            return;
+        }
+
+        if (this._emptyMsgElement)
+            this._emptyMsgElement.parentElement.removeChild(this._emptyMsgElement);
+
+        this._cookiesTable = new WebInspector.CookiesTable(null, true, true);
+        this._cookiesTable.addCookiesFolder(WebInspector.UIString("Request Cookies"), this._resource.requestCookies);
+        this._cookiesTable.addCookiesFolder(WebInspector.UIString("Response Cookies"), this._resource.responseCookies);
+        this.element.appendChild(this._cookiesTable.element);
+
+        WebInspector.View.prototype.show.call(this, parentElement);
+        this._cookiesTable.updateWidths();
+    }
+}
+
+WebInspector.ResourceCookiesView.prototype.__proto__ = WebInspector.View.prototype;
diff --git a/WebCore/inspector/front-end/ResourceHeadersView.js b/WebCore/inspector/front-end/ResourceHeadersView.js
new file mode 100644
index 0000000..ee1010f
--- /dev/null
+++ b/WebCore/inspector/front-end/ResourceHeadersView.js
@@ -0,0 +1,276 @@
+/*
+ * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.
+ * Copyright (C) IBM Corp. 2009  All rights reserved.
+ * Copyright (C) 2010 Google 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. 
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE 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 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.ResourceHeadersView = function(resource)
+{
+    WebInspector.View.call(this);
+    this.element.addStyleClass("resource-headers-view");
+
+    this._resource = resource;
+
+    this._headersListElement = document.createElement("ol");
+    this._headersListElement.className = "outline-disclosure";
+    this.element.appendChild(this._headersListElement);
+
+    this._headersTreeOutline = new TreeOutline(this._headersListElement);
+    this._headersTreeOutline.expandTreeElementsWhenArrowing = true;
+
+    this._urlTreeElement = new TreeElement("", null, false);
+    this._urlTreeElement.selectable = false;
+    this._headersTreeOutline.appendChild(this._urlTreeElement);
+
+    this._requestMethodTreeElement = new TreeElement("", null, false);
+    this._requestMethodTreeElement.selectable = false;
+    this._headersTreeOutline.appendChild(this._requestMethodTreeElement);
+
+    this._statusCodeTreeElement = new TreeElement("", null, false);
+    this._statusCodeTreeElement.selectable = false;
+    this._headersTreeOutline.appendChild(this._statusCodeTreeElement);
+     
+    this._requestHeadersTreeElement = new TreeElement("", null, true);
+    this._requestHeadersTreeElement.expanded = true;
+    this._requestHeadersTreeElement.selectable = false;
+    this._headersTreeOutline.appendChild(this._requestHeadersTreeElement);
+
+    this._decodeHover = WebInspector.UIString("Double-Click to toggle between URL encoded and decoded formats");
+    this._decodeRequestParameters = true;
+
+    this._queryStringTreeElement = new TreeElement("", null, true);
+    this._queryStringTreeElement.expanded = true;
+    this._queryStringTreeElement.selectable = false;
+    this._queryStringTreeElement.hidden = true;
+    this._headersTreeOutline.appendChild(this._queryStringTreeElement);
+
+    this._formDataTreeElement = new TreeElement("", null, true);
+    this._formDataTreeElement.expanded = true;
+    this._formDataTreeElement.selectable = false;
+    this._formDataTreeElement.hidden = true;
+    this._headersTreeOutline.appendChild(this._formDataTreeElement);
+
+    this._requestPayloadTreeElement = new TreeElement(WebInspector.UIString("Request Payload"), null, true);
+    this._requestPayloadTreeElement.expanded = true;
+    this._requestPayloadTreeElement.selectable = false;
+    this._requestPayloadTreeElement.hidden = true;
+    this._headersTreeOutline.appendChild(this._requestPayloadTreeElement);
+
+    this._responseHeadersTreeElement = new TreeElement("", null, true);
+    this._responseHeadersTreeElement.expanded = true;
+    this._responseHeadersTreeElement.selectable = false;
+    this._headersTreeOutline.appendChild(this._responseHeadersTreeElement);
+
+    resource.addEventListener("requestHeaders changed", this._refreshRequestHeaders, this);
+    resource.addEventListener("responseHeaders changed", this._refreshResponseHeaders, this);
+    resource.addEventListener("finished", this._refreshHTTPInformation, this);
+
+    this._refreshURL();
+    this._refreshQueryString();
+    this._refreshRequestHeaders();
+    this._refreshResponseHeaders();
+    this._refreshHTTPInformation();
+}
+
+WebInspector.ResourceHeadersView.prototype = {
+
+    _refreshURL: function()
+    {
+        this._urlTreeElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Request URL") + ":</div>" +
+            "<div class=\"header-value source-code\">" + this._resource.url.escapeHTML() + "</div>";
+    },
+
+    _refreshQueryString: function()
+    {
+        var queryParameters = this._resource.queryParameters;
+        this._queryStringTreeElement.hidden = !queryParameters;
+        if (queryParameters)
+            this._refreshParms(WebInspector.UIString("Query String Parameters"), queryParameters, this._queryStringTreeElement);
+    },
+
+    _refreshFormData: function()
+    {
+        this._formDataTreeElement.hidden = true;
+        this._requestPayloadTreeElement.hidden = true;
+
+        var formData = this._resource.requestFormData;
+        if (!formData)
+            return;
+
+        var formParameters = this._resource.formParameters;
+        if (formParameters) {
+            this._formDataTreeElement.hidden = false;
+            this._refreshParms(WebInspector.UIString("Form Data"), formParameters, this._formDataTreeElement);
+        } else {
+            this._requestPayloadTreeElement.hidden = false;
+            this._refreshRequestPayload(formData);
+        }
+    },
+
+    _refreshRequestPayload: function(formData)
+    {
+        this._requestPayloadTreeElement.removeChildren();
+
+        var title = "<div class=\"raw-form-data header-value source-code\">" + formData.escapeHTML() + "</div>";
+        var parmTreeElement = new TreeElement(null, null, false);
+        parmTreeElement.titleHTML = title;
+        parmTreeElement.selectable = false;
+        this._requestPayloadTreeElement.appendChild(parmTreeElement);
+    },
+
+    _refreshParms: function(title, parms, parmsTreeElement)
+    {
+        parmsTreeElement.removeChildren();
+
+        parmsTreeElement.titleHTML = title + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", parms.length) + "</span>";
+
+        for (var i = 0; i < parms.length; ++i) {
+            var name = parms[i].name;
+            var value = parms[i].value;
+
+            var errorDecoding = false;
+            if (this._decodeRequestParameters) {
+                if (value.indexOf("%") >= 0) {
+                    try {
+                        value = decodeURIComponent(value);
+                    } catch(e) {
+                        errorDecoding = true;
+                    }
+                }
+                    
+                value = value.replace(/\+/g, " ");
+            }
+
+            valueEscaped = value.escapeHTML();
+            if (errorDecoding)
+                valueEscaped += " <span class=\"error-message\">" + WebInspector.UIString("(unable to decode value)").escapeHTML() + "</span>";
+
+            var title = "<div class=\"header-name\">" + name.escapeHTML() + ":</div>";
+            title += "<div class=\"header-value source-code\">" + valueEscaped + "</div>";
+
+            var parmTreeElement = new TreeElement(null, null, false);
+            parmTreeElement.titleHTML = title;
+            parmTreeElement.selectable = false;
+            parmTreeElement.tooltip = this._decodeHover;
+            parmTreeElement.ondblclick = this._toggleURLdecoding.bind(this);
+            parmsTreeElement.appendChild(parmTreeElement);
+        }
+    },
+
+    _toggleURLdecoding: function(event)
+    {
+        this._decodeRequestParameters = !this._decodeRequestParameters;
+        this._refreshQueryString();
+        this._refreshFormData();
+    },
+
+    _getHeaderValue: function(headers, key)
+    {
+        var lowerKey = key.toLowerCase();
+        for (var testKey in headers) {
+            if (testKey.toLowerCase() === lowerKey)
+                return headers[testKey];
+        }
+    },
+
+    _refreshRequestHeaders: function()
+    {
+        var additionalRow = null;
+        if (typeof this._resource.webSocketRequestKey3 !== "undefined")
+            additionalRow = {header: "(Key3)", value: this._resource.webSocketRequestKey3};
+        this._refreshHeaders(WebInspector.UIString("Request Headers"), this._resource.sortedRequestHeaders, additionalRow, this._requestHeadersTreeElement);
+        this._refreshFormData();
+    },
+
+    _refreshResponseHeaders: function()
+    {
+        var additionalRow = null;
+        if (typeof this._resource.webSocketChallengeResponse !== "undefined")
+            additionalRow = {header: "(Challenge Response)", value: this._resource.webSocketChallengeResponse};
+        this._refreshHeaders(WebInspector.UIString("Response Headers"), this._resource.sortedResponseHeaders, additionalRow, this._responseHeadersTreeElement);
+    },
+
+    _refreshHTTPInformation: function()
+    {
+        var requestMethodElement = this._requestMethodTreeElement;
+        requestMethodElement.hidden = !this._resource.statusCode;
+        var statusCodeElement = this._statusCodeTreeElement;
+        statusCodeElement.hidden = !this._resource.statusCode;
+        var statusCodeImage = "";
+
+        if (this._resource.statusCode) {
+            var statusImageSource = "";
+            if (this._resource.statusCode < 300)
+                statusImageSource = "Images/successGreenDot.png";
+            else if (this._resource.statusCode < 400)
+                statusImageSource = "Images/warningOrangeDot.png";
+            else
+                statusImageSource = "Images/errorRedDot.png";
+
+            var statusTextEscaped = this._resource.statusCode + " " + this._resource.statusText.escapeHTML();
+            statusCodeImage = "<img class=\"resource-status-image\" src=\"" + statusImageSource + "\" title=\"" + statusTextEscaped + "\">";
+    
+            requestMethodElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Request Method") + ":</div>" +
+                "<div class=\"header-value source-code\">" + this._resource.requestMethod + "</div>";
+
+            statusCodeElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Status Code") + ":</div>" +
+                statusCodeImage + "<div class=\"header-value source-code\">" + statusTextEscaped + "</div>";
+        }
+    },
+    
+    _refreshHeaders: function(title, headers, additionalRow, headersTreeElement)
+    {
+        headersTreeElement.removeChildren();
+
+        var length = headers.length;
+        headersTreeElement.titleHTML = title.escapeHTML() + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", length) + "</span>";
+        headersTreeElement.hidden = !length;
+
+        var length = headers.length;
+        for (var i = 0; i < length; ++i) {
+            var title = "<div class=\"header-name\">" + headers[i].header.escapeHTML() + ":</div>";
+            title += "<div class=\"header-value source-code\">" + headers[i].value.escapeHTML() + "</div>"
+
+            var headerTreeElement = new TreeElement(null, null, false);
+            headerTreeElement.titleHTML = title;
+            headerTreeElement.selectable = false;
+            headersTreeElement.appendChild(headerTreeElement);
+        }
+
+        if (additionalRow) {
+            var title = "<div class=\"header-name\">" + additionalRow.header.escapeHTML() + ":</div>";
+            title += "<div class=\"header-value source-code\">" + additionalRow.value.escapeHTML() + "</div>"
+
+            var headerTreeElement = new TreeElement(null, null, false);
+            headerTreeElement.titleHTML = title;
+            headerTreeElement.selectable = false;
+            headersTreeElement.appendChild(headerTreeElement);
+        }
+    }
+}
+
+WebInspector.ResourceHeadersView.prototype.__proto__ = WebInspector.View.prototype;
diff --git a/WebCore/inspector/front-end/ResourceView.js b/WebCore/inspector/front-end/ResourceView.js
index 19e3052..a284da1 100644
--- a/WebCore/inspector/front-end/ResourceView.js
+++ b/WebCore/inspector/front-end/ResourceView.js
@@ -7,13 +7,13 @@
  * are met:
  *
  * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
+ *     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. 
+ *     documentation and/or other materials provided with the distribution.
  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
  *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission. 
+ *     from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -30,403 +30,15 @@
 WebInspector.ResourceView = function(resource)
 {
     WebInspector.View.call(this);
-
     this.element.addStyleClass("resource-view");
-
     this.resource = resource;
-
-    this.tabbedPane = new WebInspector.TabbedPane(this.element);
-
-    this.headersElement = document.createElement("div");
-    this.headersElement.className = "resource-view-headers";
-    this.tabbedPane.appendTab("headers", WebInspector.UIString("Headers"), this.headersElement, this._selectTab.bind(this, "headers"));
-
-    if (this.hasContentTab()) {
-        this.contentElement = document.createElement("div");
-        this.contentElement.className = "resource-view-content";
-        this.tabbedPane.appendTab("content", WebInspector.UIString("Content"), this.contentElement, this._selectTab.bind(this, "content"));
-    }
-
-    this.headersListElement = document.createElement("ol");
-    this.headersListElement.className = "outline-disclosure";
-    this.headersElement.appendChild(this.headersListElement);
-
-    this.headersTreeOutline = new TreeOutline(this.headersListElement);
-    this.headersTreeOutline.expandTreeElementsWhenArrowing = true;
-
-    this.urlTreeElement = new TreeElement("", null, false);
-    this.urlTreeElement.selectable = false;
-    this.headersTreeOutline.appendChild(this.urlTreeElement);
-
-    this.requestMethodTreeElement = new TreeElement("", null, false);
-    this.requestMethodTreeElement.selectable = false;
-    this.headersTreeOutline.appendChild(this.requestMethodTreeElement);
-
-    this.statusCodeTreeElement = new TreeElement("", null, false);
-    this.statusCodeTreeElement.selectable = false;
-    this.headersTreeOutline.appendChild(this.statusCodeTreeElement);
-     
-    this.requestHeadersTreeElement = new TreeElement("", null, true);
-    this.requestHeadersTreeElement.expanded = true;
-    this.requestHeadersTreeElement.selectable = false;
-    this.headersTreeOutline.appendChild(this.requestHeadersTreeElement);
-
-    this._decodeHover = WebInspector.UIString("Double-Click to toggle between URL encoded and decoded formats");
-    this._decodeRequestParameters = true;
-
-    this.queryStringTreeElement = new TreeElement("", null, true);
-    this.queryStringTreeElement.expanded = true;
-    this.queryStringTreeElement.selectable = false;
-    this.queryStringTreeElement.hidden = true;
-    this.headersTreeOutline.appendChild(this.queryStringTreeElement);
-
-    this.formDataTreeElement = new TreeElement("", null, true);
-    this.formDataTreeElement.expanded = true;
-    this.formDataTreeElement.selectable = false;
-    this.formDataTreeElement.hidden = true;
-    this.headersTreeOutline.appendChild(this.formDataTreeElement);
-
-    this.requestPayloadTreeElement = new TreeElement(WebInspector.UIString("Request Payload"), null, true);
-    this.requestPayloadTreeElement.expanded = true;
-    this.requestPayloadTreeElement.selectable = false;
-    this.requestPayloadTreeElement.hidden = true;
-    this.headersTreeOutline.appendChild(this.requestPayloadTreeElement);
-
-    this.responseHeadersTreeElement = new TreeElement("", null, true);
-    this.responseHeadersTreeElement.expanded = true;
-    this.responseHeadersTreeElement.selectable = false;
-    this.headersTreeOutline.appendChild(this.responseHeadersTreeElement);
-
-    this.headersVisible = true;
-
-    resource.addEventListener("requestHeaders changed", this._refreshRequestHeaders, this);
-    resource.addEventListener("responseHeaders changed", this._refreshResponseHeaders, this);
-    resource.addEventListener("finished", this._refreshHTTPInformation, this);
-
-    this._refreshURL();
-    this._refreshQueryString();
-    this._refreshRequestHeaders();
-    this._refreshResponseHeaders();
-    this._refreshHTTPInformation();
-    this._selectTab();
 }
 
 WebInspector.ResourceView.prototype = {
-    attach: function()
-    {
-        if (!this.element.parentNode) {
-            var parentElement = (document.getElementById("resource-views") || document.getElementById("script-resource-views"));
-            if (parentElement)
-                parentElement.appendChild(this.element);
-        }
-    },
-
-    show: function(parentElement)
-    {
-        WebInspector.View.prototype.show.call(this, parentElement);
-        this._selectTab();
-    },
-
-    set headersVisible(x)
+    hasContent: function()
     {
-        if (x === this._headersVisible)
-            return;
-        this._headersVisible = x;
-        if (x)
-            this.element.addStyleClass("headers-visible"); 
-        else
-            this.element.removeStyleClass("headers-visible"); 
-        this._selectTab();
-    },
-
-    resize: function()
-    {
-        if (this._cookiesView && !this._cookiesView.element.hasStyleClass("hidden"))
-            this._cookiesView.resize();
-    },
-
-    selectContentTab: function()
-    {
-        this._selectTab("content");
-    },
-
-    _selectTab: function(tab)
-    {
-        if (tab)
-            WebInspector.settings.resourceViewTab = tab;
-        else {
-            var preferredTab = WebInspector.settings.resourceViewTab;
-            tab = "content";
-
-            // Honor user tab preference (if we can). Fallback to content if headers not visible, headers otherwise.
-            if (this._headersVisible)
-                tab = this.tabbedPane.hasTab(preferredTab) ? preferredTab : "headers";
-        }
-        this.tabbedPane.selectTabById(tab);
-        if (tab === "content" && this.hasContentTab())
-            this.contentTabSelected();
-    },
-
-    hasContentTab: function()
-    {
-        // Derived classes should override this method and define this.contentTabSelected for content rendering.
         return false;
-    },
-
-    _refreshURL: function()
-    {
-        this.urlTreeElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Request URL") + ":</div>" +
-            "<div class=\"header-value source-code\">" + this.resource.url.escapeHTML() + "</div>";
-    },
-
-    _refreshQueryString: function()
-    {
-        var queryParameters = this.resource.queryParameters;
-        this.queryStringTreeElement.hidden = !queryParameters;
-        if (queryParameters)
-            this._refreshParms(WebInspector.UIString("Query String Parameters"), queryParameters, this.queryStringTreeElement);
-    },
-
-    _refreshFormData: function()
-    {
-        this.formDataTreeElement.hidden = true;
-        this.requestPayloadTreeElement.hidden = true;
-
-        var formData = this.resource.requestFormData;
-        if (!formData)
-            return;
-
-        var formParameters = this.resource.formParameters;
-        if (formParameters) {
-            this.formDataTreeElement.hidden = false;
-            this._refreshParms(WebInspector.UIString("Form Data"), formParameters, this.formDataTreeElement);
-        } else {
-            this.requestPayloadTreeElement.hidden = false;
-            this._refreshRequestPayload(formData);
-        }
-    },
-
-    _refreshRequestPayload: function(formData)
-    {
-        this.requestPayloadTreeElement.removeChildren();
-
-        var title = "<div class=\"raw-form-data header-value source-code\">" + formData.escapeHTML() + "</div>";
-        var parmTreeElement = new TreeElement(null, null, false);
-        parmTreeElement.titleHTML = title;
-        parmTreeElement.selectable = false;
-        this.requestPayloadTreeElement.appendChild(parmTreeElement);
-    },
-
-    _refreshParms: function(title, parms, parmsTreeElement)
-    {
-        parmsTreeElement.removeChildren();
-
-        parmsTreeElement.titleHTML = title + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", parms.length) + "</span>";
-
-        for (var i = 0; i < parms.length; ++i) {
-            var name = parms[i].name;
-            var value = parms[i].value;
-
-            var errorDecoding = false;
-            if (this._decodeRequestParameters) {
-                if (value.indexOf("%") >= 0) {
-                    try {
-                        value = decodeURIComponent(value);
-                    } catch(e) {
-                        errorDecoding = true;
-                    }
-                }
-                    
-                value = value.replace(/\+/g, " ");
-            }
-
-            valueEscaped = value.escapeHTML();
-            if (errorDecoding)
-                valueEscaped += " <span class=\"error-message\">" + WebInspector.UIString("(unable to decode value)").escapeHTML() + "</span>";
-
-            var title = "<div class=\"header-name\">" + name.escapeHTML() + ":</div>";
-            title += "<div class=\"header-value source-code\">" + valueEscaped + "</div>";
-
-            var parmTreeElement = new TreeElement(null, null, false);
-            parmTreeElement.titleHTML = title;
-            parmTreeElement.selectable = false;
-            parmTreeElement.tooltip = this._decodeHover;
-            parmTreeElement.ondblclick = this._toggleURLdecoding.bind(this);
-            parmsTreeElement.appendChild(parmTreeElement);
-        }
-    },
-
-    _toggleURLdecoding: function(event)
-    {
-        this._decodeRequestParameters = !this._decodeRequestParameters;
-        this._refreshQueryString();
-        this._refreshFormData();
-    },
-
-    _getHeaderValue: function(headers, key)
-    {
-        var lowerKey = key.toLowerCase();
-        for (var testKey in headers) {
-            if (testKey.toLowerCase() === lowerKey)
-                return headers[testKey];
-        }
-    },
-
-    _refreshRequestHeaders: function()
-    {
-        var additionalRow = null;
-        if (typeof this.resource.webSocketRequestKey3 !== "undefined")
-            additionalRow = {header: "(Key3)", value: this.resource.webSocketRequestKey3};
-        this._refreshHeaders(WebInspector.UIString("Request Headers"), this.resource.sortedRequestHeaders, additionalRow, this.requestHeadersTreeElement);
-        this._refreshFormData();
-        this._refreshCookies();
-    },
-
-    _refreshResponseHeaders: function()
-    {
-        var additionalRow = null;
-        if (typeof this.resource.webSocketChallengeResponse !== "undefined")
-            additionalRow = {header: "(Challenge Response)", value: this.resource.webSocketChallengeResponse};
-        this._refreshHeaders(WebInspector.UIString("Response Headers"), this.resource.sortedResponseHeaders, additionalRow, this.responseHeadersTreeElement);
-        this._refreshCookies();
-    },
-
-    _refreshHTTPInformation: function()
-    {
-        var requestMethodElement = this.requestMethodTreeElement;
-        requestMethodElement.hidden = !this.resource.statusCode;
-        var statusCodeElement = this.statusCodeTreeElement;
-        statusCodeElement.hidden = !this.resource.statusCode;
-        var statusCodeImage = "";
-
-        if (this.resource.statusCode) {
-            var statusImageSource = "";
-            if (this.resource.statusCode < 300)
-                statusImageSource = "Images/successGreenDot.png";
-            else if (this.resource.statusCode < 400)
-                statusImageSource = "Images/warningOrangeDot.png";
-            else
-                statusImageSource = "Images/errorRedDot.png";
-
-            var statusTextEscaped = this.resource.statusCode + " " + this.resource.statusText.escapeHTML();
-            statusCodeImage = "<img class=\"resource-status-image\" src=\"" + statusImageSource + "\" title=\"" + statusTextEscaped + "\">";
-    
-            requestMethodElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Request Method") + ":</div>" +
-                "<div class=\"header-value source-code\">" + this.resource.requestMethod + "</div>";
-
-            statusCodeElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Status Code") + ":</div>" +
-                statusCodeImage + "<div class=\"header-value source-code\">" + statusTextEscaped + "</div>";
-        }
-    },
-    
-    _refreshHeaders: function(title, headers, additionalRow, headersTreeElement)
-    {
-        headersTreeElement.removeChildren();
-
-        var length = headers.length;
-        headersTreeElement.titleHTML = title.escapeHTML() + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", length) + "</span>";
-        headersTreeElement.hidden = !length;
-
-        var length = headers.length;
-        for (var i = 0; i < length; ++i) {
-            var title = "<div class=\"header-name\">" + headers[i].header.escapeHTML() + ":</div>";
-            title += "<div class=\"header-value source-code\">" + headers[i].value.escapeHTML() + "</div>"
-
-            var headerTreeElement = new TreeElement(null, null, false);
-            headerTreeElement.titleHTML = title;
-            headerTreeElement.selectable = false;
-            headersTreeElement.appendChild(headerTreeElement);
-        }
-
-        if (additionalRow) {
-            var title = "<div class=\"header-name\">" + additionalRow.header.escapeHTML() + ":</div>";
-            title += "<div class=\"header-value source-code\">" + additionalRow.value.escapeHTML() + "</div>"
-
-            var headerTreeElement = new TreeElement(null, null, false);
-            headerTreeElement.titleHTML = title;
-            headerTreeElement.selectable = false;
-            headersTreeElement.appendChild(headerTreeElement);
-        }
-    },
-
-    _refreshCookies: function()
-    {
-        if (!this._cookiesView) {
-            if (!this.resource.requestCookies && !this.resource.responseCookies)
-                return;
-            this._cookiesView = new WebInspector.ResourceCookiesTab();
-            this.tabbedPane.appendTab("cookies", WebInspector.UIString("Cookies"), this._cookiesView, this._selectTab.bind(this, "cookies"));
-        }
-        this._cookiesView.requestCookies = this.resource.requestCookies;
-        this._cookiesView.responseCookies = this.resource.responseCookies;
     }
 }
 
 WebInspector.ResourceView.prototype.__proto__ = WebInspector.View.prototype;
-
-WebInspector.ResourceCookiesTab = function()
-{
-    WebInspector.CookiesTable.call(this);
-    this.element.addStyleClass("resource-view-cookies");
-    this._requestCookies = [];
-    this._responseCookies = [];
-    this._createDataGrid(true);
-    this._requestCookiesNode = this._createFolder(WebInspector.UIString("Request Cookies"));
-    this._responseCookiesNode = this._createFolder(WebInspector.UIString("Response Cookies"));
-}
-
-WebInspector.ResourceCookiesTab.prototype = {
-    show: function(parentElement)
-    {
-        WebInspector.CookiesTable.prototype.show.call(this, parentElement);
-        this.resize();
-    },
-
-    set requestCookies(cookies)
-    {
-        if (this._requestCookies === cookies)
-            return;
-        this._requestCookies = cookies;
-        this._populateCookies(this._requestCookiesNode, this._requestCookies);
-    },
-
-    set responseCookies(cookies)
-    {
-        if (this._responseCookies === cookies)
-            return;
-        this._responseCookies = cookies;
-        this._populateCookies(this._responseCookiesNode, this._responseCookies);
-    },
-
-    _populateDataGrid: function()
-    {
-        this._populateCookies(this._requestCookiesNode, this._requestCookies);
-        this._populateCookies(this._responseCookiesNode, this._responseCookies);
-    },
-
-    _populateCookies: function(parentNode, cookies)
-    {
-        WebInspector.CookiesTable.prototype._populateCookies.call(this, parentNode, cookies);
-        var totalSize = 0;
-        if (cookies) {
-            for (var i = 0; i < cookies.length; ++i)
-                totalSize += cookies[i].size;
-        }
-        parentNode.expanded = true;
-        parentNode.data[5] = totalSize;
-        parentNode.refresh();
-    },
-
-    _createFolder: function(name)
-    {
-        var data = [ name, "", "", "", "", 0, "", "" ];
-        var node = new WebInspector.DataGridNode(data);
-        node.selectable = true;
-        node.expanded = true;
-        this._dataGrid.appendChild(node);
-        node.element.addStyleClass("row-group");
-        return node;
-    }
-};
-
-WebInspector.ResourceCookiesTab.prototype.__proto__ = WebInspector.CookiesTable.prototype;
diff --git a/WebCore/inspector/front-end/ResourcesPanel.js b/WebCore/inspector/front-end/ResourcesPanel.js
index 200267d..6911207 100644
--- a/WebCore/inspector/front-end/ResourcesPanel.js
+++ b/WebCore/inspector/front-end/ResourcesPanel.js
@@ -104,11 +104,8 @@ WebInspector.ResourcesPanel.prototype = {
     {
         WebInspector.Panel.prototype.show.call(this);
 
-        if (this.visibleView instanceof WebInspector.ResourceView) {
-            // SourceViews are shared between the panels.
-            this.visibleView.headersVisible = false;
+        if (this.visibleView instanceof WebInspector.ResourceView)
             this.visibleView.show(this.storageViews);
-        }
 
         if (this._initializedDefaultSelection)
             return;
@@ -379,7 +376,6 @@ WebInspector.ResourcesPanel.prototype = {
 
         if (line) {
             var view = WebInspector.ResourceManager.resourceViewForResource(resource);
-            view.selectContentTab();
             if (view.revealLine)
                 view.revealLine(line);
             if (view.highlightLine)
@@ -391,7 +387,6 @@ WebInspector.ResourcesPanel.prototype = {
     _showResourceView: function(resource)
     {
         var view = WebInspector.ResourceManager.resourceViewForResource(resource);
-        view.headersVisible = false;
         this._innerShowView(view);
     },
 
diff --git a/WebCore/inspector/front-end/ScriptsPanel.js b/WebCore/inspector/front-end/ScriptsPanel.js
index 0dce95e..0a3c7a9 100644
--- a/WebCore/inspector/front-end/ScriptsPanel.js
+++ b/WebCore/inspector/front-end/ScriptsPanel.js
@@ -213,11 +213,9 @@ WebInspector.ScriptsPanel.prototype = {
         WebInspector.Panel.prototype.show.call(this);
         this.sidebarResizeElement.style.right = (this.sidebarElement.offsetWidth - 3) + "px";
 
-        if (this.visibleView) {
-            if (this.visibleView instanceof WebInspector.ResourceView)
-                this.visibleView.headersVisible = false;
+        if (this.visibleView)
             this.visibleView.show(this.viewsContainerElement);
-        }
+
         if (this._attachDebuggerWhenShown) {
             InspectorBackend.enableDebugger(false);
             delete this._attachDebuggerWhenShown;
@@ -598,10 +596,9 @@ WebInspector.ScriptsPanel.prototype = {
             return;
 
         var view;
-        if (scriptOrResource instanceof WebInspector.Resource) {
+        if (scriptOrResource instanceof WebInspector.Resource)
             view = WebInspector.ResourceManager.resourceViewForResource(scriptOrResource);
-            view.headersVisible = false;
-        } else if (scriptOrResource instanceof WebInspector.Script)
+        else if (scriptOrResource instanceof WebInspector.Script)
             view = this.scriptViewForScript(scriptOrResource);
 
         if (!view)
diff --git a/WebCore/inspector/front-end/SourceView.js b/WebCore/inspector/front-end/SourceView.js
index c7a35f7..9ff46e0 100644
--- a/WebCore/inspector/front-end/SourceView.js
+++ b/WebCore/inspector/front-end/SourceView.js
@@ -33,7 +33,7 @@ WebInspector.SourceView = function(resource)
     this.element.addStyleClass("source");
 
     var canEditScripts = WebInspector.panels.scripts && WebInspector.panels.scripts.canEditScripts() && resource.type === WebInspector.Resource.Type.Script;
-    this.sourceFrame = new WebInspector.SourceFrame(this.contentElement, this._addBreakpoint.bind(this), canEditScripts ? this._editLine.bind(this) : null, this._continueToLine.bind(this));
+    this.sourceFrame = new WebInspector.SourceFrame(this.element, this._addBreakpoint.bind(this), canEditScripts ? this._editLine.bind(this) : null, this._continueToLine.bind(this));
     resource.addEventListener("finished", this._resourceLoadingFinished, this);
     this._frameNeedsSetup = true;
 }
@@ -50,9 +50,8 @@ WebInspector.SourceView.prototype = {
     show: function(parentElement)
     {
         WebInspector.ResourceView.prototype.show.call(this, parentElement);
+        this.setupSourceFrameIfNeeded();
         this.sourceFrame.visible = true;
-        if (this.localSourceFrame)
-            this.localSourceFrame.visible = true;
         this.resize();
     },
 
@@ -62,8 +61,6 @@ WebInspector.SourceView.prototype = {
         if (!this._frameNeedsSetup)
             this.sourceFrame.clearLineHighlight();
         WebInspector.View.prototype.hide.call(this);
-        if (this.localSourceFrame)
-            this.localSourceFrame.visible = false;
         this._currentSearchResultIndex = -1;
     },
 
@@ -71,9 +68,6 @@ WebInspector.SourceView.prototype = {
     {
         if (this.sourceFrame)
             this.sourceFrame.resize();
-        if (this.localSourceFrame)
-            this.localSourceFrame.resize();
-        WebInspector.ResourceView.prototype.resize.call(this);
     },
 
     setupSourceFrameIfNeeded: function()
@@ -81,22 +75,15 @@ WebInspector.SourceView.prototype = {
         if (!this._frameNeedsSetup)
             return;
 
-        this.attach();
-
         delete this._frameNeedsSetup;
         this.resource.requestContent(this._contentLoaded.bind(this));
     },
 
-    hasContentTab: function()
+    hasContent: function()
     {
         return true;
     },
 
-    contentTabSelected: function()
-    {
-        this.setupSourceFrameIfNeeded();
-    },
-
     _contentLoaded: function(content)
     {
         var mimeType = this._canonicalMimeType(this.resource);
@@ -208,25 +195,6 @@ WebInspector.SourceView.prototype = {
         findSearchMatches.call(this, query, finishedCallback);
     },
 
-    updateLocalContent: function(content, mimeType)
-    {
-        if (!this.localContentElement) {
-            this.localContentElement = document.createElement("div");
-            this.localContentElement.className = "resource-view-content";
-            this.tabbedPane.appendTab("local", WebInspector.UIString("Local"), this.localContentElement, this.selectLocalContentTab.bind(this));
-            this.localSourceFrame = new WebInspector.SourceFrame(this.localContentElement, this._addBreakpoint.bind(this), null, this._continueToLine.bind(this));
-        }
-        this.localSourceFrame.setContent(mimeType, content, "");
-    },
-
-    selectLocalContentTab: function()
-    {
-        this.tabbedPane.selectTabById("local");
-        this.localSourceFrame.visible = true;
-        if ("resize" in this)
-            this.resize();
-    },
-
     jumpToFirstSearchResult: function()
     {
         if (!this._searchResults || !this._searchResults.length)
diff --git a/WebCore/inspector/front-end/TabbedPane.js b/WebCore/inspector/front-end/TabbedPane.js
index 1ed9725..84ab702 100644
--- a/WebCore/inspector/front-end/TabbedPane.js
+++ b/WebCore/inspector/front-end/TabbedPane.js
@@ -32,62 +32,55 @@ WebInspector.TabbedPane = function(element)
 {
     this.element = element || document.createElement("div");
     this.element.addStyleClass("tabbed-pane");
-    this.tabsElement = this.element.createChild("div", "tabbed-pane-header");
-    this.contentElement = this.element.createChild("div", "tabbed-pane-content");
-
-    this._tabObjects = {};
+    this._tabsElement = this.element.createChild("div", "tabbed-pane-header");
+    this._contentElement = this.element.createChild("div", "tabbed-pane-content");
+    this._tabs = {};
 }
 
 WebInspector.TabbedPane.prototype = {
-    appendTab: function(id, tabTitle, content, tabClickListener)
+    appendTab: function(id, tabTitle, view)
     {
         var tabElement = document.createElement("li");
         tabElement.textContent = tabTitle;
-        tabElement.addEventListener("click", tabClickListener, false);
-        this.tabsElement.appendChild(tabElement);
-        var tabObject = { tab: tabElement };
-        if (content instanceof HTMLElement) {
-            tabObject.element = content;
-            this.contentElement.appendChild(content);
-        }
-        else {
-            this.contentElement.appendChild(content.element);
-            tabObject.view = content;
-        }
-        this._tabObjects[id] = tabObject;
-    },
+        tabElement.addEventListener("click", this.selectTab.bind(this, id, true), false);
 
-    hasTab: function(tabId)
-    {
-        return tabId in this._tabObjects;
+        this._tabsElement.appendChild(tabElement);
+        this._contentElement.appendChild(view.element);
+
+        this._tabs[id] = { tabElement: tabElement, view: view }
     },
-     
-    selectTabById: function(tabId)
+
+    selectTab: function(id, userGesture)
     {
-        for (var id in this._tabObjects) {
-            if (id === tabId)
-                this._showTab(this._tabObjects[id]);
-            else
-                this._hideTab(this._tabObjects[id]);
+        if (!(id in this._tabs))
+            return false;
+
+        if (this._currentTab) {
+            this._hideTab(this._currentTab)
+            delete this._currentTab;
         }
-        return this.hasTab(tabId);
+
+        var tab = this._tabs[id];
+        this._showTab(tab);
+        this._currentTab = tab;
+        if (userGesture) {
+            var event = {tabId: id};
+            this.dispatchEventToListeners("tab-selected", event);
+        }
+        return true;
     },
 
-    _showTab: function(tabObject)
+    _showTab: function(tab)
     {
-        tabObject.tab.addStyleClass("selected");
-        if (tabObject.element)
-            tabObject.element.removeStyleClass("hidden");
-        else
-            tabObject.view.visible = true;
+        tab.tabElement.addStyleClass("selected");
+        tab.view.show(this._contentElement);
     },
 
-    _hideTab: function(tabObject)
+    _hideTab: function(tab)
     {
-        tabObject.tab.removeStyleClass("selected");
-        if (tabObject.element)
-            tabObject.element.addStyleClass("hidden");
-        else
-            tabObject.view.visible = false;
+        tab.tabElement.removeStyleClass("selected");
+        tab.view.visible = false;
     }
 }
+
+WebInspector.TabbedPane.prototype.__proto__ = WebInspector.Object.prototype;
diff --git a/WebCore/inspector/front-end/WebKit.qrc b/WebCore/inspector/front-end/WebKit.qrc
index 2b87bcc..f80ac42 100644
--- a/WebCore/inspector/front-end/WebKit.qrc
+++ b/WebCore/inspector/front-end/WebKit.qrc
@@ -21,6 +21,7 @@
     <file>ContextMenu.js</file>
     <file>CookieItemsView.js</file>
     <file>CookieParser.js</file>
+    <file>CookiesTable.js</file>
     <file>CSSCompletions.js</file>
     <file>CSSStyleModel.js</file>
     <file>Database.js</file>
@@ -55,6 +56,7 @@
     <file>InspectorFrontendHostStub.js</file>
     <file>KeyboardShortcut.js</file>
     <file>MetricsSidebarPane.js</file>
+    <file>NetworkItemView.js</file>
     <file>NetworkPanel.js</file>
     <file>Object.js</file>
     <file>ObjectPropertiesSection.js</file>
@@ -70,6 +72,8 @@
     <file>RemoteObject.js</file>
     <file>Resource.js</file>
     <file>ResourceCategory.js</file>
+    <file>ResourceCookiesView.js</file>
+    <file>ResourceHeadersView.js</file>
     <file>ResourceManager.js</file>
     <file>ResourceView.js</file>
     <file>ResourcesPanel.js</file>
diff --git a/WebCore/inspector/front-end/inspector.css b/WebCore/inspector/front-end/inspector.css
index c60c748..0ee5864 100644
--- a/WebCore/inspector/front-end/inspector.css
+++ b/WebCore/inspector/front-end/inspector.css
@@ -798,91 +798,19 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     display: block;
 }
 
-.resource-view {
-    display: none;
+.webkit-line-gutter-backdrop {
+    /* Keep this in sync with view-source.css (.webkit-line-gutter-backdrop) */
+    width: 31px;
+    background-color: rgb(240, 240, 240);
+    border-right: 1px solid rgb(187, 187, 187);
     position: absolute;
-    background: white;
-    top: 0;
+    z-index: -1;
     left: 0;
-    right: 0;
-    bottom: 0;
-}
-
-.resource-view.visible {
-    display: -webkit-box;
-}
-
-.resource-view .tabbed-pane-header {
-    display: none;
-    height: 20px;
-    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(236, 236, 236)), to(rgb(217, 217, 217)));
-    border-bottom: 1px solid rgb(163, 163, 163);
-}
-
-.resource-view.headers-visible .tabbed-pane-header {
-    display: block;
-}
-
-.resource-view .scope-bar li {
-    border-bottom-left-radius: 0;
-    border-bottom-right-radius: 0;
-}
-
-.resource-view-headers {
-    padding: 6px;
-    -webkit-user-select: text;    
-    position: absolute;
     top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    overflow: auto;
-}
-
-.resource-view-headers .outline-disclosure .parent {
-    -webkit-user-select: none;
-    font-weight: bold;
-}
-
-.resource-view-headers .outline-disclosure .children li {
-    white-space: nowrap;
-}
-
-.resource-view-headers .outline-disclosure li.expanded .header-count {
-    display: none;
-}
-
-.resource-view-headers .outline-disclosure .header-name {
-    color: rgb(33%, 33%, 33%);
-    display: inline-block;
-    margin-right: 0.5em;
-    font-weight: bold;
-    vertical-align: top;
-    white-space: pre-wrap;
-}
-
-.resource-view-headers .outline-disclosure .header-value {
-    display: inline;
-    margin-right: 100px;
-    white-space: pre-wrap;
-    word-break: break-all;
-    margin-top: 1px;
-}
-
-.resource-view-headers .outline-disclosure .raw-form-data {
-    white-space:pre-wrap;
-}
-
-.resource-view .resource-view-content {
-    position: absolute;
-    top: 0;
-    right: 0;
-    left: 0;
-    bottom: 0;
-    overflow: auto;
+    height: 100%
 }
 
-.resource-view-cookies {
+.resource-view {
     display: none;
     position: absolute;
     top: 0;
@@ -890,36 +818,13 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     left: 0;
     bottom: 0;
     overflow: auto;
-    padding: 12px;
-    height: 100%;
 }
 
-.resource-view-cookies.visible {
+.resource-view.visible {
     display: block;
 }
 
-.resource-view-cookies.table .data-grid {
-    height: 100%;
-}
-
-.resource-view-cookies .data-grid .row-group {
-    font-weight: bold;
-    font-size: 11px;
-}
-
-.webkit-line-gutter-backdrop {
-    /* Keep this in sync with view-source.css (.webkit-line-gutter-backdrop) */
-    width: 31px;
-    background-color: rgb(240, 240, 240);
-    border-right: 1px solid rgb(187, 187, 187);
-    position: absolute;
-    z-index: -1;
-    left: 0;
-    top: 0;
-    height: 100%
-}
-
-.resource-view.font .resource-view-content {
+.resource-view.font {
     font-size: 60px;
     white-space: pre-wrap;
     word-wrap: break-word;
@@ -927,12 +832,12 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     padding: 15px;
 }
 
-.resource-view.image .resource-view-content > .image {
+.resource-view.image > .image {
     padding: 20px 20px 10px 20px;
     text-align: center;
 }
 
-.resource-view.image .resource-view-content > .info {
+.resource-view.image > .info {
     padding-bottom: 10px;
     font-size: 11px;
     -webkit-user-select: text;
@@ -2002,16 +1907,16 @@ li.selected .base-storage-tree-element-subtitle {
     display: block;
 }
 
-.storage-view.table {
+.storage-view {
     overflow: hidden;
 }
 
-.storage-view.table .data-grid {
+.storage-view .data-grid {
     border: none;
     height: 100%;
 }
 
-.storage-empty-view, .storage-view.table .storage-table-error {
+.storage-empty-view, .storage-view .storage-table-error {
     position: absolute;
     top: 0;
     bottom: 25%;
@@ -2029,7 +1934,7 @@ li.selected .base-storage-tree-element-subtitle {
     white-space: pre-wrap;
 }
 
-.storage-view.table .storage-table-error {
+.storage-view .storage-table-error {
     color: rgb(66%, 33%, 33%);
 }
 
diff --git a/WebCore/inspector/front-end/inspector.html b/WebCore/inspector/front-end/inspector.html
index e0c72e9..667eeef 100644
--- a/WebCore/inspector/front-end/inspector.html
+++ b/WebCore/inspector/front-end/inspector.html
@@ -67,6 +67,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     <script type="text/javascript" src="DOMStorage.js"></script>
     <script type="text/javascript" src="DOMStorageItemsView.js"></script>
     <script type="text/javascript" src="DataGrid.js"></script>
+    <script type="text/javascript" src="CookiesTable.js"></script>
     <script type="text/javascript" src="CookieItemsView.js"></script>
     <script type="text/javascript" src="ApplicationCacheItemsView.js"></script>
     <script type="text/javascript" src="FileSystemView.js"></script>
@@ -112,6 +113,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     <script type="text/javascript" src="AuditRules.js"></script>
     <script type="text/javascript" src="AuditCategories.js"></script>
     <script type="text/javascript" src="AuditFormatters.js"></script>
+    <script type="text/javascript" src="ResourceHeadersView.js"></script>
+    <script type="text/javascript" src="ResourceCookiesView.js"></script>
+    <script type="text/javascript" src="NetworkItemView.js"></script>
     <script type="text/javascript" src="ResourceView.js"></script>
     <script type="text/javascript" src="SourceFrame.js"></script>
     <script type="text/javascript" src="DOMSyntaxHighlighter.js"></script>
diff --git a/WebCore/inspector/front-end/networkPanel.css b/WebCore/inspector/front-end/networkPanel.css
index 6b6aebe..81e3bb8 100644
--- a/WebCore/inspector/front-end/networkPanel.css
+++ b/WebCore/inspector/front-end/networkPanel.css
@@ -97,11 +97,15 @@
 
 .network-cell-subtitle {
     font-weight: normal;
-    color: grey;
+    color: gray;
+}
+
+.network-sidebar tr.selected .network-cell-subtitle {
+    color: white;
 }
 
 .network-header-subtitle {
-    color: grey;
+    color: gray;
 }
 
 .network-sidebar .data-grid.small .network-cell-subtitle,
@@ -629,13 +633,13 @@
     color: black;
 }
 
-#network-views .resource-view .tabbed-pane-header {
+#network-views .network-item-view .tabbed-pane-header {
     height: 31px;
     padding-top: 8px;
     padding-left: 25px;
 }
 
-#network-views.small .resource-view .tabbed-pane-header {
+#network-views.small .network-item-view .tabbed-pane-header {
     height: 23px;
     padding-top: 0;
 }
@@ -643,3 +647,103 @@
 .network.panel.viewing-resource .data-grid .data-container {
     padding-right: 0;
 }
+
+.network-item-view {
+    display: none;
+    position: absolute;
+    background: white;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+}
+
+.network-item-view.visible {
+    display: -webkit-box;
+}
+
+.network-item-view .tabbed-pane-header {
+    height: 20px;
+    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(236, 236, 236)), to(rgb(217, 217, 217)));
+    border-bottom: 1px solid rgb(163, 163, 163);
+}
+
+.network-item-view .scope-bar li {
+    border-bottom-left-radius: 0;
+    border-bottom-right-radius: 0;
+}
+
+.resource-headers-view {
+    display: none;
+    padding: 6px;
+    -webkit-user-select: text;    
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    overflow: auto;
+}
+
+.resource-headers-view.visible {
+    display: block;
+}
+
+.resource-headers-view .outline-disclosure .parent {
+    -webkit-user-select: none;
+    font-weight: bold;
+}
+
+.resource-headers-view .outline-disclosure .children li {
+    white-space: nowrap;
+}
+
+.resource-headers-view .outline-disclosure li.expanded .header-count {
+    display: none;
+}
+
+.resource-headers-view .outline-disclosure .header-name {
+    color: rgb(33%, 33%, 33%);
+    display: inline-block;
+    margin-right: 0.5em;
+    font-weight: bold;
+    vertical-align: top;
+    white-space: pre-wrap;
+}
+
+.resource-headers-view .outline-disclosure .header-value {
+    display: inline;
+    margin-right: 100px;
+    white-space: pre-wrap;
+    word-break: break-all;
+    margin-top: 1px;
+}
+
+.resource-headers-view .outline-disclosure .raw-form-data {
+    white-space: pre-wrap;
+}
+
+.resource-cookies-view {
+    display: none;
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    bottom: 0;
+    overflow: auto;
+    padding: 12px;
+    height: 100%;
+}
+
+.resource-cookies-view.visible {
+    display: block;
+}
+
+.resource-cookies-view .data-grid {
+    height: 100%;
+}
+
+.resource-cookies-view .data-grid .row-group {
+    font-weight: bold;
+    font-size: 11px;
+}

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list