From e4fed060be91cfcce30d2ab8175b16c898f1b4a5 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Mon, 5 May 2025 12:15:50 +0000 Subject: [PATCH] Bug 1964063 - Try to reset a geolocation override only if it was set before. r=saschanaz Differential Revision: https://phabricator.services.mozilla.com/D247601 --- docshell/base/BrowsingContext.cpp | 7 ++- .../browser/browser_geolocation_override.js | 45 +++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/docshell/base/BrowsingContext.cpp b/docshell/base/BrowsingContext.cpp index 4470a2edf012..18330b947c4c 100644 --- a/docshell/base/BrowsingContext.cpp +++ b/docshell/base/BrowsingContext.cpp @@ -3254,13 +3254,12 @@ void BrowsingContext::SetGeolocationServiceOverride( mGeolocationServiceOverride->Init(); } mGeolocationServiceOverride->Update(aGeolocationOverride.Value()); - } else { + } else if (RefPtr serviceOverride = + mGeolocationServiceOverride.forget()) { // Create an original service and move the locators. RefPtr service = nsGeolocationService::GetGeolocationService(); - mGeolocationServiceOverride->MoveLocators(service); - - mGeolocationServiceOverride = nullptr; + serviceOverride->MoveLocators(service); } } diff --git a/dom/geolocation/test/browser/browser_geolocation_override.js b/dom/geolocation/test/browser/browser_geolocation_override.js index b23935a34eb8..424d27d260e7 100644 --- a/dom/geolocation/test/browser/browser_geolocation_override.js +++ b/dom/geolocation/test/browser/browser_geolocation_override.js @@ -440,3 +440,48 @@ add_task(async function test_amount_of_updates_for_watchPosition() { BrowserTestUtils.removeTab(tab); }); + +add_task(async function test_call_empty_without_override() { + await SpecialPowers.pushPrefEnv({ + set: required_preferences, + }); + + let pageLoaded; + let browser; + const tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, PAGE_URL); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.browserLoaded(browser, true); + }, + false + ); + await pageLoaded; + + await SpecialPowers.spawn(browser, [], async () => { + await SpecialPowers.pushPermissions([ + { + type: "geo", + allow: SpecialPowers.Services.perms.ALLOW_ACTION, + context: content.document, + }, + ]); + + const browsingContext = content.browsingContext; + + info("Reset the geolocation override"); + browsingContext.setGeolocationServiceOverride(); + const positionPromise4 = new Promise(resolve => + content.window.navigator.geolocation.getCurrentPosition(position => { + resolve(position.coords.toJSON()); + }) + ); + const coordinates4 = await positionPromise4; + is(coordinates4.latitude, 37.41857, "Original latitude is returned"); + is(coordinates4.longitude, -122.08769, "Original longitude is returned"); + is(coordinates4.accuracy, 42, "Original accuracy is returned"); + }); + + BrowserTestUtils.removeTab(tab); +});