1545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch/*
2545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *
4545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Redistribution and use in source and binary forms, with or without
5545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * modification, are permitted provided that the following conditions
6545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * are met:
7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 1. Redistributions of source code must retain the above copyright
8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *    notice, this list of conditions and the following disclaimer.
9545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
10545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
11545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *    documentation and/or other materials provided with the distribution.
12545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch *
13545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch */
25545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#ifndef GeolocationClientQt_h
2781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#define GeolocationClientQt_h
28545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "GeolocationClient.h"
30545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <QGeoPositionInfoSource>
31545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <wtf/RefPtr.h>
32545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
33545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// FIXME: Remove usage of "using namespace" in a header file.
34545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// There is bug in qtMobility signal names are not full qualified when used with namespace
35545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// QtMobility namespace in slots throws up error and its required to be fixed in qtmobility.
36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochusing namespace QtMobility;
37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass QWebPage;
3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochnamespace WebCore {
41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
42545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// This class provides a implementation of a GeolocationService for qtWebkit.
43545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// It uses QtMobility (v1.0.0) location service to get positions
4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass GeolocationClientQt : public QObject, public GeolocationClient {
45545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    Q_OBJECT
46545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
47545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochpublic:
4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    GeolocationClientQt(const QWebPage*);
4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual ~GeolocationClientQt();
50545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void geolocationDestroyed();
5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void startUpdating();
53545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    virtual void stopUpdating();
54545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void setEnableHighAccuracy(bool);
5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual GeolocationPosition* lastPosition() { return m_lastPosition.get(); }
57545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void requestPermission(Geolocation*);
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void cancelPermissionRequest(Geolocation*);
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochprivate Q_SLOTS:
62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // QGeoPositionInfoSource
63545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    void positionUpdated(const QGeoPositionInfo&);
64545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
65545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochprivate:
6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const QWebPage* m_page;
6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<GeolocationPosition> m_lastPosition;
68545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    QtMobility::QGeoPositionInfoSource* m_location;
69545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch};
70545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} // namespace WebCore
72545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // GeolocationClientQt_h
74