1d0825bca7fe65beaee391d30da42e937db621564Steve Block/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2010 Apple Inc. All Rights Reserved.
3d0825bca7fe65beaee391d30da42e937db621564Steve Block *
4d0825bca7fe65beaee391d30da42e937db621564Steve Block * Redistribution and use in source and binary forms, with or without
5d0825bca7fe65beaee391d30da42e937db621564Steve Block * modification, are permitted provided that the following conditions
6d0825bca7fe65beaee391d30da42e937db621564Steve Block * are met:
7d0825bca7fe65beaee391d30da42e937db621564Steve Block * 1. Redistributions of source code must retain the above copyright
8d0825bca7fe65beaee391d30da42e937db621564Steve Block *    notice, this list of conditions and the following disclaimer.
9d0825bca7fe65beaee391d30da42e937db621564Steve Block * 2. Redistributions in binary form must reproduce the above copyright
10d0825bca7fe65beaee391d30da42e937db621564Steve Block *    notice, this list of conditions and the following disclaimer in the
11d0825bca7fe65beaee391d30da42e937db621564Steve Block *    documentation and/or other materials provided with the distribution.
12d0825bca7fe65beaee391d30da42e937db621564Steve Block *
13d0825bca7fe65beaee391d30da42e937db621564Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15d0825bca7fe65beaee391d30da42e937db621564Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16d0825bca7fe65beaee391d30da42e937db621564Steve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17d0825bca7fe65beaee391d30da42e937db621564Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22d0825bca7fe65beaee391d30da42e937db621564Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24d0825bca7fe65beaee391d30da42e937db621564Steve Block */
25d0825bca7fe65beaee391d30da42e937db621564Steve Block
26d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "config.h"
27d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebKitDLL.h"
28d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebGeolocationPolicyListener.h"
29d0825bca7fe65beaee391d30da42e937db621564Steve Block
30d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <WebCore/Geolocation.h>
31d0825bca7fe65beaee391d30da42e937db621564Steve Block
32d0825bca7fe65beaee391d30da42e937db621564Steve Blockusing namespace WebCore;
33d0825bca7fe65beaee391d30da42e937db621564Steve Block
34d0825bca7fe65beaee391d30da42e937db621564Steve Block// WebGeolocationPolicyListener ----------------------------------------------------------------
35d0825bca7fe65beaee391d30da42e937db621564Steve Block
36d0825bca7fe65beaee391d30da42e937db621564Steve BlockCOMPtr<WebGeolocationPolicyListener> WebGeolocationPolicyListener::createInstance(PassRefPtr<Geolocation> geolocation)
37d0825bca7fe65beaee391d30da42e937db621564Steve Block{
38d0825bca7fe65beaee391d30da42e937db621564Steve Block    return new WebGeolocationPolicyListener(geolocation);
39d0825bca7fe65beaee391d30da42e937db621564Steve Block}
40d0825bca7fe65beaee391d30da42e937db621564Steve Block
41d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebGeolocationPolicyListener::WebGeolocationPolicyListener(PassRefPtr<Geolocation> geolocation)
42d0825bca7fe65beaee391d30da42e937db621564Steve Block    : m_refCount(0)
43d0825bca7fe65beaee391d30da42e937db621564Steve Block    , m_geolocation(geolocation)
44d0825bca7fe65beaee391d30da42e937db621564Steve Block{
45d0825bca7fe65beaee391d30da42e937db621564Steve Block    gClassCount++;
46d0825bca7fe65beaee391d30da42e937db621564Steve Block    gClassNameCount.add("WebGeolocationPolicyListener");
47d0825bca7fe65beaee391d30da42e937db621564Steve Block}
48d0825bca7fe65beaee391d30da42e937db621564Steve Block
49d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebGeolocationPolicyListener::~WebGeolocationPolicyListener()
50d0825bca7fe65beaee391d30da42e937db621564Steve Block{
51d0825bca7fe65beaee391d30da42e937db621564Steve Block    gClassCount--;
52d0825bca7fe65beaee391d30da42e937db621564Steve Block    gClassNameCount.remove("WebGeolocationPolicyListener");
53d0825bca7fe65beaee391d30da42e937db621564Steve Block}
54d0825bca7fe65beaee391d30da42e937db621564Steve Block
55d0825bca7fe65beaee391d30da42e937db621564Steve Block// IUnknown -------------------------------------------------------------------
56d0825bca7fe65beaee391d30da42e937db621564Steve Block
57d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebGeolocationPolicyListener::QueryInterface(REFIID riid, void** ppvObject)
58d0825bca7fe65beaee391d30da42e937db621564Steve Block{
59d0825bca7fe65beaee391d30da42e937db621564Steve Block    *ppvObject = 0;
60d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (IsEqualIID(riid, __uuidof(IUnknown)))
61d0825bca7fe65beaee391d30da42e937db621564Steve Block        *ppvObject = static_cast<IWebGeolocationPolicyListener*>(this);
62d0825bca7fe65beaee391d30da42e937db621564Steve Block    else if (IsEqualIID(riid, __uuidof(IWebGeolocationPolicyListener)))
63d0825bca7fe65beaee391d30da42e937db621564Steve Block        *ppvObject = static_cast<IWebGeolocationPolicyListener*>(this);
64d0825bca7fe65beaee391d30da42e937db621564Steve Block    else
65d0825bca7fe65beaee391d30da42e937db621564Steve Block        return E_NOINTERFACE;
66d0825bca7fe65beaee391d30da42e937db621564Steve Block
67d0825bca7fe65beaee391d30da42e937db621564Steve Block    AddRef();
68d0825bca7fe65beaee391d30da42e937db621564Steve Block    return S_OK;
69d0825bca7fe65beaee391d30da42e937db621564Steve Block}
70d0825bca7fe65beaee391d30da42e937db621564Steve Block
71d0825bca7fe65beaee391d30da42e937db621564Steve BlockULONG STDMETHODCALLTYPE WebGeolocationPolicyListener::AddRef()
72d0825bca7fe65beaee391d30da42e937db621564Steve Block{
73d0825bca7fe65beaee391d30da42e937db621564Steve Block    return ++m_refCount;
74d0825bca7fe65beaee391d30da42e937db621564Steve Block}
75d0825bca7fe65beaee391d30da42e937db621564Steve Block
76d0825bca7fe65beaee391d30da42e937db621564Steve BlockULONG STDMETHODCALLTYPE WebGeolocationPolicyListener::Release()
77d0825bca7fe65beaee391d30da42e937db621564Steve Block{
78d0825bca7fe65beaee391d30da42e937db621564Steve Block    ULONG newRef = --m_refCount;
79d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (!newRef)
80d0825bca7fe65beaee391d30da42e937db621564Steve Block        delete this;
81d0825bca7fe65beaee391d30da42e937db621564Steve Block
82d0825bca7fe65beaee391d30da42e937db621564Steve Block    return newRef;
83d0825bca7fe65beaee391d30da42e937db621564Steve Block}
84d0825bca7fe65beaee391d30da42e937db621564Steve Block
85d0825bca7fe65beaee391d30da42e937db621564Steve Block// IWebPolicyDecisionListener ------------------------------------------------------------
86d0825bca7fe65beaee391d30da42e937db621564Steve Block
87d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebGeolocationPolicyListener::allow()
88d0825bca7fe65beaee391d30da42e937db621564Steve Block{
89d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_geolocation->setIsAllowed(true);
90d0825bca7fe65beaee391d30da42e937db621564Steve Block    return S_OK;
91d0825bca7fe65beaee391d30da42e937db621564Steve Block}
92d0825bca7fe65beaee391d30da42e937db621564Steve Block
93d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebGeolocationPolicyListener::deny()
94d0825bca7fe65beaee391d30da42e937db621564Steve Block{
95d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_geolocation->setIsAllowed(false);
96d0825bca7fe65beaee391d30da42e937db621564Steve Block    return S_OK;
97d0825bca7fe65beaee391d30da42e937db621564Steve Block}
98