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 291366 0228e00caf591a590ac553d3ccf297c647b4c9c0
parent 291365 1d794d077cb1d12228185a0b9f6bbf64c56b8513
child 291367 f91054a848d692f7c6f66a5be829ffa5421a898a
push id19656
push usergwagner@mozilla.com
push dateMon, 04 Apr 2016 13:43:23 +0000
treeherderb2g-inbound@e99061fde28a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerskmag
bugs1255569
milestone48.0a1
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>