Bug 1255569 - Add coverage for cookie eviction events for expired cookies, r=kmag
☠☠ backed out by 1ffc15e90603 ☠ ☠
authorbsilverberg <bsilverberg@mozilla.com>
Tue, 29 Mar 2016 17:20:58 -0400
changeset 291307 0228e00caf591a590ac553d3ccf297c647b4c9c0
parent 291306 1d794d077cb1d12228185a0b9f6bbf64c56b8513
child 291308 f91054a848d692f7c6f66a5be829ffa5421a898a
push id30131
push userkwierso@gmail.com
push dateFri, 01 Apr 2016 22:43:45 +0000
treeherderautoland@c40c0b2f3b4c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerskmag
bugs1255569
milestone48.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1255569 - Add coverage for cookie eviction events for expired cookies, r=kmag Fix bug in ext-cookies.js that was reporting expired cookies as evicted MozReview-Commit-ID: 2it2YwbQAzh
toolkit/components/extensions/ext-cookies.js
toolkit/components/extensions/test/mochitest/test_ext_cookies.html
--- a/toolkit/components/extensions/ext-cookies.js
+++ b/toolkit/components/extensions/ext-cookies.js
@@ -333,17 +333,17 @@ extensions.registerSchemaAPI("cookies", 
             case "changed":
               notify(true, subject, "overwrite");
               notify(false, subject, "explicit");
               break;
             case "batch-deleted":
               subject.QueryInterface(Ci.nsIArray);
               for (let i = 0; i < subject.length; i++) {
                 let cookie = subject.queryElementAt(i, Ci.nsICookie2);
-                if (!cookie.isSession && (cookie.expiry + 1) * 1000 <= Date.now()) {
+                if (!cookie.isSession && cookie.expiry * 1000 <= Date.now()) {
                   notify(true, cookie, "expired");
                 } else {
                   notify(true, cookie, "evicted");
                 }
               }
               break;
           }
         };
--- a/toolkit/components/extensions/test/mochitest/test_ext_cookies.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_cookies.html
@@ -176,12 +176,64 @@ add_task(function* test_cookies() {
 
   yield extension.startup();
   info("extension loaded");
   yield extension.awaitFinish("cookies");
   yield extension.unload();
   info("extension unloaded");
 });
 
+add_task(function* test_cookies_expiry() {
+  function background() {
+    let expectedEvents = [];
+
+    browser.cookies.onChanged.addListener(event => {
+      expectedEvents.push(`${event.removed}:${event.cause}`);
+      if (expectedEvents.length === 1) {
+        browser.test.assertEq("true:expired", expectedEvents[0], "expired cookie removed");
+        browser.test.assertEq("first", event.cookie.name, "expired cookie has the expected name");
+        browser.test.assertEq("one", event.cookie.value, "expired cookie has the expected value");
+      } else {
+        browser.test.assertEq("false:explicit", expectedEvents[1], "new cookie added");
+        browser.test.assertEq("first", event.cookie.name, "new cookie has the expected name");
+        browser.test.assertEq("one-again", event.cookie.value, "new cookie has the expected value");
+        browser.test.notifyPass("cookie-expiry");
+      }
+    });
+
+    setTimeout(() => {
+      browser.test.sendMessage("change-cookies");
+    }, 1000);
+  }
+
+  let domain = ".example.com";
+  let extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      "permissions": ["http://example.com/", "cookies"],
+    },
+    background: `(${background})()`,
+  });
+
+  let cookieSvc = SpecialPowers.Services.cookies;
+
+  let cookie = {
+    host: domain,
+    name: "first",
+    path: "/",
+  };
+
+  do {
+    cookieSvc.add(cookie.host, cookie.path, cookie.name, "one", false, false, false, Date.now() / 1000 + 1);
+  } while (!cookieSvc.cookieExists(cookie));
+
+  yield extension.startup();
+  yield extension.awaitMessage("change-cookies");
+
+  cookieSvc.add(cookie.host, cookie.path, cookie.name, "one-again", false, false, false, Date.now() / 1000 + 10);
+
+  yield extension.awaitFinish("cookie-expiry");
+  yield extension.unload();
+});
+
 </script>
 
 </body>
 </html>