forked from mirrors/gecko-dev
		
	 f9f5914039
			
		
	
	
		f9f5914039
		
	
	
	
	
		
			
			# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D36041 --HG-- extra : source : 96b3895a3b2aa2fcb064c85ec5857b7216884556
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| /* eslint-disable mozilla/no-arbitrary-setTimeout */
 | |
| 
 | |
| // gBrowser.selectedTab.lastAccessed and Date.now() called from this test can't
 | |
| // run concurrently, and therefore don't always match exactly.
 | |
| const CURRENT_TIME_TOLERANCE_MS = 15;
 | |
| 
 | |
| function isCurrent(tab, msg) {
 | |
|   const DIFF = Math.abs(Date.now() - tab.lastAccessed);
 | |
|   ok(DIFF <= CURRENT_TIME_TOLERANCE_MS, msg + " (difference: " + DIFF + ")");
 | |
| }
 | |
| 
 | |
| function nextStep(fn) {
 | |
|   setTimeout(fn, CURRENT_TIME_TOLERANCE_MS + 10);
 | |
| }
 | |
| 
 | |
| var originalTab;
 | |
| var newTab;
 | |
| 
 | |
| function test() {
 | |
|   waitForExplicitFinish();
 | |
|   // This test assumes that time passes between operations. But if the precision
 | |
|   // is low enough, and the test fast enough, an operation, and a successive call
 | |
|   // to Date.now() will have the same time value.
 | |
|   SpecialPowers.pushPrefEnv(
 | |
|     { set: [["privacy.reduceTimerPrecision", false]] },
 | |
|     function() {
 | |
|       originalTab = gBrowser.selectedTab;
 | |
|       nextStep(step2);
 | |
|     }
 | |
|   );
 | |
| }
 | |
| 
 | |
| function step2() {
 | |
|   isCurrent(originalTab, "selected tab has the current timestamp");
 | |
|   newTab = BrowserTestUtils.addTab(gBrowser, "about:blank", {
 | |
|     skipAnimation: true,
 | |
|   });
 | |
|   nextStep(step3);
 | |
| }
 | |
| 
 | |
| function step3() {
 | |
|   ok(newTab.lastAccessed < Date.now(), "new tab hasn't been selected so far");
 | |
|   gBrowser.selectedTab = newTab;
 | |
|   isCurrent(newTab, "new tab has the current timestamp after being selected");
 | |
|   nextStep(step4);
 | |
| }
 | |
| 
 | |
| function step4() {
 | |
|   ok(
 | |
|     originalTab.lastAccessed < Date.now(),
 | |
|     "original tab has old timestamp after being deselected"
 | |
|   );
 | |
|   isCurrent(
 | |
|     newTab,
 | |
|     "new tab has the current timestamp since it's still selected"
 | |
|   );
 | |
| 
 | |
|   gBrowser.removeTab(newTab);
 | |
|   finish();
 | |
| }
 |