extensions/cookie/test/test_app_uninstall_cookies.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE HTML>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=783408
     5 -->
     6 <head>
     7   <meta charset="utf-8">
     8   <title>Tests that uninstalling app removes the cookies</title>
     9   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
    10   <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
    11   <script src="channel_utils.js"></script>
    12 </head>
    13 <body>
    14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=786296">Mozilla Bug 783408</a>
    15 <p id="display"></p>
    16 <div id="content">
    18 </div>
    19 <pre id="test">
    20 <script type="application/javascript;version=1.7">
    22 /** Test for Bug 783408 **/
    24 const Ci = Components.interfaces;
    25 const Cc = Components.classes;
    26 const Cu = Components.utils;
    28 SimpleTest.waitForExplicitFinish();
    30 Cu.import("resource://testing-common/httpd.js");
    31 var httpserver = new HttpServer();
    33 var cookieSetPath = "/setcookie";
    34 var cookieCheckPath = "/checkcookie";
    36 var permManager = Cc["@mozilla.org/permissionmanager;1"]
    37                     .getService(Ci.nsIPermissionManager);
    38 var cookieMng = Cc["@mozilla.org/cookiemanager;1"]
    39                   .getService(Ci.nsICookieManager2);
    40 var appsService = Cc['@mozilla.org/AppsService;1']
    41                     .getService(Ci.nsIAppsService);
    43 var cookies = [
    44   { cookieName: 'LCC_App_BrowF_PrivF',
    45     loadContext: null },
    46   { cookieName: 'LCC_App_BrowT_PrivF',
    47     loadContext: null },
    48   { cookieName: 'AppUninstall_Witness',
    49     loadContext: new LoadContextCallback(0, false, false, 1) },
    50 ];
    51 var counter = 0;
    53 function getCookiesCountForApp(aAppId) {
    54   var nbCookies = 0;
    55   var enumerator = cookieMng.getCookiesForApp(aAppId, false);
    57   while (enumerator.hasMoreElements()) {
    58     enumerator.getNext();
    59     nbCookies++;
    60   }
    62   return nbCookies;
    63 }
    65 function getCookiesCount() {
    66   var nbCookies = 0;
    67   var enumerator = cookieMng.enumerator;
    69   while (enumerator.hasMoreElements()) {
    70     enumerator.getNext();
    71     nbCookies++;
    72   }
    74   return nbCookies;
    75 }
    77 function cookieSetHandler(metadata, response) {
    78   var cookieName = metadata.getHeader("foo-set-cookie");
    80   response.setStatusLine(metadata.httpVersion, 200, "Ok");
    81   response.setHeader("Set-Cookie", cookieName + "=1; Path=/", false);
    82   response.setHeader("Content-Type", "text/plain");
    83   response.bodyOutputStream.write("Ok", "Ok".length);
    84 }
    86 function cookieCheckHandler(metadata, response) {
    87   var cookies = metadata.getHeader("Cookie");
    89   response.setStatusLine(metadata.httpVersion, 200, "Ok");
    90   response.setHeader("foo-saw-cookies", cookies, false);
    91   response.setHeader("Content-Type", "text/plain");
    92   response.bodyOutputStream.write("Ok", "Ok".length);
    93 }
    95 function setupChannel(path) {
    96   var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    97   var chan = ios.newChannel("http://localhost:4444" + path, "", null);
    98   chan.notificationCallbacks = cookies[counter].loadContext;
    99   chan.QueryInterface(Ci.nsIHttpChannel);
   100   return chan;
   101 }
   103 function setCookie() {
   104   var channel = setupChannel(cookieSetPath);
   105   channel.setRequestHeader("foo-set-cookie", cookies[counter].cookieName, false);
   106   channel.asyncOpen(new ChannelListener(setNextCookie, null), null);
   107 }
   109 function setNextCookie(request, data, context) {
   110   if (++counter == cookies.length) {
   111     // all cookies set: switch to checking them
   112     counter = 0;
   113     checkCookie();
   114   } else {
   115     setCookie();
   116   }
   117 }
   119 permManager.addFromPrincipal(window.document.nodePrincipal, "webapps-manage",
   120                              Ci.nsIPermissionManager.ALLOW_ACTION);
   122 SimpleTest.registerCleanupFunction(() =>
   123   permManager.removeFromPrincipal(window.document.nodePrincipal, "webapps-manage",
   124                                   Ci.nsIPermissionManager.ALLOW_ACTION)
   125 );
   127 var gManifestURL = "http://www.example.com/chrome/dom/tests/mochitest/webapps/apps/basic.webapp";
   129 var gTestAppId = 0;
   130 var gCurrentCookiesCount = 0;
   132 function onInstall() {
   133   gTestAppId = appsService.getAppLocalIdByManifestURL(gManifestURL);
   135   cookies[0].loadContext = new LoadContextCallback(gTestAppId, false, false, 1);
   136   cookies[1].loadContext = new LoadContextCallback(gTestAppId, true, false, 1);
   138   is(getCookiesCountForApp(gTestAppId), 0, "App should have no cookies");
   140   httpserver.registerPathHandler(cookieSetPath, cookieSetHandler);
   141   httpserver.registerPathHandler(cookieCheckPath, cookieCheckHandler);
   142   httpserver.start(4444);
   144   setCookie();
   145 }
   147 function checkCookie() {
   148   var appCookiesCount = getCookiesCountForApp(gTestAppId);
   149   is(appCookiesCount, 2, "App should have two cookies");
   151   gCurrentCookiesCount = getCookiesCount() - appCookiesCount;
   153   // Not installed means not installed as native app.
   154   navigator.mozApps.mgmt.getNotInstalled().onsuccess = function() {
   155     for (i in this.result) {
   156       var app = this.result[i];
   157       if (app.manifestURL == gManifestURL) {
   158         navigator.mozApps.mgmt.uninstall(app).onsuccess = function() {
   159           is(getCookiesCountForApp(gTestAppId), 0, "App should have no cookies");
   161           is(getCookiesCount(), gCurrentCookiesCount,
   162              "Number of cookies should not have changed");
   164           httpserver.stop(function() {
   165             SimpleTest.finish();
   166           });
   167         };
   168       }
   169     }
   170   };
   171 }
   173 SpecialPowers.pushPrefEnv({set: [['network.cookie.cookieBehavior', 0]]}, () =>
   174   SpecialPowers.autoConfirmAppInstall(() =>
   175     navigator.mozApps.install(gManifestURL, null).onsuccess = onInstall
   176   )
   177 );
   178 </script>
   179 </pre>
   180 </body>
   181 </html>

mercurial