mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 444600 - (cookiemonster2) Cookies go missing after a few days. r=sdwilsh, sr=mconnor
This commit is contained in:
parent
e6d4d432f3
commit
6fb4beaaad
106
extensions/cookie/test/test_eviction.html
Normal file
106
extensions/cookie/test/test_eviction.html
Normal file
@ -0,0 +1,106 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test for cookie eviction</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body onload="setupTest()">
|
||||
<p id="display"></p>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
function setupTest() {
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
|
||||
// twiddle prefs to convenient values for this test
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setIntPref("network.cookie.purgeAge", 2);
|
||||
prefs.setIntPref("network.cookie.maxNumber", 1000);
|
||||
|
||||
var cm = Components.classes["@mozilla.org/cookiemanager;1"]
|
||||
.getService(Components.interfaces.nsICookieManager2);
|
||||
|
||||
// eviction is performed based on two limits: when the total number of cookies
|
||||
// exceeds maxNumber + 10% (1100), and when cookies are older than purgeAge
|
||||
// (1 second). purging is done when both conditions are satisfied, and only
|
||||
// those cookies are purged.
|
||||
|
||||
// we test the following cases of eviction:
|
||||
// 1) excess and age are satisfied, but only some of the excess are old enough
|
||||
// to be purged.
|
||||
is(testEviction(cm, 1101, 5, 50, 1051), 1051, "incorrect number of cookies");
|
||||
|
||||
// 2) excess and age are satisfied, and all of the excess are old enough
|
||||
// to be purged.
|
||||
is(testEviction(cm, 1101, 5, 100, 1001), 1001, "incorrect number of cookies");
|
||||
|
||||
// 3) excess and age are satisfied, and more than the excess are old enough
|
||||
// to be purged.
|
||||
is(testEviction(cm, 1101, 5, 500, 1001), 1001, "incorrect number of cookies");
|
||||
|
||||
// 4) excess but not age are satisfied.
|
||||
is(testEviction(cm, 2000, 0, 0, 2000), 2000, "incorrect number of cookies");
|
||||
|
||||
// 5) age but not excess are satisfied.
|
||||
is(testEviction(cm, 1100, 5, 200, 1100), 1100, "incorrect number of cookies");
|
||||
|
||||
cm.removeAll();
|
||||
|
||||
// reset prefs to defaults
|
||||
prefs.setIntPref("network.cookie.purgeAge", 30 * 24 * 60 * 60);
|
||||
prefs.setIntPref("network.cookie.maxNumber", 2000);
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
// test that cookies are evicted by order of lastAccessed time, if both the limit
|
||||
// on total cookies (maxNumber + 10%) and the purge age are exceeded
|
||||
function
|
||||
testEviction(aCM, aNumberTotal, aSleepDuration, aNumberAfter, aNumberToExpect)
|
||||
{
|
||||
const Ci = Components.interfaces;
|
||||
|
||||
aCM.removeAll();
|
||||
|
||||
var i;
|
||||
for (i = 0; i < aNumberTotal; ++i) {
|
||||
var host = "eviction." + i + ".tests";
|
||||
aCM.add(host, "", "test", "eviction", false, false, false, Math.pow(2, 62));
|
||||
|
||||
if ((i == aNumberAfter - 1) && aSleepDuration) {
|
||||
// sleep a while, to make sure the first batch of cookies is older than
|
||||
// the second (timer resolution varies on different platforms).
|
||||
sleep(aSleepDuration * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
var enumerator = aCM.enumerator;
|
||||
|
||||
i = 0;
|
||||
while (enumerator.hasMoreElements()) {
|
||||
var cookie = enumerator.getNext().QueryInterface(Ci.nsICookie2);
|
||||
++i;
|
||||
|
||||
if (aNumberTotal != aNumberToExpect) {
|
||||
var hostNumber = new Number(cookie.rawHost.split(".")[1]);
|
||||
if (hostNumber < (aNumberTotal - aNumberToExpect)) break;
|
||||
}
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
// delay for a number of milliseconds
|
||||
function sleep(delay)
|
||||
{
|
||||
var start = new Date().getTime();
|
||||
while (new Date().getTime() < start + delay);
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user