summaryrefslogtreecommitdiffstats
path: root/browser/components/migration/tests/unit/test_IE_cookies.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/migration/tests/unit/test_IE_cookies.js')
-rw-r--r--browser/components/migration/tests/unit/test_IE_cookies.js111
1 files changed, 111 insertions, 0 deletions
diff --git a/browser/components/migration/tests/unit/test_IE_cookies.js b/browser/components/migration/tests/unit/test_IE_cookies.js
new file mode 100644
index 000000000..37a7462f2
--- /dev/null
+++ b/browser/components/migration/tests/unit/test_IE_cookies.js
@@ -0,0 +1,111 @@
+"use strict";
+
+XPCOMUtils.defineLazyModuleGetter(this, "ctypes",
+ "resource://gre/modules/ctypes.jsm");
+
+add_task(function* () {
+ let migrator = MigrationUtils.getMigrator("ie");
+ // Sanity check for the source.
+ Assert.ok(migrator.sourceExists);
+
+ const BOOL = ctypes.bool;
+ const LPCTSTR = ctypes.char16_t.ptr;
+ const DWORD = ctypes.uint32_t;
+ const LPDWORD = DWORD.ptr;
+
+ let wininet = ctypes.open("Wininet");
+
+ /*
+ BOOL InternetSetCookieW(
+ _In_ LPCTSTR lpszUrl,
+ _In_ LPCTSTR lpszCookieName,
+ _In_ LPCTSTR lpszCookieData
+ );
+ */
+ let setIECookie = wininet.declare("InternetSetCookieW",
+ ctypes.default_abi,
+ BOOL,
+ LPCTSTR,
+ LPCTSTR,
+ LPCTSTR);
+
+ /*
+ BOOL InternetGetCookieW(
+ _In_ LPCTSTR lpszUrl,
+ _In_ LPCTSTR lpszCookieName,
+ _Out_ LPCTSTR lpszCookieData,
+ _Inout_ LPDWORD lpdwSize
+ );
+ */
+ let getIECookie = wininet.declare("InternetGetCookieW",
+ ctypes.default_abi,
+ BOOL,
+ LPCTSTR,
+ LPCTSTR,
+ LPCTSTR,
+ LPDWORD);
+
+ // We need to randomize the cookie to avoid clashing with other cookies
+ // that might have been set by previous tests and not properly cleared.
+ let date = (new Date()).getDate();
+ const COOKIE = {
+ get host() {
+ return new URL(this.href).host;
+ },
+ href: `http://mycookietest.${Math.random()}.com`,
+ name: "testcookie",
+ value: "testvalue",
+ expiry: new Date(new Date().setDate(date + 2))
+ };
+ let data = ctypes.char16_t.array()(256);
+ let sizeRef = DWORD(256).address();
+
+ do_register_cleanup(() => {
+ // Remove the cookie.
+ try {
+ let expired = new Date(new Date().setDate(date - 2));
+ let rv = setIECookie(COOKIE.href, COOKIE.name,
+ `; expires=${expired.toUTCString()}`);
+ Assert.ok(rv, "Expired the IE cookie");
+ Assert.ok(!getIECookie(COOKIE.href, COOKIE.name, data, sizeRef),
+ "The cookie has been properly removed");
+ } catch (ex) {}
+
+ // Close the library.
+ try {
+ wininet.close();
+ } catch (ex) {}
+ });
+
+ // Create the persistent cookie in IE.
+ let value = `${COOKIE.value}; expires=${COOKIE.expiry.toUTCString()}`;
+ let rv = setIECookie(COOKIE.href, COOKIE.name, value);
+ Assert.ok(rv, "Added a persistent IE cookie: " + value);
+
+ // Sanity check the cookie has been created.
+ Assert.ok(getIECookie(COOKIE.href, COOKIE.name, data, sizeRef),
+ "Found the added persistent IE cookie");
+ do_print("Found cookie: " + data.readString());
+ Assert.equal(data.readString(), `${COOKIE.name}=${COOKIE.value}`,
+ "Found the expected cookie");
+
+ // Sanity check that there are no cookies.
+ Assert.equal(Services.cookies.countCookiesFromHost(COOKIE.host), 0,
+ "There are no cookies initially");
+
+ // Migrate cookies.
+ yield promiseMigration(migrator, MigrationUtils.resourceTypes.COOKIES);
+
+ Assert.equal(Services.cookies.countCookiesFromHost(COOKIE.host), 1,
+ "Migrated the expected number of cookies");
+
+ // Now check the cookie details.
+ let enumerator = Services.cookies.getCookiesFromHost(COOKIE.host, {});
+ Assert.ok(enumerator.hasMoreElements());
+ let foundCookie = enumerator.getNext().QueryInterface(Ci.nsICookie2);
+
+ Assert.equal(foundCookie.name, COOKIE.name);
+ Assert.equal(foundCookie.value, COOKIE.value);
+ Assert.equal(foundCookie.host, "." + COOKIE.host);
+ Assert.equal(foundCookie.expiry, Math.floor(COOKIE.expiry / 1000));
+});