mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-04-16 04:53:24 +00:00
275 lines
8.7 KiB
JavaScript
275 lines
8.7 KiB
JavaScript
# -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
#
|
|
# The contents of this file are subject to the Netscape Public
|
|
# License Version 1.1 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.mozilla.org/NPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# The Original Code is Mozilla Communicator client code, released March
|
|
# 31, 1998.
|
|
#
|
|
# The Initial Developer of the Original Code is Netscape Communications
|
|
# Corporation. Portions created by Netscape are
|
|
# Copyright (C) 1998 Netscape Communications Corporation. All
|
|
# Rights Reserved.
|
|
#
|
|
# Contributor(s):
|
|
# Ben Goodger
|
|
|
|
// interface variables
|
|
var cookiemanager = Components.classes["@mozilla.org/cookiemanager;1"].getService();
|
|
cookiemanager = cookiemanager.QueryInterface(Components.interfaces.nsICookieManager);
|
|
var gDateService = null;
|
|
|
|
// cookies list
|
|
var cookies = [];
|
|
var deletedCookies = [];
|
|
|
|
var cookieBundle;
|
|
var cookiesTree;
|
|
const nsICookie = Components.interfaces.nsICookie;
|
|
|
|
function Startup() {
|
|
|
|
// intialize gDateService
|
|
if (!gDateService) {
|
|
const nsScriptableDateFormat_CONTRACTID = "@mozilla.org/intl/scriptabledateformat;1";
|
|
const nsIScriptableDateFormat = Components.interfaces.nsIScriptableDateFormat;
|
|
gDateService = Components.classes[nsScriptableDateFormat_CONTRACTID]
|
|
.getService(nsIScriptableDateFormat);
|
|
}
|
|
|
|
//XXXBlake
|
|
// I removed the observer stuff, so yes, there are edge cases where
|
|
// if you're loading a page when you open prefs/cookie manager,
|
|
// the cookie manager won't display the new cookie added.
|
|
// I don't think it's a big deal (considering how hard it would be to fix)
|
|
}
|
|
|
|
function onOK() {
|
|
window.opener.top.wsm.savePageData(window.location.href, window);
|
|
window.opener.top.hPrefWindow.registerOKCallbackFunc(window.opener.cookieViewerOnPrefsOK);
|
|
}
|
|
|
|
function GetFields()
|
|
{
|
|
var dataObject = {};
|
|
dataObject.deletedCookies = deletedCookies;
|
|
dataObject.cookies = cookies;
|
|
dataObject.cookieBool = document.getElementById("checkbox").checked;
|
|
return dataObject;
|
|
}
|
|
|
|
function SetFields(dataObject)
|
|
{
|
|
if ('cookies' in dataObject)
|
|
cookies = dataObject.cookies;
|
|
|
|
if ('deletedCookies' in dataObject)
|
|
deletedCookies = dataObject.deletedCookies;
|
|
|
|
if ('cookieBool' in dataObject)
|
|
document.getElementById("checkbox").checked = dataObject.cookieBool;
|
|
|
|
loadCookies();
|
|
}
|
|
|
|
|
|
/*** =================== COOKIES CODE =================== ***/
|
|
|
|
var cookiesTreeView = {
|
|
rowCount : 0,
|
|
setTree : function(tree){},
|
|
getImageSrc : function(row,column) {},
|
|
getProgressMode : function(row,column) {},
|
|
getCellValue : function(row,column) {},
|
|
getCellText : function(row,column){
|
|
var rv="";
|
|
if (column.id=="domainCol") {
|
|
rv = cookies[row].rawHost;
|
|
} else if (column.id=="nameCol") {
|
|
rv = cookies[row].name;
|
|
}
|
|
return rv;
|
|
},
|
|
isSeparator : function(index) {return false;},
|
|
isSorted: function() { return false; },
|
|
isContainer : function(index) {return false;},
|
|
cycleHeader : function(column) {},
|
|
getRowProperties : function(row,prop) {},
|
|
getColumnProperties : function(column,prop) {},
|
|
getCellProperties : function(row,column,prop) {}
|
|
};
|
|
|
|
function Cookie(number,name,value,isDomain,host,rawHost,path,isSecure,expires,
|
|
status,policy) {
|
|
this.number = number;
|
|
this.name = name;
|
|
this.value = value;
|
|
this.isDomain = isDomain;
|
|
this.host = host;
|
|
this.rawHost = rawHost;
|
|
this.path = path;
|
|
this.isSecure = isSecure;
|
|
this.expires = expires;
|
|
this.status = status;
|
|
this.policy = policy;
|
|
}
|
|
|
|
function loadCookies() {
|
|
if (!cookieBundle)
|
|
cookieBundle = document.getElementById("cookieBundle");
|
|
|
|
if (!cookiesTree)
|
|
cookiesTree = document.getElementById("cookiesTree");
|
|
|
|
var dataObject = window.opener.top.hPrefWindow.wsm.dataManager.pageData[window.location.href].userData;
|
|
if (!('cookies' in dataObject)) {
|
|
// load cookies into a table
|
|
var enumerator = cookiemanager.enumerator;
|
|
var count = 0;
|
|
while (enumerator.hasMoreElements()) {
|
|
var nextCookie = enumerator.getNext();
|
|
if (!nextCookie) break;
|
|
nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
|
|
var host = nextCookie.host;
|
|
if (nextCookie.policy != nsICookie.POLICY_UNKNOWN) {
|
|
showPolicyField = true;
|
|
}
|
|
cookies[count] =
|
|
new Cookie(count++, nextCookie.name, nextCookie.value, nextCookie.isDomain, host,
|
|
(host.charAt(0)==".") ? host.substring(1,host.length) : host,
|
|
nextCookie.path, nextCookie.isSecure, nextCookie.expires,
|
|
nextCookie.status, nextCookie.policy);
|
|
}
|
|
}
|
|
|
|
cookiesTreeView.rowCount = cookies.length;
|
|
cookiesTree.treeBoxObject.view = cookiesTreeView;
|
|
|
|
// sort by host column
|
|
CookieColumnSort('rawHost');
|
|
|
|
// disable "remove all cookies" button if there are no cookies
|
|
document.getElementById("removeAllCookies").disabled = cookies.length == 0;
|
|
}
|
|
|
|
function GetExpiresString(expires) {
|
|
if (expires) {
|
|
var date = new Date(1000*expires);
|
|
return gDateService.FormatDateTime("", gDateService.dateFormatLong,
|
|
gDateService.timeFormatSeconds, date.getFullYear(),
|
|
date.getMonth()+1, date.getDate(), date.getHours(),
|
|
date.getMinutes(), date.getSeconds());
|
|
}
|
|
return cookieBundle.getString("AtEndOfSession");
|
|
}
|
|
|
|
function GetPolicyString(policy) {
|
|
switch (policy) {
|
|
case nsICookie.POLICY_NONE:
|
|
return cookieBundle.getString("policyUnstated");
|
|
case nsICookie.POLICY_NO_CONSENT:
|
|
return cookieBundle.getString("policyNoConsent");
|
|
case nsICookie.POLICY_IMPLICIT_CONSENT:
|
|
return cookieBundle.getString("policyImplicitConsent");
|
|
case nsICookie.POLICY_EXPLICIT_CONSENT:
|
|
return cookieBundle.getString("policyExplicitConsent");
|
|
case nsICookie.POLICY_NO_II:
|
|
return cookieBundle.getString("policyNoIICollected");
|
|
}
|
|
return "";
|
|
}
|
|
|
|
function CookieSelected() {
|
|
var selections = GetTreeSelections(cookiesTree);
|
|
if (selections.length) {
|
|
document.getElementById("removeCookie").removeAttribute("disabled");
|
|
} else {
|
|
ClearCookieProperties();
|
|
return true;
|
|
}
|
|
|
|
var idx = selections[0];
|
|
if (idx >= cookies.length) {
|
|
// Something got out of synch. See bug 119812 for details
|
|
dump("Tree and viewer state are out of sync! " +
|
|
"Help us figure out the problem in bug 119812");
|
|
return;
|
|
}
|
|
|
|
var props = [
|
|
{id: "ifl_name", value: cookies[idx].name},
|
|
{id: "ifl_value", value: cookies[idx].value},
|
|
{id: "ifl_isDomain",
|
|
value: cookies[idx].isDomain ?
|
|
cookieBundle.getString("domainColon") : cookieBundle.getString("hostColon")},
|
|
{id: "ifl_host", value: cookies[idx].host},
|
|
{id: "ifl_path", value: cookies[idx].path},
|
|
{id: "ifl_isSecure",
|
|
value: cookies[idx].isSecure ?
|
|
cookieBundle.getString("yes") : cookieBundle.getString("no")},
|
|
{id: "ifl_expires", value: GetExpiresString(cookies[idx].expires)},
|
|
{id: "ifl_policy", value: GetPolicyString(cookies[idx].policy)}
|
|
];
|
|
|
|
var value;
|
|
var field;
|
|
for (var i = 0; i < props.length; i++)
|
|
{
|
|
field = document.getElementById(props[i].id);
|
|
if ((selections.length > 1) && (props[i].id != "ifl_isDomain")) {
|
|
value = ""; // clear field if multiple selections
|
|
} else {
|
|
value = props[i].value;
|
|
}
|
|
field.value = value;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function ClearCookieProperties() {
|
|
var properties =
|
|
["ifl_name","ifl_value","ifl_host","ifl_path","ifl_isSecure","ifl_expires","ifl_policy"];
|
|
for (var prop=0; prop<properties.length; prop++) {
|
|
document.getElementById(properties[prop]).value = "";
|
|
}
|
|
}
|
|
|
|
function DeleteCookie() {
|
|
DeleteSelectedItemFromTree(cookiesTree, cookiesTreeView,
|
|
cookies, deletedCookies,
|
|
"removeCookie", "removeAllCookies");
|
|
if (!cookies.length) {
|
|
ClearCookieProperties();
|
|
}
|
|
}
|
|
|
|
function DeleteAllCookies() {
|
|
ClearCookieProperties();
|
|
DeleteAllFromTree(cookiesTree, cookiesTreeView,
|
|
cookies, deletedCookies,
|
|
"removeCookie", "removeAllCookies");
|
|
}
|
|
|
|
function HandleCookieKeyPress(e) {
|
|
if (e.keyCode == 46) {
|
|
DeleteCookie();
|
|
}
|
|
}
|
|
|
|
var lastCookieSortColumn = "";
|
|
var lastCookieSortAscending = false;
|
|
|
|
function CookieColumnSort(column) {
|
|
lastCookieSortAscending =
|
|
SortTree(cookiesTree, cookiesTreeView, cookies,
|
|
column, lastCookieSortColumn, lastCookieSortAscending);
|
|
lastCookieSortColumn = column;
|
|
}
|