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