15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Joseph Pecoraro 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * its contributors may be used to endorse or promote products derived 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * from this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox} 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CookieItemsView = function(treeElement, cookieDomain) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.VBox.call(this); 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this.element.classList.add("storage-view"); 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item"); 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._deleteButton.visible = false; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._deleteButton.addEventListener("click", this._deleteButtonClicked, this); 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear"), "clear-storage-status-bar-item"); 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._clearButton.visible = false; 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._clearButton.addEventListener("click", this._clearButtonClicked, this); 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item"); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._refreshButton.addEventListener("click", this._refreshButtonClicked, this); 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._treeElement = treeElement; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._cookieDomain = cookieDomain; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._emptyView = new WebInspector.EmptyView(WebInspector.UIString("This site has no cookies.")); 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._emptyView.show(this.element); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.addEventListener("contextmenu", this._contextMenu.bind(this), true); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CookieItemsView.prototype = { 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get statusBarItems() 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return [this._refreshButton.element, this._clearButton.element, this._deleteButton.element]; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) wasShown: function() 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._update(); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willHide: function() 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._deleteButton.visible = false; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _update: function() 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.Cookies.getCookiesAsync(this._updateWithCookies.bind(this)); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 82a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!WebInspector.Cookie>} allCookies 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 8453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _updateWithCookies: function(allCookies) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._cookies = this._filterCookiesForDomain(allCookies); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._cookies.length) { 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Nothing to show. 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._emptyView.show(this.element); 9153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._clearButton.visible = false; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._deleteButton.visible = false; 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._cookiesTable) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._cookiesTable.detach(); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._cookiesTable) 9953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._cookiesTable = new WebInspector.CookiesTable(false, this._update.bind(this), this._showDeleteButton.bind(this)); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._cookiesTable.setCookies(this._cookies); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._emptyView.detach(); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._cookiesTable.show(this.element); 10453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._treeElement.subtitle = String.sprintf(WebInspector.UIString("%d cookies (%s)"), this._cookies.length, 10553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Number.bytesToString(this._totalSize)); 10653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._clearButton.visible = true; 10753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._deleteButton.visible = !!this._cookiesTable.selectedCookie(); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 111a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!WebInspector.Cookie>} allCookies 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _filterCookiesForDomain: function(allCookies) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cookies = []; 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var resourceURLsForDocumentURL = []; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._totalSize = 0; 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.CookieItemsView} 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function populateResourcesForDocuments(resource) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var url = resource.documentURL.asParsedURL(); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (url && url.host == this._cookieDomain) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceURLsForDocumentURL.push(resource.url); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.forAllResources(populateResourcesForDocuments.bind(this)); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < allCookies.length; ++i) { 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var pushed = false; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var size = allCookies[i].size(); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var j = 0; j < resourceURLsForDocumentURL.length; ++j) { 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var resourceURL = resourceURLsForDocumentURL[j]; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebInspector.Cookies.cookieMatchesResourceURL(allCookies[i], resourceURL)) { 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._totalSize += size; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!pushed) { 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pushed = true; 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cookies.push(allCookies[i]); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return cookies; 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) clear: function() 14853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 14953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._cookiesTable.clear(); 15053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._update(); 15153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 15253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 15353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _clearButtonClicked: function() 15453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 15553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this.clear(); 15653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 15753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 15853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _showDeleteButton: function() 15953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 16053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._deleteButton.visible = true; 16153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 16253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _deleteButtonClicked: function() 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var selectedCookie = this._cookiesTable.selectedCookie(); 166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (selectedCookie) { 167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) selectedCookie.remove(); 168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._update(); 169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _refreshButtonClicked: function(event) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._update(); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _contextMenu: function(event) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._cookies.length) { 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var contextMenu = new WebInspector.ContextMenu(event); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contextMenu.appendItem(WebInspector.UIString("Refresh"), this._update.bind(this)); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contextMenu.show(); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.VBox.prototype 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 188