2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FWebCtrl_WebStorageManagerImpl.cpp
20 * @brief The file contains the definition of _WebStorageManagerImpl class.
23 #include <FBaseColAllElementsDeleter.h>
24 #include <FBaseColArrayList.h>
25 #include <FBaseColIList.h>
26 #include <FBaseSysLog.h>
27 #include "FWebCtrl_Utility.h"
28 #include "FWebCtrl_WebPresenter.h"
29 #include "FWebCtrl_WebStorageManagerImpl.h"
32 using namespace Tizen::Base;
33 using namespace Tizen::Base::Collection;
36 namespace Tizen { namespace Web { namespace Controls
41 OnOriginReceived(Eina_List* pOrigins, void* pUserData)
43 _WebPresenter* pPresenter = reinterpret_cast< _WebPresenter* >(pUserData);
45 pPresenter->EndAsyncProcess(pOrigins);
50 OnIntReceived(int64_t integer, void* pUserData)
52 _WebPresenter* pPresenter = reinterpret_cast< _WebPresenter* >(pUserData);
54 pPresenter->EndAsyncProcess((long)integer);
59 OnUIntReceived(uint64_t integer, void* pUserData)
61 _WebPresenter* pPresenter = reinterpret_cast< _WebPresenter* >(pUserData);
63 pPresenter->EndAsyncProcess((long)integer);
67 _WebStorageManagerImpl::_WebStorageManagerImpl(void)
72 _WebStorageManagerImpl::~_WebStorageManagerImpl(void)
78 _WebStorageManagerImpl::GetOriginListN(WebStorageType storageType)
82 Ewk_Context* pDefaultContext = ewk_context_default_get();
83 Eina_List* pOriginEinaList;
85 _WebPresenter presenter;
86 presenter.InitAsyncProcess();
90 case WEB_STORAGE_TYPE_APPLICATION_CACHE:
91 ewk_context_application_cache_origins_get(pDefaultContext, OnOriginReceived, &presenter);
94 case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
95 ewk_context_web_database_origins_get(pDefaultContext, OnOriginReceived, &presenter);
98 case WEB_STORAGE_TYPE_WEB_STORAGE:
99 ewk_context_web_storage_origins_get(pDefaultContext, OnOriginReceived, &presenter);
102 case WEB_STORAGE_TYPE_FILE_SYSTEM:
103 ewk_context_local_file_system_origins_get(pDefaultContext, OnOriginReceived, &presenter);
110 presenter.WaitAsyncProcess(pOriginEinaList);
112 if (eina_list_count(pOriginEinaList) == 0)
117 std::unique_ptr<ArrayList, AllElementsDeleter> pOriginList(new (std::nothrow) ArrayList());
118 SysTryReturn(NID_WEB_CTRL, pOriginList.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
120 r = pOriginList->Construct();
121 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
123 for(; pOriginEinaList; pOriginEinaList = eina_list_next(pOriginEinaList))
125 Ewk_Security_Origin* pOrigin = static_cast<Ewk_Security_Origin*>(eina_list_data_get(pOriginEinaList));
126 std::unique_ptr<String> pStringOrigin(new (std::nothrow) String(_Utility::CreateOrigin(pOrigin)));
127 SysTryReturn(NID_WEB_CTRL, pStringOrigin.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
129 r = pOriginList->Add(pStringOrigin.get());
130 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
131 pStringOrigin.release();
134 return pOriginList.release();
139 _WebStorageManagerImpl::SetQuotaForOrigin(WebStorageType storageType, const String& origin, long quota)
141 Ewk_Context* pDefaultContext = ewk_context_default_get();
142 Ewk_Security_Origin* pOrigin = null;
146 case WEB_STORAGE_TYPE_APPLICATION_CACHE:
147 pOrigin = CompareOrigin(WEB_STORAGE_TYPE_APPLICATION_CACHE, origin);
148 SysTryReturnResult(NID_WEB_CTRL, pOrigin, E_INVALID_ARG, "This origin does not exist.");
150 ewk_context_application_cache_quota_for_origin_set(pDefaultContext, pOrigin, quota);
153 case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
154 pOrigin = CompareOrigin(WEB_STORAGE_TYPE_WEB_SQL_DATABASE, origin);
155 SysTryReturnResult(NID_WEB_CTRL, pOrigin, E_INVALID_ARG, "This origin does not exist.");
157 ewk_context_web_database_quota_for_origin_set(pDefaultContext, pOrigin, quota);
161 SysLogException(NID_WEB_CTRL, E_UNSUPPORTED_TYPE, "This storage type %d is not supported.", storageType);
162 return E_UNSUPPORTED_TYPE;
169 _WebStorageManagerImpl::GetQuotaForOrigin(WebStorageType storageType, const String& origin)
171 Ewk_Context* pDefaultContext = ewk_context_default_get();
174 SysTryReturn(NID_WEB_CTRL, storageType == WEB_STORAGE_TYPE_WEB_SQL_DATABASE, -1, E_UNSUPPORTED_TYPE, "[%s] This storage type is not supported.", GetErrorMessage(E_UNSUPPORTED_TYPE));
176 Ewk_Security_Origin* pOrigin = CompareOrigin(storageType, origin);
177 SysTryReturn(NID_WEB_CTRL, pOrigin, -1, E_INVALID_ARG, "[%s] This origin does not exist.", GetErrorMessage(E_INVALID_ARG));
179 _WebPresenter presenter;
180 presenter.InitAsyncProcess();
182 ewk_context_web_database_quota_for_origin_get(pDefaultContext, OnUIntReceived, &presenter, pOrigin);
184 presenter.WaitAsyncProcess(quota);
191 _WebStorageManagerImpl::GetUsageForOrigin(WebStorageType storageType, const String& origin)
193 Ewk_Context* pDefaultContext = ewk_context_default_get();
196 SysTryReturn(NID_WEB_CTRL, (storageType != WEB_STORAGE_TYPE_INDEXED_DATABASE) && (storageType != WEB_STORAGE_TYPE_FILE_SYSTEM), -1, E_UNSUPPORTED_TYPE, "[%s] This storage type is not supported.", GetErrorMessage(E_UNSUPPORTED_TYPE));
198 Ewk_Security_Origin* pOrigin = CompareOrigin(storageType, origin);
199 SysTryReturn(NID_WEB_CTRL, pOrigin, -1, E_INVALID_ARG, "[%s] This origin does not exist.", GetErrorMessage(E_INVALID_ARG));
201 _WebPresenter presenter;
202 presenter.InitAsyncProcess();
206 case WEB_STORAGE_TYPE_APPLICATION_CACHE:
207 // ewk_context_application_cache_usage_for_origin_get(pDefaultContext, pOrigin, OnIntReceived, &presenter);
210 case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
211 ewk_context_web_database_usage_for_origin_get(pDefaultContext, OnUIntReceived, &presenter, pOrigin);
214 case WEB_STORAGE_TYPE_WEB_STORAGE :
215 ewk_context_web_storage_usage_for_origin_get(pDefaultContext, pOrigin, OnUIntReceived, &presenter);
222 presenter.WaitAsyncProcess(usage);
229 _WebStorageManagerImpl::Remove(WebStorageType storageType, const String& origin)
231 Ewk_Context* pDefaultContext = ewk_context_default_get();
233 SysTryReturnResult(NID_WEB_CTRL, storageType != WEB_STORAGE_TYPE_INDEXED_DATABASE, E_UNSUPPORTED_TYPE, "This storage type is not supported.");
235 Ewk_Security_Origin* pOrigin = CompareOrigin(storageType, origin);
236 SysTryReturnResult(NID_WEB_CTRL, pOrigin, E_INVALID_ARG, "This origin does not exist.");
240 case WEB_STORAGE_TYPE_APPLICATION_CACHE:
241 ewk_context_application_cache_delete(pDefaultContext, pOrigin);
244 case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
245 ewk_context_web_database_delete(pDefaultContext, pOrigin);
248 case WEB_STORAGE_TYPE_WEB_STORAGE :
249 ewk_context_web_storage_origin_delete(pDefaultContext, pOrigin);
252 case WEB_STORAGE_TYPE_FILE_SYSTEM:
253 ewk_context_local_file_system_delete(pDefaultContext, pOrigin);
265 _WebStorageManagerImpl::RemoveAll(WebStorageType storageType)
267 Ewk_Context* pDefaultContext = ewk_context_default_get();
271 case WEB_STORAGE_TYPE_APPLICATION_CACHE:
272 ewk_context_application_cache_delete_all(pDefaultContext);
275 case WEB_STORAGE_TYPE_INDEXED_DATABASE :
276 ewk_context_web_indexed_database_delete_all(pDefaultContext);
279 case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
280 ewk_context_web_database_delete_all(pDefaultContext);
283 case WEB_STORAGE_TYPE_WEB_STORAGE :
284 ewk_context_web_storage_delete_all(pDefaultContext);
287 case WEB_STORAGE_TYPE_FILE_SYSTEM:
288 ewk_context_local_file_system_all_delete(pDefaultContext);
300 _WebStorageManagerImpl::CompareOrigin(WebStorageType storageType, const String& origin)
302 Ewk_Context* pDefaultContext = ewk_context_default_get();
303 _WebPresenter presenter;
304 Eina_List* pOriginList;
305 presenter.InitAsyncProcess();
309 case WEB_STORAGE_TYPE_APPLICATION_CACHE:
310 ewk_context_application_cache_origins_get(pDefaultContext, OnOriginReceived, &presenter);
313 case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
314 ewk_context_web_database_origins_get(pDefaultContext, OnOriginReceived, &presenter);
317 case WEB_STORAGE_TYPE_WEB_STORAGE:
318 ewk_context_web_storage_origins_get(pDefaultContext, OnOriginReceived, &presenter);
321 case WEB_STORAGE_TYPE_FILE_SYSTEM:
322 ewk_context_local_file_system_origins_get(pDefaultContext, OnOriginReceived, &presenter);
329 presenter.WaitAsyncProcess(pOriginList);
331 for(; pOriginList; pOriginList = eina_list_next(pOriginList))
333 Ewk_Security_Origin* pOrigin = static_cast<Ewk_Security_Origin*>(eina_list_data_get(pOriginList));
334 int cmp = origin.CompareTo(_Utility::CreateOrigin(pOrigin));
343 }}} // Tizen::Web::Controls