toolkit/components/search/tests/xpcshell/head_search.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim:set ts=2 sw=2 sts=2 et: */
     4 Components.utils.import("resource://gre/modules/Services.jsm");
     5 Components.utils.import("resource://gre/modules/NetUtil.jsm");
     6 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
     7 Components.utils.import("resource://gre/modules/FileUtils.jsm");
     8 Components.utils.import("resource://gre/modules/Promise.jsm");
     9 Components.utils.import("resource://testing-common/AppInfo.jsm");
    11 const BROWSER_SEARCH_PREF = "browser.search.";
    12 const NS_APP_SEARCH_DIR = "SrchPlugns";
    14 const MODE_RDONLY = FileUtils.MODE_RDONLY;
    15 const MODE_WRONLY = FileUtils.MODE_WRONLY;
    16 const MODE_CREATE = FileUtils.MODE_CREATE;
    17 const MODE_TRUNCATE = FileUtils.MODE_TRUNCATE;
    19 // Need to create and register a profile folder.
    20 var gProfD = do_get_profile();
    22 function dumpn(text)
    23 {
    24   dump("search test: " + text + "\n");
    25 }
    27 /**
    28  * Clean the profile of any metadata files left from a previous run.
    29  */
    30 function removeMetadata()
    31 {
    32   let file = gProfD.clone();
    33   file.append("search-metadata.json");
    34   if (file.exists()) {
    35     file.remove(false);
    36   }
    38   file = gProfD.clone();
    39   file.append("search.sqlite");
    40   if (file.exists()) {
    41     file.remove(false);
    42   }
    43 }
    45 function removeCacheFile()
    46 {
    47   let file = gProfD.clone();
    48   file.append("search.json");
    49   if (file.exists()) {
    50     file.remove(false);
    51   }
    52 }
    54 /**
    55  * Clean the profile of any cache file left from a previous run.
    56  */
    57 function removeCache()
    58 {
    59   let file = gProfD.clone();
    60   file.append("search.json");
    61   if (file.exists()) {
    62     file.remove(false);
    63   }
    65 }
    67 /**
    68  * Run some callback once metadata has been committed to disk.
    69  */
    70 function afterCommit(callback)
    71 {
    72   let obs = function(result, topic, verb) {
    73     if (verb == "write-metadata-to-disk-complete") {
    74       Services.obs.removeObserver(obs, topic);
    75       callback(result);
    76     } else {
    77       dump("TOPIC: " + topic+ "\n");
    78     }
    79   }
    80   Services.obs.addObserver(obs, "browser-search-service", false);
    81 }
    83 /**
    84  * Run some callback once cache has been built.
    85  */
    86 function afterCache(callback)
    87 {
    88   let obs = function(result, topic, verb) {
    89     do_print("afterCache: " + verb);
    90     if (verb == "write-cache-to-disk-complete") {
    91       Services.obs.removeObserver(obs, topic);
    92       callback(result);
    93     } else {
    94       dump("TOPIC: " + topic+ "\n");
    95     }
    96   }
    97   Services.obs.addObserver(obs, "browser-search-service", false);
    98 }
   100 function parseJsonFromStream(aInputStream) {
   101   const json = Cc["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON);
   102   const data = json.decodeFromStream(aInputStream, aInputStream.available());
   103   return data;
   104 }
   106 /**
   107  * Read a JSON file and return the JS object
   108  */
   109 function readJSONFile(aFile) {
   110   let stream = Cc["@mozilla.org/network/file-input-stream;1"].
   111                createInstance(Ci.nsIFileInputStream);
   112   try {
   113     stream.init(aFile, MODE_RDONLY, FileUtils.PERMS_FILE, 0);
   114     return parseJsonFromStream(stream, stream.available());
   115   } catch(ex) {
   116     dumpn("readJSONFile: Error reading JSON file: " + ex);
   117   } finally {
   118     stream.close();
   119   }
   120   return false;
   121 }
   123 /**
   124  * Recursively compare two objects and check that every property of expectedObj has the same value
   125  * on actualObj.
   126  */
   127 function isSubObjectOf(expectedObj, actualObj) {
   128   for (let prop in expectedObj) {
   129     if (expectedObj[prop] instanceof Object) {
   130       do_check_eq(expectedObj[prop].length, actualObj[prop].length);
   131       isSubObjectOf(expectedObj[prop], actualObj[prop]);
   132     } else {
   133       do_check_eq(expectedObj[prop], actualObj[prop]);
   134     }
   135   }
   136 }
   138 // Expand the amount of information available in error logs
   139 Services.prefs.setBoolPref("browser.search.log", true);

mercurial