From e688e8825794fe22b7ea01391a2b9ecb4c162cce Mon Sep 17 00:00:00 2001 From: janekptacijarabaci Date: Fri, 2 Mar 2018 16:38:25 +0100 Subject: [PATCH] moebius#337: Added option to remove all session cookies for a specific domain Issue #31 https://github.com/MoonchildProductions/moebius/pull/337 --- devtools/client/locales/en-US/storage.dtd | 3 + devtools/client/storage/storage.xul | 4 + .../storage/test/browser_storage_basic.js | 11 ++- .../browser_storage_cookies_delete_all.js | 72 +++++++++++++--- .../test/browser_storage_delete_tree.js | 4 +- .../client/storage/test/storage-listings.html | 5 +- .../storage/test/storage-secured-iframe.html | 5 +- .../test/storage-unsecured-iframe.html | 3 + devtools/client/storage/ui.js | 84 +++++++++++++++---- devtools/server/actors/storage.js | 23 ++++- devtools/shared/specs/storage.js | 8 ++ 11 files changed, 187 insertions(+), 35 deletions(-) diff --git a/devtools/client/locales/en-US/storage.dtd b/devtools/client/locales/en-US/storage.dtd index 211c794369..adfc031833 100644 --- a/devtools/client/locales/en-US/storage.dtd +++ b/devtools/client/locales/en-US/storage.dtd @@ -9,3 +9,6 @@ + + + diff --git a/devtools/client/storage/storage.xul b/devtools/client/storage/storage.xul index 9fbef51997..85425912c6 100644 --- a/devtools/client/storage/storage.xul +++ b/devtools/client/storage/storage.xul @@ -26,6 +26,8 @@ + @@ -33,6 +35,8 @@ + diff --git a/devtools/client/storage/test/browser_storage_basic.js b/devtools/client/storage/test/browser_storage_basic.js index 72582e32fa..7585eed1fc 100644 --- a/devtools/client/storage/test/browser_storage_basic.js +++ b/devtools/client/storage/test/browser_storage_basic.js @@ -29,15 +29,22 @@ const testCases = [ getCookieId("c1", "test1.example.org", "/browser"), getCookieId("cs2", ".example.org", "/"), getCookieId("c3", "test1.example.org", "/"), - getCookieId("uc1", ".example.org", "/") + getCookieId("c4", ".example.org", "/"), + getCookieId("uc1", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/") ] ], [ ["cookies", "sectest1.example.org"], [ getCookieId("uc1", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/"), getCookieId("cs2", ".example.org", "/"), - getCookieId("sc1", "sectest1.example.org", "/browser/devtools/client/storage/test/") + getCookieId("c4", ".example.org", "/"), + getCookieId("sc1", "sectest1.example.org", + "/browser/devtools/client/storage/test/"), + getCookieId("sc2", "sectest1.example.org", + "/browser/devtools/client/storage/test/") ] ], [["localStorage", "http://test1.example.org"], diff --git a/devtools/client/storage/test/browser_storage_cookies_delete_all.js b/devtools/client/storage/test/browser_storage_cookies_delete_all.js index ba64014fd4..4640ebecbf 100644 --- a/devtools/client/storage/test/browser_storage_cookies_delete_all.js +++ b/devtools/client/storage/test/browser_storage_cookies_delete_all.js @@ -8,11 +8,13 @@ // Test deleting all cookies -function* performDelete(store, rowName, deleteAll) { +function* performDelete(store, rowName, action) { let contextMenu = gPanelWindow.document.getElementById( "storage-table-popup"); let menuDeleteAllItem = contextMenu.querySelector( "#storage-table-popup-delete-all"); + let menuDeleteAllSessionCookiesItem = contextMenu.querySelector( + "#storage-table-popup-delete-all-session-cookies"); let menuDeleteAllFromItem = contextMenu.querySelector( "#storage-table-popup-delete-all-from"); @@ -25,13 +27,19 @@ function* performDelete(store, rowName, deleteAll) { yield waitForContextMenu(contextMenu, cells.name, () => { info(`Opened context menu in ${storeName}, row '${rowName}'`); - if (deleteAll) { - menuDeleteAllItem.click(); - } else { - menuDeleteAllFromItem.click(); - let hostName = cells.host.value; - ok(menuDeleteAllFromItem.getAttribute("label").includes(hostName), + switch (action) { + case "deleteAll": + menuDeleteAllItem.click(); + break; + case "deleteAllSessionCookies": + menuDeleteAllSessionCookiesItem.click(); + break; + case "deleteAllFrom": + menuDeleteAllFromItem.click(); + let hostName = cells.host.value; + ok(menuDeleteAllFromItem.getAttribute("label").includes(hostName), `Context menu item label contains '${hostName}'`); + break; } }); @@ -48,15 +56,21 @@ add_task(function* () { getCookieId("c1", "test1.example.org", "/browser"), getCookieId("c3", "test1.example.org", "/"), getCookieId("cs2", ".example.org", "/"), - getCookieId("uc1", ".example.org", "/") + getCookieId("c4", ".example.org", "/"), + getCookieId("uc1", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/") ] ], [ ["cookies", "sectest1.example.org"], [ getCookieId("cs2", ".example.org", "/"), + getCookieId("c4", ".example.org", "/"), getCookieId("sc1", "sectest1.example.org", "/browser/devtools/client/storage/test/"), - getCookieId("uc1", ".example.org", "/") + getCookieId("sc2", "sectest1.example.org", + "/browser/devtools/client/storage/test/"), + getCookieId("uc1", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/") ] ], ]); @@ -64,6 +78,7 @@ add_task(function* () { info("delete all from domain"); // delete only cookies that match the host exactly let id = getCookieId("c1", "test1.example.org", "/browser"); + yield performDelete(["cookies", "test1.example.org"], id, "deleteAllFrom"); yield performDelete(["cookies", "test1.example.org"], id, false); info("test state after delete all from domain"); @@ -73,24 +88,57 @@ add_task(function* () { ["cookies", "test1.example.org"], [ getCookieId("cs2", ".example.org", "/"), - getCookieId("uc1", ".example.org", "/") + getCookieId("c4", ".example.org", "/"), + getCookieId("uc1", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/") ] ], [ ["cookies", "sectest1.example.org"], [ getCookieId("cs2", ".example.org", "/"), + getCookieId("c4", ".example.org", "/"), getCookieId("uc1", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/"), getCookieId("sc1", "sectest1.example.org", "/browser/devtools/client/storage/test/"), + getCookieId("sc2", "sectest1.example.org", + "/browser/devtools/client/storage/test/") + ] + ], + ]); + + info("delete all session cookies"); + // delete only session cookies + id = getCookieId("cs2", ".example.org", "/"); + yield performDelete(["cookies", "sectest1.example.org"], id, + "deleteAllSessionCookies"); + + info("test state after delete all session cookies"); + yield checkState([ + // Cookies with expiry date must not be deleted. + [ + ["cookies", "test1.example.org"], + [ + getCookieId("c4", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/") + ] + ], + [ + ["cookies", "sectest1.example.org"], + [ + getCookieId("c4", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/"), + getCookieId("sc2", "sectest1.example.org", + "/browser/devtools/client/storage/test/") ] ], ]); info("delete all"); // delete all cookies for host, including domain cookies - id = getCookieId("uc1", ".example.org", "/"); - yield performDelete(["cookies", "sectest1.example.org"], id, true); + id = getCookieId("uc2", ".example.org", "/"); + yield performDelete(["cookies", "sectest1.example.org"], id, "deleteAll"); info("test state after delete all"); yield checkState([ diff --git a/devtools/client/storage/test/browser_storage_delete_tree.js b/devtools/client/storage/test/browser_storage_delete_tree.js index 0a7a7e6458..2bca4c344d 100644 --- a/devtools/client/storage/test/browser_storage_delete_tree.js +++ b/devtools/client/storage/test/browser_storage_delete_tree.js @@ -23,7 +23,9 @@ add_task(function* () { getCookieId("c1", "test1.example.org", "/browser"), getCookieId("cs2", ".example.org", "/"), getCookieId("c3", "test1.example.org", "/"), - getCookieId("uc1", ".example.org", "/") + getCookieId("c4", ".example.org", "/"), + getCookieId("uc1", ".example.org", "/"), + getCookieId("uc2", ".example.org", "/") ] ], [["localStorage", "http://test1.example.org"], ["ls1", "ls2"]], diff --git a/devtools/client/storage/test/storage-listings.html b/devtools/client/storage/test/storage-listings.html index 89ae5a332c..313b36b718 100644 --- a/devtools/client/storage/test/storage-listings.html +++ b/devtools/client/storage/test/storage-listings.html @@ -20,7 +20,10 @@ document.cookie = "c1=foobar; expires=" + new Date(cookieExpiresTime1).toGMTString() + "; path=/browser"; document.cookie = "cs2=sessionCookie; path=/; domain=" + partialHostname; document.cookie = "c3=foobar-2; expires=" + - new Date(cookieExpiresTime2).toGMTString() + "; path=/"; + new Date(cookieExpiresTime1).toGMTString() + "; path=/"; +document.cookie = "c4=foobar-3; expires=" + + new Date(cookieExpiresTime2).toGMTString() + "; path=/; domain=" + + partialHostname; // ... and some local storage items .. localStorage.setItem("ls1", "foobar"); localStorage.setItem("ls2", "foobar-2"); diff --git a/devtools/client/storage/test/storage-secured-iframe.html b/devtools/client/storage/test/storage-secured-iframe.html index 8424fd4cdf..9e1ef60a0d 100644 --- a/devtools/client/storage/test/storage-secured-iframe.html +++ b/devtools/client/storage/test/storage-secured-iframe.html @@ -1,4 +1,4 @@ - +