diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/devtools/front_end/resources/CookieItemsView.js')
-rw-r--r-- | chromium/third_party/WebKit/Source/devtools/front_end/resources/CookieItemsView.js | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/devtools/front_end/resources/CookieItemsView.js b/chromium/third_party/WebKit/Source/devtools/front_end/resources/CookieItemsView.js new file mode 100644 index 00000000000..8cfdcfd9e5e --- /dev/null +++ b/chromium/third_party/WebKit/Source/devtools/front_end/resources/CookieItemsView.js @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * Copyright (C) 2009 Joseph Pecoraro + * + * 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. + */ + +/** + * @constructor + * @extends {WebInspector.VBox} + */ +WebInspector.CookieItemsView = function(treeElement, cookieDomain) +{ + WebInspector.VBox.call(this); + + this.element.classList.add("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, this); + + this._clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear"), "clear-storage-status-bar-item"); + this._clearButton.visible = false; + this._clearButton.addEventListener("click", this._clearButtonClicked, this); + + this._refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item"); + this._refreshButton.addEventListener("click", this._refreshButtonClicked, this); + + this._treeElement = treeElement; + this._cookieDomain = cookieDomain; + + this._emptyView = new WebInspector.EmptyView(WebInspector.UIString("This site has no cookies.")); + this._emptyView.show(this.element); + + this.element.addEventListener("contextmenu", this._contextMenu.bind(this), true); +} + +WebInspector.CookieItemsView.prototype = { + get statusBarItems() + { + return [this._refreshButton.element, this._clearButton.element, this._deleteButton.element]; + }, + + wasShown: function() + { + this._update(); + }, + + willHide: function() + { + this._deleteButton.visible = false; + }, + + _update: function() + { + WebInspector.Cookies.getCookiesAsync(this._updateWithCookies.bind(this)); + }, + + /** + * @param {!Array.<!WebInspector.Cookie>} allCookies + */ + _updateWithCookies: function(allCookies) + { + this._cookies = this._filterCookiesForDomain(allCookies); + + if (!this._cookies.length) { + // Nothing to show. + this._emptyView.show(this.element); + this._clearButton.visible = false; + this._deleteButton.visible = false; + if (this._cookiesTable) + this._cookiesTable.detach(); + return; + } + + if (!this._cookiesTable) + this._cookiesTable = new WebInspector.CookiesTable(false, this._update.bind(this), this._showDeleteButton.bind(this)); + + this._cookiesTable.setCookies(this._cookies); + this._emptyView.detach(); + this._cookiesTable.show(this.element); + this._treeElement.subtitle = String.sprintf(WebInspector.UIString("%d cookies (%s)"), this._cookies.length, + Number.bytesToString(this._totalSize)); + this._clearButton.visible = true; + this._deleteButton.visible = !!this._cookiesTable.selectedCookie(); + }, + + /** + * @param {!Array.<!WebInspector.Cookie>} allCookies + */ + _filterCookiesForDomain: function(allCookies) + { + var cookies = []; + var resourceURLsForDocumentURL = []; + this._totalSize = 0; + + /** + * @this {WebInspector.CookieItemsView} + */ + function populateResourcesForDocuments(resource) + { + var url = resource.documentURL.asParsedURL(); + if (url && url.host == this._cookieDomain) + resourceURLsForDocumentURL.push(resource.url); + } + WebInspector.forAllResources(populateResourcesForDocuments.bind(this)); + + for (var i = 0; i < allCookies.length; ++i) { + var pushed = false; + var size = allCookies[i].size(); + for (var j = 0; j < resourceURLsForDocumentURL.length; ++j) { + var resourceURL = resourceURLsForDocumentURL[j]; + if (WebInspector.Cookies.cookieMatchesResourceURL(allCookies[i], resourceURL)) { + this._totalSize += size; + if (!pushed) { + pushed = true; + cookies.push(allCookies[i]); + } + } + } + } + return cookies; + }, + + clear: function() + { + this._cookiesTable.clear(); + this._update(); + }, + + _clearButtonClicked: function() + { + this.clear(); + }, + + _showDeleteButton: function() + { + this._deleteButton.visible = true; + }, + + _deleteButtonClicked: function() + { + var selectedCookie = this._cookiesTable.selectedCookie(); + if (selectedCookie) { + selectedCookie.remove(); + this._update(); + } + }, + + _refreshButtonClicked: function(event) + { + this._update(); + }, + + _contextMenu: function(event) + { + if (!this._cookies.length) { + var contextMenu = new WebInspector.ContextMenu(event); + contextMenu.appendItem(WebInspector.UIString("Refresh"), this._update.bind(this)); + contextMenu.show(); + } + }, + + __proto__: WebInspector.VBox.prototype +} |