WebKitGeolocationProvider.cpp [plain text]
#include "config.h"
#include "WebKitGeolocationProvider.h"
#if ENABLE(GEOLOCATION)
#include "APIGeolocationProvider.h"
#include "WebGeolocationManagerProxy.h"
#include "WebGeolocationPosition.h"
namespace WebKit {
class GeolocationProvider : public API::GeolocationProvider {
public:
explicit GeolocationProvider(WebKitGeolocationProvider& provider)
: m_provider(provider)
{
}
private:
void startUpdating(WebGeolocationManagerProxy&) override
{
m_provider.startUpdating();
}
void stopUpdating(WebGeolocationManagerProxy&) override
{
m_provider.stopUpdating();
}
WebKitGeolocationProvider& m_provider;
};
WebKitGeolocationProvider::~WebKitGeolocationProvider()
{
m_provider.stopUpdating();
m_geolocationManager->setProvider(nullptr);
}
WebKitGeolocationProvider::WebKitGeolocationProvider(WebGeolocationManagerProxy* geolocationManager)
: m_geolocationManager(geolocationManager)
, m_provider(this)
{
ASSERT(geolocationManager);
geolocationManager->setProvider(std::make_unique<GeolocationProvider>(*this));
}
void WebKitGeolocationProvider::startUpdating()
{
m_provider.startUpdating();
}
void WebKitGeolocationProvider::stopUpdating()
{
m_provider.stopUpdating();
}
void WebKitGeolocationProvider::notifyPositionChanged(int timestamp, double latitude, double longitude, double altitude, double accuracy, double altitudeAccuracy)
{
WebCore::GeolocationPosition corePosition { static_cast<double>(timestamp), latitude, longitude, accuracy };
corePosition.altitude = altitude;
corePosition.altitudeAccuracy = altitudeAccuracy;
auto position = WebGeolocationPosition::create(WTFMove(corePosition));
m_geolocationManager->providerDidChangePosition(position.ptr());
}
void WebKitGeolocationProvider::notifyErrorOccurred(const char* )
{
m_geolocationManager->providerDidFailToDeterminePosition();
}
}
#endif // ENABLE(GEOLOCATION)