summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/bindings/js/JSGeolocationCustom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/bindings/js/JSGeolocationCustom.cpp')
-rw-r--r--Source/WebCore/bindings/js/JSGeolocationCustom.cpp41
1 files changed, 5 insertions, 36 deletions
diff --git a/Source/WebCore/bindings/js/JSGeolocationCustom.cpp b/Source/WebCore/bindings/js/JSGeolocationCustom.cpp
index 248adcf..b93c4ce 100644
--- a/Source/WebCore/bindings/js/JSGeolocationCustom.cpp
+++ b/Source/WebCore/bindings/js/JSGeolocationCustom.cpp
@@ -28,14 +28,13 @@
#if ENABLE(GEOLOCATION)
+#include "CallbackFunction.h"
#include "DOMWindow.h"
-#include "ExceptionCode.h"
#include "Geolocation.h"
#include "JSCustomPositionCallback.h"
#include "JSCustomPositionErrorCallback.h"
#include "JSDOMWindow.h"
#include "PositionOptions.h"
-#include <runtime/JSFunction.h>
#if !ENABLE(CLIENT_BASED_GEOLOCATION)
#include "GeolocationService.h"
@@ -46,36 +45,6 @@ using namespace std;
namespace WebCore {
-static PassRefPtr<PositionCallback> createPositionCallback(ExecState* exec, JSDOMGlobalObject* globalObject, JSValue value)
-{
- // The spec specifies 'FunctionOnly' for this object.
- // FIXME: This check disallows callable objects created via JSC API. It's not clear what exactly the specification intends to allow.
- if (!value.inherits(&JSFunction::s_info)) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
- return 0;
- }
-
- JSObject* object = asObject(value);
- return JSCustomPositionCallback::create(object, globalObject);
-}
-
-static PassRefPtr<PositionErrorCallback> createPositionErrorCallback(ExecState* exec, JSDOMGlobalObject* globalObject, JSValue value)
-{
- // Argument is optional (hence undefined is allowed), and null is allowed.
- if (value.isUndefinedOrNull())
- return 0;
-
- // The spec specifies 'FunctionOnly' for this object.
- // FIXME: This check disallows callable objects created via JSC API. It's not clear what exactly the specification intends to allow.
- if (!value.inherits(&JSFunction::s_info)) {
- setDOMException(exec, TYPE_MISMATCH_ERR);
- return 0;
- }
-
- JSObject* object = asObject(value);
- return JSCustomPositionErrorCallback::create(object, globalObject);
-}
-
static PassRefPtr<PositionOptions> createPositionOptions(ExecState* exec, JSValue value)
{
// Create default options.
@@ -144,12 +113,12 @@ JSValue JSGeolocation::getCurrentPosition(ExecState* exec)
{
// Arguments: PositionCallback, (optional)PositionErrorCallback, (optional)PositionOptions
- RefPtr<PositionCallback> positionCallback = createPositionCallback(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(0));
+ RefPtr<PositionCallback> positionCallback = createFunctionOnlyCallback<JSCustomPositionCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(0));
if (exec->hadException())
return jsUndefined();
ASSERT(positionCallback);
- RefPtr<PositionErrorCallback> positionErrorCallback = createPositionErrorCallback(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(1));
+ RefPtr<PositionErrorCallback> positionErrorCallback = createFunctionOnlyCallback<JSCustomPositionErrorCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(1), CallbackAllowUndefined | CallbackAllowNull);
if (exec->hadException())
return jsUndefined();
@@ -166,12 +135,12 @@ JSValue JSGeolocation::watchPosition(ExecState* exec)
{
// Arguments: PositionCallback, (optional)PositionErrorCallback, (optional)PositionOptions
- RefPtr<PositionCallback> positionCallback = createPositionCallback(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(0));
+ RefPtr<PositionCallback> positionCallback = createFunctionOnlyCallback<JSCustomPositionCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(0));
if (exec->hadException())
return jsUndefined();
ASSERT(positionCallback);
- RefPtr<PositionErrorCallback> positionErrorCallback = createPositionErrorCallback(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(1));
+ RefPtr<PositionErrorCallback> positionErrorCallback = createFunctionOnlyCallback<JSCustomPositionErrorCallback>(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->argument(1), CallbackAllowUndefined | CallbackAllowNull);
if (exec->hadException())
return jsUndefined();