From 4abe833d66929ee0f0363cf63dfe35ffe3d5a0a2 Mon Sep 17 00:00:00 2001 From: Steve Block Date: Tue, 25 Aug 2009 12:13:41 +0100 Subject: Makes Geolocation error callback asynchronous when service fails to start. This fixes http://b/issue?id=2054361. Change-Id: I83ff2618fb49bb126c7cd4c318914c6a0c68d69d --- WebCore/page/Geolocation.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'WebCore/page/Geolocation.cpp') diff --git a/WebCore/page/Geolocation.cpp b/WebCore/page/Geolocation.cpp index 5d908a3..a419b0b 100644 --- a/WebCore/page/Geolocation.cpp +++ b/WebCore/page/Geolocation.cpp @@ -106,8 +106,7 @@ void Geolocation::disconnectFrame() void Geolocation::getCurrentPosition(PassRefPtr successCallback, PassRefPtr errorCallback, PassRefPtr options) { RefPtr notifier = makeRequest(successCallback, errorCallback, options); - if (!notifier) - return; + ASSERT(notifier); m_oneShots.add(notifier); } @@ -115,8 +114,7 @@ void Geolocation::getCurrentPosition(PassRefPtr successCallbac int Geolocation::watchPosition(PassRefPtr successCallback, PassRefPtr errorCallback, PassRefPtr options) { RefPtr notifier = makeRequest(successCallback, errorCallback, options); - if (!notifier) - return 0; + ASSERT(notifier); static int sIdentifier = 0; m_watchers.set(++sIdentifier, notifier); @@ -136,11 +134,7 @@ PassRefPtr Geolocation::makeRequest(PassRefPtrstartUpdating(notifier->m_options.get())) notifier->startTimerIfNeeded(); else { - if (notifier->m_errorCallback) { - RefPtr error = PositionError::create(PositionError::PERMISSION_DENIED, "Unable to Start"); - notifier->m_errorCallback->handleEvent(error.get()); - } - return 0; + notifier->setFatalError(PositionError::create(PositionError::UNKNOWN_ERROR, "Failed to start Geolocation service")); } } -- cgit v1.1