X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fthird_party%2FWebKit%2FSource%2Fmodules%2Fgeofencing%2FGeofencing.cpp;h=eeb8e6a61b66d6b5d64da0427334703b331c2451;hb=3545e9f2671f595d2a2f3ee75ca0393b01e35ef6;hp=59d8b975755550e0b2f48b7a08e7fda81d16acc8;hpb=7d210d4c7e9ba36e635eabc5b5780495f8a63292;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/third_party/WebKit/Source/modules/geofencing/Geofencing.cpp b/src/third_party/WebKit/Source/modules/geofencing/Geofencing.cpp index 59d8b97..eeb8e6a 100644 --- a/src/third_party/WebKit/Source/modules/geofencing/Geofencing.cpp +++ b/src/third_party/WebKit/Source/modules/geofencing/Geofencing.cpp @@ -5,30 +5,88 @@ #include "config.h" #include "modules/geofencing/Geofencing.h" +#include "bindings/core/v8/CallbackPromiseAdapter.h" #include "bindings/core/v8/ScriptPromise.h" +#include "bindings/core/v8/ScriptPromiseResolver.h" #include "core/dom/DOMException.h" #include "core/dom/ExceptionCode.h" +#include "modules/geofencing/CircularGeofencingRegion.h" +#include "modules/geofencing/GeofencingError.h" +#include "modules/geofencing/GeofencingRegion.h" +#include "public/platform/Platform.h" +#include "public/platform/WebCircularGeofencingRegion.h" +#include "public/platform/WebGeofencingProvider.h" +#include "public/platform/WebGeofencingRegistration.h" namespace blink { +namespace { + +// For CallbackPromiseAdapter to convert a WebVector of regions to a HeapVector. +class RegionArray { +public: + typedef blink::WebVector WebType; + static HeapVector > take(ScriptPromiseResolver* resolver, WebType* regionsRaw) + { + OwnPtr webRegions = adoptPtr(regionsRaw); + HeapVector > regions; + for (size_t i = 0; i < webRegions->size(); ++i) + regions.append(CircularGeofencingRegion::create((*webRegions)[i].id, (*webRegions)[i].region)); + return regions; + } + + static void dispose(WebType* regionsRaw) + { + delete regionsRaw; + } + +private: + RegionArray(); +}; + +} // namespace + Geofencing::Geofencing() { - ScriptWrappable::init(this); } ScriptPromise Geofencing::registerRegion(ScriptState* scriptState, GeofencingRegion* region) { - return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError)); + WebGeofencingProvider* provider = Platform::current()->geofencingProvider(); + if (!provider) + return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError)); + + RefPtr resolver = ScriptPromiseResolver::create(scriptState); + ScriptPromise promise = resolver->promise(); + // FIXME: somehow pass a reference to the current serviceworker to the provider. + provider->registerRegion(region->id(), toCircularGeofencingRegion(region)->webRegion(), new CallbackPromiseAdapter(resolver)); + return promise; } ScriptPromise Geofencing::unregisterRegion(ScriptState* scriptState, const String& regionId) { - return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError)); + WebGeofencingProvider* provider = Platform::current()->geofencingProvider(); + if (!provider) + return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError)); + + RefPtr resolver = ScriptPromiseResolver::create(scriptState); + ScriptPromise promise = resolver->promise(); + // FIXME: somehow pass a reference to the current serviceworker to the provider. + provider->unregisterRegion(regionId, new CallbackPromiseAdapter(resolver)); + return promise; } ScriptPromise Geofencing::getRegisteredRegions(ScriptState* scriptState) const { - return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError)); + WebGeofencingProvider* provider = Platform::current()->geofencingProvider(); + if (!provider) + return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError)); + + RefPtr resolver = ScriptPromiseResolver::create(scriptState); + ScriptPromise promise = resolver->promise(); + // FIXME: somehow pass a reference to the current serviceworker to the provider. + provider->getRegisteredRegions(new CallbackPromiseAdapter(resolver)); + return promise; } } // namespace blink