1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/base/test/test_bug715041.xul Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,818 @@ 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 + //class mock javascript idle service 1.28 + var idleServiceObj = { 1.29 + observers: [], 1.30 + windowObservers: [], 1.31 + idleTimeInMS: 5000, //in milli seconds 1.32 + 1.33 + // takes note of the idle observers added as the minimum idle observer 1.34 + // with the idle service 1.35 + timesAdded: [], 1.36 + 1.37 + QueryInterface: function(iid) { 1.38 + if (iid.equals(Components.interfaces.nsISupports) || 1.39 + iid.equals(Components.interfaces.nsIFactory) || 1.40 + iid.equals(Components.interfaces.nsIIdleService)) { 1.41 + return this; 1.42 + } 1.43 + throw Components.results.NS_ERROR_NO_INTERFACE; 1.44 + }, 1.45 + 1.46 + createInstance: function(outer, iid) { 1.47 + return this.QueryInterface(iid); 1.48 + }, 1.49 + 1.50 + get idleTime() { 1.51 + return this.idleTimeInMS; //in milli seconds 1.52 + }, 1.53 + 1.54 + set idleTime(timeInMS) { 1.55 + this.idleTimeInMS = timeInMS; 1.56 + }, 1.57 + 1.58 + getWindowFromObserver: function(observer) { 1.59 + try { 1.60 + var interfaceRequestor = observer.QueryInterface(Components.interfaces.nsIInterfaceRequestor); 1.61 + var window = interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow); 1.62 + return window; 1.63 + } 1.64 + catch (e) {} 1.65 + 1.66 + return null; 1.67 + }, 1.68 + 1.69 + testIdleBackService: function(observer, topic) { 1.70 + dump("\nJS FAKE IDLE SERVICE\n"); 1.71 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.72 + 1.73 + if (this.observers.length > 1) { 1.74 + this.observers[1].observer.observe(observer, topic, '\0'); 1.75 + dump("JS CALLED OBSERVE FUNCTION!!!\n\n"); 1.76 + } 1.77 + }, 1.78 + 1.79 + addIdleObserver: function(observer, time) { 1.80 + dump("\nJS FAKE IDLE SERVICE add idle observer before\n"); 1.81 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.82 + 1.83 + var window = this.getWindowFromObserver(observer); 1.84 + dump("window is: " + window + "\n"); 1.85 + 1.86 + if (window) { 1.87 + this.observers.push({ observer: observer, time: time, }); 1.88 + addedIdleObserver = true; 1.89 + numIdleObserversAdded++; 1.90 + this.timesAdded.push(time); 1.91 + 1.92 + dump ("\nMOCK IDLE SERVICE ADDING idle observer with time: " + time + "\n"); 1.93 + dump("MOCK IDLE SERVICE: num idle observers added: " + numIdleObserversAdded + "\n\n"); 1.94 + } 1.95 + else { 1.96 + dump("SHOULD NEVER GET HERE!"); 1.97 + oldIdleService.addIdleObserver(observer, time); 1.98 + addedIdleObserver = false; 1.99 + } 1.100 + 1.101 + dump("\nJS FAKE IDLE SERVICE end of add idle observer\n"); 1.102 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.103 + }, 1.104 + 1.105 + removeIdleObserver: function(observer, time) { 1.106 + dump("\nJS REMOVE IDLE OBSERVER () time to be removed: " + time + "\n"); 1.107 + var window = this.getWindowFromObserver(observer); 1.108 + if (!window) { 1.109 + oldIdleService.removeIdleObserver(observer, time); 1.110 + } 1.111 + else { 1.112 + var observerIndex = -1; 1.113 + for (var i=0; i<this.observers.length; i++) { 1.114 + dump("JS removeIdleObserver() observer time: " + this.observers[i].time + "\n"); 1.115 + if (this.observers[i].time === time) { 1.116 + observerIndex = i; 1.117 + break; 1.118 + } 1.119 + } 1.120 + 1.121 + if (observerIndex != -1 && this.observers.length > 0) { 1.122 + numIdleObserversRemoved++; 1.123 + this.observers.splice(observerIndex, 1); 1.124 + removedIdleObserver = true; 1.125 + dump("MOCK IDLE SERVICE REMOVING idle observer with time " + time + "\n"); 1.126 + dump("MOCK IDLE SERVICE numIdleObserversRemoved: " + numIdleObserversRemoved + " numIdleObserversAdded: " + numIdleObserversAdded + "\n\n"); 1.127 + } 1.128 + else { 1.129 + removedIdleObserver = false; 1.130 + } 1.131 + } 1.132 + dump("\nJS FAKE IDLE SERVICE end of remove idle observer\n"); 1.133 + dump("JS NUM OBSERVERS: " + this.observers.length + "\n"); 1.134 + }, 1.135 + }; 1.136 + 1.137 + /** Test for Bug 715041 **/ 1.138 + dump("\n\n\nJS STARTING TESTING FOR BUG 715041\n"); 1.139 + 1.140 + //bool variables 1.141 + var addedIdleObserver = removedIdleObserver = passed = cleanUp = false; 1.142 + 1.143 + //test case enabled 1.144 + var AddOutOfOrderActiveEnabled = AddOutOfOrderIdleEnabled = 1.145 + AddShiftLocalEnabled = AddNewLocalWhileAllIdleEnabled = 1.146 + TestActiveToActiveNotification = ShiftLocalTimerBackEnabled = 1.147 + AddRemoveIdleObserverWithInvalidTimeEnabled = true; 1.148 + 1.149 + //msgXCount 1.150 + var msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count = 1.151 + msg6Count = tcZero = currTestCaseNum = prevMsgNum = 1.152 + numIdleObserversRemoved = numIdleObserversAdded = 0; 1.153 + 1.154 + //test case number 1.155 + var tcZero = 0; 1.156 + var tcAddOutOfOrderActive = 1; 1.157 + var tcAddOutOfOrderIdle = 2; 1.158 + var tcAddShiftLocal = 3; 1.159 + var tcAddNewLocalWhileAllIdle = 4; 1.160 + var tcShiftLocalTimerBack = 5; 1.161 + var tcAddRemoveIdleObserverWithInvalidTime = 6; 1.162 + var tcTestActiveToActiveNotification = 7; 1.163 + 1.164 + function ResetMsgCounts() { 1.165 + msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count = 1.166 + msg6Count = prevMsgNum = 0; 1.167 + } 1.168 + 1.169 + function ResetVars() { 1.170 + msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count = 1.171 + msg6Count = prevMsgNum = 0; 1.172 + 1.173 + numIdleObserversAdded = numIdleObserversRemoved = 0; 1.174 + currTestCaseNum = -1; 1.175 + addedIdleObserver = removedIdleObserver = passed = cleanUp = false; 1.176 + } 1.177 + 1.178 + /* 1.179 + * - function printMsgCounts() 1.180 + */ 1.181 + function printMsgCounts() { 1.182 + dump("\nmsg0Count: " + msg0Count + 1.183 + "\nmsg1Count: " + msg1Count + 1.184 + "\nmsg2Count: " + msg2Count + 1.185 + "\nmsg3Count: " + msg3Count + 1.186 + "\nmsg5Count: " + msg5Count + 1.187 + "\nmsg6Count: " + msg6Count + 1.188 + "\n" 1.189 + ); 1.190 + } 1.191 + 1.192 + function performNextTest() { 1.193 + dump("\nfunction performNextTest()\ncurrTestCaseNum: " + currTestCaseNum + 1.194 + "\ncleanUp: " + cleanUp + 1.195 + "\npassed: " + passed + 1.196 + "\nnumIdleObserversRemoved: " + numIdleObserversRemoved + 1.197 + "\nnumIdleObservesAdded: " + numIdleObserversAdded + "\n"); 1.198 + 1.199 + switch (currTestCaseNum) { 1.200 + case tcZero: 1.201 + ok(passed, "Test case 0 failed clean up!"); 1.202 + caseZeroCleanUp(); 1.203 + break; 1.204 + case tcAddShiftLocal: 1.205 + if (cleanUp && numIdleObserversRemoved === 1) { 1.206 + passed = true; 1.207 + ok(passed, "Failed test case AddShiftLocalCleanUp()"); 1.208 + if (AddNewLocalWhileAllIdleEnabled) { 1.209 + AddNewLocalWhileAllIdle(); 1.210 + } 1.211 + else { 1.212 + SimpleTest.finish(); 1.213 + } 1.214 + } 1.215 + break; 1.216 + case tcAddNewLocalWhileAllIdle: 1.217 + ok(passed, "Failed test case: AddNewLocalWhileAllIdle()"); 1.218 + AddNewLocalWhileAllIdleCleanUp(); 1.219 + break; 1.220 + default: 1.221 + //do nothing. 1.222 + break; 1.223 + } 1.224 + } 1.225 + 1.226 + //Place Holder. 1.227 + var idleHandler0 = function() { dump("rmsg 0, should never be used!\n"); }; 1.228 + 1.229 + //idleHandler1 1.230 + function idleHandler1() { 1.231 + msg1Count++; 1.232 + dump("msg 1 Count: " + msg1Count + "\n"); 1.233 + 1.234 + switch (currTestCaseNum) { 1.235 + case tcAddOutOfOrderIdle: 1.236 + if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1) { 1.237 + idleServiceObj.idleTime = 0; 1.238 + idleServiceObj.testIdleBackService(idleObserversArray[1], "active"); 1.239 + } 1.240 + else if (msg1Count === 4 && msg2Count === 4 && msg3Count === 4) { 1.241 + passed = true; 1.242 + AddOutOfOrderIdleCleanUp(); 1.243 + } 1.244 + break; 1.245 + case tcTestActiveToActiveNotification: 1.246 + if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) { 1.247 + idleServiceObj.idleTime = 500; 1.248 + idleServiceObj.testIdleBackService(idleObserversArray[1], "active"); 1.249 + return; 1.250 + } 1.251 + 1.252 + if (msg1Count === 2 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) { 1.253 + idleServiceObj.idleTime = 1000; 1.254 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.255 + return; 1.256 + } 1.257 + 1.258 + if (msg1Count === 3 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) { 1.259 + return; 1.260 + } 1.261 + ok(false, "Failed test active to active notification."); 1.262 + SimpleTest.finish(); 1.263 + break; 1.264 + default: 1.265 + break; 1.266 + } 1.267 + } 1.268 + 1.269 + //idleHandler2 1.270 + function idleHandler2() { 1.271 + msg2Count++; 1.272 + dump("msg 2 Count: " + msg2Count + "\n"); 1.273 + 1.274 + switch (currTestCaseNum) { 1.275 + case tcZero: 1.276 + switch (msg2Count) { 1.277 + case 2: 1.278 + passed = true; 1.279 + performNextTest(); 1.280 + break; 1.281 + default: 1.282 + break; 1.283 + } 1.284 + break; 1.285 + case tcAddOutOfOrderIdle: 1.286 + if (msg3Count === 1 && msg2Count === 1 && !msg1Count) { 1.287 + idleServiceObj.idleTime = 4000; 1.288 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.289 + } 1.290 + break; 1.291 + case tcAddShiftLocal: 1.292 + if (!msg1Count && msg2Count === 1 && !msg3Count && !msg4Count) { 1.293 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.294 + } 1.295 + AddShiftLocalCleanUp(); 1.296 + break; 1.297 + case tcAddNewLocalWhileAllIdle: 1.298 + if (msg1Count === 1 && msg2Count === 2) { 1.299 + idleServiceObj.idleTime = 3500; 1.300 + window.navigator.addIdleObserver(idleObserversArray[5]); 1.301 + } 1.302 + break; 1.303 + case (tcShiftLocalTimerBack): 1.304 + if (!msg1Count && msg2Count === 1 && !msg3Count && !msg4Count && !msg5Count) { 1.305 + window.navigator.addIdleObserver(idleObserversArray[5]); 1.306 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.307 + } 1.308 + break; 1.309 + default: 1.310 + //do nothing. 1.311 + break; 1.312 + } 1.313 + } 1.314 + 1.315 + //idleHandler3 1.316 + function idleHandler3() { 1.317 + msg3Count++; 1.318 + dump("msg 3 Count: " + msg3Count + "\n"); 1.319 + 1.320 + switch (currTestCaseNum) { 1.321 + case (tcAddOutOfOrderIdle): 1.322 + if (msg3Count === 1) { 1.323 + idleServiceObj.idleTime = 3500; 1.324 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.325 + } 1.326 + if (msg1Count === 2 && msg2Count === 2 && msg3Count === 2) { 1.327 + idleServiceObj.idleTime = 1000; 1.328 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.329 + } 1.330 + else if (msg1Count === 3 && msg2Count === 3 && msg3Count === 3) { 1.331 + AddOutOfOrderIdle(); 1.332 + } 1.333 + else if (msg1Count === 3 && msg2Count === 3 && msg3Count === 4) { 1.334 + passed = true; 1.335 + AddOutOfOrderIdleCleanUp(); 1.336 + } 1.337 + break; 1.338 + default: 1.339 + break; 1.340 + } 1.341 + } 1.342 + 1.343 + //idleHandler4 1.344 + function idleHandler4() { 1.345 + msg4Count++; 1.346 + dump("msg 4 Count: " + msg4Count + "\n"); 1.347 + 1.348 + switch (currTestCaseNum) { 1.349 + case tcAddOutOfOrderActive: 1.350 + if (msg1Count && msg2Count && msg3Count && msg4Count) { 1.351 + passed = true; 1.352 + ok(passed, "idleHandler4: failed AddOutOfOrderActive()"); 1.353 + AddOutOfOrderActiveCleanUp(); 1.354 + cleanUp = true; 1.355 + } 1.356 + break; 1.357 + case tcAddShiftLocal: 1.358 + if (msg1Count === 1 && msg3Count === 1 && msg4Count === 1) { 1.359 + idleServiceObj.idleTime = 3200; 1.360 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.361 + } 1.362 + break; 1.363 + default: 1.364 + //do nothing. 1.365 + break; 1.366 + } 1.367 + } 1.368 + 1.369 + //idleHandler5 1.370 + function idleHandler5() { 1.371 + msg5Count++; 1.372 + dump("msg 5 Count: " + msg5Count + "\n"); 1.373 + 1.374 + switch (currTestCaseNum) { 1.375 + case tcAddNewLocalWhileAllIdle: 1.376 + if (msg1Count === 1 && msg2Count === 2 && msg5Count === 1) { 1.377 + passed = true; 1.378 + performNextTest(); 1.379 + } 1.380 + break; 1.381 + case tcShiftLocalTimerBack: 1.382 + if (!msg1Count && msg2Count === 1 && !msg3Count && msg4Count === 1 && msg5Count === 1) { 1.383 + passed = true; 1.384 + ShiftLocalTimerBackCleanUp(); 1.385 + } 1.386 + break; 1.387 + case tcTestActiveToActiveNotification: 1.388 + passed = false; 1.389 + if (msg1Count === 3 && !msg2Count && !msg3Count && !msg4Count && msg5Count === 1) { 1.390 + passed = true; 1.391 + } 1.392 + ok(passed, "Failed TestActiveToActiveNotification."); 1.393 + TestActiveNotificationCleanUp(); 1.394 + break; 1.395 + default: 1.396 + //do nothing. 1.397 + break; 1.398 + } 1.399 + } 1.400 + 1.401 + //idleHandler6 1.402 + function idleHandler6() { 1.403 + dump("msg 6 Count: " + msg6Count + "\n"); 1.404 + } 1.405 + 1.406 + var idleObserversArray = []; 1.407 + idleObserversArray[0] = {time: 0, onidle: idleHandler0, onactive: idleHandler0}; 1.408 + idleObserversArray[1] = {time: 1, onidle: idleHandler1, onactive: idleHandler1}; 1.409 + idleObserversArray[2] = {time: 2, onidle: idleHandler2, onactive: idleHandler2}; 1.410 + idleObserversArray[3] = {time: 3, onidle: idleHandler3, onactive: idleHandler3}; 1.411 + idleObserversArray[4] = {time: 4, onidle: idleHandler4, onactive: idleHandler4}; 1.412 + idleObserversArray[5] = {time: 5, onidle: idleHandler5, onactive: idleHandler5}; 1.413 + idleObserversArray[6] = {time: 0, onidle: idleHandler6, onactive: idleHandler6}; 1.414 + idleObserversArray[7] = {time: 2, onidle: null, onactive: null}; 1.415 + 1.416 + idleServiceObj.observers.push( {observer: idleObserversArray[0], time: 0, } ); 1.417 + 1.418 + /* 1.419 + * - case 0 1.420 + * - AddSingleIdleObserver 1.421 + * - takes care of adding duplicate local too 1.422 + * - user is currently idle since the 1.423 + * requested idle time of 2s < current idle time of 5000ms set below. 1.424 + */ 1.425 + function caseZero() { 1.426 + dump("\n\nTESTING CASE 0\n"); 1.427 + dump("==============\n"); 1.428 + 1.429 + ResetVars(); 1.430 + currTestCaseNum = tcZero; 1.431 + idleServiceObj.idleTime = 5000; 1.432 + 1.433 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.434 + idleServiceObj.testIdleBackService(idleObserversArray[2], "idle"); 1.435 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.436 + } 1.437 + 1.438 + function caseZeroCleanUp() { 1.439 + dump("\ncaseZeroCleanUp()\n"); 1.440 + dump("==============\n"); 1.441 + ResetVars(); 1.442 + currTestCaseNum = tcZero; 1.443 + cleanUp = false; 1.444 + 1.445 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.446 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.447 + 1.448 + if (AddOutOfOrderActiveEnabled) { 1.449 + AddOutOfOrderActive(); 1.450 + } 1.451 + else { 1.452 + dump("Finishing testing idle API.\n"); 1.453 + SimpleTest.finish(); 1.454 + } 1.455 + } 1.456 + 1.457 + /* 1.458 + AddOutOfOrderActive() 1.459 + - Tests if the idle observer with the min time is always registered correctly 1.460 + with the idle service. 1.461 + */ 1.462 + function AddOutOfOrderActive() { 1.463 + dump("\n\nTESTING CASE AddOutOfOrderActive\n"); 1.464 + dump("==============\n"); 1.465 + 1.466 + ResetVars(); 1.467 + currTestCaseNum = tcAddOutOfOrderActive; 1.468 + idleServiceObj.idleTime = 500; 1.469 + 1.470 + window.navigator.addIdleObserver(idleObserversArray[3]); //msg3 1.471 + window.navigator.addIdleObserver(idleObserversArray[4]); //msg4 1.472 + window.navigator.addIdleObserver(idleObserversArray[1]); //msg1 1.473 + window.navigator.addIdleObserver(idleObserversArray[2]); //msg2 1.474 + passed = false; 1.475 + 1.476 + idleServiceObj.idleTime = 1000; 1.477 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.478 + } 1.479 + 1.480 + /* 1.481 + - AddOutOfOrderActiveCleanUp() 1.482 + */ 1.483 + function AddOutOfOrderActiveCleanUp() { 1.484 + dump("\nAddOutOfOrderActiveCleanUp()\n"); 1.485 + dump("==============================\n"); 1.486 + ResetVars(); 1.487 + currTestCaseNum = tcAddOutOfOrderActive; 1.488 + cleanUp = false; 1.489 + idleServiceObj.idleTime = 4500; 1.490 + 1.491 + for (var i=1; i<5; i++) { 1.492 + window.navigator.removeIdleObserver(idleObserversArray[i]); 1.493 + } 1.494 + dump("JS AddOutOfOrderActiveCleanUp() DONE\n"); 1.495 + if (AddOutOfOrderIdleEnabled) { 1.496 + AddOutOfOrderIdle(); 1.497 + } 1.498 + else { 1.499 + dump("Finishing testing idle API.\n"); 1.500 + SimpleTest.finish(); 1.501 + } 1.502 + } 1.503 + 1.504 + /* 1.505 + - AddOutOfOrderIdle() 1.506 + */ 1.507 + function AddOutOfOrderIdle() { 1.508 + dump("\nAddOutOfOrderIdle()\n"); 1.509 + dump("======================================================================\n"); 1.510 + 1.511 + dump("\nJS AddOutOfOrderIdle\n"); 1.512 + dump("JS NUM OBSERVERS: " + idleServiceObj.observers.length + "\n"); 1.513 + 1.514 + if (!msg1Count && !msg2Count && !msg3Count) { 1.515 + ResetVars(); 1.516 + } 1.517 + currTestCaseNum = tcAddOutOfOrderIdle; 1.518 + cleanUp = false; 1.519 + 1.520 + if (!msg1Count && !msg2Count && !msg3Count) { 1.521 + idleServiceObj.idleTime = 3100; 1.522 + } 1.523 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.524 + if (!msg1Count && !msg2Count && !msg3Count) { 1.525 + idleServiceObj.testIdleBackService(idleObserversArray[3], "idle"); 1.526 + } 1.527 + } 1.528 + 1.529 + /* 1.530 + - AddOutOfOrderIdleCleanUp() 1.531 + */ 1.532 + function AddOutOfOrderIdleCleanUp() { 1.533 + ok(passed, "Failed test case: AddOutOfOrderIdle()"); 1.534 + dump("\nAddOutOfOrderIdleCleanUp()\n"); 1.535 + dump("==========================\n"); 1.536 + ResetVars(); 1.537 + currTestCaseNum = tcAddOutOfOrderIdle; 1.538 + cleanUp = true; 1.539 + idleServiceObj.idleTime = 4100; 1.540 + 1.541 + for (var j=1; j<4; j++) { 1.542 + window.navigator.removeIdleObserver(idleObserversArray[j]); 1.543 + } 1.544 + window.navigator.removeIdleObserver(idleObserversArray[3]); 1.545 + 1.546 + if (idleServiceObj.observers.length === 1) { 1.547 + passed = true; 1.548 + } 1.549 + else { 1.550 + passed = false; 1.551 + } 1.552 + ok(passed, "Failed test case: AddOutOfOrderIdleCleanUp()"); 1.553 + if (AddShiftLocalEnabled) { 1.554 + AddShiftLocal(); 1.555 + } 1.556 + else { 1.557 + dump("Finished AddOutOfOrderIdleCleanUp() test.\n"); 1.558 + SimpleTest.finish(); 1.559 + } 1.560 + } 1.561 + 1.562 + /* 1.563 + * function AddShiftLocal() 1.564 + * - user is idle 1.565 + * - check that local idle timer is shifted correctly 1.566 + * - msg 1 fired when user is idle 1.567 + * - msg 3 fired when 3000 1.568 + * - msg 2 fired immediately when added at 3200 ms 1.569 + * - msg 4 fired by local timer. 1.570 + */ 1.571 + function AddShiftLocal() 1.572 + { 1.573 + dump("\n\nTESTING CASE AddShiftLocal\n"); 1.574 + dump("==============\n"); 1.575 + 1.576 + ResetVars(); 1.577 + currTestCaseNum = tcAddShiftLocal; 1.578 + idleServiceObj.idleTime = 500; 1.579 + 1.580 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.581 + window.navigator.addIdleObserver(idleObserversArray[3]); 1.582 + window.navigator.addIdleObserver(idleObserversArray[4]); 1.583 + 1.584 + idleServiceObj.idleTime = 1000; 1.585 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.586 + } 1.587 + 1.588 + /* 1.589 + * function AddShiftLocalCleanUp() 1.590 + */ 1.591 + function AddShiftLocalCleanUp() 1.592 + { 1.593 + dump("\n\nTESTING CASE AddShiftLocalCleanUp\n"); 1.594 + dump("==============\n"); 1.595 + 1.596 + ResetVars(); 1.597 + currTestCaseNum = tcAddShiftLocal; 1.598 + 1.599 + for (var i=1; i<5; i++) { 1.600 + window.navigator.removeIdleObserver(idleObserversArray[i]); 1.601 + } 1.602 + dump("AddShiftLocalCleanUp() done clean up\n"); 1.603 + if (AddNewLocalWhileAllIdleEnabled) { 1.604 + AddNewLocalWhileAllIdle(); 1.605 + } 1.606 + else { 1.607 + dump("Finished testing AddShiftLocal()\n"); 1.608 + SimpleTest.finish(); 1.609 + } 1.610 + } 1.611 + 1.612 + /* 1.613 + * AddNewLocalWhileAllIdle() 1.614 + * - no local idle timer exists because all of the idle observers that were added had a requested 1.615 + * idle time of < curr user idle time and so were fired immediately. No local timer was required. 1.616 + * - now add an idle observer whose requested idle time is > current use idle time and > min idle 1.617 + * requested time in the list of idle observers. 1.618 + */ 1.619 + function AddNewLocalWhileAllIdle() 1.620 + { 1.621 + dump("\n\nTESTING CASE AddNewLocalWhileAllIdle\n"); 1.622 + dump("==============\n"); 1.623 + 1.624 + ResetVars(); 1.625 + currTestCaseNum = tcAddNewLocalWhileAllIdle; 1.626 + idleServiceObj.idleTime = 500; 1.627 + 1.628 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.629 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.630 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.631 + 1.632 + idleServiceObj.idleTime = 1000; 1.633 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.634 + } 1.635 + 1.636 + function AddNewLocalWhileAllIdleCleanUp() 1.637 + { 1.638 + dump("\n\nTESTING CASE AddNewLocalWhileAllIdleCleanUp\n"); 1.639 + dump("==============\n"); 1.640 + 1.641 + ResetVars(); 1.642 + currTestCaseNum = tcAddNewLocalWhileAllIdle; 1.643 + 1.644 + window.navigator.removeIdleObserver(idleObserversArray[1]); 1.645 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.646 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.647 + window.navigator.removeIdleObserver(idleObserversArray[5]); 1.648 + 1.649 + if (ShiftLocalTimerBackEnabled) { 1.650 + ShiftLocalTimerBack(); 1.651 + } 1.652 + else { 1.653 + dump("Finished testing TestActiveToActiveNotificationCleanUp()\n"); 1.654 + SimpleTest.finish(); 1.655 + } 1.656 + } 1.657 + 1.658 + /* 1.659 + * ShiftLocalTimerBack() 1.660 + * - add a new idle observer whose requested time is > current user idle time 1.661 + * but < the current local timer that has been set. 1.662 + * - the local timer will need to be reset to fire the new msg added. 1.663 + * RESULT 1.664 + * - should print all of them in order 1.665 + */ 1.666 + function ShiftLocalTimerBack() 1.667 + { 1.668 + dump("\n\nTESTING CASE ShiftLocalTimerBack()\n"); 1.669 + dump("==============\n"); 1.670 + 1.671 + ResetVars(); 1.672 + currTestCaseNum = tcShiftLocalTimerBack; 1.673 + idleServiceObj.idleTime = 2100; 1.674 + 1.675 + window.navigator.addIdleObserver(idleObserversArray[2]); 1.676 + idleServiceObj.testIdleBackService(idleObserversArray[2], "idle"); 1.677 + } 1.678 + 1.679 + function ShiftLocalTimerBackCleanUp() 1.680 + { 1.681 + dump("\n\nTESTING CASE ShiftLocalTimerBackCleanUp\n"); 1.682 + dump("==============\n"); 1.683 + 1.684 + ResetVars(); 1.685 + currTestCaseNum = tcShiftLocalTimerBack; 1.686 + window.navigator.removeIdleObserver(idleObserversArray[2]); 1.687 + window.navigator.removeIdleObserver(idleObserversArray[4]); 1.688 + window.navigator.removeIdleObserver(idleObserversArray[5]); 1.689 + dump("ShiftLocalTimerBackCleanUp() done clean up\n"); 1.690 + 1.691 + if (TestActiveToActiveNotificationEnabled) { 1.692 + TestActiveNotification(); 1.693 + } 1.694 + else { 1.695 + dump("Finished testing AddNewLocalWhileAllIdle()\n"); 1.696 + SimpleTest.finish(); 1.697 + } 1.698 + } 1.699 + 1.700 + function TestActiveNotification() 1.701 + { 1.702 + dump("\n\nTESTING CASE TestActiveNotification\n"); 1.703 + dump("===============================================\n"); 1.704 + 1.705 + ResetVars(); 1.706 + currTestCaseNum = tcTestActiveToActiveNotification; 1.707 + 1.708 + idleServiceObj.idleTime = 500; 1.709 + window.navigator.addIdleObserver(idleObserversArray[1]); 1.710 + window.navigator.addIdleObserver(idleObserversArray[5]); 1.711 + idleServiceObj.idleTime = 1000; 1.712 + idleServiceObj.testIdleBackService(idleObserversArray[1], "idle"); 1.713 + } 1.714 + 1.715 + function TestActiveNotificationCleanUp() 1.716 + { 1.717 + dump("\n\nTESTING CASE TestActiveNotificationCleanUp\n"); 1.718 + dump("===============================================\n"); 1.719 + 1.720 + try { 1.721 + componentMgr.unregisterFactory(idleServiceCID, idleServiceObj); 1.722 + } 1.723 + catch(err) { 1.724 + dump("test_bug715041.xul: ShiftLocalTimerBackCleanUp() Failed to unregister factory, mock idle service!\n"); 1.725 + } 1.726 + 1.727 + try { 1.728 + componentMgr.registerFactory(oldIdleServiceCID, "Re registering old idle service", idleServiceContractID, oldIdleServiceFactoryObj); 1.729 + } 1.730 + catch(err) { 1.731 + dump("test_bug715041.xul: ShiftLocalTimerBackCleanUp() Failed to register factory, original idle service!\n"); 1.732 + } 1.733 + 1.734 + SimpleTest.finish(); 1.735 + } 1.736 + 1.737 + /* 1.738 + * function AddRemoveIdleObserverWithInvalidTime() 1.739 + */ 1.740 + function AddRemoveIdleObserverWithInvalidTime() 1.741 + { 1.742 + dump("\n\nTESTING CASE AddRemoveIdleObserverWithInvalidTime()\n"); 1.743 + dump("==============\n"); 1.744 + 1.745 + ResetVars(); 1.746 + currTestCaseNum = tcAddRemoveIdleObserverWithInvalidTime; 1.747 + 1.748 + //while idle 1.749 + idleServiceObj.idleTime = 2100; 1.750 + var rv = window.navigator.addIdleObserver(idleObserversArray[6]); 1.751 + dump("rv: " + rv + "\n"); 1.752 + rv = window.navigator.removeIdleObserver(idleObserversArray[6]); 1.753 + 1.754 + idleServiceObj.idleTime = 0; 1.755 + window.navigator.addIdleObserver(idleObserversArray[6]); 1.756 + window.navigator.removeIdleObserver(idleObserversArray[6]); 1.757 + 1.758 + SimpleTest.finish(); 1.759 + } 1.760 + 1.761 + try { 1.762 + var idleServiceCID = Components.ID("287075a6-f968-4516-8043-406c46f503b4"); 1.763 + var idleServiceContractID = "@mozilla.org/widget/idleservice;1"; 1.764 + var oldIdleService = Components.classes[idleServiceContractID].getService(Components.interfaces.nsIIdleService); 1.765 + } 1.766 + catch(ex) { 1.767 + dump("test_bug715041.xul: 1) Failed to get old idle service.\n"); 1.768 + } 1.769 + 1.770 + try { 1.771 + // Registering new moch JS idle service 1.772 + var componentMgr = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar); 1.773 + } 1.774 + catch(err) { 1.775 + dump("test_bug715041.xul: Failed to query component registrar interface.\n"); 1.776 + } 1.777 + 1.778 + try { 1.779 + var oldIdleServiceFactoryObj = componentMgr.getClassObjectByContractID(idleServiceContractID, Components.interfaces.nsIFactory); 1.780 + } 1.781 + catch(err) { 1.782 + dump("test_bug715041.xul: Failed to get old idle service.\n"); 1.783 + } 1.784 + 1.785 + try { 1.786 + var oldIdleServiceCID = componentMgr.contractIDToCID(idleServiceContractID); 1.787 + } 1.788 + catch(err) { 1.789 + dump("test_bug715041.xul: Failed to convert ID to CID for old idle service.\n"); 1.790 + } 1.791 + 1.792 + try { 1.793 + componentMgr.unregisterFactory(oldIdleServiceCID, oldIdleServiceFactoryObj); 1.794 + } 1.795 + catch(err) { 1.796 + dump("test_bug715041.xul: Failed to unregister old idle service factory object!\n"); 1.797 + } 1.798 + 1.799 + try { 1.800 + componentMgr.registerFactory(idleServiceCID, "Test Simple Idle/Back Notifications", idleServiceContractID, idleServiceObj); 1.801 + } 1.802 + catch(err) { 1.803 + dump("test_bug715041.xul: Failed to register mock idle service.\n"); 1.804 + } 1.805 + 1.806 + SimpleTest.waitForExplicitFinish(); 1.807 + SimpleTest.requestLongerTimeout(10); 1.808 + 1.809 + AddOutOfOrderActiveEnabled = true; 1.810 + AddOutOfOrderIdleEnabled = true; 1.811 + AddNewLocalWhileAllIdleEnabled = true; 1.812 + TestActiveToActiveNotificationEnabled = true; 1.813 + AddShiftLocalEnabled = true; 1.814 + AddIdleObserverWithInvalidTimeEnabled = false; 1.815 + 1.816 + caseZero(); 1.817 + 1.818 + ]]> 1.819 + </script> 1.820 + </window> 1.821 +