CookieItemsView.js [plain text]
WebInspector.CookieItemsView = function(treeElement, cookieDomain)
{
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, 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 = {
statusBarItems: function()
{
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));
},
_updateWithCookies: function(allCookies, isAdvanced)
{
this._cookies = isAdvanced ? this._filterCookiesForDomain(allCookies) : allCookies;
if (!this._cookies.length) {
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 = isAdvanced ? new WebInspector.CookiesTable(false, this._update.bind(this), this._showDeleteButton.bind(this)) : new WebInspector.SimpleCookiesTable();
this._cookiesTable.setCookies(this._cookies);
this._emptyView.detach();
this._cookiesTable.show(this.element);
if (isAdvanced) {
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();
}
},
_filterCookiesForDomain: function(allCookies)
{
var cookies = [];
var resourceURLsForDocumentURL = [];
this._totalSize = 0;
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.View.prototype
}
WebInspector.SimpleCookiesTable = function()
{
WebInspector.View.call(this);
var columns = [
{title: WebInspector.UIString("Name")},
{title: WebInspector.UIString("Value")}
];
this._dataGrid = new WebInspector.DataGrid(columns);
this._dataGrid.autoSizeColumns(20, 80);
this._dataGrid.show(this.element);
}
WebInspector.SimpleCookiesTable.prototype = {
setCookies: function(cookies)
{
this._dataGrid.rootNode().removeChildren();
var addedCookies = {};
for (var i = 0; i < cookies.length; ++i) {
if (addedCookies[cookies[i].name()])
continue;
addedCookies[cookies[i].name()] = true;
var data = {};
data[0] = cookies[i].name();
data[1] = cookies[i].value();
var node = new WebInspector.DataGridNode(data, false);
node.selectable = true;
this._dataGrid.rootNode().appendChild(node);
}
this._dataGrid.rootNode().children[0].selected = true;
},
__proto__: WebInspector.View.prototype
}