Reviewed by Darin.
[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 if (IsEqualGUID(riid, __uuidof(this)))\r
67         *ppvObject = this;\r
68     else\r
69         return E_NOINTERFACE;\r
70 \r
71     AddRef();\r
72     return S_OK;\r
73 }\r
74 \r
75 ULONG STDMETHODCALLTYPE WebSecurityOrigin::AddRef()\r
76 {\r
77     return ++m_refCount;\r
78 }\r
79 \r
80 ULONG STDMETHODCALLTYPE WebSecurityOrigin::Release()\r
81 {\r
82     ULONG newRef = --m_refCount;\r
83     if (!newRef)\r
84         delete this;\r
85 \r
86     return newRef;\r
87 }\r
88 \r
89 // IWebSecurityOrigin --------------------------------------------------------------\r
90 \r
91 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::protocol( \r
92     /* [retval][out] */ BSTR* result)\r
93 {\r
94     if (!result)\r
95         return E_POINTER;\r
96 \r
97     *result = BString(m_securityOriginData.protocol()).release();\r
98 \r
99     return S_OK;\r
100 }\r
101         \r
102 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::domain( \r
103     /* [retval][out] */ BSTR* result)\r
104 {\r
105     if (!result)\r
106         return E_POINTER;\r
107 \r
108     *result = BString(m_securityOriginData.host()).release();\r
109 \r
110     return S_OK;\r
111 }\r
112       \r
113 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::port( \r
114     /* [retval][out] */ unsigned short* result)\r
115 {\r
116     if (!result)\r
117         return E_POINTER;\r
118 \r
119     *result = m_securityOriginData.port();\r
120 \r
121     return S_OK;\r
122 }\r
123         \r
124 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::usage( \r
125     /* [retval][out] */ unsigned long long* result)\r
126 {\r
127     if (!result)\r
128         return E_POINTER;\r
129 \r
130     *result = DatabaseTracker::tracker().usageForOrigin(m_securityOriginData);\r
131 \r
132     return S_OK;\r
133 }\r
134         \r
135 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::quota( \r
136     /* [retval][out] */ unsigned long long* result)\r
137 {\r
138     if (!result)\r
139         return E_POINTER;\r
140 \r
141     *result = DatabaseTracker::tracker().quotaForOrigin(m_securityOriginData);\r
142     return S_OK;\r
143 }\r
144         \r
145 HRESULT STDMETHODCALLTYPE WebSecurityOrigin::setQuota( \r
146     /* [in] */ unsigned long long quota) \r
147 {\r
148     DatabaseTracker::tracker().setQuota(m_securityOriginData, quota);\r
149 \r
150     return S_OK;\r
151 }\r