From 75505f2fc5827c662d9bb0a0a8b90219c23e7e85 Mon Sep 17 00:00:00 2001 From: Steve Block Date: Fri, 24 Jul 2009 13:59:28 +0100 Subject: Fixes WebKit Geolocation bug 27255. We should not call the error callback if the success callback raises an exception. This is currently being submitted to WebKit as bug 27255. --- WebCore/bindings/js/JSCustomPositionCallback.cpp | 3 +-- WebCore/bindings/js/JSCustomPositionCallback.h | 2 +- WebCore/page/Geolocation.cpp | 14 ++------------ WebCore/page/PositionCallback.h | 2 +- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/WebCore/bindings/js/JSCustomPositionCallback.cpp b/WebCore/bindings/js/JSCustomPositionCallback.cpp index 6f9efd9..6d892f0 100644 --- a/WebCore/bindings/js/JSCustomPositionCallback.cpp +++ b/WebCore/bindings/js/JSCustomPositionCallback.cpp @@ -41,7 +41,7 @@ JSCustomPositionCallback::JSCustomPositionCallback(JSObject* callback, Frame* fr { } -void JSCustomPositionCallback::handleEvent(Geoposition* geoposition, bool& raisedException) +void JSCustomPositionCallback::handleEvent(Geoposition* geoposition) { ASSERT(m_callback); ASSERT(m_frame); @@ -77,7 +77,6 @@ void JSCustomPositionCallback::handleEvent(Geoposition* geoposition, bool& raise if (exec->hadException()) { reportCurrentException(exec); - raisedException = true; } Document::updateStyleForAllDocuments(); diff --git a/WebCore/bindings/js/JSCustomPositionCallback.h b/WebCore/bindings/js/JSCustomPositionCallback.h index 6c0d306..9c8fe86 100644 --- a/WebCore/bindings/js/JSCustomPositionCallback.h +++ b/WebCore/bindings/js/JSCustomPositionCallback.h @@ -44,7 +44,7 @@ class JSCustomPositionCallback : public PositionCallback { public: static PassRefPtr create(JSC::JSObject* callback, Frame* frame) { return adoptRef(new JSCustomPositionCallback(callback, frame)); } - virtual void handleEvent(Geoposition*, bool& raisedException); + virtual void handleEvent(Geoposition*); private: JSCustomPositionCallback(JSC::JSObject* callback, Frame*); diff --git a/WebCore/page/Geolocation.cpp b/WebCore/page/Geolocation.cpp index 8abe8a6..8df6990 100644 --- a/WebCore/page/Geolocation.cpp +++ b/WebCore/page/Geolocation.cpp @@ -182,12 +182,7 @@ void Geolocation::sendPositionToOneShots(Geoposition* position) ASSERT(notifier->m_successCallback); notifier->m_timer.stop(); - bool shouldCallErrorCallback = false; - notifier->m_successCallback->handleEvent(position, shouldCallErrorCallback); - if (shouldCallErrorCallback) { - RefPtr error = PositionError::create(PositionError::UNKNOWN_ERROR, "An exception was thrown"); - handleError(error.get()); - } + notifier->m_successCallback->handleEvent(position); } } @@ -202,12 +197,7 @@ void Geolocation::sendPositionToWatchers(Geoposition* position) ASSERT(notifier->m_successCallback); notifier->m_timer.stop(); - bool shouldCallErrorCallback = false; - notifier->m_successCallback->handleEvent(position, shouldCallErrorCallback); - if (shouldCallErrorCallback) { - RefPtr error = PositionError::create(PositionError::UNKNOWN_ERROR, "An exception was thrown"); - handleError(error.get()); - } + notifier->m_successCallback->handleEvent(position); } } diff --git a/WebCore/page/PositionCallback.h b/WebCore/page/PositionCallback.h index 5f32c75..f6bf139 100644 --- a/WebCore/page/PositionCallback.h +++ b/WebCore/page/PositionCallback.h @@ -36,7 +36,7 @@ namespace WebCore { class PositionCallback : public RefCounted { public: virtual ~PositionCallback() { } - virtual void handleEvent(Geoposition* position, bool& raisedException) = 0; + virtual void handleEvent(Geoposition* position) = 0; }; } // namespace WebCore -- cgit v1.1