Home | History | Annotate | Download | only in win
      1 /*
      2  * Copyright (C) 2007 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1.  Redistributions of source code must retain the above copyright
      9  *     notice, this list of conditions and the following disclaimer.
     10  * 2.  Redistributions in binary form must reproduce the above copyright
     11  *     notice, this list of conditions and the following disclaimer in the
     12  *     documentation and/or other materials provided with the distribution.
     13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     14  *     its contributors may be used to endorse or promote products derived
     15  *     from this software without specific prior written permission.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #include "config.h"
     30 #include "WebSecurityOrigin.h"
     31 #include "WebKitDLL.h"
     32 
     33 #include <WebCore/BString.h>
     34 #include <WebCore/DatabaseTracker.h>
     35 
     36 #if !ENABLE(DATABASE)
     37 #include <wtf/UnusedParam.h>
     38 #endif
     39 
     40 using namespace WebCore;
     41 
     42 // WebSecurityOrigin ---------------------------------------------------------------
     43 WebSecurityOrigin* WebSecurityOrigin::createInstance(SecurityOrigin* securityOrigin)
     44 {
     45     WebSecurityOrigin* origin = new WebSecurityOrigin(securityOrigin);
     46     origin->AddRef();
     47     return origin;
     48 }
     49 
     50 WebSecurityOrigin::WebSecurityOrigin(SecurityOrigin* securityOrigin)
     51     : m_refCount(0)
     52     , m_securityOrigin(securityOrigin)
     53 {
     54     gClassCount++;
     55     gClassNameCount.add("WebSecurityOrigin");
     56 }
     57 
     58 WebSecurityOrigin::~WebSecurityOrigin()
     59 {
     60     gClassCount--;
     61     gClassNameCount.remove("WebSecurityOrigin");
     62 }
     63 
     64 // IUnknown ------------------------------------------------------------------------
     65 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::QueryInterface(REFIID riid, void** ppvObject)
     66 {
     67     *ppvObject = 0;
     68     if (IsEqualGUID(riid, IID_IUnknown))
     69         *ppvObject = static_cast<IWebSecurityOrigin*>(this);
     70     else if (IsEqualGUID(riid, IID_IWebSecurityOrigin))
     71         *ppvObject = static_cast<IWebSecurityOrigin*>(this);
     72     else if (IsEqualGUID(riid, __uuidof(this)))
     73         *ppvObject = this;
     74     else
     75         return E_NOINTERFACE;
     76 
     77     AddRef();
     78     return S_OK;
     79 }
     80 
     81 ULONG STDMETHODCALLTYPE WebSecurityOrigin::AddRef()
     82 {
     83     return ++m_refCount;
     84 }
     85 
     86 ULONG STDMETHODCALLTYPE WebSecurityOrigin::Release()
     87 {
     88     ULONG newRef = --m_refCount;
     89     if (!newRef)
     90         delete this;
     91 
     92     return newRef;
     93 }
     94 
     95 // IWebSecurityOrigin --------------------------------------------------------------
     96 
     97 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::protocol(
     98     /* [retval][out] */ BSTR* result)
     99 {
    100     if (!result)
    101         return E_POINTER;
    102 
    103     *result = BString(m_securityOrigin->protocol()).release();
    104 
    105     return S_OK;
    106 }
    107 
    108 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::host(
    109     /* [retval][out] */ BSTR* result)
    110 {
    111     if (!result)
    112         return E_POINTER;
    113 
    114     *result = BString(m_securityOrigin->host()).release();
    115 
    116     return S_OK;
    117 }
    118 
    119 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::port(
    120     /* [retval][out] */ unsigned short* result)
    121 {
    122     if (!result)
    123         return E_POINTER;
    124 
    125     *result = m_securityOrigin->port();
    126 
    127     return S_OK;
    128 }
    129 
    130 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::usage(
    131     /* [retval][out] */ unsigned long long* result)
    132 {
    133 #if ENABLE(DATABASE)
    134     if (!result)
    135         return E_POINTER;
    136 
    137     *result = DatabaseTracker::tracker().usageForOrigin(m_securityOrigin.get());
    138 
    139     return S_OK;
    140 #else
    141     UNUSED_PARAM(result);
    142     return E_NOTIMPL;
    143 #endif
    144 }
    145 
    146 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::quota(
    147     /* [retval][out] */ unsigned long long* result)
    148 {
    149 #if ENABLE(DATABASE)
    150     if (!result)
    151         return E_POINTER;
    152 
    153     *result = DatabaseTracker::tracker().quotaForOrigin(m_securityOrigin.get());
    154     return S_OK;
    155 #else
    156     UNUSED_PARAM(result);
    157     return E_NOTIMPL;
    158 #endif
    159 }
    160 
    161 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::setQuota(
    162     /* [in] */ unsigned long long quota)
    163 {
    164 #if ENABLE(DATABASE)
    165     DatabaseTracker::tracker().setQuota(m_securityOrigin.get(), quota);
    166 
    167     return S_OK;
    168 #else
    169     UNUSED_PARAM(quota);
    170     return E_NOTIMPL;
    171 #endif
    172 }
    173