Reviewed by Adam.
[WebKit-https.git] / WebKit / win / WebDatabaseManager.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 #include "config.h"\r
29 #include "WebDatabaseManager.h"\r
30 #include "WebKitDLL.h"\r
31 \r
32 #include <WebCore/DatabaseTracker.h>\r
33 #include <WebCore/FileSystem.h>\r
34 #include <WebCore/COMPtr.h>\r
35 \r
36 using namespace WebCore;\r
37 \r
38 static COMPtr<WebDatabaseManager> s_sharedWebDatabaseManager;
39 \r
40 // WebDatabaseManager --------------------------------------------------------------\r
41 WebDatabaseManager* WebDatabaseManager::createInstance()\r
42 {\r
43     WebDatabaseManager* manager = new WebDatabaseManager();\r
44     manager->AddRef();\r
45     return manager;    \r
46 }\r
47 \r
48 WebDatabaseManager::WebDatabaseManager()\r
49     : m_refCount(0)\r
50 {\r
51     gClassCount++;\r
52 }\r
53 \r
54 WebDatabaseManager::~WebDatabaseManager()\r
55 {\r
56     gClassCount--;\r
57 }\r
58 \r
59 // IUnknown ------------------------------------------------------------------------\r
60 HRESULT STDMETHODCALLTYPE WebDatabaseManager::QueryInterface(REFIID riid, void** ppvObject)\r
61 {\r
62     *ppvObject = 0;\r
63     if (IsEqualGUID(riid, IID_IUnknown))\r
64         *ppvObject = static_cast<WebDatabaseManager*>(this);\r
65     else if (IsEqualGUID(riid, IID_IWebDatabaseManager))\r
66         *ppvObject = static_cast<WebDatabaseManager*>(this);\r
67     else\r
68         return E_NOINTERFACE;\r
69 \r
70     AddRef();\r
71     return S_OK;\r
72 }\r
73 \r
74 ULONG STDMETHODCALLTYPE WebDatabaseManager::AddRef()\r
75 {\r
76     return ++m_refCount;\r
77 }\r
78 \r
79 ULONG STDMETHODCALLTYPE WebDatabaseManager::Release()\r
80 {\r
81     ULONG newRef = --m_refCount;\r
82     if (!newRef)\r
83         delete this;\r
84 \r
85     return newRef;\r
86 }\r
87 \r
88 // IWebDatabaseManager -------------------------------------------------------------\r
89 HRESULT STDMETHODCALLTYPE WebDatabaseManager::sharedWebDatabaseManager( \r
90     /* [retval][out] */ IWebDatabaseManager** result)\r
91 {\r
92     if (!s_sharedWebDatabaseManager)\r
93         s_sharedWebDatabaseManager.adoptRef(WebDatabaseManager::createInstance());\r
94 \r
95     return s_sharedWebDatabaseManager.copyRefTo(result);\r
96 }\r
97 \r
98 HRESULT STDMETHODCALLTYPE WebDatabaseManager::origins( \r
99     /* [retval][out] */ IEnumVARIANT** result)\r
100 {\r
101     if (!result)\r
102         return E_POINTER;\r
103 \r
104     *result = 0;\r
105 \r
106     if (this != s_sharedWebDatabaseManager)\r
107         return E_FAIL;\r
108 \r
109     return E_NOTIMPL;\r
110 }\r
111     \r
112 HRESULT STDMETHODCALLTYPE WebDatabaseManager::databasesWithOrigin( \r
113     /* [in] */ IWebSecurityOrigin* origin,\r
114     /* [retval][out] */ IEnumVARIANT** result)\r
115 {\r
116     if (!origin || !result)\r
117         return E_POINTER;\r
118 \r
119     *result = 0;\r
120 \r
121     if (this != s_sharedWebDatabaseManager)\r
122         return E_FAIL;\r
123 \r
124     return E_NOTIMPL;\r
125 }\r
126     \r
127 HRESULT STDMETHODCALLTYPE WebDatabaseManager::detailsForDatabaseWithOrigin( \r
128     /* [in] */ BSTR* database,\r
129     /* [in] */ IWebSecurityOrigin* origin,\r
130     /* [retval][out] */ IPropertyBag** result)\r
131 {\r
132     if (!database || !origin || !result)\r
133         return E_POINTER;\r
134 \r
135     *result = 0;\r
136 \r
137     if (this != s_sharedWebDatabaseManager)\r
138         return E_FAIL;\r
139 \r
140     return E_NOTIMPL;\r
141 }\r
142     \r
143 HRESULT STDMETHODCALLTYPE WebDatabaseManager::deleteAllDatabases()\r
144 {\r
145     if (this != s_sharedWebDatabaseManager)\r
146         return E_FAIL;\r
147 \r
148     return E_NOTIMPL;\r
149 }\r
150    \r
151 HRESULT STDMETHODCALLTYPE WebDatabaseManager::deleteDatabasesWithOrigin( \r
152     /* [in] */ IWebSecurityOrigin* origin)\r
153 {\r
154     if (!origin)\r
155         return E_POINTER;\r
156 \r
157     if (this != s_sharedWebDatabaseManager)\r
158         return E_FAIL;\r
159 \r
160     return E_NOTIMPL;\r
161 }\r
162     \r
163 HRESULT STDMETHODCALLTYPE WebDatabaseManager::deleteDatabaseWithOrigin( \r
164     /* [in] */ BSTR* databaseName,\r
165     /* [in] */ IWebSecurityOrigin* origin)\r
166 {\r
167     if (!databaseName || !origin)\r
168         return E_POINTER;\r
169 \r
170     if (this != s_sharedWebDatabaseManager)\r
171         return E_FAIL;\r
172 \r
173     return E_NOTIMPL;\r
174 }\r
175 \r
176 void WebKitSetWebDatabasesPathIfNecessary()\r
177 {\r
178     static bool pathSet = false;\r
179     if (pathSet)\r
180         return;\r
181 \r
182     WebCore::String databasesDirectory = WebCore::pathByAppendingComponent(WebCore::localUserSpecificStorageDirectory(), "Databases");\r
183     WebCore::DatabaseTracker::tracker().setDatabasePath(databasesDirectory);\r
184 \r
185     pathSet = true;\r
186 }\r
187 \r