1f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickdescription("Tests that when multiple requests are waiting for permission, no callbacks are invoked until permission is allowed."); 2f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 3f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickif (window.layoutTestController) 4f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick window.layoutTestController.setMockGeolocationPosition(51.478, -0.166, 100); 5f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 6f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickfunction allowPermission() { 7f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick permissionSet = true; 8f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (window.layoutTestController) 9f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick layoutTestController.setGeolocationPermission(true); 10f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 11f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 12f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvar watchCallbackInvoked = false; 13f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvar oneShotCallbackInvoked = false; 14f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 15f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merricknavigator.geolocation.watchPosition(function() { 16f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (permissionSet) { 17f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick testPassed('Success callback invoked'); 18f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick watchCallbackInvoked = true; 19f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick maybeFinishTest(); 20f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 21f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick } 22f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick testFailed('Success callback invoked unexpectedly'); 23f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick finishJSTest(); 24f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}, function(err) { 25f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick testFailed('Error callback invoked unexpectedly'); 26f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick finishJSTest(); 27f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}); 28f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 29f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merricknavigator.geolocation.getCurrentPosition(function() { 30f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (permissionSet) { 31f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick testPassed('Success callback invoked'); 32f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick oneShotCallbackInvoked = true; 33f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick maybeFinishTest(); 34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 35f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick } 36f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick testFailed('Success callback invoked unexpectedly'); 37f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick finishJSTest(); 38f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}, function(err) { 39f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick testFailed('Error callback invoked unexpectedly'); 40f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick finishJSTest(); 41f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}); 42f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 43f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickwindow.setTimeout(allowPermission, 100); 44f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 45f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickfunction maybeFinishTest() { 46f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (watchCallbackInvoked && oneShotCallbackInvoked) 47f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick finishJSTest(); 48f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 49f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 50f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickwindow.jsTestIsAsync = true; 51f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickwindow.successfullyParsed = true; 52