dom/settings/tests/test_settings_onsettingchange.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=678695
     5 -->
     6 <head>
     7   <title>Test for Bug 678695 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=678695">Mozilla Bug 678695</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">
    22 "use strict";
    24 if (SpecialPowers.isMainProcess()) {
    25   SpecialPowers.Cu.import("resource://gre/modules/SettingsChangeNotifier.jsm");
    26 }
    28 SpecialPowers.addPermission("settings-write", true, document);
    29 SpecialPowers.addPermission("settings-read", true, document);
    31 var screenBright = {"screen.brightness": 0.7};
    33 function onFailure() {
    34   ok(false, "in on Failure!");
    35 }
    37 function observer1(setting) {
    38   dump("observer 1 called!\n");
    39   is(setting.settingName, "screen.brightness", "Same settingName");
    40   is(setting.settingValue, "0.7", "Same settingvalue");
    41 };
    43 function observer2(setting) {
    44   dump("observer 2 called!\n");
    45   is(setting.settingName, "screen.brightness", "Same settingName");
    46   is(setting.settingValue, "0.7", "Same settingvalue");
    47 };
    49 var calls = 0;
    50 function observerOnlyCalledOnce(setting) {
    51   is(++calls, 1, "Observer only called once!");
    52 };
    55 function observerWithNext(setting) {
    56   dump("observer with next called!\n");
    57   is(setting.settingName, "screen.brightness", "Same settingName");
    58   is(setting.settingValue, "0.7", "Same settingvalue");
    59   next();
    60 };
    62 function onsettingschangeWithNext(event) {
    63   dump("onsettingschangewithnext called!\n");
    64   is(event.settingName, "screen.brightness", "Same settingName");
    65   is(event.settingValue, "0.7", "Same settingvalue");
    66   next();
    67 };
    69 var cset = {'a':'b','c':[{'d':'e'}]};
    71 function onComplexSettingschangeWithNext(event) {
    72   is(event.settingName, "test.key", "Same settingName");
    73   is(event.settingValue['a'], "b", "Same settingvalue");
    74   var c = event.settingValue['c'];
    75   ok(Array.isArray(c), "c is array!");
    76   is(c[0]['d'], 'e', "Right settingValue!");
    77   next();
    78 };
    80 var req, req2;
    81 var index = 0;
    83 var mozSettings = window.navigator.mozSettings;
    85 var steps = [
    86   function () {
    87     ok(true, "Deleting database");
    88     var lock = mozSettings.createLock();
    89     req = lock.clear();
    90     req.onsuccess = function () {
    91       ok(true, "Deleted the database");
    92     };
    93     req.onerror = onFailure;
    94     req2 = lock.set(screenBright);
    95     req2.onsuccess = function () {
    96       ok(true, "set done");
    97       navigator.mozSettings.onsettingchange = onsettingschangeWithNext;
    98       next();
    99     }
   100     req2.onerror = onFailure;
   101   },
   102   function() {
   103     ok(true, "testing");
   104     var lock = mozSettings.createLock();
   105     req2 = lock.set(screenBright);
   106     req2.onsuccess = function() {
   107       ok(true, "end adding onsettingchange");
   108     };
   109     req2.onerror = onFailure;
   110   },
   111   function() {
   112     ok(true, "test observers");
   113     var lock = mozSettings.createLock();
   114     req = lock.get("screen.brightness");
   115     req.onsuccess = function () {
   116       ok(true, "get done");
   117       next();
   118     }
   119     req.onerror = onFailure;
   120   },
   121   function() {
   122     ok(true, "adding Observers 1");
   123     navigator.mozSettings.addObserver("screen.brightness", observer1);
   124     navigator.mozSettings.addObserver("screen.brightness", observer1);
   125     navigator.mozSettings.addObserver("screen.brightness", observer2);
   126     navigator.mozSettings.addObserver("screen.brightness", observerOnlyCalledOnce);
   127     var lock = mozSettings.createLock();
   128     req2 = lock.get("screen.brightness");
   129     req2.onsuccess = function() {
   130       ok(true, "set observeSetting done!");
   131       next();
   132     };
   133     req2.onerror = onFailure;
   134   },
   135   function() {
   136     ok(true, "test observers");
   137     var lock = mozSettings.createLock();
   138     req = lock.set(screenBright);
   139     req.onsuccess = function () {
   140       ok(true, "set1 done");
   141     }
   142     req.onerror = onFailure;
   143   },
   144   function() {
   145     ok(true, "test observers");
   146     var lock = mozSettings.createLock();
   147     req = lock.get("screen.brightness");
   148     navigator.mozSettings.removeObserver("screen.brightness", observerOnlyCalledOnce);
   149     req.onsuccess = function () {
   150       ok(true, "set1 done");
   151     }
   152     req.onerror = onFailure;
   153   },
   154   function() {
   155     ok(true, "removing Event Listener");
   156     var lock = mozSettings.createLock();
   157     req = lock.set(screenBright);
   158     req.onsuccess = function () {
   159       ok(true, "set2 done");
   160       navigator.mozSettings.removeObserver("screen.brightness", observer2);
   161       navigator.mozSettings.removeObserver("screen.brightness", observer1);
   162       navigator.mozSettings.removeObserver("screen.brightness", observer1);
   163     }
   164     req.onerror = onFailure;
   165   },
   167   function() {
   168     ok(true, "delete onsettingschange");
   169     var lock = mozSettings.createLock();
   170     navigator.mozSettings.onsettingchange = null;
   171     req = lock.set(screenBright);
   172     req.onsuccess = function () {
   173       ok(true, "set0 done");
   174       next();
   175     }
   176     req.onerror = onFailure;
   177   },
   178   function () {
   179     ok(true, "Waiting for all set callbacks");
   180     var lock = mozSettings.createLock();
   181     req = lock.get("screen.brightness");
   182     req.onsuccess = function() {
   183       ok(true, "Done");
   184       next();
   185     }
   186     req.onerror = onFailure;
   187   },
   188   function() {
   189     ok(true, "adding Observers 1");
   190     navigator.mozSettings.addObserver("screen.brightness", observer1);
   191     navigator.mozSettings.addObserver("screen.brightness", observer1);
   192     navigator.mozSettings.addObserver("screen.brightness", observer2);
   193     navigator.mozSettings.addObserver("screen.brightness", observerWithNext);
   194     var lock = mozSettings.createLock();
   195     req2 = lock.get("screen.brightness");
   196     req2.onsuccess = function() {
   197       ok(true, "set observeSetting done!");
   198       next();
   199     };
   200     req2.onerror = onFailure;
   201   },
   202   function() {
   203     ok(true, "test observers");
   204     var lock = mozSettings.createLock();
   205     req = lock.set(screenBright);
   206     req.onsuccess = function () {
   207       ok(true, "set1 done");
   208     }
   209     req.onerror = onFailure;
   210   },
   211   function() {
   212     ok(true, "removing Event Listener");
   213     var lock = mozSettings.createLock();
   214     req = lock.set(screenBright);
   215     req.onsuccess = function () {
   216       ok(true, "set2 done");
   217       navigator.mozSettings.removeObserver("screen.brightness", observer2);
   218       navigator.mozSettings.removeObserver("screen.brightness", observer1);
   219     }
   220     req.onerror = onFailure;
   221   },
   222   function() {
   223     ok(true, "test Event Listener");
   224     var lock = mozSettings.createLock();
   225     req = lock.set(screenBright);
   226     req.onsuccess = function () {
   227       ok(true, "set3 done");
   228     }
   229     req.onerror = onFailure;
   230   },
   231   function() {
   232     ok(true, "removing Event Listener");
   233     var lock = mozSettings.createLock();
   234     navigator.mozSettings.removeObserver("screen.brightness", observerWithNext);
   235     req = lock.set(screenBright);
   236     req.onsuccess = function () {
   237       ok(true, "set4 done");
   238       navigator.mozSettings.removeObserver("screen.brightness", observer2);
   239       navigator.mozSettings.removeObserver("screen.brightness", observer1);
   240       next();
   241     }
   242     req.onerror = onFailure;
   243   },
   244   function() {
   245     ok(true, "removing Event Listener");
   246     var lock = mozSettings.createLock();
   247     req = lock.get("screen.brightness");
   248     req.onsuccess = function () {
   249       ok(true, "get5 done");
   250       next();
   251     }
   252     req.onerror = onFailure;
   253   },
   254   function() {
   255     ok(true, "Clear DB");
   256     var lock = mozSettings.createLock();
   257     req = lock.clear();
   258     req.onsuccess = function () {
   259       ok(true, "Deleted the database");
   260       next();
   261     };
   262     req.onerror = onFailure;
   263   },
   264   function () {
   265     ok(true, "Deleting database");
   266     var lock = mozSettings.createLock();
   267     req = lock.clear();
   268     req.onsuccess = function () {
   269       ok(true, "Deleted the database");
   270       navigator.mozSettings.onsettingchange = onComplexSettingschangeWithNext;
   271     };
   272     req.onerror = onFailure;
   273     req2 = navigator.mozSettings.createLock().set({'test.key': cset});
   274     req2.onsuccess = function () {
   275       ok(true, "set done");
   276     }
   277     req2.onerror = onFailure;
   278   },
   280   function () {
   281     ok(true, "all done!\n");
   282     SimpleTest.finish();
   283   }
   284 ];
   286 function next() {
   287   ok(true, "Begin!");
   288   if (index >= steps.length) {
   289     ok(false, "Shouldn't get here!");
   290     return;
   291   }
   292   try {
   293     steps[index]();
   294   } catch(ex) {
   295     ok(false, "Caught exception", ex);
   296   }
   297   index += 1;
   298 }
   300 SimpleTest.waitForExplicitFinish();
   301 addLoadEvent(next);
   302 </script>
   303 </pre>
   304 </body>
   305 </html>

mercurial