1f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch/*
2f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Copyright (C) 2010 Google Inc. All rights reserved.
3f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch *
4f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Redistribution and use in source and binary forms, with or without
5f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * modification, are permitted provided that the following conditions
6f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * are met:
7f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch *
8f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 1.  Redistributions of source code must retain the above copyright
9f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch *     notice, this list of conditions and the following disclaimer.
10f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 2.  Redistributions in binary form must reproduce the above copyright
11f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch *     notice, this list of conditions and the following disclaimer in the
12f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch *     documentation and/or other materials provided with the distribution.
13f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch *
14f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch */
25f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "config.h"
27f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "GeolocationClientProxy.h"
28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
29f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "Geolocation.h"
30f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "GeolocationPosition.h"
31f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "WebGeolocationClient.h"
32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "WebGeolocationController.h"
33f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "WebGeolocationPermissionRequest.h"
34f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "WebGeolocationPosition.h"
35f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
36f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochnamespace WebKit {
37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
38f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochGeolocationClientProxy::GeolocationClientProxy(WebGeolocationClient* client)
39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    : m_client(client)
40f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
43f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochGeolocationClientProxy::~GeolocationClientProxy()
44f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
45f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GeolocationClientProxy::setController(WebCore::GeolocationController* controller)
48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // We support there not being a client, provided we don't do any Geolocation.
50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (m_client) {
51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        // Ownership of the WebGeolocationController is transferred to the client.
52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        m_client->setController(new WebGeolocationController(controller));
53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    }
54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
55f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GeolocationClientProxy::geolocationDestroyed()
57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
58f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (m_client)
59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        m_client->geolocationDestroyed();
60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
62f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GeolocationClientProxy::startUpdating()
63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
64f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_client->startUpdating();
65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
67f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GeolocationClientProxy::stopUpdating()
68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_client->stopUpdating();
70f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
72f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GeolocationClientProxy::setEnableHighAccuracy(bool highAccuracy)
73f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_client->setEnableHighAccuracy(highAccuracy);
75f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
76f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
77f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochWebCore::GeolocationPosition* GeolocationClientProxy::lastPosition()
78f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
79f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebGeolocationPosition webPosition;
80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (m_client->lastPosition(webPosition))
81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        m_lastPosition = webPosition;
82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    else
83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        m_lastPosition.clear();
84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return m_lastPosition.get();
86f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
87f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
88f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GeolocationClientProxy::requestPermission(WebCore::Geolocation* geolocation)
89f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_client->requestPermission(WebGeolocationPermissionRequest(geolocation));
91f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
93f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GeolocationClientProxy::cancelPermissionRequest(WebCore::Geolocation* geolocation)
94f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
95f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_client->cancelPermissionRequest(WebGeolocationPermissionRequest(geolocation));
96f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
98f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
99