dom/settings/tests/test_settings_data_uris.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=806374
     5 -->
     6 <head>
     7   <title>Test for Bug 806374 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 // A simple data URI that will be converted to a blob.
    49 let dataURI = "data:text/html;charset=utf-8,%3C!DOCTYPE html>%3Cbody style='background:black;";
    51 function checkBlob(blob) {
    52   try {
    53     let url = URL.createObjectURL(blob);
    54     ok(true, "Valid blob");
    55   } catch (e) {
    56     ok(false, "Valid blob");
    57   }
    58 }
    60 let steps = [
    61   function() {
    62     let lock = mozSettings.createLock();
    63     req = lock.clear();
    64     req.onsuccess = next;
    65     req.onerror = onFailure("Deleting database");
    66   },
    67   function() {
    68     function obs(e) {
    69       checkBlob(e.settingValue);
    70       mozSettings.removeObserver("test1", obs);
    71       next();
    72     }
    73     mozSettings.addObserver("test1", obs);
    74     next();
    75   },
    76   function() {
    77     // next is called by the observer above
    78     let req = mozSettings.createLock().set({"test1": dataURI});
    79     req.onerror = onFailure("Saving blob");
    80   },
    81   function() {
    82     let req = mozSettings.createLock().get("test1");
    83     req.onsuccess = function(event) {
    84       checkBlob(event.target.result["test1"]);
    85       next();
    86     };
    87     req.onerror = onFailure("Getting blob");
    88   },
    89   function() {
    90     let req = mozSettings.createLock().set({"test2": [1, 2, dataURI, 4]});
    91     req.onsuccess = next;
    92     req.onerror = onFailure("Saving array");
    93   },
    94   function() {
    95     let req = mozSettings.createLock().get("test2");
    96     req.onsuccess = function(event) {
    97       let val = event.target.result["test2"];
    98       ok(Array.isArray(val), "Result is an array");
    99       ok(val[0] == 1 && val[1] == 2 && val[3] == 4, "Primitives are preserved");
   100       checkBlob(val[2]);
   101       next();
   102     };
   103     req.onerror = onFailure("Getting array");
   104   },
   105   function() {
   106     let req = mozSettings.createLock().set({"test3": {foo: "bar", baz: {number: 1, arr: [dataURI]}}});
   107     req.onsuccess = next();
   108     req.onerror = onFailure("Saving object");
   109   },
   110   function() {
   111     let req = mozSettings.createLock().get("test3");
   112     req.onsuccess = function(event) {
   113       let val = event.target.result["test3"];
   114       ok(typeof(val) == "object", "Result is an object");
   115       ok("foo" in val && typeof(val.foo) == "string", "String property preserved");
   116       ok("baz" in val && typeof(val.baz) == "object", "Object property preserved");
   117       let baz = val.baz;
   118       ok("number" in baz && baz.number == 1, "Primite inside object preserved");
   119       ok("arr" in baz && Array.isArray(baz.arr), "Array inside object is preserved");
   120       checkBlob(baz.arr[0]);
   121       next();
   122     };
   123     req.onerror = onFailure("Getting object");
   124   },
   125   function() {
   126     let req = mozSettings.createLock().clear();
   127     req.onsuccess = function() {
   128       next();
   129     };
   130     req.onerror = onFailure("Deleting database");
   131   },
   132   function () {
   133     ok(true, "all done!\n");
   134     SimpleTest.finish();
   135   }
   136 ];
   138 function next() {
   139   try {
   140     let step = steps.shift();
   141     if (step) {
   142       step();
   143     }
   144   } catch(ex) {
   145     ok(false, "Caught exception", ex);
   146   }
   147 }
   149 SimpleTest.waitForExplicitFinish();
   150 addLoadEvent(next);
   151 </script>
   152 </pre>
   153 </body>
   154 </html>

mercurial