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