1f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickdescription("Tests that when a request is made on a Geolocation object after its frame has been disconnected, no callbacks are made and no crash occurs.");
2f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
3f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickif (window.layoutTestController) {
4f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    layoutTestController.setGeolocationPermission(true);
5f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    layoutTestController.setMockGeolocationPosition(51.478, -0.166, 100);
6f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
7f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
8f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickfunction onFirstIframeLoaded() {
9f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    iframeGeolocation = iframe.contentWindow.navigator.geolocation;
10f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    iframe.src = 'resources/disconnected-frame-already-inner2.html';
11f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
12f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
13f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvar error;
14f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickfunction onSecondIframeLoaded() {
15f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    iframeGeolocation.getCurrentPosition(function () {
16f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        testFailed('Success callback invoked unexpectedly');
17f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        finishJSTest();
18f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    }, function(e) {
19f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        testFailed('Error callback invoked unexpectedly');
20f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        finishJSTest();
21f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    });
22f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    setTimeout(finishTest, 1000);
23f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
24f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
25f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickfunction finishTest() {
26f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    debug('Method called on Geolocation object with disconnected Frame.');
27f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    finishJSTest();
28f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
29f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
30f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvar iframe = document.createElement('iframe');
31f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickiframe.src = 'resources/disconnected-frame-already-inner1.html';
32f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickdocument.body.appendChild(iframe);
33f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickwindow.jsTestIsAsync = true;
35f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickwindow.successfullyParsed = true;
36