1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
6 #include "modules/geofencing/Geofencing.h"
8 #include "bindings/core/v8/CallbackPromiseAdapter.h"
9 #include "bindings/core/v8/ScriptPromise.h"
10 #include "bindings/core/v8/ScriptPromiseResolver.h"
11 #include "core/dom/DOMException.h"
12 #include "core/dom/ExceptionCode.h"
13 #include "modules/geofencing/CircularGeofencingRegion.h"
14 #include "modules/geofencing/GeofencingError.h"
15 #include "modules/geofencing/GeofencingRegion.h"
16 #include "public/platform/Platform.h"
17 #include "public/platform/WebCircularGeofencingRegion.h"
18 #include "public/platform/WebGeofencingProvider.h"
19 #include "public/platform/WebGeofencingRegistration.h"
25 // For CallbackPromiseAdapter to convert a WebVector of regions to a HeapVector.
28 typedef blink::WebVector<blink::WebGeofencingRegistration> WebType;
29 static HeapVector<Member<GeofencingRegion> > take(ScriptPromiseResolver* resolver, WebType* regionsRaw)
31 OwnPtr<WebType> webRegions = adoptPtr(regionsRaw);
32 HeapVector<Member<GeofencingRegion> > regions;
33 for (size_t i = 0; i < webRegions->size(); ++i)
34 regions.append(CircularGeofencingRegion::create((*webRegions)[i].id, (*webRegions)[i].region));
38 static void dispose(WebType* regionsRaw)
49 Geofencing::Geofencing()
53 ScriptPromise Geofencing::registerRegion(ScriptState* scriptState, GeofencingRegion* region)
55 WebGeofencingProvider* provider = Platform::current()->geofencingProvider();
57 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError));
59 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
60 ScriptPromise promise = resolver->promise();
61 // FIXME: somehow pass a reference to the current serviceworker to the provider.
62 provider->registerRegion(region->id(), toCircularGeofencingRegion(region)->webRegion(), new CallbackPromiseAdapter<void, GeofencingError>(resolver));
66 ScriptPromise Geofencing::unregisterRegion(ScriptState* scriptState, const String& regionId)
68 WebGeofencingProvider* provider = Platform::current()->geofencingProvider();
70 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError));
72 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
73 ScriptPromise promise = resolver->promise();
74 // FIXME: somehow pass a reference to the current serviceworker to the provider.
75 provider->unregisterRegion(regionId, new CallbackPromiseAdapter<void, GeofencingError>(resolver));
79 ScriptPromise Geofencing::getRegisteredRegions(ScriptState* scriptState) const
81 WebGeofencingProvider* provider = Platform::current()->geofencingProvider();
83 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError));
85 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
86 ScriptPromise promise = resolver->promise();
87 // FIXME: somehow pass a reference to the current serviceworker to the provider.
88 provider->getRegisteredRegions(new CallbackPromiseAdapter<RegionArray, GeofencingError>(resolver));