--- /dev/null
+// Adds a cookie
+function webdeveloper_addCookie()
+{
+ window.openDialog("chrome://webdeveloper/content/dialogs/cookie.xul", "webdeveloper-cookie-dialog", "centerscreen,chrome,modal", "add");
+}
+
+// Clears all session cookies
+function webdeveloper_clearSessionCookies()
+{
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+
+ // If the clearing is confirmed
+ if(webdeveloper_clearConfirmation(stringBundle.getString("webdeveloper_clearSessionCookiesConfirmation")))
+ {
+ var cookie = null;
+ var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
+ var cookies = cookieManager.enumerator;
+ var removed = 0;
+
+ // Loop through the cookies
+ while(cookies.hasMoreElements())
+ {
+ cookie = cookies.getNext();
+
+ // If this is a cookie with no expiration
+ if(cookie instanceof Components.interfaces.nsICookie && cookie.expires == "0")
+ {
+ cookieManager.remove(cookie.host, cookie.name, cookie.path, false);
+ removed++;
+ }
+ }
+
+ // If the hide informational dialogs preference is not set
+ if(!webdeveloper_getBooleanPreference("webdeveloper.informational.dialogs.hide", true))
+ {
+ var title = stringBundle.getString("webdeveloper_clearSessionCookies");
+
+ // If one session cookie was removed
+ if(removed == 1)
+ {
+ webdeveloper_informationalDialog(title, stringBundle.getString("webdeveloper_clearSessionCookiesSingleResult"));
+ }
+ else
+ {
+ webdeveloper_informationalDialog(title, stringBundle.getFormattedString("webdeveloper_clearSessionCookiesMultipleResult", [removed]));
+ }
+ }
+ }
+}
+
+// Deletes a cookie
+function webdeveloper_deleteCookie(event)
+{
+ var eventTarget = event.target;
+
+ // If there is an event target and the click was not a right click
+ if(eventTarget && event.button != 2)
+ {
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+
+ // If the deletion is confirmed
+ if(webdeveloper_deleteConfirmation(stringBundle.getString("webdeveloper_deleteCookieConfirmation")))
+ {
+ Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager).remove(eventTarget.getAttribute("cookie-host"), eventTarget.getAttribute("cookie-name"), eventTarget.getAttribute("cookie-path"), false);
+
+ // If the hide informational dialogs preference is not set
+ if(!webdeveloper_getBooleanPreference("webdeveloper.informational.dialogs.hide", true))
+ {
+ webdeveloper_informationalDialog(stringBundle.getString("webdeveloper_deleteCookie"), stringBundle.getString("webdeveloper_deleteCookieResult"));
+ }
+ }
+
+ event.preventDefault();
+ }
+}
+
+// Called when a delete cookie link is moused out
+function webdeveloper_deleteCookieMouseOut(event)
+{
+ // If there is an event target
+ if(event.target)
+ {
+ getBrowser().contentWindow.status = "";
+
+ event.preventDefault();
+ }
+}
+
+// Called when a delete cookie link is moused over
+function webdeveloper_deleteCookieMouseOver(event)
+{
+ // If there is an event target
+ if(event.target)
+ {
+ getBrowser().contentWindow.status = document.getElementById("webdeveloper-string-bundle").getString("webdeveloper_deleteCookie");
+
+ event.preventDefault();
+ }
+}
+
+// Deletes all the cookies for the current domain
+function webdeveloper_deleteDomainCookies()
+{
+ var cookies = new Array();
+ var cookiesLength = null;
+ var documentList = webdeveloper_getDocuments(webdeveloper_getContentWindow());
+ var documentLength = documentList.length;
+ var message = null;
+ var pageDocument = null;
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+
+ // Loop through the documents
+ for(var i = 0; i < documentLength; i++)
+ {
+ pageDocument = documentList[i];
+ cookies = cookies.concat(webdeveloper_getCookies(pageDocument.location.hostname, "/", false));
+ }
+
+ cookiesLength = cookies.length;
+
+ // If one cookie was found
+ if(cookiesLength == 1)
+ {
+ message = stringBundle.getString("webdeveloper_deleteDomainCookiesSingleConfirmation");
+ }
+ else
+ {
+ message = stringBundle.getFormattedString("webdeveloper_deleteDomainCookiesMultipleConfirmation", [cookiesLength]);
+ }
+
+ // If the deletion is confirmed
+ if(cookiesLength == 0 || webdeveloper_deleteConfirmation(message))
+ {
+ var cookie = null;
+ var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
+
+ // Loop through all the cookies
+ for(i = 0 ; i < cookiesLength; i++)
+ {
+ cookie = cookies[i];
+
+ cookieManager.remove(cookie.host, cookie.name, cookie.path, false);
+ }
+
+ // If the hide informational dialogs preference is not set
+ if(!webdeveloper_getBooleanPreference("webdeveloper.informational.dialogs.hide", true))
+ {
+ var title = stringBundle.getString("webdeveloper_deleteDomainCookies");
+
+ // If one cookie was found
+ if(cookiesLength == 1)
+ {
+ webdeveloper_informationalDialog(title, stringBundle.getString("webdeveloper_deleteDomainCookiesSingleResult"));
+ }
+ else
+ {
+ webdeveloper_informationalDialog(title, stringBundle.getFormattedString("webdeveloper_deleteDomainCookiesMultipleResult", [cookiesLength]));
+ }
+ }
+ }
+}
+
+// Deletes all the cookies for the current path
+function webdeveloper_deletePathCookies()
+{
+ var cookies = new Array();
+ var cookiesLength = null;
+ var documentList = webdeveloper_getDocuments(webdeveloper_getContentWindow());
+ var documentLength = documentList.length;
+ var message = null;
+ var pageDocument = null;
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+
+ // Loop through the documents
+ for(var i = 0; i < documentLength; i++)
+ {
+ pageDocument = documentList[i];
+ cookies = cookies.concat(webdeveloper_getCookies(pageDocument.location.hostname, pageDocument.location.pathname, false));
+ }
+
+ cookiesLength = cookies.length;
+
+ // If one cookie was found
+ if(cookiesLength == 1)
+ {
+ message = stringBundle.getString("webdeveloper_deletePathCookiesSingleConfirmation");
+ }
+ else
+ {
+ message = stringBundle.getFormattedString("webdeveloper_deletePathCookiesMultipleConfirmation", [cookiesLength]);
+ }
+
+ // If the deletion is confirmed
+ if(cookiesLength == 0 || webdeveloper_deleteConfirmation(message))
+ {
+ var cookie = null;
+ var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
+
+ // Loop through all the cookies
+ for(i = 0 ; i < cookiesLength; i++)
+ {
+ cookie = cookies[i];
+
+ cookieManager.remove(cookie.host, cookie.name, cookie.path, false);
+ }
+
+ // If the hide informational dialogs preference is not set
+ if(!webdeveloper_getBooleanPreference("webdeveloper.informational.dialogs.hide", true))
+ {
+ var title = stringBundle.getString("webdeveloper_deletePathCookies");
+
+ // If one cookie was found
+ if(cookiesLength == 1)
+ {
+ webdeveloper_informationalDialog(title, stringBundle.getString("webdeveloper_deletePathCookiesSingleResult"));
+ }
+ else
+ {
+ webdeveloper_informationalDialog(title, stringBundle.getFormattedString("webdeveloper_deletePathCookiesMultipleResult", [cookiesLength]));
+ }
+ }
+ }
+}
+
+// Edits a cookie
+function webdeveloper_editCookie(event)
+{
+ var eventTarget = event.target;
+
+ // If there is an event target and the click was not a right click
+ if(eventTarget && event.button != 2)
+ {
+ window.openDialog("chrome://webdeveloper/content/dialogs/cookie.xul", "webdeveloper-cookie-dialog", "centerscreen,chrome,modal", "edit", eventTarget.getAttribute("cookie-name"), eventTarget.getAttribute("cookie-value"), eventTarget.getAttribute("cookie-host"), eventTarget.getAttribute("cookie-path"), eventTarget.getAttribute("cookie-expires"), eventTarget.getAttribute("cookie-secure"));
+
+ event.preventDefault();
+ }
+}
+
+// Called when an edit cookie link is moused out
+function webdeveloper_editCookieMouseOut(event)
+{
+ // If there is an event target
+ if(event.target)
+ {
+ getBrowser().contentWindow.status = "";
+
+ event.preventDefault();
+ }
+}
+
+// Called when an edit cookie link is moused over
+function webdeveloper_editCookieMouseOver(event)
+{
+ // If there is an event target
+ if(event.target)
+ {
+ getBrowser().contentWindow.status = document.getElementById("webdeveloper-string-bundle").getString("webdeveloper_editCookie");
+
+ event.preventDefault();
+ }
+}
+
+// Toggles cookies
+function webdeveloper_toggleCookies(element)
+{
+ var cookieBehavior = 0;
+
+ // If disabling cookies
+ if(element.getAttribute("checked"))
+ {
+ cookieBehavior = 2;
+ }
+
+ webdeveloper_setIntegerPreference("network.cookie.cookieBehavior", cookieBehavior);
+}
+
+// Toggles external site cookies
+function webdeveloper_toggleExternalSiteCookies(element)
+{
+ var cookieBehavior = 0;
+
+ // If disabling external cookies
+ if(element.getAttribute("checked"))
+ {
+ cookieBehavior = 1;
+ }
+
+ webdeveloper_setIntegerPreference("network.cookie.cookieBehavior", cookieBehavior);
+}
+
+// Updates the disable cookies menu
+function webdeveloper_updateDisableCookiesMenu(suffix)
+{
+ var disableExternalSiteCookiesChecked = false;
+ var disableExternalSiteCookiesMenu = document.getElementById("webdeveloper-disable-external-site-cookies-" + suffix);
+ var disableCookiesChecked = false;
+ var disableCookiesPreferenceValue = webdeveloper_getIntegerPreference("network.cookie.cookieBehavior", true);
+
+ // If the cookie preference value is set to 2
+ if(disableCookiesPreferenceValue == 2)
+ {
+ disableCookiesChecked = true;
+ }
+ else if(disableCookiesPreferenceValue == 1)
+ {
+ disableExternalSiteCookiesChecked = true;
+ }
+
+ webdeveloper_configureElement(document.getElementById("webdeveloper-disable-all-cookies-" + suffix), "checked", disableCookiesChecked);
+ webdeveloper_configureElement(disableExternalSiteCookiesMenu, "checked", disableExternalSiteCookiesChecked);
+ webdeveloper_configureElement(disableExternalSiteCookiesMenu, "disabled", disableCookiesChecked);
+}
+
+// Displays all the cookies for the page
+function webdeveloper_viewCookieInformation()
+{
+ var cellDataElement = null;
+ var cellHeaderElement = null;
+ var cookie = null;
+ var cookieExpires = null;
+ var cookieHost = null;
+ var cookieLength = null;
+ var cookieName = null;
+ var cookiePath = null;
+ var cookies = null;
+ var cookieSecure = null;
+ var cookieValue = null;
+ var divElement = null;
+ var documentList = webdeveloper_getDocuments(webdeveloper_getContentWindow());
+ var documentLength = documentList.length;
+ var hostName = null;
+ var linkElement = null;
+ var listElement = null;
+ var listItemElement = null;
+ var location = null;
+ var oldTab = getBrowser().selectedTab;
+ var oldURL = getBrowser().currentURI.spec;
+ var generatedDocument = webdeveloper_generateDocument("");
+ var bodyElement = webdeveloper_getDocumentBodyElement(generatedDocument);
+ var headElement = webdeveloper_getDocumentHeadElement(generatedDocument);
+ var headerElement = generatedDocument.createElement("h1");
+ var pageDocument = null;
+ var preElement = null;
+ var scriptElement = generatedDocument.createElement("script");
+ var spanElement = null;
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+ var tableElement = null;
+ var tableRowElement = null;
+ var title = stringBundle.getFormattedString("webdeveloper_viewCookieInformationTitle", [oldURL]);
+
+ generatedDocument.title = title;
+
+ webdeveloper_addGeneratedStyles(generatedDocument);
+
+ headerElement.appendChild(generatedDocument.createTextNode(title));
+ bodyElement.appendChild(headerElement);
+
+ webdeveloper_addGeneratedTools(generatedDocument);
+
+ // Loop through the documents
+ for(var i = 0; i < documentLength; i++)
+ {
+ hostName = null;
+ pageDocument = documentList[i];
+ location = pageDocument.location;
+
+ // Try to get the host name
+ try
+ {
+ hostName = location.hostname;
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+
+ // If the host name is set
+ if(hostName)
+ {
+ divElement = generatedDocument.createElement("div");
+ headerElement = generatedDocument.createElement("h2");
+ linkElement = generatedDocument.createElement("a");
+ cookies = webdeveloper_getCookies(hostName, location.pathname, true);
+ cookieLength = cookies.length;
+ spanElement = generatedDocument.createElement("span");
+
+ linkElement.setAttribute("href", pageDocument.documentURI);
+ linkElement.appendChild(generatedDocument.createTextNode(pageDocument.documentURI));
+ headerElement.appendChild(linkElement);
+ bodyElement.appendChild(headerElement);
+
+ headerElement = generatedDocument.createElement("h3");
+
+ spanElement.setAttribute("class", "expanded pivot");
+ headerElement.appendChild(spanElement);
+
+ // If there is one cookie
+ if(cookieLength == 1)
+ {
+ headerElement.appendChild(generatedDocument.createTextNode(cookieLength + " " + stringBundle.getString("webdeveloper_cookie").toLowerCase()));
+ }
+ else
+ {
+ headerElement.appendChild(generatedDocument.createTextNode(cookieLength + " " + stringBundle.getString("webdeveloper_cookies").toLowerCase()));
+ }
+
+ bodyElement.appendChild(headerElement);
+
+ // Loop through the cookies
+ for(var j = 0; j < cookieLength; j++)
+ {
+ cookie = cookies[j];
+ cookieHost = cookie.host;
+ cookieName = cookie.name;
+ cookiePath = cookie.path;
+ cookieSecure = cookie.isSecure;
+ cookieValue = cookie.value;
+ tableElement = generatedDocument.createElement("table");
+
+ // Cookie name
+ cellDataElement = generatedDocument.createElement("td");
+ cellHeaderElement = generatedDocument.createElement("th");
+ tableRowElement = generatedDocument.createElement("tr");
+
+ cellHeaderElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_name")));
+ tableRowElement.appendChild(cellHeaderElement);
+ cellDataElement.appendChild(generatedDocument.createTextNode(cookieName));
+ tableRowElement.appendChild(cellDataElement);
+ tableElement.appendChild(tableRowElement);
+
+ // Cookie value
+ cellDataElement = generatedDocument.createElement("td");
+ cellHeaderElement = generatedDocument.createElement("th");
+ tableRowElement = generatedDocument.createElement("tr");
+
+ cellHeaderElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_value")));
+ tableRowElement.appendChild(cellHeaderElement);
+ cellDataElement.setAttribute("class", "shaded");
+ cellDataElement.appendChild(generatedDocument.createTextNode(cookieValue));
+ tableRowElement.appendChild(cellDataElement);
+ tableElement.appendChild(tableRowElement);
+
+ // Cookie host
+ cellDataElement = generatedDocument.createElement("td");
+ cellHeaderElement = generatedDocument.createElement("th");
+ tableRowElement = generatedDocument.createElement("tr");
+
+ cellHeaderElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_host")));
+ tableRowElement.appendChild(cellHeaderElement);
+ cellDataElement.appendChild(generatedDocument.createTextNode(cookieHost));
+ tableRowElement.appendChild(cellDataElement);
+ tableElement.appendChild(tableRowElement);
+
+ // Cookie path
+ cellDataElement = generatedDocument.createElement("td");
+ cellHeaderElement = generatedDocument.createElement("th");
+ tableRowElement = generatedDocument.createElement("tr");
+
+ cellHeaderElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_path")));
+ tableRowElement.appendChild(cellHeaderElement);
+ cellDataElement.setAttribute("class", "shaded");
+ cellDataElement.appendChild(generatedDocument.createTextNode(cookiePath));
+ tableRowElement.appendChild(cellDataElement);
+ tableElement.appendChild(tableRowElement);
+
+ // Cookie secure
+ cellDataElement = generatedDocument.createElement("td");
+ cellHeaderElement = generatedDocument.createElement("th");
+ tableRowElement = generatedDocument.createElement("tr");
+
+ cellHeaderElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_secure")));
+ tableRowElement.appendChild(cellHeaderElement);
+
+ // If the cookie is secure
+ if(cookieSecure)
+ {
+ cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_yes")));
+ }
+ else
+ {
+ cellDataElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_no")));
+ }
+
+ tableRowElement.appendChild(cellDataElement);
+ tableElement.appendChild(tableRowElement);
+
+ // If the cookie has an expiration date
+ if(cookie.expires)
+ {
+ cookieExpires = new Date(cookie.expires * 1000).toUTCString();
+ }
+ else
+ {
+ cookieExpires = stringBundle.getString("webdeveloper_viewCookieInformationSession");
+ }
+
+ // Cookie expires
+ cellDataElement = generatedDocument.createElement("td");
+ cellHeaderElement = generatedDocument.createElement("th");
+ tableRowElement = generatedDocument.createElement("tr");
+
+ cellHeaderElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_expires")));
+ tableRowElement.appendChild(cellHeaderElement);
+ cellDataElement.setAttribute("class", "shaded");
+ cellDataElement.appendChild(generatedDocument.createTextNode(cookieExpires));
+ tableRowElement.appendChild(cellDataElement);
+ tableElement.appendChild(tableRowElement);
+
+ divElement.appendChild(tableElement);
+
+ // Edit link
+ linkElement = generatedDocument.createElement("a");
+ listElement = generatedDocument.createElement("ul");
+ listItemElement = generatedDocument.createElement("li");
+
+ linkElement.addEventListener("blur", webdeveloper_editCookieMouseOut, false);
+ linkElement.addEventListener("click", webdeveloper_editCookie, false);
+ linkElement.addEventListener("focus", webdeveloper_editCookieMouseOver, false);
+ linkElement.addEventListener("mouseout", webdeveloper_editCookieMouseOut, false);
+ linkElement.addEventListener("mouseover", webdeveloper_editCookieMouseOver, false);
+ linkElement.setAttribute("cookie-expires", cookieExpires);
+ linkElement.setAttribute("cookie-host", cookieHost);
+ linkElement.setAttribute("cookie-name", cookieName);
+ linkElement.setAttribute("cookie-path", cookiePath);
+ linkElement.setAttribute("cookie-secure", cookieSecure);
+ linkElement.setAttribute("cookie-value", cookieValue);
+ linkElement.setAttribute("href", "http://example.com/");
+
+ linkElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_editCookie")));
+ listItemElement.appendChild(linkElement);
+ listItemElement.setAttribute("class", "edit");
+ listElement.appendChild(listItemElement);
+
+ // Delete link
+ linkElement = generatedDocument.createElement("a");
+ listItemElement = generatedDocument.createElement("li");
+
+ linkElement.addEventListener("blur", webdeveloper_deleteCookieMouseOut, false);
+ linkElement.addEventListener("click", webdeveloper_deleteCookie, false);
+ linkElement.addEventListener("focus", webdeveloper_deleteCookieMouseOver, false);
+ linkElement.addEventListener("mouseout", webdeveloper_deleteCookieMouseOut, false);
+ linkElement.addEventListener("mouseover", webdeveloper_deleteCookieMouseOver, false);
+ linkElement.setAttribute("cookie-host", cookieHost);
+ linkElement.setAttribute("cookie-name", cookieName);
+ linkElement.setAttribute("cookie-path", cookiePath);
+ linkElement.setAttribute("href", "http://example.com/");
+
+ linkElement.appendChild(generatedDocument.createTextNode(stringBundle.getString("webdeveloper_deleteCookie")));
+ listItemElement.appendChild(linkElement);
+ listItemElement.setAttribute("class", "delete");
+ listElement.appendChild(listItemElement);
+ listElement.setAttribute("class", "commands");
+ divElement.appendChild(listElement);
+ divElement.appendChild(generatedDocument.createElement("hr"));
+ }
+
+ divElement.setAttribute("class", "output");
+ bodyElement.appendChild(divElement);
+ }
+ }
+
+ scriptElement.setAttribute("defer", "defer");
+ scriptElement.setAttribute("src", "chrome://webdeveloper/content/common/xpath.js");
+ scriptElement.setAttribute("type", "text/javascript");
+ headElement.appendChild(scriptElement);
+
+ scriptElement = generatedDocument.createElement("script");
+
+ scriptElement.setAttribute("defer", "defer");
+ scriptElement.setAttribute("src", "chrome://webdeveloper/content/generated/output_pivot.js");
+ scriptElement.setAttribute("type", "text/javascript");
+ headElement.appendChild(scriptElement);
+
+ // If the open tabs in background preference is set to true
+ if(webdeveloper_getBooleanPreference("webdeveloper.open.tabs.background", true))
+ {
+ getBrowser().selectedTab = oldTab;
+ }
+}