dom/settings/tests/test_settings_blobs.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 <!DOCTYPE html>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=821630
     5 -->
     6 <head>
     7   <title>Test for Bug 821630 Settings API</title>
     8   <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
     9   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    10   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    11 </head>
    12 <body>
    14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=821630">Mozilla Bug 821630</a>
    15 <p id="display"></p>
    16 <div id="content" style="display: none">
    18 </div>
    19 <pre id="test">
    20 <script class="testbody" type="text/javascript;version=1.7">
    22 "use strict";
    24 if (SpecialPowers.isMainProcess()) {
    25   SpecialPowers.Cu.import("resource://gre/modules/SettingsChangeNotifier.jsm");
    26 }
    28 SpecialPowers.addPermission("settings-read", true, document);
    29 SpecialPowers.addPermission("settings-write", true, document);
    31 function onUnwantedSuccess() {
    32   ok(false, "onUnwantedSuccess: shouldn't get here");
    33 }
    35 function onFailure() {
    36   return function(s) {
    37     if (s) {
    38       ok(false, "in on Failure! - " + s);
    39     } else {
    40       ok(false, "in on Failure!");
    41     }
    42   }
    43 }
    45 let mozSettings = window.navigator.mozSettings;
    46 let req;
    48 let storedBlob = new Blob([""], {"type": "text/xml"});
    50 function checkBlob(blob) {
    51   try {
    52     let url = URL.createObjectURL(blob);
    53     ok(true, "Valid blob");
    54   } catch (e) {
    55     ok(false, "Valid blob");
    56   }
    57 }
    59 let steps = [
    60   function() {
    61     let lock = mozSettings.createLock();
    62     req = lock.clear();
    63     req.onsuccess = next;
    64     req.onerror = onFailure("Deleting database");
    65   },
    66   function() {
    67     function obs(e) {
    68       checkBlob(e.settingValue);
    69       mozSettings.removeObserver("test1", obs);
    70       next();
    71     }
    72     mozSettings.addObserver("test1", obs);
    73     next();
    74   },
    75   function() {
    76     // next is called by the observer above
    77     let req = mozSettings.createLock().set({"test1": storedBlob});
    78     req.onerror = onFailure("Saving blob");
    79   },
    80   function() {
    81     let req = mozSettings.createLock().get("test1");
    82     req.onsuccess = function(event) {
    83       checkBlob(event.target.result["test1"]);
    84       next();
    85     };
    86     req.onerror = onFailure("Getting blob");
    87   },
    88   function() {
    89     let req = mozSettings.createLock().set({"test2": [1, 2, storedBlob, 4]});
    90     req.onsuccess = next;
    91     req.onerror = onFailure("Saving array");
    92   },
    93   function() {
    94     let req = mozSettings.createLock().get("test2");
    95     req.onsuccess = function(event) {
    96       let val = event.target.result["test2"];
    97       ok(Array.isArray(val), "Result is an array");
    98       ok(val[0] == 1 && val[1] == 2 && val[3] == 4, "Primitives are preserved");
    99       checkBlob(val[2]);
   100       next();
   101     };
   102     req.onerror = onFailure("Getting array");
   103   },
   104   function() {
   105     let req = mozSettings.createLock().set({"test3": {foo: "bar", baz: {number: 1, arr: [storedBlob]}}});
   106     req.onsuccess = next();
   107     req.onerror = onFailure("Saving object");
   108   },
   109   function() {
   110     let req = mozSettings.createLock().get("test3");
   111     req.onsuccess = function(event) {
   112       let val = event.target.result["test3"];
   113       ok(typeof(val) == "object", "Result is an object");
   114       ok("foo" in val && typeof(val.foo) == "string", "String property preserved");
   115       ok("baz" in val && typeof(val.baz) == "object", "Object property preserved");
   116       let baz = val.baz;
   117       ok("number" in baz && baz.number == 1, "Primite inside object preserved");
   118       ok("arr" in baz && Array.isArray(baz.arr), "Array inside object is preserved");
   119       checkBlob(baz.arr[0]);
   120       next();
   121     };
   122     req.onerror = onFailure("Getting object");
   123   },
   124   function() {
   125     let req = mozSettings.createLock().clear();
   126     req.onsuccess = function() {
   127       next();
   128     };
   129     req.onerror = onFailure("Deleting database");
   130   },
   131   function () {
   132     ok(true, "all done!\n");
   133     SimpleTest.finish();
   134   }
   135 ];
   137 function next() {
   138   try {
   139     let step = steps.shift();
   140     if (step) {
   141       step();
   142     }
   143   } catch(ex) {
   144     ok(false, "Caught exception", ex);
   145   }
   146 }
   148 SimpleTest.waitForExplicitFinish();
   149 addLoadEvent(next);
   150 </script>
   151 </pre>
   152 </body>
   153 </html>

mercurial