summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/devtools/front_end/resources/CookieItemsView.js
diff options
context:
space:
mode:
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.js187
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
+}