1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/base/test/test_bug715041_removal.xul Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,845 @@ 1.4 +<?xml version="1.0"?> 1.5 +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> 1.6 +<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> 1.7 +<!-- 1.8 +https://bugzilla.mozilla.org/show_bug.cgi?id=715041 1.9 +--> 1.10 + <window title="Mozilla Bug 715041" 1.11 +xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 1.12 + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> 1.13 + 1.14 + <!-- test results are displayed in the html:body --> 1.15 + <body xmlns="http://www.w3.org/1999/xhtml"> 1.16 + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=715041" 1.17 +target="_blank">Mozilla Bug 715041</a> 1.18 + </body> 1.19 + 1.20 + <!-- test code goes here --> 1.21 + <script type="application/javascript"> 1.22 + <![CDATA[ 1.23 + 1.24 + /** Mock Idle Service Test for Bug 715041 **/ 1.25 + SpecialPowers.setBoolPref("dom.idle-observers-api.fuzz_time.disabled", true); 1.26 + 1.27 + try { 1.28 + var idleServiceCID = Components.ID("6f95d965-4322-4829-8a3c-5dc8a4587f4d"); 1.29 + var idleServiceContractID = "@mozilla.org/widget/idleservice;1"; 1.30 + var oldIdleService = Components.classes[idleServiceContractID].getService(Components.interfaces.nsIIdleService); 1.31 + } 1.32 + catch (ex) { 1.33 + dump("test_bug715041_removal.xul: failed to get old idle service 1."); 1.34 + } 1.35 + 1.36 + //class mock javascript idle service 1.37 + var idleServiceObj = { 1.38 + observers: [], 1.39 + windowObservers: [], 1.40 + idleTimeInMS: 5000, //in milli seconds 1.41 + 1.42 + // takes note of the idle observers added as the minimum idle observer 1.43 + //with the idle service 1.44 + timesAdded: [], 1.45 + 1.46 + QueryInterface: function(iid) { 1.47 + if (iid.equals(Components.interfaces.nsISupports) || 1.48 + iid.equals(Components.interfaces.nsIFactory) || 1.49 + iid.equals(Components.interfaces.nsIIdleService)) { 1.50 + return this; 1.51 + } 1.52 + throw Components.results.NS_ERROR_NO_INTERFACE; 1.53 + }, 1.54 + 1.55 + createInstance: function(outer, iid) { 1.56 + return this.QueryInterface(iid); 1.57 + }, 1.58 + 1.59 + get idleTime() { 1.60 + return this.idleTimeInMS; //in milli seconds 1.61 + }, 1.62 + 1.63 + set idleTime(timeInMS) { 1.64 + this.idleTimeInMS = timeInMS; 1.65 + }, 1.66 + 1.67 + getWindowFromObserver: function(observer) { 1.68 + try { 1.69 + var interfaceRequestor = observer.QueryInterface(Components.interfaces.nsIInterfaceRequestor); 1.70 + var window = interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow); 1.71 + return window; 1.72 + } 1.73 + catch (e) {} 1.74 + 1.75 + return null; 1.76 + }, 1.77 + 1.78 + testIdleBackService: function(observer, topic) { 1.79 + dump("\nJS FAKE IDLE SERVICE\n"); 1.80 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.81 + 1.82 + if (this.observers.length > 1) { 1.83 + this.observers[1].observer.observe(observer, topic, '\0'); 1.84 + dump("JS CALLED OBSERVE FUNCTION!!!\n\n"); 1.85 + } 1.86 + }, 1.87 + 1.88 + addIdleObserver: function(observer, time) { 1.89 + dump("\nJS FAKE IDLE SERVICE add idle observer before\n"); 1.90 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.91 + var window = this.getWindowFromObserver(observer); 1.92 + 1.93 + if (window) { 1.94 + this.observers.push({ observer: observer, time: time, }); 1.95 + addedIdleObserver = true; 1.96 + numIdleObserversAdded++; 1.97 + this.timesAdded.push(time); 1.98 + dump ("\nMOCK IDLE SERVICE ADDING idle observer with time: " + time + "\n"); 1.99 + dump("MOCK IDLE SERVICE: num idle observers added: " + numIdleObserversAdded + "\n\n"); 1.100 + } 1.101 + else { 1.102 + dump("SHOULD NEVER GET HERE!"); 1.103 + oldIdleService.addIdleObserver(observer, time); 1.104 + addedIdleObserver = false; 1.105 + } 1.106 + 1.107 + dump("\nJS FAKE IDLE SERVICE end of add idle observer\n"); 1.108 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.109 + }, 1.110 + 1.111 + removeIdleObserver: function(observer, time) { 1.112 + dump("\nJS REMOVE IDLE OBSERVER () time to be removed: " + time + "\n"); 1.113 + var window = this.getWindowFromObserver(observer); 1.114 + if (!window) { 1.115 + oldIdleService.removeIdleObserver(observer, time); 1.116 + } 1.117 + else { 1.118 + var observerIndex = -1; 1.119 + for (var i=0; i<this.observers.length; i++) { 1.120 + dump("JS removeIdleObserver() observer time: " + this.observers[i].time + "\n"); 1.121 + if (this.observers[i].time === time) { 1.122 + observerIndex = i; 1.123 + break; 1.124 + } 1.125 + } 1.126 + 1.127 + if (observerIndex != -1 && this.observers.length > 0) { 1.128 + numIdleObserversRemoved++; 1.129 + this.observers.splice(observerIndex, 1); 1.130 + removedIdleObserver = true; 1.131 + dump("MOCK IDLE SERVICE REMOVING idle observer with time " + time + "\n"); 1.132 + dump("MOCK IDLE SERVICE numIdleObserversRemoved: " + numIdleObserversRemoved + " numIdleObserversAdded: " + numIdleObserversAdded + "\n\n"); 1.133 + } 1.134 + else { 1.135 + removedIdleObserver = false; 1.136 + } 1.137 + } 1.138 + dump("\nJS FAKE IDLE SERVICE end of remove idle observer\n"); 1.139 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.140 + }, 1.141 + }; 1.142 + 1.143 + /** Test for Bug 715041 **/ 1.144 + dump("\n\n\nJS STARTING TESTING FOR BUG 715041 REMOVAL\n"); 1.145 + 1.146 + //bool variables 1.147 + var addedIdleObserver = removedIdleObserver = passed = cleanUp = false; 1.148 + 1.149 + //msgXCount 1.150 + var msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count = 1.151 + msg6Count = tcZero = currTestCaseNum = prevMsgNum = 0; 1.152 + 1.153 + //test case number 1.154 + var tcRemoveHeadIdleObserverWhileActive = 0; 1.155 + var tcRemoveLocalIdleObserverWhileIdle = 1; 1.156 + var tcRemoveHeadIdleObserver = 2; 1.157 + var tcRemoveLocalIdleTimerWhileIdle = 3; 1.158 + var tcRemoveLocalIdleTimerLastElement = 4; 1.159 + var tcRemoveHeadAfterLastLocalFired = 5; 1.160 + var tcRemoveHeadIdleObserverWhileIdleCase1 = 6; 1.161 + var tcRemoveLastAddLast = 7; 1.162 + 1.163 + function ResetMsgCounts() { 1.164 + msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count = 1.165 + msg6Count = prevMsgNum = 0; 1.166 + } 1.167 + 1.168 + function ResetVars() { 1.169 + msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count = 1.170 + msg6Count = prevMsgNum = 0; 1.171 + 1.172 + numIdleObserversAdded = numIdleObserversRemoved = 0; 1.173 + currTestCaseNum = -1; 1.174 + addedIdleObserver = removedIdleObserver = passed = cleanUp = false; 1.175 + } 1.176 + 1.177 + function printVariableValues() 1.178 + { 1.179 + dump("\nfunction printVariableValues()\ncurrTestCaseNum: " + currTestCaseNum + 1.180 + "\ncleanUp: " + cleanUp + 1.181 + "\npassed: " + passed + 1.182 + "\nnumIdleObserversRemoved: " + numIdleObserversRemoved + 1.183 + "\nnumIdleObservesAdded: " + numIdleObserversAdded + 1.184 + "\nmsg1Count " + msg1Count + 1.185 + "\nmsg2Count " + msg2Count + 1.186 + "\nmsg3Count " + msg3Count + 1.187 + "\nmsg4Count " + msg4Count + 1.188 + "\nmsg5Count " + msg5Count + 1.189 + "\n"); 1.190 + } 1.191 + 1.192 + //Place Holder. 1.193 + var idleHandler0 = function() { dump("msg 0, should never be used!\n"); }; 1.194 + 1.195 + //idleHandler1 1.196 + function idleHandler1() { 1.197 + msg1Count++; 1.198 + dump("msg 1 Count: " + msg1Count + "\n"); 1.199 + 1.200 + switch (currTestCaseNum) { 1.201 + case tcRemoveHeadIdleObserver: 1.202 + if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) { 1.203 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.204 + } 1.205 + break; 1.206 + case tcRemoveLocalIdleObserverWhileIdle: 1.207 + if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count) { 1.208 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.209 + } 1.210 + break; 1.211 + case tcRemoveLocalIdleTimerWhileIdle: 1.212 + if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count) { 1.213 + idleServiceObj.idleTime = 2000; 1.214 + window.navigator.removeIdleObserver(idleObserversArray[3]); 1.215 + } 1.216 + break; 1.217 + case tcRemoveHeadIdleObserverWhileIdleCase1: 1.218 + if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count) { 1.219 + for (var i=1; i<4; i++) { 1.220 + window.navigator.addIdleObserver(idleObserversArray[i]); 1.221 + } 1.222 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.223 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.224 + 1.225 + idleServiceObj.idleTime = 1200; 1.226 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.227 + } 1.228 + break; 1.229 + case tcRemoveLocalIdleTimerLastElement: 1.230 + if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) { 1.231 + idleServiceObj.idleTime = 1500; 1.232 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.233 + idleServiceObj.idleTime = 1700; 1.234 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.235 + idleServiceObj.idleTime = 2000; 1.236 + idleServiceObj.testIdleBackService(idleObserversArray[2], "idle"); 1.237 + } 1.238 + break; 1.239 + case tcRemoveHeadAfterLastLocalFired: 1.240 + if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) { 1.241 + dump("idle handler 1: case tcRemoveHeadAfterLastLocalFired:\n"); 1.242 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.243 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.244 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.245 + } 1.246 + break; 1.247 + case tcRemoveLastAddLast: 1.248 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.249 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.250 + break; 1.251 + default: 1.252 + break; 1.253 + } 1.254 + } 1.255 + 1.256 + //idleHandler2 1.257 + function idleHandler2() { 1.258 + msg2Count++; 1.259 + dump("msg 2 Count: " + msg2Count + "\n"); 1.260 + 1.261 + switch (currTestCaseNum) { 1.262 + case tcRemoveLocalIdleTimerLastElement: 1.263 + if (msg1Count === 1 && msg2Count === 1 && !msg3Count && !msg4Count) { 1.264 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.265 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.266 + window.navigator.removeIdleObserver(idleObserversArray[3]); 1.267 + } 1.268 + break; 1.269 + default: 1.270 + //do nothing. 1.271 + break; 1.272 + } 1.273 + } 1.274 + 1.275 + //idleHandler3 1.276 + function idleHandler3() { 1.277 + msg3Count++; 1.278 + dump("msg 3 Count: " + msg3Count + "\n"); 1.279 + passed = false; 1.280 + switch (currTestCaseNum) { 1.281 + case tcRemoveHeadIdleObserverWhileActive: 1.282 + if (!msg1Count && msg2Count === 1 && msg3Count === 1) { 1.283 + passed = true; 1.284 + } 1.285 + dump("idleHandler3: passed: " + passed + "\n"); 1.286 + RemoveHeadIdleObserverWhileActiveCleanUp(); 1.287 + break; 1.288 + case tcRemoveHeadIdleObserverWhileIdleCase1: 1.289 + if (msg3Count != 2 && msg3Count != 4) { 1.290 + return; 1.291 + } 1.292 + 1.293 + if (msg1Count === 2 && msg2Count === 2 && msg3Count === 2 && !msg4Count) { 1.294 + passed = true; 1.295 + ok(passed, "Failed test case remove head idle observer while idle case 1, part 1.\n"); 1.296 + idleServiceObj.testIdleBackService(idleObserversArray[1], "active"); 1.297 + return; 1.298 + } 1.299 + 1.300 + if (msg1Count === 3 && msg2Count === 4 && msg3Count === 4 && 1.301 + !msg4Count && !msg5Count) { 1.302 + passed = true; 1.303 + } 1.304 + RemoveHeadIdleObserverWhileIdleCase1CleanUp(); 1.305 + break; 1.306 + case tcRemoveLastAddLast: 1.307 + if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1 1.308 + && !msg4Count && !msg5Count) { 1.309 + idleServiceObj.idleTime = 3200; 1.310 + window.navigator.removeIdleObserver(idleObserversArray[3]); 1.311 + idleServiceObj.idleTime = 3500; 1.312 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.313 + return; 1.314 + } 1.315 + break; 1.316 + case tcRemoveHeadAfterLastLocalFired: 1.317 + if (msg3Count === 1) { 1.318 + return; 1.319 + } 1.320 + 1.321 + if (msg1Count === 2 && msg2Count === 2 && msg3Count === 2 && msg4Count === 1) { 1.322 + passed = true; 1.323 + } 1.324 + RemoveHeadAfterLastLocalFiredCleanUp(); 1.325 + break; 1.326 + default: 1.327 + break; 1.328 + } 1.329 + } 1.330 + 1.331 + //idleHandler4 1.332 + function idleHandler4() { 1.333 + msg4Count++; 1.334 + dump("msg 4 Count: " + msg4Count + "\n"); 1.335 + 1.336 + switch (currTestCaseNum) { 1.337 + case tcRemoveLocalIdleObserverWhileIdle: 1.338 + if (msg1Count === 1 && !msg2Count && msg3Count === 1 && msg4Count === 1) { 1.339 + passed = true; 1.340 + RemoveLocalIdleObserverWhileIdleCleanUp(); 1.341 + } 1.342 + break; 1.343 + case tcRemoveHeadIdleObserver: 1.344 + printVariableValues(); 1.345 + if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1 && msg4Count === 1) { 1.346 + passed = true; 1.347 + RemoveHeadIdleObserverCleanUp(); 1.348 + } 1.349 + break; 1.350 + case tcRemoveLocalIdleTimerWhileIdle: 1.351 + if (msg1Count === 1 && !msg2Count && !msg3Count && msg4Count === 1) { 1.352 + passed = true; 1.353 + RemoveLocalIdleTimerWhileIdleCleanUp(); 1.354 + } 1.355 + break 1.356 + case tcRemoveLocalIdleTimerLastElement: 1.357 + if (msg1Count === 1 && msg2Count === 1 && !msg3Count && msg4Count === 1) { 1.358 + passed = true; 1.359 + ok(passed, "Failed test case remove local idle timer last element.\n"); 1.360 + RemoveLocalIdleTimerLastElementCleanUp(); 1.361 + } 1.362 + break; 1.363 + case tcRemoveHeadAfterLastLocalFired: 1.364 + if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1 && msg4Count === 1) { 1.365 + window.navigator.removeIdleObserver(idleObserversArray[4]); 1.366 + passed = true; 1.367 + ok(passed, "Failed remove head after last local fired.\n"); 1.368 + idleServiceObj.testIdleBackService(idleObserversArray[1], "active"); 1.369 + } 1.370 + break; 1.371 + case tcRemoveLastAddLast: 1.372 + if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1 && msg4Count == 1) { 1.373 + idleServiceObj.idleTime = 4100; 1.374 + passed = true; 1.375 + RemoveLastAddLastCleanUp(); 1.376 + } 1.377 + break; 1.378 + default: 1.379 + //do nothing. 1.380 + break; 1.381 + } 1.382 + } 1.383 + 1.384 + //idleHandler5 1.385 + function idleHandler5() { 1.386 + msg5Count++; 1.387 + dump("msg 5 Count: " + msg5Count + "\n"); 1.388 + 1.389 + switch (currTestCaseNum) { 1.390 + 1.391 + default: 1.392 + //do nothing. 1.393 + break; 1.394 + } 1.395 + } 1.396 + 1.397 + //idleHandler6 1.398 + function idleHandler6() { 1.399 + dump("msg 6 Count: " + msg6Count + "\n"); 1.400 + } 1.401 + 1.402 + var idleObserversArray = []; 1.403 + idleObserversArray[0] = {time: 0, onidle: idleHandler0, onactive: idleHandler0}; 1.404 + idleObserversArray[1] = {time: 1, onidle: idleHandler1, onactive: idleHandler1}; 1.405 + idleObserversArray[2] = {time: 2, onidle: idleHandler2, onactive: idleHandler2}; 1.406 + idleObserversArray[3] = {time: 3, onidle: idleHandler3, onactive: idleHandler3}; 1.407 + idleObserversArray[4] = {time: 4, onidle: idleHandler4, onactive: idleHandler4}; 1.408 + idleObserversArray[5] = {time: 5, onidle: idleHandler5, onactive: idleHandler5}; 1.409 + idleObserversArray[6] = {time: 0, onidle: idleHandler6, onactive: idleHandler6}; 1.410 + 1.411 + //observers array space holder at index zero 1.412 + idleServiceObj.observers.push( {observer: idleObserversArray[0], time: 0, } ); 1.413 + 1.414 + /* 1.415 + * - function RemoveHeadIdleObserverWhileActive1() 1.416 + * - Remove head idle observer before the head idle notification is fired by the 1.417 + * idle service. I.e. remove the head idle observer while the user is active. 1.418 + * - RESULT: prints 2 in 2ms, 3 1.419 + */ 1.420 + function RemoveHeadIdleObserverWhileActive() { 1.421 + dump("\n\nTESTING CASE RemoveHeadIdleObserverWhileActive\n"); 1.422 + dump("=================================\n"); 1.423 + 1.424 + ResetVars(); 1.425 + currTestCaseNum = tcRemoveHeadIdleObserverWhileActive; 1.426 + idleServiceObj.idleTime = 500; 1.427 + 1.428 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.429 + dump("test_bug715041_removal.xul: RemoveHeadIdleObserverWhileActive() idle time " + idleServiceObj.idleTime + "\n"); 1.430 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.431 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.432 + 1.433 + idleServiceObj.idleTime = 800; 1.434 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.435 + 1.436 + idleServiceObj.idleTime = 1000; 1.437 + idleServiceObj.testIdleBackService(idleObserversArray[2], "idle"); 1.438 + } 1.439 + 1.440 + function RemoveHeadIdleObserverWhileActiveCleanUp() { 1.441 + dump("\nRemoveHeadIdleObserverWhileActiveCleanUp()\n"); 1.442 + dump("=====================================\n"); 1.443 + 1.444 + dump("Passed: " + passed + "\n"); 1.445 + ok(passed, "Failed test case: RemoveHeadIdleObserverWhileActive"); 1.446 + 1.447 + ResetVars(); 1.448 + currTestCaseNum = tcRemoveHeadIdleObserverWhileActive; 1.449 + idleServiceObj.idleTime = 3500; 1.450 + 1.451 + for (var i=2; i<4; i++) { 1.452 + window.navigator.removeIdleObserver(idleObserversArray[i]); 1.453 + } 1.454 + 1.455 + dump("JS RemoveHeadIdleObserverWhileActiveCleanUp() DONE\n"); 1.456 + if (RemoveLocalIdleObserverWhileIdleEnabled) { 1.457 + RemoveLocalIdleObserverWhileIdle(); 1.458 + } 1.459 + else { 1.460 + dump("Finishing testing idle API.\n"); 1.461 + SimpleTest.finish(); 1.462 + } 1.463 + } 1.464 + 1.465 + /* 1.466 + * function RemoveLocalIdleObserverWhileIdle() 1.467 + * Remove local observer before the local oberver at index 1 is triggered while 1.468 + * the user is idle. 1.469 + * RESULT: should print 1, 3, 4 1.470 + */ 1.471 + function RemoveLocalIdleObserverWhileIdle() { 1.472 + dump("\n\nTESTING CASE RemoveLocalIdleObserverWhileIdle\n"); 1.473 + dump("=================================\n"); 1.474 + 1.475 + ResetVars(); 1.476 + currTestCaseNum = tcRemoveLocalIdleObserverWhileIdle; 1.477 + idleServiceObj.idleTime = 500; 1.478 + 1.479 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.480 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.481 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.482 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.483 + 1.484 + idleServiceObj.idleTime = 1000; 1.485 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.486 + } 1.487 + 1.488 + function RemoveLocalIdleObserverWhileIdleCleanUp() { 1.489 + dump("\nRemoveLocalIdleObserverWhileIdleCleanUp()\n"); 1.490 + dump("=====================================\n"); 1.491 + 1.492 + ok(passed, "Failed test case: RemoveLocalIdleObserverWhileIdleCleanUp()"); 1.493 + 1.494 + ResetVars(); 1.495 + currTestCaseNum = tcRemoveHeadIdleObserverWhileActive; 1.496 + idleServiceObj.idleTime = 3500; 1.497 + 1.498 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.499 + window.navigator.removeIdleObserver(idleObserversArray[3]); 1.500 + window.navigator.removeIdleObserver(idleObserversArray[4]); 1.501 + 1.502 + dump("JS RemoveLocalIdleObserverWhileIdleCleanUp() DONE\n"); 1.503 + if (RemoveHeadIdleObserverEnabled) { 1.504 + RemoveHeadIdleObserver(); 1.505 + } 1.506 + else { 1.507 + dump("Finishing testing idle API.\n"); 1.508 + SimpleTest.finish(); 1.509 + } 1.510 + } 1.511 + 1.512 + 1.513 + /* 1.514 + * function RemoveHeadIdleObserver() 1.515 + * Remove head idle observer while the user has been idle for 2400 ms. 1.516 + * - RESULT: prints 1, 2, remove 2, 3, 4 1.517 + */ 1.518 + function RemoveHeadIdleObserver() { 1.519 + dump("\n\nTESTING CASE RemoveHeadIdleObserver\n"); 1.520 + dump("=================================\n"); 1.521 + 1.522 + ResetVars(); 1.523 + currTestCaseNum = tcRemoveHeadIdleObserver; 1.524 + idleServiceObj.idleTime = 500; 1.525 + 1.526 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.527 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.528 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.529 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.530 + 1.531 + idleServiceObj.idleTime = 1000; 1.532 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.533 + } 1.534 + 1.535 + function RemoveHeadIdleObserverCleanUp() { 1.536 + dump("\nRemoveHeadIdleObserverCleanUp()\n"); 1.537 + dump("=====================================\n"); 1.538 + 1.539 + ok(passed, "Failed test case: RemoveHeadIdleObserverCleanUp()"); 1.540 + 1.541 + ResetVars(); 1.542 + currTestCaseNum = tcRemoveHeadIdleObserver; 1.543 + idleServiceObj.idleTime = 3500; 1.544 + 1.545 + for (var i=2; i<5; i++) { 1.546 + window.navigator.removeIdleObserver(idleObserversArray[i]); 1.547 + } 1.548 + 1.549 + dump("JS RemoveHeadIdleObserverCleanUp() DONE\n"); 1.550 + if (RemoveLocalIdleTimerWhileIdleEnabled) { 1.551 + RemoveLocalIdleTimerWhileIdle(); 1.552 + } 1.553 + else { 1.554 + dump("Finishing testing idle API.\n"); 1.555 + SimpleTest.finish(); 1.556 + } 1.557 + } 1.558 + 1.559 + /* 1.560 + * RemoveLocalIdleTimerWhileIdle() 1.561 + * - Removes the idle observer that is also set as the current local idle timer callback 1.562 + * local idle observer being removed is NOT at index 1! 1.563 + * - RESULT: should trigger 1 in 1ms and 4 in 4ms 1.564 + */ 1.565 + function RemoveLocalIdleTimerWhileIdle() 1.566 + { 1.567 + dump("\n\nTESTING CASE RemoveLocalIdleTimerWhileIdle\n"); 1.568 + dump("=================================\n"); 1.569 + 1.570 + ResetVars(); 1.571 + currTestCaseNum = tcRemoveLocalIdleTimerWhileIdle; 1.572 + idleServiceObj.idleTime = 500; 1.573 + 1.574 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.575 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.576 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.577 + 1.578 + idleServiceObj.idleTime = 1000; 1.579 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.580 + } 1.581 + 1.582 + function RemoveLocalIdleTimerWhileIdleCleanUp() 1.583 + { 1.584 + dump("\nRemoveLocalIdleTimerWhileIdleCleanUp()\n"); 1.585 + dump("=====================================\n"); 1.586 + 1.587 + ok(passed, "Failed test case: RemoveLocalIdleTimerWhileIdleCleanUp()"); 1.588 + 1.589 + ResetVars(); 1.590 + currTestCaseNum = tcRemoveLocalIdleTimerWhileIdle; 1.591 + 1.592 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.593 + window.navigator.removeIdleObserver(idleObserversArray[4]); 1.594 + 1.595 + dump("JS RemoveLocalIdleTimerWhileIdleCleanUp() DONE\n"); 1.596 + if (RemoveLocalIdleTimerLastElementEnabled) { 1.597 + RemoveLocalIdleTimerLastElement(); 1.598 + } 1.599 + else { 1.600 + dump("Finishing testing idle API.\n"); 1.601 + SimpleTest.finish(); 1.602 + } 1.603 + } 1.604 + 1.605 + /* 1.606 + * function RemoveLocalIdleTimerLastElement() 1.607 + */ 1.608 + function RemoveLocalIdleTimerLastElement() 1.609 + { 1.610 + dump("\n\nTESTING CASE RemoveLocalIdleTimerLastElement\n"); 1.611 + dump("=================================\n"); 1.612 + 1.613 + ResetVars(); 1.614 + currTestCaseNum = tcRemoveLocalIdleTimerLastElement; 1.615 + idleServiceObj.idleTime = 1200; 1.616 + 1.617 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.618 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.619 + } 1.620 + 1.621 + function RemoveLocalIdleTimerLastElementCleanUp() { 1.622 + dump("\nRemoveLocalIdleTimerLastElementCleanUp()\n"); 1.623 + dump("=====================================\n"); 1.624 + 1.625 + ok(passed, "Failed test case: RemoveLocalIdleTimerLastElementCleanUp()"); 1.626 + 1.627 + ResetVars(); 1.628 + currTestCaseNum = tcRemoveLocalIdleTimerLastElement; 1.629 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.630 + window.navigator.removeIdleObserver(idleObserversArray[4]); 1.631 + 1.632 + dump("JS RemoveLocalIdleTimerLastElementCleanUp() DONE\n"); 1.633 + if (RemoveHeadAfterLastLocalFiredEnabled) { 1.634 + RemoveHeadAfterLastLocalFired(); 1.635 + } 1.636 + else { 1.637 + dump("Finishing testing idle API.\n"); 1.638 + SimpleTest.finish(); 1.639 + } 1.640 + } 1.641 + 1.642 + /* 1.643 + - Remove the head after the last local idle timer has been fired 1.644 + - add 1 2 3 4 1.645 + - after 4 has been notified, removed idle observer with time 4 1.646 + - send a back topic 1.647 + - message notification should be 1, 2, 3. 1.648 + */ 1.649 + function RemoveHeadAfterLastLocalFired() 1.650 + { 1.651 + dump("\n\nTESTING CASE RemoveHeadAfterLastLocalFired\n"); 1.652 + dump("=================================\n"); 1.653 + 1.654 + ResetVars(); 1.655 + currTestCaseNum = tcRemoveHeadAfterLastLocalFired; 1.656 + idleServiceObj.idleTime = 1200; 1.657 + 1.658 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.659 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.660 + } 1.661 + 1.662 + function RemoveHeadAfterLastLocalFiredCleanUp() { 1.663 + dump("\RemoveHeadAfterLastLocalFiredCleanUp()\n"); 1.664 + dump("=====================================\n"); 1.665 + 1.666 + ok(passed, "Failed test case: RemoveHeadAfterLastLocalFiredCleanUp()"); 1.667 + 1.668 + ResetVars(); 1.669 + currTestCaseNum = tcRemoveHeadAfterLastLocalFired; 1.670 + 1.671 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.672 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.673 + window.navigator.removeIdleObserver(idleObserversArray[3]); 1.674 + 1.675 + dump("JS RemoveHeadAfterLastLocalFiredCleanUp() DONE\n"); 1.676 + if (RemoveHeadIdleObserverWhileIdleCase1Enabled) { 1.677 + RemoveHeadIdleObserverWhileIdleCase1(); 1.678 + } 1.679 + else { 1.680 + dump("Finishing testing idle API.\n"); 1.681 + SimpleTest.finish(); 1.682 + } 1.683 + } 1.684 + 1.685 + function RemoveHeadIdleObserverWhileIdleCase1() { 1.686 + dump("\n\nTESTING CASE RemoveHeadIdleObserverWhileIdleCase1\n"); 1.687 + dump("=================================\n"); 1.688 + 1.689 + ResetVars(); 1.690 + currTestCaseNum = tcRemoveHeadIdleObserverWhileIdleCase1; 1.691 + idleServiceObj.idleTime = 1000; 1.692 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.693 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.694 + } 1.695 + 1.696 + function RemoveHeadIdleObserverWhileIdleCase1CleanUp() { 1.697 + dump("\nRemoveHeadIdleObserverWhileIdleCase1CleanUp()\n"); 1.698 + dump("=====================================\n"); 1.699 + 1.700 + ok(passed, "Failed test case: RemoveHeadIdleObserverWhileIdleCase1CleanUp()"); 1.701 + 1.702 + ResetVars(); 1.703 + currTestCaseNum = tcRemoveHeadIdleObserverWhileIdleCase1; 1.704 + 1.705 + for (var i=1; i<4; i++) { 1.706 + window.navigator.removeIdleObserver(idleObserversArray[i]); 1.707 + } 1.708 + 1.709 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.710 + window.navigator.removeIdleObserver(idleObserversArray[3]); 1.711 + 1.712 + dump("JS RemoveHeadIdleObserverWhileIdleCase1CleanUp() DONE\n"); 1.713 + if (RemoveLastAddLastEnabled) { 1.714 + RemoveLastAddLast(); 1.715 + } 1.716 + else { 1.717 + dump("Finishing testing idle API.\n"); 1.718 + SimpleTest.finish(); 1.719 + } 1.720 + } 1.721 + 1.722 + /* 1.723 + * - RemoveLastAddLast() 1.724 + * 1.725 + * - User is currently idle. 1.726 + * - Add callback 1, 2, 3, 1.727 + * - Remove callback 3 after 3200 MS. I.e. after callback 3 has been notified. 1.728 + * - Add callback 4 after 3500 MS 1.729 + * - Output: 1, 2, 3, 4 1.730 + */ 1.731 + function RemoveLastAddLast() 1.732 + { 1.733 + dump("\n\nTESTING CASE RemoveLastAddLast()\n"); 1.734 + dump("=================================\n"); 1.735 + 1.736 + ResetVars(); 1.737 + currTestCaseNum = tcRemoveLastAddLast; 1.738 + idleServiceObj.idleTime = 1000; 1.739 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.740 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.741 + } 1.742 + 1.743 + function RemoveLastAddLastCleanUp() 1.744 + { 1.745 + dump("\RemoveLastAddLastCleanUp()\n"); 1.746 + dump("=====================================\n"); 1.747 + 1.748 + ok(passed, "Failed test case: RemoveLastAddLastCleanUp()"); 1.749 + 1.750 + ResetVars(); 1.751 + currTestCaseNum = tcRemoveLastAddLast; 1.752 + 1.753 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.754 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.755 + window.navigator.removeIdleObserver(idleObserversArray[4]); 1.756 + 1.757 + if (numIdleObserversRemoved === 1 && !numIdleObserversAdded) { 1.758 + ok(true, "Failed test case: RemoveLastAddLastCleanUp()"); 1.759 + } 1.760 + else { 1.761 + ok(false, "Failed test case: RemoveLastAddLastCleanUp()"); 1.762 + } 1.763 + 1.764 + 1.765 + try { 1.766 + componentMgr.unregisterFactory(idleServiceCID, idleServiceObj); 1.767 + } 1.768 + catch(err) { 1.769 + dump("test_bug715041_removal.xul: RemoveLastAddLastCleanUp() Failed to unregister factory, mock idle service!\n"); 1.770 + } 1.771 + 1.772 + try { 1.773 + componentMgr.registerFactory(oldIdleServiceCID, "Re registering old idle service", idleServiceContractID, oldIdleServiceFactoryObj); 1.774 + } 1.775 + catch(err) { 1.776 + dump("test_bug715041_removal.xul: RemoveLastAddLastCleanUp() Failed to register factory, original idle service!\n"); 1.777 + } 1.778 + 1.779 + dump("JS RemoveLastAddLastCleanUp() DONE\n"); 1.780 + dump("Finishing testing idle API.\n"); 1.781 + SimpleTest.finish(); 1.782 + } 1.783 + 1.784 + 1.785 + // Registering new moch JS idle service 1.786 + SimpleTest.waitForExplicitFinish(); 1.787 + SimpleTest.requestLongerTimeout(10); 1.788 + 1.789 + try { 1.790 + var idleServiceCID = Components.ID("0fdc1bbf-3868-4660-9855-0c2e376922bc"); 1.791 + var idleServiceContractID = "@mozilla.org/widget/idleservice;1"; 1.792 + var oldIdleService = Components.classes[idleServiceContractID].getService(Components.interfaces.nsIIdleService); 1.793 + } 1.794 + catch(ex) { 1.795 + dump("test_bug715041_removal.xul: 1) Failed to get old idle service.\n"); 1.796 + } 1.797 + 1.798 + try { 1.799 + // Registering new moch JS idle service 1.800 + var componentMgr = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar); 1.801 + } 1.802 + catch(err) { 1.803 + dump("test_bug715041_removal.xul: Failed to query component registrar interface.\n"); 1.804 + } 1.805 + 1.806 + try { 1.807 + var oldIdleServiceFactoryObj = componentMgr.getClassObjectByContractID(idleServiceContractID, Components.interfaces.nsIFactory); 1.808 + } 1.809 + catch(err) { 1.810 + dump("test_bug715041_removal.xul: Failed to get old idle service.\n"); 1.811 + } 1.812 + 1.813 + try { 1.814 + var oldIdleServiceCID = componentMgr.contractIDToCID(idleServiceContractID); 1.815 + } 1.816 + catch(err) { 1.817 + dump("test_bug715041._removalxul: Failed to convert ID to CID for old idle service.\n"); 1.818 + } 1.819 + 1.820 + try { 1.821 + componentMgr.unregisterFactory(oldIdleServiceCID, oldIdleServiceFactoryObj); 1.822 + } 1.823 + catch(err) { 1.824 + dump("test_bug715041_removal.xul: Failed to unregister old idle service factory object!\n"); 1.825 + } 1.826 + 1.827 + try { 1.828 + componentMgr.registerFactory(idleServiceCID, "Test Simple Idle/Back Notifications", idleServiceContractID, idleServiceObj); 1.829 + } 1.830 + catch(err) { 1.831 + dump("test_bug715041_removal.xul: Failed to register mock idle service.\n"); 1.832 + } 1.833 + 1.834 + //test case enabled 1.835 + var RemoveLocalIdleObserverWhileIdleEnabled = true; 1.836 + var RemoveHeadIdleObserverEnabled = true; 1.837 + var RemoveLocalIdleTimerWhileIdleEnabled = true; 1.838 + var RemoveLocalIdleTimerLastElementEnabled = true; 1.839 + var RemoveHeadAfterLastLocalFiredEnabled = true; 1.840 + var RemoveHeadIdleObserverWhileIdleCase1Enabled = true; 1.841 + var RemoveLastAddLastEnabled = true; 1.842 + 1.843 + RemoveHeadIdleObserverWhileActive(); 1.844 + 1.845 +]]> 1.846 + </script> 1.847 + </window> 1.848 +